From bf2532742f4e8283edc4ad4746679ef1964edb55 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 30 Oct 2015 13:15:27 -0600 Subject: [PATCH 001/452] Initial commit --- .gitignore | 24 + .nvmrc | 1 + README.md | 43 + client/.nvmrc | 1 + client/assets/crossdomain.xml | 15 + client/assets/humans.txt | 15 + client/assets/robots.txt | 5 + client/config/settings.js | 44 + client/config/webpack.config.js | 108 ++ client/html/404.html | 14 + client/html/index.html | 18 + client/html/partials/_google_analytics.html | 9 + client/html/partials/_header.html | 17 + client/index.html | 12 + client/js/actions/api.js | 272 +++ client/js/actions/settings.js | 20 + client/js/app.jsx | 13 + client/js/components/base_component.jsx | 44 + client/js/components/defines.js | 11 + client/js/components/index.jsx | 22 + client/js/components/index.spec.js | 21 + client/js/components/main/home.jsx | 9 + client/js/components/main/home.spec.js | 14 + client/js/components/mixins/store_keeper.js | 30 + client/js/components/not_found.jsx | 9 + client/js/components/not_found.spec.js | 19 + client/js/constants.js | 14 + client/js/dispatcher.js | 5 + client/js/history.js | 5 + client/js/routes.jsx | 14 + client/js/stores/settings.js | 78 + client/js/stores/settings.spec.js | 45 + client/js/stores/store_common.js | 24 + client/js/utils/query_string.js | 13 + client/js/utils/utils.js | 38 + client/karma.conf.js | 109 ++ client/npm-shrinkwrap.json | 1700 +++++++++++++++++++ client/package.json | 80 + client/specs_support/spec_helper.js | 80 + client/specs_support/utils.js | 13 + client/styles/.csscomb.json | 297 ++++ client/styles/.csslintrc | 19 + client/styles/_common.scss | 3 + client/styles/_custom.less | 3 + client/styles/_defines.scss | 61 + client/styles/layout/_footer.less | 9 + client/styles/styles.js | 3 + client/styles/styles.less | 32 + client/styles/styles.scss | 4 + client/styles/styles_admin.less | 17 + client/webpack.hot.js | 20 + client/webpack.release.js | 4 + client/webpack.tests.js | 19 + gulpfile.js | 147 ++ index.html | 13 + s3_website.yml.example | 56 + 56 files changed, 3735 insertions(+) create mode 100644 .gitignore create mode 100644 .nvmrc create mode 100644 README.md create mode 100644 client/.nvmrc create mode 100644 client/assets/crossdomain.xml create mode 100644 client/assets/humans.txt create mode 100644 client/assets/robots.txt create mode 100644 client/config/settings.js create mode 100644 client/config/webpack.config.js create mode 100644 client/html/404.html create mode 100644 client/html/index.html create mode 100644 client/html/partials/_google_analytics.html create mode 100644 client/html/partials/_header.html create mode 100644 client/index.html create mode 100644 client/js/actions/api.js create mode 100644 client/js/actions/settings.js create mode 100644 client/js/app.jsx create mode 100644 client/js/components/base_component.jsx create mode 100644 client/js/components/defines.js create mode 100644 client/js/components/index.jsx create mode 100644 client/js/components/index.spec.js create mode 100644 client/js/components/main/home.jsx create mode 100644 client/js/components/main/home.spec.js create mode 100644 client/js/components/mixins/store_keeper.js create mode 100644 client/js/components/not_found.jsx create mode 100644 client/js/components/not_found.spec.js create mode 100644 client/js/constants.js create mode 100644 client/js/dispatcher.js create mode 100644 client/js/history.js create mode 100644 client/js/routes.jsx create mode 100644 client/js/stores/settings.js create mode 100644 client/js/stores/settings.spec.js create mode 100644 client/js/stores/store_common.js create mode 100644 client/js/utils/query_string.js create mode 100644 client/js/utils/utils.js create mode 100644 client/karma.conf.js create mode 100644 client/npm-shrinkwrap.json create mode 100644 client/package.json create mode 100644 client/specs_support/spec_helper.js create mode 100644 client/specs_support/utils.js create mode 100644 client/styles/.csscomb.json create mode 100644 client/styles/.csslintrc create mode 100644 client/styles/_common.scss create mode 100644 client/styles/_custom.less create mode 100644 client/styles/_defines.scss create mode 100644 client/styles/layout/_footer.less create mode 100644 client/styles/styles.js create mode 100644 client/styles/styles.less create mode 100644 client/styles/styles.scss create mode 100644 client/styles/styles_admin.less create mode 100644 client/webpack.hot.js create mode 100644 client/webpack.release.js create mode 100644 client/webpack.tests.js create mode 100644 gulpfile.js create mode 100644 index.html create mode 100644 s3_website.yml.example diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..56e05f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +*.rbc +capybara-*.html +/log +/tmp +/public/system +/coverage/ +/spec/tmp +**.orig +rerun.txt +pickle-email-*.html +secrets.js +*_web_pack_bundle.js +.idea/ +.env + +config/secrets.js +s3_website.yml + +## Environment normalisation: +/.bundle +/vendor/bundle + +node_modules +npm-debug.log diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..e96a871 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +0.12.2 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..a49ee0b --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +#Notes: +----------------------- +Start server with: + +npm run start + +then visit http://localhost:8080 + + +#Development: +----------------------- +Source code lives in the app directory. + + +#Tests +----------- + `karma start` + + +#Check for updates +----------- + + `npm-check-updates` + + +#Deploy: +----------------------- + + Make sure the gem is installed: + + `gem install s3_website` + + Build: + + `gulp build --release` + + Deploy: + `s3_website push` + + +License and attribution +----------------------- +MIT \ No newline at end of file diff --git a/client/.nvmrc b/client/.nvmrc new file mode 100644 index 0000000..e96a871 --- /dev/null +++ b/client/.nvmrc @@ -0,0 +1 @@ +0.12.2 \ No newline at end of file diff --git a/client/assets/crossdomain.xml b/client/assets/crossdomain.xml new file mode 100644 index 0000000..29a035d --- /dev/null +++ b/client/assets/crossdomain.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/client/assets/humans.txt b/client/assets/humans.txt new file mode 100644 index 0000000..b3b9466 --- /dev/null +++ b/client/assets/humans.txt @@ -0,0 +1,15 @@ +# humanstxt.org/ +# The humans responsible & technology colophon + +# TEAM + + -- -- + +# THANKS + + + +# TECHNOLOGY COLOPHON + + HTML5, CSS3, JavaScript + React, jQuery, Bootstrap diff --git a/client/assets/robots.txt b/client/assets/robots.txt new file mode 100644 index 0000000..d0e5f1b --- /dev/null +++ b/client/assets/robots.txt @@ -0,0 +1,5 @@ +# www.robotstxt.org/ + +# Allow crawling of all content +User-agent: * +Disallow: diff --git a/client/config/settings.js b/client/config/settings.js new file mode 100644 index 0000000..742c92a --- /dev/null +++ b/client/config/settings.js @@ -0,0 +1,44 @@ +var info = require('../package.json'); +var path = require('path'); + +var clientAppPath = path.join(__dirname, '../'); + +var devRelativeOutput = '/assets/'; +var prodRelativeOutput = '/assets/'; + +var devOutput = path.join(__dirname, '../../app', devRelativeOutput); +var prodOutput = path.join(__dirname, '../../build', prodRelativeOutput); + +// There is a warning if the .env file is missing +// This is fine in a production setting, where settings +// are loaded from the env and not from a file +require('dotenv').load({path: path.join(__dirname, '../../.env')}); + +var hotPort = process.env.ASSETS_PORT || 8080; + +module.exports = { + title: info.title, + author: info.author, + version: info.versions, + build: Date.now(), + + devRelativeOutput: devRelativeOutput, + prodRelativeOutput: prodRelativeOutput, + + devOutput: devOutput, + prodOutput: prodOutput, + + // Dev urls + devAssetsUrl: process.env.ASSETS_URL || 'http://localhost:' + hotPort, + + hotPort: hotPort, + + entries: { + app: clientAppPath + 'js/app.jsx' + }, + + cssEntries: { + + } + +}; diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js new file mode 100644 index 0000000..0bfc68f --- /dev/null +++ b/client/config/webpack.config.js @@ -0,0 +1,108 @@ +'use strict'; + +var webpack = require('webpack'); +var path = require('path'); +var ExtractTextPlugin = require('extract-text-webpack-plugin'); +var ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); +var settings = require('./settings.js'); + +module.exports = function(release){ + + var excludeFromStats = [ + /node_modules[\\\/]react(-router)?[\\\/]/ + ]; + + var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; + var jsLoaders = ["babel-loader?stage=0&optional=runtime"]; // include the runtime + + var cssLoaders = ['style-loader', 'css-loader', 'autoprefixer-loader?' + autoprefix]; + + var scssLoaders = cssLoaders.slice(0); + scssLoaders.push('sass-loader?outputStyle=expanded&includePaths[]=' + (path.resolve(__dirname, './node_modules/bootstrap-sass'))); + + var lessLoaders = cssLoaders.slice(0); + lessLoaders.push("less-loader"); + + var entries; + + if(release){ + entries = settings.entries; + } else { + jsLoaders.unshift("react-hot-loader"); + + // Configure entries with hotloader + var originalEntries = settings.entries; + entries = {}; + for(var name in originalEntries){ + entries[name] = ['webpack-dev-server/client?' + settings.devAssetsUrl, 'webpack/hot/only-dev-server', originalEntries[name]]; + } + } + + var cssEntries = settings.cssEntries; + for(var name in cssEntries){ + entries[name] = cssEntries[name]; + } + + return { + context: __dirname, + entry: entries, + output: { + path: release ? settings.prodOutput : settings.devOutput, + filename: release ? '[name]-[chunkhash]_web_pack_bundle.js' : '[name]_web_pack_bundle.js', + chunkFilename: release ? '[id]-[chunkhash]_web_pack_bundle.js' : "[id].js", + publicPath: release ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, + sourceMapFilename: "debugging/[file].map", + pathinfo: !release // http://webpack.github.io/docs/configuration.html#output-pathinfo + }, + resolve: { + extensions: ['', '.js', '.json', '.jsx'], + modulesDirectories: ["node_modules", "vendor"] + }, + cache: true, + quiet: false, + noInfo: false, + debug: false, + outputPathinfo: !release, + devtool: release ? false : "eval", // http://webpack.github.io/docs/configuration.html#devtool + stats: { + colors: true + }, + plugins: release ? [ + new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"'}), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.UglifyJsPlugin(), + new webpack.optimize.OccurenceOrderPlugin(), + new webpack.optimize.AggressiveMergingPlugin(), + new ChunkManifestPlugin({ + filename: 'webpack-common-manifest.json', + manfiestVariable: 'webpackBundleManifest' + }) + //new ExtractTextPlugin("[name]_web_pack_bundle.css"), + //new webpack.optimize.CommonsChunkPlugin('init.js') // Use to extract common code from multiple entry points into a single init.js + ] : [ + //new ExtractTextPlugin("[name]_web_pack_bundle.css"), + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), + new webpack.HotModuleReplacementPlugin(), + new webpack.NoErrorsPlugin() + ], + module: { + loaders: [ + { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.scss$/, loader: scssLoaders.join('!') }, + { test: /\.css$/ , loader: cssLoaders.join('!') }, + { test: /\.less$/ , loader: lessLoaders.join('!') }, + //{ test: /\.html$/, loader: 'webpack-compile-templates' }, // Add if you need to compile underscore.js - https://www.npmjs.com/package/webpack-compile-templates + //{ test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['file?hash=sha512&digest=hex&size=16&name=[hash].[ext]', 'image-webpack-loader?optimizationLevel=7&interlaced=false']}, + //{ test: /.*\.(eot|woff2|woff|ttf)/, loader: 'file?hash=sha512&digest=hex&size=16&name=cd [hash].[ext]'} + { test: /\.(png|woff|woff2|eot|ttf|svg)($|\?)/, loader: 'url-loader' } + ] + }, + devServer: { + stats: { + cached: false, + exclude: excludeFromStats + } + } + }; +}; diff --git a/client/html/404.html b/client/html/404.html new file mode 100644 index 0000000..45f7af5 --- /dev/null +++ b/client/html/404.html @@ -0,0 +1,14 @@ + + + + + Page Not Found + + + + @@include('./partials/_header.html') +

Page Not Found

+

Sorry, but the page you were trying to view does not exist.

+ + + diff --git a/client/html/index.html b/client/html/index.html new file mode 100644 index 0000000..e69f87a --- /dev/null +++ b/client/html/index.html @@ -0,0 +1,18 @@ + + + + + + + + + + + + @@include('./partials/_header.html') + +client html + @@include('./partials/_google_analytics.html') + + + diff --git a/client/html/partials/_google_analytics.html b/client/html/partials/_google_analytics.html new file mode 100644 index 0000000..a365e0e --- /dev/null +++ b/client/html/partials/_google_analytics.html @@ -0,0 +1,9 @@ + + diff --git a/client/html/partials/_header.html b/client/html/partials/_header.html new file mode 100644 index 0000000..b503954 --- /dev/null +++ b/client/html/partials/_header.html @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/client/index.html b/client/index.html new file mode 100644 index 0000000..e9289b6 --- /dev/null +++ b/client/index.html @@ -0,0 +1,12 @@ + + + + + Document + + +

This file is served directly from the Webpack dev server. It is used to + to test the app_web_pack_bundle.js directly and to test the webpack configuration.

+ + + \ No newline at end of file diff --git a/client/js/actions/api.js b/client/js/actions/api.js new file mode 100644 index 0000000..3015fc5 --- /dev/null +++ b/client/js/actions/api.js @@ -0,0 +1,272 @@ +"use strict"; + +import Request from "superagent"; +import Constants from "../constants"; +import Dispatcher from "../dispatcher"; +import SettingsStore from '../stores/settings'; +import _ from "lodash"; + +const TIMEOUT = 10000; +const GET = 'get'; +const POST = 'post'; +const PUT = 'put'; +const DEL = 'del'; + +var _pendingRequests = {}; +var _cache = {}; + +function abortPendingRequests(url) { + if(_pendingRequests[url]) { + _pendingRequests[url]._callback = function() {}; + _pendingRequests[url].abort(); + _pendingRequests[url] = null; + } +} + +// Get the JWT from settings +function jwt() { + return SettingsStore.current().jwt; +} + +function csrfToken() { + return SettingsStore.current().csrfToken; +} + +function makeUrl(part){ + if(part.indexOf("http") >= 0){ + return part; + } else { + var slash = _.last(SettingsStore.current().apiUrl.split("")) == "/" ? "" :"/"; + if(part[0] == "/"){ + part = part.slice(1); + } + return SettingsStore.current().apiUrl + slash + part; + } +} + +// GET request with a JWT token and CSRF token +function get(url) { + return Request + .get(url) + .timeout(TIMEOUT) + .set('Accept', 'application/json') + .set('Authorization', 'Bearer ' + jwt()) + .set('X-CSRF-Token', csrfToken()); +} + +// POST request with a JWT token and CSRF token +function post(url, body) { + return Request + .post(url) + .send(body) + .set('Accept', 'application/json') + .timeout(TIMEOUT) + .set('Authorization', 'Bearer ' + jwt()) + .set('X-CSRF-Token', csrfToken()); +} + +// PUT request with a JWT token and CSRF token +function put(url, body) { + return Request + .put(url) + .send(body) + .set('Accept', 'application/json') + .timeout(TIMEOUT) + .set('Authorization', 'Bearer ' + jwt()) + .set('X-CSRF-Token', csrfToken()); +} + +// DELETER request with a JWT token and CSRF token +function del(url) { + return Request + .del(url) + .set('Accept', 'application/json') + .timeout(TIMEOUT) + .set('Authorization', 'Bearer ' + jwt()) + .set('X-CSRF-Token', csrfToken()); +} + +function dispatch(key, response) { + Dispatcher.dispatch({ + action: key, + data: response + }); + return true; +} + +// Dispatch a response based on the server response +function dispatchResponse(key) { + return (err, response) => { + if(err && err.timeout === TIMEOUT) { + return dispatch(Constants.TIMEOUT, response); + } else if(response.status === 401) { + return dispatch(Constants.NOT_AUTHORIZED, response); + } else if(response.status === 400) { + return dispatch(Constants.ERROR, response); + } else if(response.status === 302) { + window.location = response.body.url; + } else if(!response.ok) { + return dispatch(Constants.ERROR, response); + } else if(key) { + return dispatch(key, response); + } + return false; + }; +} + +function doRequest(key, url, requestMethod, requestType){ + + var requestContainer = buildRequest(url, requestMethod, requestType); + if(requestContainer.promise){ + return requestContainer.promise; + } + + var promise = new Promise((resolve, reject) => { + requestContainer.request.end((error, res) => { + disposeRequest(url); + var handled = dispatchResponse(key)(error, res); + if(error && !handled){ + reject(error); + } else { + resolve(res); + } + }); + }); + + requestContainer.promise = promise; + return promise; +} + +function buildRequest(url, requestMethod, requestType){ + //abortPendingRequests(url); + if (requestType === POST) { + return { + request: requestMethod(makeUrl(url)) + }; + } else if (!_pendingRequests[url]) { + _pendingRequests[url] = { + request: requestMethod(makeUrl(url)) + }; + } + return _pendingRequests[url]; +} + +function disposeRequest(url){ + delete _pendingRequests[url]; +} + +function promisify(request) { + return new Promise((resolve, reject) => { + request.end((error, res) => { + if (error) { + reject(error); + } else { + resolve(res); + } + }); + }); +} + +function *doCacheRequest(url, key, requestMethod, requestType){ + + var promise; + var fullUrl = makeUrl(url); + + if (_cache[fullUrl]) { + setTimeout(() => { + dispatchResponse(key)(null, _cache[fullUrl]); + }, 1); + + promise = new Promise((resolve, reject) => { + resolve(_cache[fullUrl]); + }); + + yield promise; + }; + + var requestContainer = buildRequest(url, requestMethod, requestType); + if(requestContainer.promise){ + yield requestContainer.promise; + } else { + promise = promisify(requestContainer.request); + requestContainer.promise = promise; + promise.then((result) => { + disposeRequest(url); + dispatchResponse(key)(null, result); + _cache[fullUrl] = result; + _cache[fullUrl].isCached = true; + return result; + }, (err) => { + dispatchResponse(key)(err, err.response); + }); + yield promise; + } + +} + +var API = { + + get(key, url){ + return doRequest(key, url, (fullUrl) => { + return get(fullUrl); + }, GET); + }, + + post(key, url, body){ + return doRequest(key, url, (fullUrl) => { + return post(fullUrl, body); + }, POST); + }, + + put(key, url, body){ + return doRequest(key, url, (fullUrl) => { + return put(fullUrl, body); + }, PUT); + }, + + del(key, url){ + return doRequest(key, url, (fullUrl) => { + return del(fullUrl); + }, DEL); + }, + + async cacheGet(url, params, key, refresh){ + url = `${url}${API.queryStringFrom(params)}`; + var request = doCacheRequest(url, key, (fullUrl) => { + return get(fullUrl); + }, GET); + if (key) { + // We have a key. Invoke the generate to get data and dispatch. + var response = request.next(); + while (refresh && !response.done){ + response = request.next(); + } + } else { + // Return the generator and let the calling code invoke it. + return request; + } + }, + + queryStringFrom(params){ + var query = _.chain(params) + .map((val, key) => { + if(val){ + return `${key}=${val}`; + } else { + return ""; + } + }) + .compact() + .value(); + + if(query.length > 0){ + return `?${query.join("&")}`; + } else { + return ""; + } + + } + +}; + +export default API; diff --git a/client/js/actions/settings.js b/client/js/actions/settings.js new file mode 100644 index 0000000..87ae872 --- /dev/null +++ b/client/js/actions/settings.js @@ -0,0 +1,20 @@ +"use strict"; + +import Constants from "../constants"; +import Dispatcher from "../dispatcher"; +import Api from "./api"; + +export default { + + load(defaultSettings){ + Dispatcher.dispatch({ action: Constants.SETTINGS_LOAD, data: defaultSettings }); + if(defaultSettings.userId){ + // Add timeout to refresh jwt token + var refresh = 1000 * 60 * 20; // every 20 minutes + setInterval(function(){ + Api.get(Constants.REFRESH_JWT, `api/sessions/${defaultSettings.userId}`); + }, refresh); + } + } + +}; \ No newline at end of file diff --git a/client/js/app.jsx b/client/js/app.jsx new file mode 100644 index 0000000..923a427 --- /dev/null +++ b/client/js/app.jsx @@ -0,0 +1,13 @@ +"use strict"; + +import React from 'react'; +import ReactDOM from 'react-dom'; +import Router from 'react-router'; +import Routes from './routes'; +import SettingsAction from './actions/settings'; +import history from './history'; + +// Initialize store singletons +SettingsAction.load(window.DEFAULT_SETTINGS); + +ReactDOM.render(({Routes}), document.getElementById("main")); \ No newline at end of file diff --git a/client/js/components/base_component.jsx b/client/js/components/base_component.jsx new file mode 100644 index 0000000..10ab31d --- /dev/null +++ b/client/js/components/base_component.jsx @@ -0,0 +1,44 @@ +import React from "react"; + +// Note: If you override componentDidMount or componentWillUnmount you will need to +// call super.componentDidMount() or super.componentWillUnmount() or call +// watchStores() and unWatchStores() directly. +export default class BaseComponent extends React.Component { + + constructor(props, context) { + super(props, context); + this._bind("storeChanged"); + } + + _bind(...methods) { + methods.forEach( (method) => this[method] = this[method].bind(this) ); + } + + // Method to update state based upon store changes + storeChanged(){ + this.setState(this.getState(this.props, this.context)); + } + + componentDidMount(){ + this.watchStores(); + } + + componentWillUnmount(){ + this.unWatchStores(); + } + + // Listen for changes in the stores + watchStores(){ + _.each(this.stores, function(store){ + store.addChangeListener(this.storeChanged); + }.bind(this)); + } + + // Remove change listers from stores + unWatchStores(){ + _.each(this.stores, function(store){ + store.removeChangeListener(this.storeChanged); + }.bind(this)); + } + +} \ No newline at end of file diff --git a/client/js/components/defines.js b/client/js/components/defines.js new file mode 100644 index 0000000..5a7fb34 --- /dev/null +++ b/client/js/components/defines.js @@ -0,0 +1,11 @@ +export default { + colors: { + grey : "#616161", + darkGrey : "#444444", + lightGrey : "#eeeeee", + snow : "#fafafa", + teal : "#009698", + white : "#ffffff", + black : "#000000" + } +}; \ No newline at end of file diff --git a/client/js/components/index.jsx b/client/js/components/index.jsx new file mode 100644 index 0000000..87c4e6c --- /dev/null +++ b/client/js/components/index.jsx @@ -0,0 +1,22 @@ +"use strict"; + +import React from "react"; + +export default class Index extends React.Component { + + render(){ + + return ( +
+

React Starter App

+ {this.props.children} +
+

+ Built by Atomic Jolt. +

+
+
+ ); + } + +} diff --git a/client/js/components/index.spec.js b/client/js/components/index.spec.js new file mode 100644 index 0000000..57dec65 --- /dev/null +++ b/client/js/components/index.spec.js @@ -0,0 +1,21 @@ +"use strict"; + +import React from 'react'; +import TestUtils from 'react/lib/ReactTestUtils'; +import Index from './index'; + +describe('index', function() { + var result; + + beforeEach(()=>{ + result = TestUtils.renderIntoDocument(); + }); + + it('renders the index', function() { + expect(React.findDOMNode(result)).toBeDefined(); + }); + + afterEach(()=>{ + React.unmountComponentAtNode(React.findDOMNode(result).parentNode) + }); +}); \ No newline at end of file diff --git a/client/js/components/main/home.jsx b/client/js/components/main/home.jsx new file mode 100644 index 0000000..ef35281 --- /dev/null +++ b/client/js/components/main/home.jsx @@ -0,0 +1,9 @@ +"use strict"; + +import React from 'react'; + +export default class Home extends React.Component{ + render(){ + return

Home

; + } +}; \ No newline at end of file diff --git a/client/js/components/main/home.spec.js b/client/js/components/main/home.spec.js new file mode 100644 index 0000000..3bbe6f2 --- /dev/null +++ b/client/js/components/main/home.spec.js @@ -0,0 +1,14 @@ +"use strict"; + +import React from 'react'; +import TestUtils from 'react/lib/ReactTestUtils'; +import Home from './home'; + +describe('Home', ()=> { + it('renders the home heading', ()=> { + + var result = TestUtils.renderIntoDocument(); + expect(React.findDOMNode(result).textContent).toEqual('Home'); + + }); +}); \ No newline at end of file diff --git a/client/js/components/mixins/store_keeper.js b/client/js/components/mixins/store_keeper.js new file mode 100644 index 0000000..8454921 --- /dev/null +++ b/client/js/components/mixins/store_keeper.js @@ -0,0 +1,30 @@ +"use strict"; + +import _ from "lodash"; + +export default { + + getInitialState(){ + return this.constructor.getState(); + }, + + // Method to update state based upon store changes + storeChanged(){ + this.setState(this.constructor.getState()); + }, + + // Listen for changes in the stores + componentDidMount(){ + _.each(this.constructor.stores, function(store){ + store.addChangeListener(this.storeChanged); + }.bind(this)); + }, + + // Remove change listers from stores + componentWillUnmount(){ + _.each(this.constructor.stores, function(store){ + store.removeChangeListener(this.storeChanged); + }.bind(this)); + } + +}; \ No newline at end of file diff --git a/client/js/components/not_found.jsx b/client/js/components/not_found.jsx new file mode 100644 index 0000000..9fed79a --- /dev/null +++ b/client/js/components/not_found.jsx @@ -0,0 +1,9 @@ +"use strict"; + +import React from 'react'; + +export default class NotFound extends React.Component{ + render(){ + return

Not Found

; + } +}; diff --git a/client/js/components/not_found.spec.js b/client/js/components/not_found.spec.js new file mode 100644 index 0000000..a3c41ca --- /dev/null +++ b/client/js/components/not_found.spec.js @@ -0,0 +1,19 @@ +import React from 'react'; +import TestUtils from 'react/lib/ReactTestUtils'; +import NotFound from './not_found'; + +describe('not_found', function() { + var result; + + beforeEach(()=>{ + result = TestUtils.renderIntoDocument(); + }); + + it('renders a not found message', function() { + expect(React.findDOMNode(result).textContent).toEqual('Not Found'); + }); + + afterEach(()=>{ + React.unmountComponentAtNode(React.findDOMNode(result).parentNode) + }); +}); \ No newline at end of file diff --git a/client/js/constants.js b/client/js/constants.js new file mode 100644 index 0000000..51d5f76 --- /dev/null +++ b/client/js/constants.js @@ -0,0 +1,14 @@ +"use strict"; + +export default { + + // settings + REFRESH_JWT: "refresh_jwt", + SETTINGS_LOAD: "settings_load", + + // Errors + TIMEOUT: "timeout", + ERROR: "error", + NOT_AUTHORIZED: "not_authorized" + +}; diff --git a/client/js/dispatcher.js b/client/js/dispatcher.js new file mode 100644 index 0000000..0332015 --- /dev/null +++ b/client/js/dispatcher.js @@ -0,0 +1,5 @@ +"use strict"; + +import { Dispatcher } from 'flux'; + +export default new Dispatcher(); diff --git a/client/js/history.js b/client/js/history.js new file mode 100644 index 0000000..ac89d01 --- /dev/null +++ b/client/js/history.js @@ -0,0 +1,5 @@ +// import createBrowserHistory from 'history/lib/createBrowserHistory'; +// export default createBrowserHistory(); + +import { createHashHistory } from 'history'; +export default new createHashHistory(); \ No newline at end of file diff --git a/client/js/routes.jsx b/client/js/routes.jsx new file mode 100644 index 0000000..2b6eea7 --- /dev/null +++ b/client/js/routes.jsx @@ -0,0 +1,14 @@ +"use strict"; + +import React from 'react'; +import { Route, IndexRoute } from 'react-router'; +import Index from './components/index'; +import Home from './components/main/home'; +import NotFound from './components/not_found'; + +export default ( + + + + +); \ No newline at end of file diff --git a/client/js/stores/settings.js b/client/js/stores/settings.js new file mode 100644 index 0000000..a197b2a --- /dev/null +++ b/client/js/stores/settings.js @@ -0,0 +1,78 @@ +"use strict"; + +import Dispatcher from "../dispatcher"; +import Constants from "../constants"; +import StoreCommon from "./store_common"; +import QueryString from '../utils/query_string'; + +var _settings = {}; + +// Grab the jwt from the payload +function login(payload){ + _settings.jwt = payload.data.body.jwt_token; +} + +function loadSettings(defaultSettings){ + + defaultSettings = defaultSettings || {}; + + var bestValue = function(settings_prop, params_prop, default_prop){ + return defaultSettings[settings_prop] || QueryString.params()[params_prop] || default_prop; + }; + + _settings = { + apiUrl : bestValue('apiUrl', 'api_url', '/'), + csrfToken : defaultSettings.csrfToken || null, + jwt : defaultSettings.jwt + }; + +} + +function refreshJwt(payload){ + _settings.jwt = JSON.parse(payload.data.text).jwt; +} + +// Extend Message Store with EventEmitter to add eventing capabilities +var SettingsStore = {...StoreCommon, ...{ + + // Return current messages + current(){ + return _settings; + } + +}}; + +// Register callback with Dispatcher +Dispatcher.register(function(payload) { + + switch(payload.action){ + + case Constants.SETTINGS_LOAD: + loadSettings(payload.data); + break; + + case Constants.LOGIN: + login(payload); + break; + + case Constants.LOGOUT: + logout(payload); + break; + + case Constants.REFRESH_JWT: + refreshJwt(payload) + break; + + default: + return true; + } + + // If action was responded to, emit change event + SettingsStore.emitChange(); + + return true; + +}); + +export default SettingsStore; + diff --git a/client/js/stores/settings.spec.js b/client/js/stores/settings.spec.js new file mode 100644 index 0000000..f4ca201 --- /dev/null +++ b/client/js/stores/settings.spec.js @@ -0,0 +1,45 @@ +"use strict"; + +import React from "react"; +import Router from "react-router"; +import Constants from "../constants"; +import SettingsStore from "./settings"; +import SettingsActions from "../actions/settings"; +import Dispatcher from "../dispatcher"; + +describe("SettingsStore", () => { + + describe("with initial state", () => { + + helpLoadSettings(SettingsActions); + + describe("current", () => { + it("returns current settings", (done) => { + var settings = SettingsStore.current(); + expect(settings).toEqual({...{ csrfToken: null, jwt: undefined }, ...helpDefaultSettings}); + done(); + }); + }); + + }); + + describe("jwt refresh", () => { + + helpLoadSettings(SettingsActions); + + describe("current", () => { + var jwt = "test"; + beforeEach(() => { + Dispatcher.dispatch({ action: Constants.REFRESH_JWT, data: {text: `{"jwt":"${jwt}"}`} }); + jasmine.clock().tick(); // Advance the clock to the next tick + }); + it("returns updated jwt", (done) => { + var settings = SettingsStore.current(); + expect(settings.jwt).toEqual(jwt); + done(); + }); + }); + + }); + +}); \ No newline at end of file diff --git a/client/js/stores/store_common.js b/client/js/stores/store_common.js new file mode 100644 index 0000000..a351c00 --- /dev/null +++ b/client/js/stores/store_common.js @@ -0,0 +1,24 @@ +"use strict"; + +import EventEmitter from "events"; + +const CHANGE_EVENT = 'change'; + +export default {...EventEmitter.prototype, ...{ + + // Emit Change event + emitChange(){ + this.emit(CHANGE_EVENT); + }, + + // Add change listener + addChangeListener(callback){ + this.on(CHANGE_EVENT, callback); + }, + + // Remove change listener + removeChangeListener(callback){ + this.removeListener(CHANGE_EVENT, callback); + } + +}}; \ No newline at end of file diff --git a/client/js/utils/query_string.js b/client/js/utils/query_string.js new file mode 100644 index 0000000..aa520c5 --- /dev/null +++ b/client/js/utils/query_string.js @@ -0,0 +1,13 @@ +export default { + + params(){ + var queryDict = {}; + var vars = window.location.search.substring(1).split('&'); + for (var i = 0; i < vars.length; i++){ + var pair = vars[i].split('='); + queryDict[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); + } + return queryDict; + } + +}; \ No newline at end of file diff --git a/client/js/utils/utils.js b/client/js/utils/utils.js new file mode 100644 index 0000000..6ad6038 --- /dev/null +++ b/client/js/utils/utils.js @@ -0,0 +1,38 @@ + var Utils = { + + currentTime: function(){ + return new Date().getTime(); + }, + + makeId: function(){ + var result, i, j; + result = ''; + for(j=0; j<32; j++) + { + if( j == 8 || j == 12|| j == 16|| j == 20) + result = result + '-'; + i = Math.floor(Math.random()*16).toString(16).toUpperCase(); + result = result + i; + } + return result; + }, + + htmlDecode: function(input){ + var e = document.createElement('div'); + e.innerHTML = input; + return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; + }, + + htmlDecodeWithRoot: function(input){ + return '' + Utils.htmlDecode(input) + ''; + }, + + getLocation: function(href){ + var l = document.createElement("a"); + l.href = href; + return l; + } + +}; + +export default Utils; \ No newline at end of file diff --git a/client/karma.conf.js b/client/karma.conf.js new file mode 100644 index 0000000..b8c293b --- /dev/null +++ b/client/karma.conf.js @@ -0,0 +1,109 @@ +// karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html +module.exports = function(config) { + + function isCoverage(argument) { + return argument === '--coverage'; + } + + // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' + var reporters = ['spec']; + + if(process.argv.some(isCoverage)){ + reporters.push('coverage'); + } + + var testConfig = { + + // If browser does not capture in given timeout [ms], kill it + captureTimeout: 60000, + + // How long will Karma wait for a message from a browser before disconnecting from it (in ms) + browserNoActivityTimeout: 60000, + + // enable / disable colors in the output (reporters and logs) + colors: true, + + // web server port + port: 9876, + + files: [ + './specs_support/spec_helper.js', + //'./js/**/*.spec.js' // Use webpack to build each test individually. If changed here, match the change in preprocessors + './webpack.tests.js' // More performant but tests cannot be run individually + ], + + // Transpile tests with the karma-webpack plugin + preprocessors: { + //'./js/**/*.spec.js': ['webpack', 'sourcemap'] // Use webpack to build each test individually. If changed here, match the change in files + './webpack.tests.js': ['webpack', 'sourcemap'] // More performant but tests cannot be run individually + }, + + // Run the tests using any of the following browsers + // - Chrome npm install --save-dev karma-chrome-launcher + // - ChromeCanary + // - Firefox npm install --save-dev karma-firefox-launcher + // - Opera npm install --save-dev karma-opera-launcher + // - Safari npm install --save-dev karma-safari-launcher (only Mac) + // - PhantomJS npm install --save-dev karma-phantomjs-launcher + // - IE npm install karma-ie-launcher (only Windows) + browsers: ['Chrome'], + + // Exit the test runner as well when the test suite returns. + singleRun: false, + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + // Use jasmine as the test framework + frameworks: ['jasmine-ajax', 'jasmine'], + + reporters: reporters, + + // karma-webpack configuration. Load and transpile js and jsx files. + // Use istanbul-transformer post loader to generate code coverage report. + webpack: { + devtool: 'eval', + module: { + loaders: [ + { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader?stage=0&optional=runtime" }, + { test: /\.jsx?$/, exclude: /node_modules/, loader: "babel-loader?stage=0&optional=runtime" } + ] + }, + resolve: { + extensions: ['', '.js', '.jsx'], + modulesDirectories: ["node_modules", "web_modules", "vendor"] + } + }, + + // Reduce the noise to the console + webpackMiddleware: { + noInfo: true, + stats: { + colors: true + } + } + + }; + + + // Generate code coverage report if --coverage is specified + if(process.argv.some(isCoverage)) { + // Generate a code coverage report using `lcov` format. Result will be output to coverage/lcov.info + // run using `npm coveralls` + testConfig['webpack']['module']['postLoaders'] = [{ + test: /\.jsx?$/, + exclude: /(test|node_modules)\//, + loader: 'istanbul-instrumenter' + }]; + + testConfig['coverageReporter'] = { + dir: 'coverage/', + reporters: [ + { type: 'lcovonly', subdir: '.', file: 'lcov.info' }, + { type: 'html', subdir: 'html' } + ] + }; + } + + config.set(testConfig); +}; diff --git a/client/npm-shrinkwrap.json b/client/npm-shrinkwrap.json new file mode 100644 index 0000000..dcf726e --- /dev/null +++ b/client/npm-shrinkwrap.json @@ -0,0 +1,1700 @@ +{ + "name": "react_starter_app", + "version": "0.0.1", + "npm-shrinkwrap-version": "5.4.0", + "node-version": "v0.12.2", + "dependencies": { + "babel": { + "version": "5.8.29", + "resolved": "https://registry.npmjs.org/babel/-/babel-5.8.29.tgz", + "dependencies": { + "chokidar": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.2.0.tgz", + "dependencies": { + "anymatch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "dependencies": { + "micromatch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.2.0.tgz", + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "dependencies": { + "arr-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz" + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz" + } + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz" + }, + "braces": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.2.tgz", + "dependencies": { + "expand-range": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.1.tgz", + "dependencies": { + "fill-range": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.2.tgz", + "dependencies": { + "is-number": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-1.1.2.tgz" + }, + "isobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz" + }, + "randomatic": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.0.tgz" + }, + "repeat-string": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.2.tgz" + } + } + } + } + }, + "lazy-cache": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.4.tgz" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + } + } + }, + "expand-brackets": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.4.tgz" + }, + "extglob": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.1.tgz", + "dependencies": { + "ansi-green": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", + "dependencies": { + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" + } + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + }, + "success-symbol": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz" + } + } + }, + "filename-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz" + }, + "is-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-1.1.3.tgz" + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz" + }, + "object.omit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-1.1.0.tgz", + "dependencies": { + "for-own": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.3.tgz", + "dependencies": { + "for-in": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.4.tgz" + } + } + }, + "isobject": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz" + } + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "dependencies": { + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz" + }, + "is-dotfile": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + } + } + }, + "regex-cache": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.2.tgz", + "dependencies": { + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + } + } + } + } + } + } + }, + "arrify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.0.tgz" + }, + "async-each": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-0.1.6.tgz" + }, + "fsevents": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.0.2.tgz", + "dependencies": { + "nan": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.1.0.tgz" + }, + "node-pre-gyp": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.12.tgz", + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } + } + }, + "nopt": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.4.tgz", + "dependencies": { + "abbrev": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" + } + } + }, + "npmlog": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", + "dependencies": { + "ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz" + }, + "are-we-there-yet": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.4.tgz", + "dependencies": { + "delegates": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz" + }, + "readable-stream": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + } + } + }, + "gauge": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.2.tgz", + "dependencies": { + "has-unicode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz" + }, + "lodash.pad": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-3.1.1.tgz", + "dependencies": { + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz" + }, + "lodash._createpadding": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.1.tgz", + "dependencies": { + "lodash.repeat": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.1.tgz" + } + } + } + } + }, + "lodash.padleft": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.1.tgz", + "dependencies": { + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz" + }, + "lodash._createpadding": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.1.tgz", + "dependencies": { + "lodash.repeat": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.1.tgz" + } + } + } + } + }, + "lodash.padright": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.1.tgz", + "dependencies": { + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz" + }, + "lodash._createpadding": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.1.tgz", + "dependencies": { + "lodash.repeat": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.1.tgz" + } + } + } + } + } + } + } + } + }, + "rc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.2.tgz", + "dependencies": { + "deep-extend": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz" + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + }, + "strip-json-comments": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz" + } + } + }, + "request": { + "version": "2.64.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.64.0.tgz", + "dependencies": { + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz" + }, + "bl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.0.tgz", + "dependencies": { + "readable-stream": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.2.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "process-nextick-args": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + }, + "util-deprecate": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.1.tgz" + } + } + } + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + } + } + }, + "extend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + }, + "form-data": { + "version": "1.0.0-rc3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz", + "dependencies": { + "async": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.4.2.tgz" + } + } + }, + "har-validator": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", + "dependencies": { + "bluebird": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz" + }, + "chalk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", + "dependencies": { + "ansi-styles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz" + }, + "escape-string-regexp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + } + } + }, + "strip-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz", + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + } + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "dependencies": { + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + } + }, + "is-my-json-valid": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.12.2.tgz", + "dependencies": { + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "dependencies": { + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + } + } + }, + "jsonpointer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz" + }, + "xtend": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" + } + } + } + } + }, + "hawk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.0.tgz", + "dependencies": { + "boom": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.9.0.tgz" + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + } + } + }, + "http-signature": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", + "dependencies": { + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz" + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + }, + "mime-types": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz", + "dependencies": { + "mime-db": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz" + } + } + }, + "node-uuid": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz" + }, + "oauth-sign": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.0.tgz" + }, + "qs": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz" + }, + "stringstream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz" + }, + "tough-cookie": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.1.0.tgz" + }, + "tunnel-agent": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz" + } + } + }, + "rimraf": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.3.tgz", + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "dependencies": { + "inflight": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", + "dependencies": { + "wrappy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + } + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "minimatch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz", + "dependencies": { + "brace-expansion": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz", + "dependencies": { + "balanced-match": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + } + } + } + }, + "once": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz", + "dependencies": { + "wrappy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + } + } + }, + "path-is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" + } + } + } + } + }, + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz" + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "dependencies": { + "block-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz" + }, + "fstream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.8.tgz", + "dependencies": { + "graceful-fs": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz" + } + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + } + } + }, + "tar-pack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-2.0.0.tgz", + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" + }, + "fstream": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", + "dependencies": { + "graceful-fs": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.8.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + } + } + }, + "fstream-ignore": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz", + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "dependencies": { + "lru-cache": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz" + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + } + } + } + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" + }, + "once": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz" + }, + "readable-stream": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" + }, + "tar": { + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz", + "dependencies": { + "block-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + } + } + }, + "uid-number": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.3.tgz" + } + } + } + } + } + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "dependencies": { + "binary-extensions": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.3.1.tgz" + } + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + }, + "lodash.flatten": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-3.0.2.tgz", + "dependencies": { + "lodash._baseflatten": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", + "dependencies": { + "lodash.isarguments": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.0.4.tgz" + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" + } + } + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz" + } + } + }, + "readdirp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.0.0.tgz", + "dependencies": { + "graceful-fs": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz" + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "dependencies": { + "brace-expansion": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz", + "dependencies": { + "balanced-match": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + } + } + } + }, + "readable-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.3.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "process-nextick-args": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + } + } + } + } + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "dependencies": { + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + } + }, + "convert-source-map": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.1.tgz" + }, + "fs-readdir-recursive": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz" + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "dependencies": { + "inflight": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", + "dependencies": { + "wrappy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + } + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "minimatch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz", + "dependencies": { + "brace-expansion": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz", + "dependencies": { + "balanced-match": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + } + } + } + }, + "once": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz", + "dependencies": { + "wrappy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" + } + } + } + } + }, + "output-file-sync": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.1.tgz", + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } + } + }, + "xtend": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" + } + } + }, + "path-exists": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz" + }, + "path-is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" + }, + "source-map": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.3.tgz" + } + } + }, + "babel-runtime": { + "version": "5.8.29", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.29.tgz", + "dependencies": { + "core-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.3.tgz" + } + } + }, + "file-loader": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.4.tgz", + "dependencies": { + "loader-utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.11.tgz", + "dependencies": { + "big.js": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz" + }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz" + } + } + } + } + }, + "flux": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/flux/-/flux-2.1.1.tgz", + "dependencies": { + "fbemitter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.0.0.tgz" + }, + "fbjs": { + "version": "0.1.0-alpha.7", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.1.0-alpha.7.tgz", + "dependencies": { + "core-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.3.tgz" + }, + "promise": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.0.4.tgz", + "dependencies": { + "asap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.3.tgz" + } + } + }, + "whatwg-fetch": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz" + } + } + }, + "immutable": { + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.5.tgz" + } + } + }, + "history": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/history/-/history-1.13.0.tgz", + "dependencies": { + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz" + }, + "invariant": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.1.2.tgz", + "dependencies": { + "loose-envify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", + "dependencies": { + "js-tokens": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" + } + } + } + } + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz" + }, + "warning": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", + "dependencies": { + "loose-envify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", + "dependencies": { + "js-tokens": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" + } + } + } + } + } + } + }, + "less": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.5.3.tgz", + "dependencies": { + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "dependencies": { + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz" + } + } + }, + "graceful-fs": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.8.tgz" + }, + "image-size": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.3.5.tgz" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + } + } + }, + "promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "dependencies": { + "asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz" + } + } + }, + "request": { + "version": "2.65.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.65.0.tgz", + "dependencies": { + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz" + }, + "bl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.0.tgz", + "dependencies": { + "readable-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.3.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "process-nextick-args": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + } + } + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + } + } + }, + "extend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + }, + "form-data": { + "version": "1.0.0-rc3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz" + }, + "har-validator": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.2.tgz", + "dependencies": { + "chalk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", + "dependencies": { + "ansi-styles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz" + }, + "escape-string-regexp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + } + } + }, + "strip-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz", + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "dependencies": { + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + } + }, + "is-my-json-valid": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.12.2.tgz", + "dependencies": { + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "dependencies": { + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + } + } + }, + "jsonpointer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz" + }, + "xtend": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" + } + } + }, + "pinkie-promise": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", + "dependencies": { + "pinkie": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz" + } + } + } + } + }, + "hawk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.0.tgz", + "dependencies": { + "boom": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.0.tgz" + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + } + } + }, + "http-signature": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", + "dependencies": { + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz" + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + }, + "mime-types": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz", + "dependencies": { + "mime-db": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz" + } + } + }, + "node-uuid": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz" + }, + "oauth-sign": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.0.tgz" + }, + "qs": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz" + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" + }, + "tough-cookie": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.0.tgz" + }, + "tunnel-agent": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz" + } + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "dependencies": { + "amdefine": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz" + } + } + } + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" + }, + "null-loader": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz" + }, + "react": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/react/-/react-0.14.1.tgz", + "dependencies": { + "envify": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.0.tgz", + "dependencies": { + "jstransform": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-10.1.0.tgz", + "dependencies": { + "base62": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz" + }, + "esprima-fb": { + "version": "13001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-13001.1001.0-dev-harmony-fb.tgz" + }, + "source-map": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", + "dependencies": { + "amdefine": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz" + } + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + } + }, + "fbjs": { + "version": "0.3.2", + "resolved": "http://registry.npmjs.org/fbjs/-/fbjs-0.3.2.tgz", + "dependencies": { + "core-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.3.tgz" + }, + "loose-envify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", + "dependencies": { + "js-tokens": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" + } + } + }, + "promise": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.0.4.tgz", + "dependencies": { + "asap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.3.tgz" + } + } + }, + "ua-parser-js": { + "version": "0.7.9", + "resolved": "http://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.9.tgz" + }, + "whatwg-fetch": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz" + } + } + } + } + }, + "react-dom": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.1.tgz" + }, + "react-proxy-loader": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/react-proxy-loader/-/react-proxy-loader-0.3.4.tgz", + "dependencies": { + "loader-utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.11.tgz", + "dependencies": { + "big.js": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz" + }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz" + } + } + } + } + }, + "react-router": { + "version": "1.0.0-rc3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-1.0.0-rc3.tgz", + "dependencies": { + "history": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/history/-/history-1.12.3.tgz", + "dependencies": { + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz" + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz" + } + } + }, + "invariant": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.1.2.tgz", + "dependencies": { + "loose-envify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", + "dependencies": { + "js-tokens": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" + } + } + } + } + }, + "warning": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", + "dependencies": { + "loose-envify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", + "dependencies": { + "js-tokens": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" + } + } + } + } + } + } + }, + "superagent": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.4.0.tgz", + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz" + }, + "cookiejar": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.1.tgz" + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "dependencies": { + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + } + }, + "extend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz" + }, + "form-data": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz" + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "dependencies": { + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz" + } + } + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "dependencies": { + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz" + } + } + } + } + }, + "formidable": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz" + }, + "methods": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.0.1.tgz" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" + }, + "qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz" + }, + "readable-stream": { + "version": "1.0.27-1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + }, + "reduce-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz" + } + } + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..67c9bcf --- /dev/null +++ b/client/package.json @@ -0,0 +1,80 @@ +{ + "name": "react_starter_app", + "version": "0.0.1", + "description": "Javascript for the React Starter App.", + "repository": { + "type": "git", + "url": "https://github.com/atomicjolt/react_starter_app" + }, + "scripts": { + "test": "karma start", + "coveralls": "cat coverage/lcov.info | coveralls", + "build": "webpack --config webpack.release.js --progress --profile --colors", + "hot": "node webpack.hot.js" + }, + "author": "atomicjolt", + "license": "MIT", + "homepage": "https://github.com/atomicjolt/react_starter_app", + "dependencies": { + "babel": "^5.8.29", + "babel-runtime": "^5.8.29", + "flux": "^2.1.1", + "history": "^1.13.0", + "lodash": "^3.10.1", + "null-loader": "^0.1.1", + "react": "^0.14.1", + "react-dom": "^0.14.1", + "react-proxy-loader": "^0.3.4", + "react-router": "^1.0.0-rc3", + "superagent": "^1.4.0", + "uuid": "^2.0.1" + }, + "devDependencies": { + "async": "^1.5.0", + "autoprefixer-loader": "^3.1.0", + "babel-core": "^5.8.29", + "babel-loader": "^5.3.2", + "chunk-manifest-webpack-plugin": "0.0.1", + "coveralls": "^2.11.4", + "css-loader": "^0.21.0", + "dotenv": "^1.2.0", + "ecstatic": "^1.1.3", + "event-stream": "^3.3.2", + "extend-shallow": "^2.0.1", + "extract-text-webpack-plugin": "^0.8.2", + "html-minifier": "^1.0.0", + "imports-loader": "~0.6.5", + "istanbul": "^0.4.0", + "istanbul-instrumenter-loader": "^0.1.3", + "jasmine-core": "^2.3.4", + "jshint": "^2.8.0", + "jshint-loader": "^0.8.3", + "jshint-stylish": "^2.0.1", + "karma": "^0.13.14", + "karma-chrome-launcher": "^0.2.1", + "karma-cli": "0.1.1", + "karma-coverage": "^0.5.3", + "karma-firefox-launcher": "^0.1.6", + "karma-jasmine": "^0.3.6", + "karma-jasmine-ajax": "^0.1.13", + "karma-phantomjs-launcher": "^0.2.1", + "karma-sourcemap-loader": "^0.3.6", + "karma-spec-reporter": "0.0.22", + "karma-webpack": "^1.7.0", + "less-loader": "^2.2.1", + "minimist": "^1.2.0", + "node-sass": "3.4.1", + "npm-shrinkwrap": "^5.4.1", + "phantomjs": "^1.9.18", + "protractor": "^2.5.1", + "psi": "^1.0.6", + "react-hot-loader": "^1.3.0", + "react-tools": "^0.13.3", + "sass-loader": "^3.1.1", + "style-loader": "^0.13.0", + "url-loader": "^0.5.6", + "webpack": "^1.12.2", + "webpack-compile-templates": "^0.1.4", + "webpack-dev-server": "^1.12.1" + } +} diff --git a/client/specs_support/spec_helper.js b/client/specs_support/spec_helper.js new file mode 100644 index 0000000..270a04f --- /dev/null +++ b/client/specs_support/spec_helper.js @@ -0,0 +1,80 @@ +"use strict"; + +// Test helper. Load libraries and polyfills + +// Function.prototype.bind polyfill used by PhantomJS +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = function bind(obj) { + var args = Array.prototype.slice.call(arguments, 1), + self = this, + nop = function() { + }, + bound = function() { + return self.apply( + this instanceof nop ? this : (obj || {}), args.concat( + Array.prototype.slice.call(arguments) + ) + ); + }; + nop.prototype = this.prototype || {}; + bound.prototype = new nop(); + return bound; + }; +} + +function helpStubAjax(SettingsActions){ + + helpLoadSettings(SettingsActions); + + beforeEach(function(){ + jasmine.Ajax.install(); + + // Stub request to load problems + var accounts_payload = JSON.stringify([{ + "id":1, + "name":"Starter App", + "domain":"bfcoderServer.ngrok.io", + "code":"bfcoderServer" + }]); + + jasmine.Ajax.stubRequest( + RegExp('.*/api/accounts/') + ).andReturn({ + "status": 200, + "contentType": "json", + "statusText": "OK", + "responseText": accounts_payload + }); + }); + + afterEach(function(){ + jasmine.Ajax.uninstall(); + }); +} + +var helpDefaultSettings = { + apiUrl: "http://www.example.com/api" +}; + +function helpLoadSettings(SettingsActions){ + + helpMockClock(); + + beforeEach(function(){ + SettingsActions.load(helpDefaultSettings); + jasmine.clock().tick(); // Advance the clock to the next tick + }); + +} + +function helpMockClock(){ + + beforeEach(function(){ + jasmine.clock().install(); // Mock out the built in timers + }); + + afterEach(function(){ + jasmine.clock().uninstall(); + }); + +} diff --git a/client/specs_support/utils.js b/client/specs_support/utils.js new file mode 100644 index 0000000..df31b87 --- /dev/null +++ b/client/specs_support/utils.js @@ -0,0 +1,13 @@ +import TestUtils from 'react/lib/ReactTestUtils'; +import _ from "lodash"; + +export default { + + findTextField(textFields, labelText){ + return _.find(textFields, function(field){ + var label = TestUtils.findRenderedDOMComponentWithTag(field, 'label'); + return label.getDOMNode().textContent.toLowerCase() == labelText; + }); + } + +}; \ No newline at end of file diff --git a/client/styles/.csscomb.json b/client/styles/.csscomb.json new file mode 100644 index 0000000..8456e41 --- /dev/null +++ b/client/styles/.csscomb.json @@ -0,0 +1,297 @@ +{ + "always-semicolon": true, + "block-indent": 2, + "colon-space": [0, 1], + "color-case": "lower", + "color-shorthand": true, + "combinator-space": true, + "element-case": "lower", + "eof-newline": true, + "leading-zero": false, + "remove-empty-rulesets": true, + "rule-indent": 2, + "stick-brace": " ", + "strip-spaces": true, + "unitless-zero": true, + "vendor-prefix-align": true, + "sort-order": [ + [ + "position", + "top", + "right", + "bottom", + "left", + "z-index", + "display", + "float", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "-webkit-box-sizing", + "-moz-box-sizing", + "box-sizing", + "-webkit-appearance", + "padding", + "padding-top", + "padding-right", + "padding-bottom", + "padding-left", + "margin", + "margin-top", + "margin-right", + "margin-bottom", + "margin-left", + "overflow", + "overflow-x", + "overflow-y", + "-webkit-overflow-scrolling", + "-ms-overflow-x", + "-ms-overflow-y", + "-ms-overflow-style", + "clip", + "clear", + "font", + "font-family", + "font-size", + "font-style", + "font-weight", + "font-variant", + "font-size-adjust", + "font-stretch", + "font-effect", + "font-emphasize", + "font-emphasize-position", + "font-emphasize-style", + "font-smooth", + "-webkit-hyphens", + "-moz-hyphens", + "hyphens", + "line-height", + "color", + "text-align", + "-webkit-text-align-last", + "-moz-text-align-last", + "-ms-text-align-last", + "text-align-last", + "text-emphasis", + "text-emphasis-color", + "text-emphasis-style", + "text-emphasis-position", + "text-decoration", + "text-indent", + "text-justify", + "text-outline", + "-ms-text-overflow", + "text-overflow", + "text-overflow-ellipsis", + "text-overflow-mode", + "text-shadow", + "text-transform", + "text-wrap", + "-webkit-text-size-adjust", + "-ms-text-size-adjust", + "letter-spacing", + "-ms-word-break", + "word-break", + "word-spacing", + "-ms-word-wrap", + "word-wrap", + "-moz-tab-size", + "-o-tab-size", + "tab-size", + "white-space", + "vertical-align", + "list-style", + "list-style-position", + "list-style-type", + "list-style-image", + "pointer-events", + "cursor", + "visibility", + "zoom", + "flex-direction", + "flex-order", + "flex-pack", + "flex-align", + "table-layout", + "empty-cells", + "caption-side", + "border-spacing", + "border-collapse", + "content", + "quotes", + "counter-reset", + "counter-increment", + "resize", + "-webkit-user-select", + "-moz-user-select", + "-ms-user-select", + "-o-user-select", + "user-select", + "nav-index", + "nav-up", + "nav-right", + "nav-down", + "nav-left", + "background", + "background-color", + "background-image", + "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient", + "filter:progid:DXImageTransform.Microsoft.gradient", + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader", + "filter", + "background-repeat", + "background-attachment", + "background-position", + "background-position-x", + "background-position-y", + "-webkit-background-clip", + "-moz-background-clip", + "background-clip", + "background-origin", + "-webkit-background-size", + "-moz-background-size", + "-o-background-size", + "background-size", + "border", + "border-color", + "border-style", + "border-width", + "border-top", + "border-top-color", + "border-top-style", + "border-top-width", + "border-right", + "border-right-color", + "border-right-style", + "border-right-width", + "border-bottom", + "border-bottom-color", + "border-bottom-style", + "border-bottom-width", + "border-left", + "border-left-color", + "border-left-style", + "border-left-width", + "border-radius", + "border-top-left-radius", + "border-top-right-radius", + "border-bottom-right-radius", + "border-bottom-left-radius", + "-webkit-border-image", + "-moz-border-image", + "-o-border-image", + "border-image", + "-webkit-border-image-source", + "-moz-border-image-source", + "-o-border-image-source", + "border-image-source", + "-webkit-border-image-slice", + "-moz-border-image-slice", + "-o-border-image-slice", + "border-image-slice", + "-webkit-border-image-width", + "-moz-border-image-width", + "-o-border-image-width", + "border-image-width", + "-webkit-border-image-outset", + "-moz-border-image-outset", + "-o-border-image-outset", + "border-image-outset", + "-webkit-border-image-repeat", + "-moz-border-image-repeat", + "-o-border-image-repeat", + "border-image-repeat", + "outline", + "outline-width", + "outline-style", + "outline-color", + "outline-offset", + "-webkit-box-shadow", + "-moz-box-shadow", + "box-shadow", + "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity", + "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha", + "opacity", + "-ms-interpolation-mode", + "-webkit-transition", + "-moz-transition", + "-ms-transition", + "-o-transition", + "transition", + "-webkit-transition-delay", + "-moz-transition-delay", + "-ms-transition-delay", + "-o-transition-delay", + "transition-delay", + "-webkit-transition-timing-function", + "-moz-transition-timing-function", + "-ms-transition-timing-function", + "-o-transition-timing-function", + "transition-timing-function", + "-webkit-transition-duration", + "-moz-transition-duration", + "-ms-transition-duration", + "-o-transition-duration", + "transition-duration", + "-webkit-transition-property", + "-moz-transition-property", + "-ms-transition-property", + "-o-transition-property", + "transition-property", + "-webkit-transform", + "-moz-transform", + "-ms-transform", + "-o-transform", + "transform", + "-webkit-transform-origin", + "-moz-transform-origin", + "-ms-transform-origin", + "-o-transform-origin", + "transform-origin", + "-webkit-animation", + "-moz-animation", + "-ms-animation", + "-o-animation", + "animation", + "-webkit-animation-name", + "-moz-animation-name", + "-ms-animation-name", + "-o-animation-name", + "animation-name", + "-webkit-animation-duration", + "-moz-animation-duration", + "-ms-animation-duration", + "-o-animation-duration", + "animation-duration", + "-webkit-animation-play-state", + "-moz-animation-play-state", + "-ms-animation-play-state", + "-o-animation-play-state", + "animation-play-state", + "-webkit-animation-timing-function", + "-moz-animation-timing-function", + "-ms-animation-timing-function", + "-o-animation-timing-function", + "animation-timing-function", + "-webkit-animation-delay", + "-moz-animation-delay", + "-ms-animation-delay", + "-o-animation-delay", + "animation-delay", + "-webkit-animation-iteration-count", + "-moz-animation-iteration-count", + "-ms-animation-iteration-count", + "-o-animation-iteration-count", + "animation-iteration-count", + "-webkit-animation-direction", + "-moz-animation-direction", + "-ms-animation-direction", + "-o-animation-direction", + "animation-direction" + ] + ] +} diff --git a/client/styles/.csslintrc b/client/styles/.csslintrc new file mode 100644 index 0000000..005b862 --- /dev/null +++ b/client/styles/.csslintrc @@ -0,0 +1,19 @@ +{ + "adjoining-classes": false, + "box-sizing": false, + "box-model": false, + "compatible-vendor-prefixes": false, + "floats": false, + "font-sizes": false, + "gradients": false, + "important": false, + "known-properties": false, + "outline-none": false, + "qualified-headings": false, + "regex-selectors": false, + "shorthand": false, + "text-indent": false, + "unique-headings": false, + "universal-selector": false, + "unqualified-attributes": false +} diff --git a/client/styles/_common.scss b/client/styles/_common.scss new file mode 100644 index 0000000..6a918e8 --- /dev/null +++ b/client/styles/_common.scss @@ -0,0 +1,3 @@ +.clear{ + clear: both; +} \ No newline at end of file diff --git a/client/styles/_custom.less b/client/styles/_custom.less new file mode 100644 index 0000000..411b721 --- /dev/null +++ b/client/styles/_custom.less @@ -0,0 +1,3 @@ +//Override Variables in scaffolding.less +@accent-1-color: #ffab40; +@grey-900: #ccc; \ No newline at end of file diff --git a/client/styles/_defines.scss b/client/styles/_defines.scss new file mode 100644 index 0000000..d39b4f8 --- /dev/null +++ b/client/styles/_defines.scss @@ -0,0 +1,61 @@ +$icon-font-path: '../fonts/bootstrap'; +$fa-font-path: '../fonts'; + +$white: #fff; +$black: #000; + +// Flat UI +$clouds_light: #ecf0f5; +$clouds: #ECF0F1; +$silver: #BDC3C7; +$transparent_clouds: rgba(236, 240, 241, 0.2); + +$asbestos: #7F8C8D; +$concrete: #95A5A6; + +$midnight_blue: #2C3E50; +$wet_asphalt: #34495E; + +$peter_river: #3498DB; +$belize_hole: #2980B9; + +$sun_flower: #F1C40F; +$transparent_sun_flower: rgba(241, 196, 15, 0.5); +$orange: #F39C12; + +$carrot: #E67E22; +$pumpkin: #D35400; + +$alizarin: #e74c3c; +$pomegranate: #c0392b; + +$turquoise: #1ABC9C; +$green_sea: #16A085; + +$emerald: #2ecc71; +$nephritis: #27ae60; + +$amethyst: #9b59b6; +$wisteria: #8e44ad; + +$text_color: $midnight_blue; +$background_color: $white; + +$navbar_inverse_bg: $midnight_blue; +$navbar_inverse_link_active_bg: $midnight_blue; + +$width: 960px; +$label_width: 122px; +$border_color: $silver; +$border_radius: 5px; +$message_width: 86%; +$font_family: "Lucida Grande",Tahoma,Arial,Verdana,sans-serif; +$font_size_error: 18px; + + +$btn_color: $white; +$input_border: $silver; +$border_color: $silver; + +$btn_background_color: $midnight_blue; +$btn_background_color_highlight: $wet_asphalt; diff --git a/client/styles/layout/_footer.less b/client/styles/layout/_footer.less new file mode 100644 index 0000000..42777b0 --- /dev/null +++ b/client/styles/layout/_footer.less @@ -0,0 +1,9 @@ +.footer { + background-color: @grey-900; + text-align: center; + p { + margin: 0 auto; + padding: 0; + max-width: 335px; + } +} \ No newline at end of file diff --git a/client/styles/styles.js b/client/styles/styles.js new file mode 100644 index 0000000..8678eec --- /dev/null +++ b/client/styles/styles.js @@ -0,0 +1,3 @@ +// This file exists to compile all css - less and scss - into one file +require('./styles.less'); +require('./styles.scss'); diff --git a/client/styles/styles.less b/client/styles/styles.less new file mode 100644 index 0000000..a000cfa --- /dev/null +++ b/client/styles/styles.less @@ -0,0 +1,32 @@ +@import "./_custom.less"; //Define a custom less file to override any variables defined in scaffolding.less +@import "./layout/_footer.less"; + +body{ + min-height: 2000px; + padding: 0px; + margin: 0; +} + +a { + color: @accent-1-color; + text-decoration: none; + + &:hover { + text-decoration: underline; + } +} + +.auth-button{ + width: 345px; + height: 70px; + margin: 20px auto; + display:block; +} + +.example-button-icon{ + height: 60px; +} + +.sign-up-button{ + margin-top: 20px; +} diff --git a/client/styles/styles.scss b/client/styles/styles.scss new file mode 100644 index 0000000..dc89e14 --- /dev/null +++ b/client/styles/styles.scss @@ -0,0 +1,4 @@ +@import '_defines'; +//@import '../../node_modules/font-awesome/scss/font-awesome'; +//@import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap'; +@import '_common'; \ No newline at end of file diff --git a/client/styles/styles_admin.less b/client/styles/styles_admin.less new file mode 100644 index 0000000..efc8e8a --- /dev/null +++ b/client/styles/styles_admin.less @@ -0,0 +1,17 @@ +@import "./_custom.less"; //Define a custom less file to override any variables defined in scaffolding.less + +body{ + padding: 0; + margin: 0; + background-color: #eeeeee; + font-family: Roboto, sans-serif; +} + +a { + color: @accent-1-color; + text-decoration: none; + &:hover { + text-decoration: underline; + } +} + diff --git a/client/webpack.hot.js b/client/webpack.hot.js new file mode 100644 index 0000000..4cd384d --- /dev/null +++ b/client/webpack.hot.js @@ -0,0 +1,20 @@ +var webpack = require('webpack'); +var webpackDevServer = require('webpack-dev-server'); +var release = false; +var settings = require('./config/settings.js'); +var webpackConfig = require('./config/webpack.config.js')(release); + +new webpackDevServer(webpack(webpackConfig), { + publicPath: webpackConfig.output.publicPath, + watch: true, + hot: true, + inline: true, + progress: true, + headers: { "Access-Control-Allow-Origin": "*" }, + filename: '[name]_web_pack_bundle.js', +}).listen(settings.hotPort, 'localhost', function(err, result){ + if(err){ + console.log('webpack-dev-server', err); + } + console.log('Webpack hot load server listening on: ' + webpackConfig.output.publicPath); +}); \ No newline at end of file diff --git a/client/webpack.release.js b/client/webpack.release.js new file mode 100644 index 0000000..69a49cd --- /dev/null +++ b/client/webpack.release.js @@ -0,0 +1,4 @@ +var release = true; +var webpackConfig = require('./config/webpack.config.js')(release); + +module.exports = webpackConfig; \ No newline at end of file diff --git a/client/webpack.tests.js b/client/webpack.tests.js new file mode 100644 index 0000000..dd08b26 --- /dev/null +++ b/client/webpack.tests.js @@ -0,0 +1,19 @@ +// require all modules ending in ".spec.js" from the +// js directory and all subdirectories + + +// Create a Webpack require context so we can dynamically require our +// project's modules. Exclude test files in this context. +var context = require.context("./js", true, /\.spec\.js$/); + +// Extract the module ids that Webpack uses to track modules. +var projectModuleIds = context.keys().map(module => + String(context.resolve(module))); + +// See http://kentor.me/posts/testing-react-and-flux-applications-with-karma-and-webpack/ +beforeEach(() => { + // Remove our modules from the require cache before each test case. + projectModuleIds.forEach(id => delete require.cache[id]); +}); + +context.keys().forEach(context); \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..5e6fa43 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,147 @@ +'use strict'; + +// Include Gulp and other build automation tools and utilities +// See: https://github.com/gulpjs/gulp/blob/master/docs/API.md +var gulp = require('gulp'); +var $ = require('gulp-load-plugins')(); +var es = require('event-stream'); +var path = require('path'); +var runSequence = require('run-sequence'); +var webpack = require('webpack'); +var fileinclude = require('gulp-file-include'); +var rename = require('gulp-rename'); +var url = require('url'); +var settings = require('./config/settings.js'); +var argv = require('minimist')(process.argv.slice(2)); +var sass = require('gulp-sass'); +var prefix = require('gulp-autoprefixer'); + +// Settings +var release = argv.release; +var outputPath = release ? settings.prodOutput : settings.devOutput; +var webpackConfig = require('./config/webpack.config.js')(release); + +// Node.js runtime dependencies and their version numbers +var pkgs = require('./package.json').dependencies; +Object.keys(pkgs).forEach(function (key) { return pkgs[key] = pkgs[key].substring(1); }); + +// Clean up +// ----------------------------------------------------------------------------- +gulp.task('clean', function(cb){ + if(release){ + var rimraf = require('rimraf'); + rimraf(outputPath, cb); + } +}); + +// Copy vendor files +// ----------------------------------------------------------------------------- +gulp.task('vendor', function(){ + return es.merge( + gulp.src('./node_modules/bootstrap-sass/assets/fonts/**') + .pipe(gulp.dest(outputPath + '/fonts')), + gulp.src('./node_modules/font-awesome/fonts/**') + .pipe(gulp.dest(outputPath + '/fonts')) + ); +}); + +// Copy static files / assets +// ----------------------------------------------------------------------------- +gulp.task('assets', function(){ + return es.merge( + gulp.src('./app/images/**') + .pipe(gulp.dest(outputPath + '/images/')), + gulp.src('./app/styles/fonts/**') + .pipe(gulp.dest(outputPath + '/css/fonts/')) + ); +}); + +// Compile html +// ----------------------------------------------------------------------------- +gulp.task('tpl', function(){ + return gulp.src('./app/**/*.tpl.html') + .pipe(fileinclude()) + .pipe(rename({ + extname: "" + })) + .pipe(rename({ + extname: ".html" + })) + .pipe(!release ? $.util.noop() : $.htmlmin({ + removeComments: true, + collapseWhitespace: true, + minifyJS: true + })) + .pipe(gulp.dest(outputPath)); +}); + +// Copy html files +// ----------------------------------------------------------------------------- +gulp.task('html', function(){ + return gulp.src('./app/**/*.html') + .pipe(!release ? $.util.noop() : $.htmlmin({ + removeComments: true, + collapseWhitespace: true, + minifyJS: true + })) + .pipe(gulp.dest(outputPath)); +}); + +// Copy other files +// ----------------------------------------------------------------------------- +gulp.task('approot', function(){ + return gulp.src('./app/**/*') + .pipe(gulp.dest(outputPath)); +}); + +// CSS stylesheets +// ----------------------------------------------------------------------------- +gulp.task('styles', function(){ + return gulp.src('./app/styles/*.scss') + .pipe($.plumber()) + .pipe(sass({sourceMap: 'sass', sourceComments: 'map'})) + .pipe($.autoprefixer({browsers: AUTOPREFIXER_BROWSERS})) + .on('error', $.util.log) + .pipe(release ? $.minifyCss() : $.util.noop()) + .pipe(gulp.dest(outputPath + '/css')); +}); + +// Create JavaScript bundle +// ----------------------------------------------------------------------------- +gulp.task('javascript', function(cb){ + + var bundler = webpack(webpackConfig); + + function bundle(err, stats){ + if (err){ + throw new $.util.PluginError('webpack', err); + } + $.util.log('[webpack]', stats.toString({colors: true})); + return cb(); + } + bundler.run(bundle); +}); + + +// Build the app from source code +// ----------------------------------------------------------------------------- +gulp.task('build', ['clean'], function(cb){ + runSequence(['vendor', 'assets', 'styles', 'javascript', 'tpl', 'html', 'approot'], cb); +}); + +gulp.task('deploy', ['build'] function () { + return gulp.src('*.js', {read: false}) + .pipe(shell([ + 'echo <%= f(file.path) %>', + 'ls -l <%= file.path %>' + ], { + templateData: { + f: function (s) { + return s.replace(/$/, '.bak') + } + } + })) +}); + +// The default task +gulp.task('default', ['hot']); diff --git a/index.html b/index.html new file mode 100644 index 0000000..718c2f8 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + React Starter + + + + +
+ + + \ No newline at end of file diff --git a/s3_website.yml.example b/s3_website.yml.example new file mode 100644 index 0000000..32f2919 --- /dev/null +++ b/s3_website.yml.example @@ -0,0 +1,56 @@ +s3_id: +s3_secret: +s3_bucket: + +# Below are examples of all the available configurations. +# See README for more detailed info on each of them. + +site: build + +# max_age: +# "assets/*": 6000 +# "*": 300 + +# gzip: +# - .html +# - .css +# - .md +# gzip_zopfli: true + +# See http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region for valid endpoints +# s3_endpoint: ap-northeast-1 + +# ignore_on_server: that_folder_of_stuff_i_dont_keep_locally + +# exclude_from_upload: +# - those_folders_of_stuff +# - i_wouldnt_want_to_upload + +# s3_reduced_redundancy: true + +# cloudfront_distribution_id: your-dist-id + +# cloudfront_distribution_config: +# default_cache_behavior: +# min_TTL: <%= 60 * 60 * 24 %> +# aliases: +# quantity: 1 +# items: +# CNAME: your.website.com + +# cloudfront_invalidate_root: true + +# concurrency_level: 5 + +# redirects: +# index.php: / +# about.php: about.html +# music-files/promo.mp4: http://www.youtube.com/watch?v=dQw4w9WgXcQ + +# routing_rules: +# - condition: +# key_prefix_equals: blog/some_path +# redirect: +# host_name: blog.example.com +# replace_key_prefix_with: some_new_path/ +# http_redirect_code: 301 From a65243f56e3581389320a900f6418031c22a4126 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 30 Oct 2015 13:31:28 -0600 Subject: [PATCH 002/452] moved files --- README.md | 12 ++++++++---- gulpfile.js => client/gulpfile.js | 0 package.json | 28 ++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) rename gulpfile.js => client/gulpfile.js (100%) create mode 100644 package.json diff --git a/README.md b/README.md index a49ee0b..007f54d 100644 --- a/README.md +++ b/README.md @@ -2,24 +2,25 @@ ----------------------- Start server with: -npm run start + `npm run hot` then visit http://localhost:8080 #Development: ----------------------- -Source code lives in the app directory. +Source code lives in the client directory. #Tests ----------- - `karma start` + `npm run test` #Check for updates ----------- - +Inside the client directory run: + `npm-check-updates` @@ -34,7 +35,10 @@ Source code lives in the app directory. `gulp build --release` + Configure + Deploy: + `s3_website push` diff --git a/gulpfile.js b/client/gulpfile.js similarity index 100% rename from gulpfile.js rename to client/gulpfile.js diff --git a/package.json b/package.json new file mode 100644 index 0000000..a991156 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "react_starter_app", + "version": "0.0.1", + "description": "Client only React project.", + "engines": { + "node": "0.12.2" + }, + "scripts": { + "postinstall": "if [ \"$RAILS_ENV\" = \"production\" ] ; then cd ./client && npm install --production; else cd ./client && npm install; fi", + "build": "cd ./client && npm run gulp", + "hot": "cd ./client && npm run gulp", + "test": "rspec && client/bin/lint && (cd client && npm run jscs .)" + }, + "repository": { + "type": "git", + "url": "https://github.com/atomicjolt/react_starter_app" + }, + "keywords": [ + "react", + "Rails", + "OAuth" + ], + "author": "atomicjolt", + "license": "MIT", + "homepage": "https://github.com/atomicjolt/react_starter_app", + "dependencies": { + } +} From 0da9bb202593330bd6b6e55a6a58bf55436627c3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 30 Oct 2015 13:42:25 -0600 Subject: [PATCH 003/452] Change test to use karma --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a991156..d1c8d58 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "postinstall": "if [ \"$RAILS_ENV\" = \"production\" ] ; then cd ./client && npm install --production; else cd ./client && npm install; fi", "build": "cd ./client && npm run gulp", "hot": "cd ./client && npm run gulp", - "test": "rspec && client/bin/lint && (cd client && npm run jscs .)" + "test": "cd ./client && karma start" }, "repository": { "type": "git", From a325be16f33c89f7d8455ee8281069d1a82d0171 Mon Sep 17 00:00:00 2001 From: Ryker Blunck Date: Fri, 30 Oct 2015 14:25:33 -0600 Subject: [PATCH 004/452] fixed gulpfile and added gulp utilities as dev-dependencies --- client/gulpfile.js | 2 +- client/package.json | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index 5e6fa43..48c6af7 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -129,7 +129,7 @@ gulp.task('build', ['clean'], function(cb){ runSequence(['vendor', 'assets', 'styles', 'javascript', 'tpl', 'html', 'approot'], cb); }); -gulp.task('deploy', ['build'] function () { +gulp.task('deploy', ['build'], function () { return gulp.src('*.js', {read: false}) .pipe(shell([ 'echo <%= f(file.path) %>', diff --git a/client/package.json b/client/package.json index 67c9bcf..e3040a3 100644 --- a/client/package.json +++ b/client/package.json @@ -42,6 +42,13 @@ "event-stream": "^3.3.2", "extend-shallow": "^2.0.1", "extract-text-webpack-plugin": "^0.8.2", + "gulp": "^3.9.0", + "gulp-autoprefixer": "^3.1.0", + "gulp-file-include": "^0.13.7", + "gulp-load-plugins": "^1.0.0", + "gulp-rename": "^1.2.2", + "gulp-sass": "^2.1.0", + "gulp-util": "^3.0.7", "html-minifier": "^1.0.0", "imports-loader": "~0.6.5", "istanbul": "^0.4.0", @@ -70,6 +77,7 @@ "psi": "^1.0.6", "react-hot-loader": "^1.3.0", "react-tools": "^0.13.3", + "run-sequence": "^1.1.4", "sass-loader": "^3.1.1", "style-loader": "^0.13.0", "url-loader": "^0.5.6", From fac8e4451482379c1b1419ec1acdc6bcb4d10291 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 30 Oct 2015 14:42:54 -0600 Subject: [PATCH 005/452] Updated docs --- README.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 007f54d..c76086e 100644 --- a/README.md +++ b/README.md @@ -24,18 +24,63 @@ Inside the client directory run: `npm-check-updates` -#Deploy: +#Setup Deploy: ----------------------- - Make sure the gem is installed: + 1. Install the s3_website gem: - `gem install s3_website` + `gem install s3_website` + + 2. Create s3_website.yml: + + `s3_website cfg create` + + 3. Setup and AWS user: + + 1. Login to your AWS console + 2. Find Identity & Access Management (IAM) + 3. Click 'Users' + 4. Click 'Create New Users' + 5. Save the user's credentials + 6. Click on the user + 7. Click the permissions tab. + 8. Under 'Inline Policies' create a new custom policy and paste in the policy below. Be sure to change the domains: + + For more details see the [s3_website gem instructions](https://github.com/laurilehmijoki/s3_website). + + #IAM Policy: + ---------------------- + ` + { + "Statement": [ + { + "Action": [ + "s3:ListBucket" + ], + "Effect": "Allow", + "Resource": "arn:aws:s3:::www.reactclientstarterapp.com" + }, + { + "Action": "s3:*", + "Effect": "Allow", + "Resource": [ + "arn:aws:s3:::www.reactclientstarterapp.com", + "arn:aws:s3:::www.reactclientstarterapp.com/*" + ] + } + ] + } + ` + + 4. Configure bucket as website: + + `s3_website cfg apply` + Build: `gulp build --release` - Configure Deploy: From 22c4e256931e111909940ff254ab3fdf8a7a9f96 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 30 Oct 2015 14:44:33 -0600 Subject: [PATCH 006/452] Updated readme --- LICENSE | 21 +++++++++++++++++++++ README.md | 10 +++++----- 2 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7e29c4b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2016 Atomic Jolt (http://www.atomicjolt.com) + +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. \ No newline at end of file diff --git a/README.md b/README.md index c76086e..1c21031 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,9 @@ Inside the client directory run: For more details see the [s3_website gem instructions](https://github.com/laurilehmijoki/s3_website). - #IAM Policy: - ---------------------- - ` + ###IAM Policy: + ```json + { "Statement": [ { @@ -70,9 +70,9 @@ Inside the client directory run: } ] } - ` + ``` - 4. Configure bucket as website: + 4. Configure bucket as website: `s3_website cfg apply` From 70c4681f993d574007c2a2c88731578059f51baf Mon Sep 17 00:00:00 2001 From: Alex Lutz Date: Fri, 30 Oct 2015 14:26:35 -0600 Subject: [PATCH 007/452] npm install working. npm run test working. Also renamed react_client_starter_app in package.json file. --- client/package.json | 6 +++--- package.json | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/client/package.json b/client/package.json index e3040a3..bed97a4 100644 --- a/client/package.json +++ b/client/package.json @@ -1,10 +1,10 @@ { - "name": "react_starter_app", + "name": "react_client_starter_app", "version": "0.0.1", "description": "Javascript for the React Starter App.", "repository": { "type": "git", - "url": "https://github.com/atomicjolt/react_starter_app" + "url": "https://github.com/atomicjolt/react_client_starter_app" }, "scripts": { "test": "karma start", @@ -14,7 +14,7 @@ }, "author": "atomicjolt", "license": "MIT", - "homepage": "https://github.com/atomicjolt/react_starter_app", + "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { "babel": "^5.8.29", "babel-runtime": "^5.8.29", diff --git a/package.json b/package.json index d1c8d58..f725eb6 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,19 @@ { - "name": "react_starter_app", + "name": "react_client_starter_app", "version": "0.0.1", "description": "Client only React project.", "engines": { - "node": "0.12.2" + "node": "4.2.1" }, "scripts": { - "postinstall": "if [ \"$RAILS_ENV\" = \"production\" ] ; then cd ./client && npm install --production; else cd ./client && npm install; fi", + "postinstall": "cd ./client && npm install", "build": "cd ./client && npm run gulp", "hot": "cd ./client && npm run gulp", - "test": "cd ./client && karma start" + "test": "cd ./client/node_modules/karma/bin/ && karma start" }, "repository": { "type": "git", - "url": "https://github.com/atomicjolt/react_starter_app" + "url": "https://github.com/atomicjolt/react_client_starter_app" }, "keywords": [ "react", @@ -22,7 +22,7 @@ ], "author": "atomicjolt", "license": "MIT", - "homepage": "https://github.com/atomicjolt/react_starter_app", + "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { } } From f462e508c08c4fa4f6a6bfddd01b7bc20950aceb Mon Sep 17 00:00:00 2001 From: Alex Lutz Date: Fri, 30 Oct 2015 14:26:44 -0600 Subject: [PATCH 008/452] removed shrink-wrap file --- client/npm-shrinkwrap.json | 1700 ------------------------------------ 1 file changed, 1700 deletions(-) delete mode 100644 client/npm-shrinkwrap.json diff --git a/client/npm-shrinkwrap.json b/client/npm-shrinkwrap.json deleted file mode 100644 index dcf726e..0000000 --- a/client/npm-shrinkwrap.json +++ /dev/null @@ -1,1700 +0,0 @@ -{ - "name": "react_starter_app", - "version": "0.0.1", - "npm-shrinkwrap-version": "5.4.0", - "node-version": "v0.12.2", - "dependencies": { - "babel": { - "version": "5.8.29", - "resolved": "https://registry.npmjs.org/babel/-/babel-5.8.29.tgz", - "dependencies": { - "chokidar": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.2.0.tgz", - "dependencies": { - "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "dependencies": { - "micromatch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.2.0.tgz", - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "dependencies": { - "arr-flatten": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz" - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz" - } - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz" - }, - "braces": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.2.tgz", - "dependencies": { - "expand-range": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.1.tgz", - "dependencies": { - "fill-range": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.2.tgz", - "dependencies": { - "is-number": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-1.1.2.tgz" - }, - "isobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz" - }, - "randomatic": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.0.tgz" - }, - "repeat-string": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.2.tgz" - } - } - } - } - }, - "lazy-cache": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.4.tgz" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" - } - } - }, - "expand-brackets": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.4.tgz" - }, - "extglob": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.1.tgz", - "dependencies": { - "ansi-green": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-green/-/ansi-green-0.1.1.tgz", - "dependencies": { - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz" - } - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" - }, - "success-symbol": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/success-symbol/-/success-symbol-0.1.0.tgz" - } - } - }, - "filename-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz" - }, - "is-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-1.1.3.tgz" - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz" - }, - "object.omit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-1.1.0.tgz", - "dependencies": { - "for-own": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.3.tgz", - "dependencies": { - "for-in": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.4.tgz" - } - } - }, - "isobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz" - } - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "dependencies": { - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz" - }, - "is-dotfile": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz" - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" - } - } - }, - "regex-cache": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.2.tgz", - "dependencies": { - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" - } - } - } - } - } - } - }, - "arrify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.0.tgz" - }, - "async-each": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-0.1.6.tgz" - }, - "fsevents": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.0.2.tgz", - "dependencies": { - "nan": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.1.0.tgz" - }, - "node-pre-gyp": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.12.tgz", - "dependencies": { - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - } - } - }, - "nopt": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.4.tgz", - "dependencies": { - "abbrev": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" - } - } - }, - "npmlog": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", - "dependencies": { - "ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz" - }, - "are-we-there-yet": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.4.tgz", - "dependencies": { - "delegates": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz" - }, - "readable-stream": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - } - } - }, - "gauge": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.2.tgz", - "dependencies": { - "has-unicode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz" - }, - "lodash.pad": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-3.1.1.tgz", - "dependencies": { - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz" - }, - "lodash._createpadding": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.1.tgz", - "dependencies": { - "lodash.repeat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.1.tgz" - } - } - } - } - }, - "lodash.padleft": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.1.1.tgz", - "dependencies": { - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz" - }, - "lodash._createpadding": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.1.tgz", - "dependencies": { - "lodash.repeat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.1.tgz" - } - } - } - } - }, - "lodash.padright": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.padright/-/lodash.padright-3.1.1.tgz", - "dependencies": { - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz" - }, - "lodash._createpadding": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash._createpadding/-/lodash._createpadding-3.6.1.tgz", - "dependencies": { - "lodash.repeat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.1.tgz" - } - } - } - } - } - } - } - } - }, - "rc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.2.tgz", - "dependencies": { - "deep-extend": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz" - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz" - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" - }, - "strip-json-comments": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz" - } - } - }, - "request": { - "version": "2.64.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.64.0.tgz", - "dependencies": { - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz" - }, - "bl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.0.tgz", - "dependencies": { - "readable-stream": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.2.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "process-nextick-args": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - }, - "util-deprecate": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.1.tgz" - } - } - } - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "dependencies": { - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - } - } - }, - "extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - }, - "form-data": { - "version": "1.0.0-rc3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz", - "dependencies": { - "async": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.4.2.tgz" - } - } - }, - "har-validator": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", - "dependencies": { - "bluebird": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.10.2.tgz" - }, - "chalk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", - "dependencies": { - "ansi-styles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz" - }, - "escape-string-regexp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz" - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" - } - } - }, - "strip-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz", - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - } - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "dependencies": { - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - } - } - }, - "is-my-json-valid": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.12.2.tgz", - "dependencies": { - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "dependencies": { - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" - } - } - }, - "jsonpointer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz" - }, - "xtend": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" - } - } - } - } - }, - "hawk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.0.tgz", - "dependencies": { - "boom": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.9.0.tgz" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" - } - } - }, - "http-signature": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", - "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" - }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz" - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - }, - "mime-types": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz", - "dependencies": { - "mime-db": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz" - } - } - }, - "node-uuid": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz" - }, - "oauth-sign": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.0.tgz" - }, - "qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz" - }, - "stringstream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz" - }, - "tough-cookie": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.1.0.tgz" - }, - "tunnel-agent": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz" - } - } - }, - "rimraf": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.3.tgz", - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "dependencies": { - "inflight": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "once": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - }, - "path-is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" - } - } - } - } - }, - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz" - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "dependencies": { - "block-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz" - }, - "fstream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.8.tgz", - "dependencies": { - "graceful-fs": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz" - } - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - } - } - }, - "tar-pack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-2.0.0.tgz", - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz" - }, - "fstream": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", - "dependencies": { - "graceful-fs": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.8.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - } - } - }, - "fstream-ignore": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-0.0.7.tgz", - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "dependencies": { - "lru-cache": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz" - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - } - } - } - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz" - }, - "once": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz" - }, - "readable-stream": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" - }, - "tar": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz", - "dependencies": { - "block-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.8.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - } - } - }, - "uid-number": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.3.tgz" - } - } - } - } - } - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "dependencies": { - "binary-extensions": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.3.1.tgz" - } - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" - } - } - }, - "lodash.flatten": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-3.0.2.tgz", - "dependencies": { - "lodash._baseflatten": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", - "dependencies": { - "lodash.isarguments": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.0.4.tgz" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" - } - } - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz" - } - } - }, - "readdirp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.0.0.tgz", - "dependencies": { - "graceful-fs": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz" - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "readable-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.3.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "process-nextick-args": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - } - } - } - } - } - } - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "dependencies": { - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - } - } - }, - "convert-source-map": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.1.tgz" - }, - "fs-readdir-recursive": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz" - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "dependencies": { - "inflight": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "minimatch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz", - "dependencies": { - "brace-expansion": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz", - "dependencies": { - "balanced-match": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - } - } - } - }, - "once": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.2.tgz", - "dependencies": { - "wrappy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" - } - } - } - } - }, - "output-file-sync": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.1.tgz", - "dependencies": { - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - } - } - }, - "xtend": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" - } - } - }, - "path-exists": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz" - }, - "path-is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz" - }, - "source-map": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.3.tgz" - } - } - }, - "babel-runtime": { - "version": "5.8.29", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-5.8.29.tgz", - "dependencies": { - "core-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.3.tgz" - } - } - }, - "file-loader": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.4.tgz", - "dependencies": { - "loader-utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.11.tgz", - "dependencies": { - "big.js": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz" - }, - "json5": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz" - } - } - } - } - }, - "flux": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/flux/-/flux-2.1.1.tgz", - "dependencies": { - "fbemitter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.0.0.tgz" - }, - "fbjs": { - "version": "0.1.0-alpha.7", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.1.0-alpha.7.tgz", - "dependencies": { - "core-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.3.tgz" - }, - "promise": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.0.4.tgz", - "dependencies": { - "asap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.3.tgz" - } - } - }, - "whatwg-fetch": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz" - } - } - }, - "immutable": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.5.tgz" - } - } - }, - "history": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/history/-/history-1.13.0.tgz", - "dependencies": { - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz" - }, - "invariant": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.1.2.tgz", - "dependencies": { - "loose-envify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", - "dependencies": { - "js-tokens": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" - } - } - } - } - }, - "qs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz" - }, - "warning": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", - "dependencies": { - "loose-envify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", - "dependencies": { - "js-tokens": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" - } - } - } - } - } - } - }, - "less": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/less/-/less-2.5.3.tgz", - "dependencies": { - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "dependencies": { - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz" - } - } - }, - "graceful-fs": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.8.tgz" - }, - "image-size": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.3.5.tgz" - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - } - } - }, - "promise": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", - "dependencies": { - "asap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz" - } - } - }, - "request": { - "version": "2.65.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.65.0.tgz", - "dependencies": { - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz" - }, - "bl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.0.tgz", - "dependencies": { - "readable-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.3.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "process-nextick-args": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - } - } - } - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "dependencies": { - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - } - } - }, - "extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - }, - "form-data": { - "version": "1.0.0-rc3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz" - }, - "har-validator": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.2.tgz", - "dependencies": { - "chalk": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", - "dependencies": { - "ansi-styles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz" - }, - "escape-string-regexp": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz" - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" - } - } - }, - "strip-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz", - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - } - } - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "dependencies": { - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - } - } - }, - "is-my-json-valid": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.12.2.tgz", - "dependencies": { - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "dependencies": { - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" - } - } - }, - "jsonpointer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz" - }, - "xtend": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz" - } - } - }, - "pinkie-promise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-1.0.0.tgz", - "dependencies": { - "pinkie": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-1.0.0.tgz" - } - } - } - } - }, - "hawk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.0.tgz", - "dependencies": { - "boom": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.0.tgz" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" - } - } - }, - "http-signature": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", - "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz" - }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz" - } - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - }, - "mime-types": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz", - "dependencies": { - "mime-db": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz" - } - } - }, - "node-uuid": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz" - }, - "oauth-sign": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.0.tgz" - }, - "qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz" - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" - }, - "tough-cookie": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.0.tgz" - }, - "tunnel-agent": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz" - } - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "dependencies": { - "amdefine": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz" - } - } - } - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" - }, - "null-loader": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-0.1.1.tgz" - }, - "react": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/react/-/react-0.14.1.tgz", - "dependencies": { - "envify": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/envify/-/envify-3.4.0.tgz", - "dependencies": { - "jstransform": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-10.1.0.tgz", - "dependencies": { - "base62": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz" - }, - "esprima-fb": { - "version": "13001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-13001.1001.0-dev-harmony-fb.tgz" - }, - "source-map": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", - "dependencies": { - "amdefine": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz" - } - } - } - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - } - } - }, - "fbjs": { - "version": "0.3.2", - "resolved": "http://registry.npmjs.org/fbjs/-/fbjs-0.3.2.tgz", - "dependencies": { - "core-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.3.tgz" - }, - "loose-envify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", - "dependencies": { - "js-tokens": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" - } - } - }, - "promise": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.0.4.tgz", - "dependencies": { - "asap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.3.tgz" - } - } - }, - "ua-parser-js": { - "version": "0.7.9", - "resolved": "http://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.9.tgz" - }, - "whatwg-fetch": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz" - } - } - } - } - }, - "react-dom": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-0.14.1.tgz" - }, - "react-proxy-loader": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/react-proxy-loader/-/react-proxy-loader-0.3.4.tgz", - "dependencies": { - "loader-utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.11.tgz", - "dependencies": { - "big.js": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz" - }, - "json5": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz" - } - } - } - } - }, - "react-router": { - "version": "1.0.0-rc3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-1.0.0-rc3.tgz", - "dependencies": { - "history": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/history/-/history-1.12.3.tgz", - "dependencies": { - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz" - }, - "qs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz" - } - } - }, - "invariant": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.1.2.tgz", - "dependencies": { - "loose-envify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", - "dependencies": { - "js-tokens": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" - } - } - } - } - }, - "warning": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-2.1.0.tgz", - "dependencies": { - "loose-envify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.1.0.tgz", - "dependencies": { - "js-tokens": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.2.tgz" - } - } - } - } - } - } - }, - "superagent": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.4.0.tgz", - "dependencies": { - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz" - }, - "cookiejar": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.1.tgz" - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "dependencies": { - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" - } - } - }, - "extend": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz" - }, - "form-data": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz" - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "dependencies": { - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz" - } - } - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "dependencies": { - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz" - } - } - } - } - }, - "formidable": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz" - }, - "methods": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.0.1.tgz" - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" - }, - "qs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz" - }, - "readable-stream": { - "version": "1.0.27-1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", - "dependencies": { - "core-util-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - }, - "reduce-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz" - } - } - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" - } - } -} From 5ef2c31712d09c2934876ddb0a17bd03c7993c8f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 2 Nov 2015 22:21:41 -0700 Subject: [PATCH 009/452] Fixed gulpfile --- .env.example | 12 ++++ .gitignore | 1 + README.md | 3 +- client/config/settings.js | 4 +- client/gulpfile.js | 68 ++++++---------------- client/html/{index.html => index.tpl.html} | 0 client/js/app.jsx | 7 +++ client/package.json | 10 ++-- client/styles/_common.scss | 3 - client/styles/_custom.less | 3 - client/styles/layout/_footer.less | 9 --- client/styles/styles.less | 34 +---------- client/styles/styles.scss | 3 +- client/styles/styles_admin.less | 17 ------ package.json | 7 ++- 15 files changed, 53 insertions(+), 128 deletions(-) create mode 100644 .env.example rename client/html/{index.html => index.tpl.html} (100%) delete mode 100644 client/styles/_common.scss delete mode 100644 client/styles/_custom.less delete mode 100644 client/styles/layout/_footer.less delete mode 100644 client/styles/styles_admin.less diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..b413a0e --- /dev/null +++ b/.env.example @@ -0,0 +1,12 @@ +APP_SUBDOMAIN=clientstarterapp +APP_URL=ngrok.io +APP_PORT=3000 +ASSETS_SUBDOMAIN=cassets +ASSETS_PORT=8080 +ASSETS_URL=https://cassets.ngrok.io + +# Use the following setup for local development (ie don't use ngrok) +# You will need to edit /etc/hosts and add sites.dev and cassets.sites.dev. +# Each entry will point to 127.0.0.1 +# APP_URL=sites.dev +# ASSETS_URL=http://cassets.sites.dev:8080 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 56e05f8..9a30599 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ s3_website.yml node_modules npm-debug.log +build diff --git a/README.md b/README.md index 1c21031..b80feb8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ #Notes: ----------------------- -Start server with: +1. Rename .env.example to .env and change the values as appropriate +2. Start server with: `npm run hot` diff --git a/client/config/settings.js b/client/config/settings.js index 742c92a..070c158 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -3,8 +3,8 @@ var path = require('path'); var clientAppPath = path.join(__dirname, '../'); -var devRelativeOutput = '/assets/'; -var prodRelativeOutput = '/assets/'; +var devRelativeOutput = '/'; +var prodRelativeOutput = '/'; var devOutput = path.join(__dirname, '../../app', devRelativeOutput); var prodOutput = path.join(__dirname, '../../build', prodRelativeOutput); diff --git a/client/gulpfile.js b/client/gulpfile.js index 48c6af7..30e700d 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -1,29 +1,20 @@ 'use strict'; -// Include Gulp and other build automation tools and utilities -// See: https://github.com/gulpjs/gulp/blob/master/docs/API.md var gulp = require('gulp'); var $ = require('gulp-load-plugins')(); var es = require('event-stream'); -var path = require('path'); var runSequence = require('run-sequence'); var webpack = require('webpack'); var fileinclude = require('gulp-file-include'); var rename = require('gulp-rename'); -var url = require('url'); var settings = require('./config/settings.js'); var argv = require('minimist')(process.argv.slice(2)); -var sass = require('gulp-sass'); -var prefix = require('gulp-autoprefixer'); // Settings var release = argv.release; var outputPath = release ? settings.prodOutput : settings.devOutput; var webpackConfig = require('./config/webpack.config.js')(release); -// Node.js runtime dependencies and their version numbers -var pkgs = require('./package.json').dependencies; -Object.keys(pkgs).forEach(function (key) { return pkgs[key] = pkgs[key].substring(1); }); // Clean up // ----------------------------------------------------------------------------- @@ -45,21 +36,24 @@ gulp.task('vendor', function(){ ); }); -// Copy static files / assets +// Copy images // ----------------------------------------------------------------------------- -gulp.task('assets', function(){ - return es.merge( - gulp.src('./app/images/**') - .pipe(gulp.dest(outputPath + '/images/')), - gulp.src('./app/styles/fonts/**') - .pipe(gulp.dest(outputPath + '/css/fonts/')) - ); +gulp.task('images', function(){ + gulp.src('./images/**/*') + .pipe(gulp.dest(outputPath + '/images/')); }); -// Compile html +// Copy fonts +// ----------------------------------------------------------------------------- +gulp.task('fonts', function(){ + gulp.src('./fonts/**/*') + .pipe(gulp.dest(outputPath + '/styles/fonts/')); +}); + +// Compile html templates // ----------------------------------------------------------------------------- gulp.task('tpl', function(){ - return gulp.src('./app/**/*.tpl.html') + return gulp.src('./html/**/*.tpl.html') .pipe(fileinclude()) .pipe(rename({ extname: "" @@ -78,7 +72,7 @@ gulp.task('tpl', function(){ // Copy html files // ----------------------------------------------------------------------------- gulp.task('html', function(){ - return gulp.src('./app/**/*.html') + return gulp.src('./html/**/*.html') .pipe(!release ? $.util.noop() : $.htmlmin({ removeComments: true, collapseWhitespace: true, @@ -89,23 +83,11 @@ gulp.task('html', function(){ // Copy other files // ----------------------------------------------------------------------------- -gulp.task('approot', function(){ - return gulp.src('./app/**/*') +gulp.task('assets', function(){ + return gulp.src('./assets/**/*') .pipe(gulp.dest(outputPath)); }); -// CSS stylesheets -// ----------------------------------------------------------------------------- -gulp.task('styles', function(){ - return gulp.src('./app/styles/*.scss') - .pipe($.plumber()) - .pipe(sass({sourceMap: 'sass', sourceComments: 'map'})) - .pipe($.autoprefixer({browsers: AUTOPREFIXER_BROWSERS})) - .on('error', $.util.log) - .pipe(release ? $.minifyCss() : $.util.noop()) - .pipe(gulp.dest(outputPath + '/css')); -}); - // Create JavaScript bundle // ----------------------------------------------------------------------------- gulp.task('javascript', function(cb){ @@ -122,26 +104,12 @@ gulp.task('javascript', function(cb){ bundler.run(bundle); }); - // Build the app from source code // ----------------------------------------------------------------------------- gulp.task('build', ['clean'], function(cb){ - runSequence(['vendor', 'assets', 'styles', 'javascript', 'tpl', 'html', 'approot'], cb); + runSequence(['vendor', 'fonts', 'images', 'javascript', 'tpl', 'html', 'assets'], cb); }); -gulp.task('deploy', ['build'], function () { - return gulp.src('*.js', {read: false}) - .pipe(shell([ - 'echo <%= f(file.path) %>', - 'ls -l <%= file.path %>' - ], { - templateData: { - f: function (s) { - return s.replace(/$/, '.bak') - } - } - })) -}); // The default task -gulp.task('default', ['hot']); +gulp.task('default', ['build']); diff --git a/client/html/index.html b/client/html/index.tpl.html similarity index 100% rename from client/html/index.html rename to client/html/index.tpl.html diff --git a/client/js/app.jsx b/client/js/app.jsx index 923a427..53ba1da 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -7,6 +7,13 @@ import Routes from './routes'; import SettingsAction from './actions/settings'; import history from './history'; +//Needed for onTouchTap +//Can go away when react 1.0 release +//Check this repo: +//https://github.com/zilverline/react-tap-event-plugin +import injectTapEventPlugin from "react-tap-event-plugin"; +injectTapEventPlugin(); + // Initialize store singletons SettingsAction.load(window.DEFAULT_SETTINGS); diff --git a/client/package.json b/client/package.json index bed97a4..f0e8278 100644 --- a/client/package.json +++ b/client/package.json @@ -12,7 +12,7 @@ "build": "webpack --config webpack.release.js --progress --profile --colors", "hot": "node webpack.hot.js" }, - "author": "atomicjolt", + "author": "atomicjolt, jbasdf", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { @@ -26,12 +26,11 @@ "react-dom": "^0.14.1", "react-proxy-loader": "^0.3.4", "react-router": "^1.0.0-rc3", + "react-tap-event-plugin": "^0.2.1", "superagent": "^1.4.0", "uuid": "^2.0.1" }, "devDependencies": { - "async": "^1.5.0", - "autoprefixer-loader": "^3.1.0", "babel-core": "^5.8.29", "babel-loader": "^5.3.2", "chunk-manifest-webpack-plugin": "0.0.1", @@ -40,14 +39,12 @@ "dotenv": "^1.2.0", "ecstatic": "^1.1.3", "event-stream": "^3.3.2", - "extend-shallow": "^2.0.1", "extract-text-webpack-plugin": "^0.8.2", "gulp": "^3.9.0", - "gulp-autoprefixer": "^3.1.0", "gulp-file-include": "^0.13.7", + "gulp-htmlmin": "^1.2.0", "gulp-load-plugins": "^1.0.0", "gulp-rename": "^1.2.2", - "gulp-sass": "^2.1.0", "gulp-util": "^3.0.7", "html-minifier": "^1.0.0", "imports-loader": "~0.6.5", @@ -77,6 +74,7 @@ "psi": "^1.0.6", "react-hot-loader": "^1.3.0", "react-tools": "^0.13.3", + "rimraf": "^2.4.3", "run-sequence": "^1.1.4", "sass-loader": "^3.1.1", "style-loader": "^0.13.0", diff --git a/client/styles/_common.scss b/client/styles/_common.scss deleted file mode 100644 index 6a918e8..0000000 --- a/client/styles/_common.scss +++ /dev/null @@ -1,3 +0,0 @@ -.clear{ - clear: both; -} \ No newline at end of file diff --git a/client/styles/_custom.less b/client/styles/_custom.less deleted file mode 100644 index 411b721..0000000 --- a/client/styles/_custom.less +++ /dev/null @@ -1,3 +0,0 @@ -//Override Variables in scaffolding.less -@accent-1-color: #ffab40; -@grey-900: #ccc; \ No newline at end of file diff --git a/client/styles/layout/_footer.less b/client/styles/layout/_footer.less deleted file mode 100644 index 42777b0..0000000 --- a/client/styles/layout/_footer.less +++ /dev/null @@ -1,9 +0,0 @@ -.footer { - background-color: @grey-900; - text-align: center; - p { - margin: 0 auto; - padding: 0; - max-width: 335px; - } -} \ No newline at end of file diff --git a/client/styles/styles.less b/client/styles/styles.less index a000cfa..aed6564 100644 --- a/client/styles/styles.less +++ b/client/styles/styles.less @@ -1,32 +1,2 @@ -@import "./_custom.less"; //Define a custom less file to override any variables defined in scaffolding.less -@import "./layout/_footer.less"; - -body{ - min-height: 2000px; - padding: 0px; - margin: 0; -} - -a { - color: @accent-1-color; - text-decoration: none; - - &:hover { - text-decoration: underline; - } -} - -.auth-button{ - width: 345px; - height: 70px; - margin: 20px auto; - display:block; -} - -.example-button-icon{ - height: 60px; -} - -.sign-up-button{ - margin-top: 20px; -} +// styles.less can be +// @import "../node_modules/bootstrap/less/bootstrap"; \ No newline at end of file diff --git a/client/styles/styles.scss b/client/styles/styles.scss index dc89e14..3398875 100644 --- a/client/styles/styles.scss +++ b/client/styles/styles.scss @@ -1,4 +1,3 @@ @import '_defines'; //@import '../../node_modules/font-awesome/scss/font-awesome'; -//@import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap'; -@import '_common'; \ No newline at end of file +//@import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap'; \ No newline at end of file diff --git a/client/styles/styles_admin.less b/client/styles/styles_admin.less deleted file mode 100644 index efc8e8a..0000000 --- a/client/styles/styles_admin.less +++ /dev/null @@ -1,17 +0,0 @@ -@import "./_custom.less"; //Define a custom less file to override any variables defined in scaffolding.less - -body{ - padding: 0; - margin: 0; - background-color: #eeeeee; - font-family: Roboto, sans-serif; -} - -a { - color: @accent-1-color; - text-decoration: none; - &:hover { - text-decoration: underline; - } -} - diff --git a/package.json b/package.json index f725eb6..70a8c04 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,10 @@ }, "scripts": { "postinstall": "cd ./client && npm install", - "build": "cd ./client && npm run gulp", - "hot": "cd ./client && npm run gulp", - "test": "cd ./client/node_modules/karma/bin/ && karma start" + "build": "cd ./client && gulp build", + "hot": "cd ./client && node webpack.hot.js", + "test": "cd ./client && node_modules/karma/bin/karma start", + "coveralls": "cat coverage/lcov.info | coveralls" }, "repository": { "type": "git", From 6b4ae3b11335133d4ed01b5fc7d78a26aad0ff9a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 3 Nov 2015 21:24:00 -0700 Subject: [PATCH 010/452] Fixed specs --- client/js/components/index.spec.js | 8 +++++--- client/js/components/main/home.spec.js | 3 ++- client/js/components/not_found.spec.js | 7 +++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/client/js/components/index.spec.js b/client/js/components/index.spec.js index 57dec65..71de3b1 100644 --- a/client/js/components/index.spec.js +++ b/client/js/components/index.spec.js @@ -1,6 +1,7 @@ "use strict"; import React from 'react'; +import ReactDOM from 'react-dom'; import TestUtils from 'react/lib/ReactTestUtils'; import Index from './index'; @@ -12,10 +13,11 @@ describe('index', function() { }); it('renders the index', function() { - expect(React.findDOMNode(result)).toBeDefined(); + expect(ReactDOM.findDOMNode(result)).toBeDefined(); }); afterEach(()=>{ - React.unmountComponentAtNode(React.findDOMNode(result).parentNode) + React.unmountComponentAtNode(ReactDOM.findDOMNode(result).parentNode) }); -}); \ No newline at end of file +}); + diff --git a/client/js/components/main/home.spec.js b/client/js/components/main/home.spec.js index 3bbe6f2..1a752d7 100644 --- a/client/js/components/main/home.spec.js +++ b/client/js/components/main/home.spec.js @@ -1,6 +1,7 @@ "use strict"; import React from 'react'; +import ReactDOM from 'react-dom'; import TestUtils from 'react/lib/ReactTestUtils'; import Home from './home'; @@ -8,7 +9,7 @@ describe('Home', ()=> { it('renders the home heading', ()=> { var result = TestUtils.renderIntoDocument(); - expect(React.findDOMNode(result).textContent).toEqual('Home'); + expect(ReactDOM.findDOMNode(result).textContent).toEqual('Home'); }); }); \ No newline at end of file diff --git a/client/js/components/not_found.spec.js b/client/js/components/not_found.spec.js index a3c41ca..e971fa4 100644 --- a/client/js/components/not_found.spec.js +++ b/client/js/components/not_found.spec.js @@ -1,4 +1,7 @@ +"use strict"; + import React from 'react'; +import ReactDOM from 'react-dom'; import TestUtils from 'react/lib/ReactTestUtils'; import NotFound from './not_found'; @@ -10,10 +13,10 @@ describe('not_found', function() { }); it('renders a not found message', function() { - expect(React.findDOMNode(result).textContent).toEqual('Not Found'); + expect(ReactDOM.findDOMNode(result).textContent).toEqual('Not Found'); }); afterEach(()=>{ - React.unmountComponentAtNode(React.findDOMNode(result).parentNode) + React.unmountComponentAtNode(ReactDOM.findDOMNode(result).parentNode) }); }); \ No newline at end of file From ac033ff071c6d8a7cc4c8096379e45fd74b9d717 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 3 Nov 2015 23:53:38 -0700 Subject: [PATCH 011/452] Moved files --- client/{assets => html}/crossdomain.xml | 0 client/{assets => html}/humans.txt | 0 client/{assets => html}/robots.txt | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename client/{assets => html}/crossdomain.xml (100%) rename client/{assets => html}/humans.txt (100%) rename client/{assets => html}/robots.txt (100%) diff --git a/client/assets/crossdomain.xml b/client/html/crossdomain.xml similarity index 100% rename from client/assets/crossdomain.xml rename to client/html/crossdomain.xml diff --git a/client/assets/humans.txt b/client/html/humans.txt similarity index 100% rename from client/assets/humans.txt rename to client/html/humans.txt diff --git a/client/assets/robots.txt b/client/html/robots.txt similarity index 100% rename from client/assets/robots.txt rename to client/html/robots.txt From 597ed19d6377088710ec16f7a8cc65cab1d2510b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 3 Nov 2015 23:54:09 -0700 Subject: [PATCH 012/452] A note about development --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b80feb8..5a15641 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@ then visit http://localhost:8080 #Development: ----------------------- -Source code lives in the client directory. +Source code lives in the client directory. Modify html and js files in that directory to build your +application. #Tests From 81603983dbd723d6315757aae08a39b8e7c72446 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 3 Nov 2015 23:54:23 -0700 Subject: [PATCH 013/452] Removed unused file --- index.html | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 index.html diff --git a/index.html b/index.html deleted file mode 100644 index 718c2f8..0000000 --- a/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - React Starter - - - - -
- - - \ No newline at end of file From 151c8cba8bb8235c450098fcb656acd02b8e24e0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 16:09:10 -0700 Subject: [PATCH 014/452] Cleaned up html build process --- client/gulpfile.js | 57 +++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index 30e700d..5177c90 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -1,6 +1,9 @@ 'use strict'; var gulp = require('gulp'); +var gulpFilter = require('gulp-filter'); +var gulpIgnore = require('gulp-ignore'); +var inject = require('gulp-inject'); var $ = require('gulp-load-plugins')(); var es = require('event-stream'); var runSequence = require('run-sequence'); @@ -19,14 +22,14 @@ var webpackConfig = require('./config/webpack.config.js')(release); // Clean up // ----------------------------------------------------------------------------- gulp.task('clean', function(cb){ - if(release){ - var rimraf = require('rimraf'); - rimraf(outputPath, cb); - } + var rimraf = require('rimraf'); + rimraf(outputPath, cb); }); + // Copy vendor files // ----------------------------------------------------------------------------- +// Use this task to copy assets (ie fonts) from node modules gulp.task('vendor', function(){ return es.merge( gulp.src('./node_modules/bootstrap-sass/assets/fonts/**') @@ -36,6 +39,7 @@ gulp.task('vendor', function(){ ); }); + // Copy images // ----------------------------------------------------------------------------- gulp.task('images', function(){ @@ -43,6 +47,7 @@ gulp.task('images', function(){ .pipe(gulp.dest(outputPath + '/images/')); }); + // Copy fonts // ----------------------------------------------------------------------------- gulp.task('fonts', function(){ @@ -50,41 +55,36 @@ gulp.task('fonts', function(){ .pipe(gulp.dest(outputPath + '/styles/fonts/')); }); -// Compile html templates + +// Copy html files // ----------------------------------------------------------------------------- -gulp.task('tpl', function(){ - return gulp.src('./html/**/*.tpl.html') - .pipe(fileinclude()) +gulp.task('html', function(){ + + var tplFilter = gulpFilter('**/*.tpl.html', {restore: true}); + var htmlFilter = gulpFilter('**/*.html', {restore: true}); + + var sources = gulp.src([outputPath + '/**/*.js'], {read: false}); + + return gulp.src('./html/**/*') + .pipe(gulpIgnore.exclude("partials/**")) + .pipe(gulpIgnore.exclude("partials")) + .pipe(tplFilter) + .pipe(fileinclude()) // Compile html (tpl) templates .pipe(rename({ extname: "" })) .pipe(rename({ extname: ".html" })) + .pipe(tplFilter.restore) + .pipe(htmlFilter) + .pipe(inject(sources)) .pipe(!release ? $.util.noop() : $.htmlmin({ removeComments: true, collapseWhitespace: true, minifyJS: true })) - .pipe(gulp.dest(outputPath)); -}); - -// Copy html files -// ----------------------------------------------------------------------------- -gulp.task('html', function(){ - return gulp.src('./html/**/*.html') - .pipe(!release ? $.util.noop() : $.htmlmin({ - removeComments: true, - collapseWhitespace: true, - minifyJS: true - })) - .pipe(gulp.dest(outputPath)); -}); - -// Copy other files -// ----------------------------------------------------------------------------- -gulp.task('assets', function(){ - return gulp.src('./assets/**/*') + .pipe(htmlFilter.restore) .pipe(gulp.dest(outputPath)); }); @@ -104,10 +104,11 @@ gulp.task('javascript', function(cb){ bundler.run(bundle); }); + // Build the app from source code // ----------------------------------------------------------------------------- gulp.task('build', ['clean'], function(cb){ - runSequence(['vendor', 'fonts', 'images', 'javascript', 'tpl', 'html', 'assets'], cb); + runSequence(['vendor', 'fonts', 'images', 'javascript', 'html'], cb); }); From 94bdd2e694ddc55058aea613595eebceca3c2608 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 16:09:23 -0700 Subject: [PATCH 015/452] Fixed path --- client/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/index.html b/client/index.html index e9289b6..fb7095c 100644 --- a/client/index.html +++ b/client/index.html @@ -7,6 +7,6 @@

This file is served directly from the Webpack dev server. It is used to to test the app_web_pack_bundle.js directly and to test the webpack configuration.

- + \ No newline at end of file From 16f67f2891e033f6cd188f1e511ad0743063252e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 16:09:43 -0700 Subject: [PATCH 016/452] Added comments to inject javascript --- client/html/index.tpl.html | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/client/html/index.tpl.html b/client/html/index.tpl.html index e69f87a..1627fbb 100644 --- a/client/html/index.tpl.html +++ b/client/html/index.tpl.html @@ -3,16 +3,14 @@ - - + React Client Starter + - @@include('./partials/_header.html') - -client html + + @@include('./partials/_google_analytics.html') - - + From 6742bf1a3b5d80f222d5820cef75e908d82b6acf Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 16:09:51 -0700 Subject: [PATCH 017/452] Added packages. --- client/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/package.json b/client/package.json index f0e8278..cd430cc 100644 --- a/client/package.json +++ b/client/package.json @@ -42,7 +42,10 @@ "extract-text-webpack-plugin": "^0.8.2", "gulp": "^3.9.0", "gulp-file-include": "^0.13.7", + "gulp-filter": "^3.0.1", "gulp-htmlmin": "^1.2.0", + "gulp-ignore": "^2.0.1", + "gulp-inject": "^3.0.0", "gulp-load-plugins": "^1.0.0", "gulp-rename": "^1.2.2", "gulp-util": "^3.0.7", From 233e9b049195c67f749598dbb3812590fbcde034 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:05:39 -0700 Subject: [PATCH 018/452] Simplified .env --- .env.example | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.env.example b/.env.example index b413a0e..735a5c4 100644 --- a/.env.example +++ b/.env.example @@ -1,12 +1,11 @@ -APP_SUBDOMAIN=clientstarterapp -APP_URL=ngrok.io -APP_PORT=3000 -ASSETS_SUBDOMAIN=cassets ASSETS_PORT=8080 -ASSETS_URL=https://cassets.ngrok.io -# Use the following setup for local development (ie don't use ngrok) -# You will need to edit /etc/hosts and add sites.dev and cassets.sites.dev. +# Use ngrok: +ASSETS_URL=https://rcsassets.ngrok.io + +# Use a local domain. Change /etc/hosts and add sites.dev and rcsassets.sites.dev. # Each entry will point to 127.0.0.1 -# APP_URL=sites.dev -# ASSETS_URL=http://cassets.sites.dev:8080 \ No newline at end of file +# ASSETS_URL=http://rcsassets.sites.dev:8080 + +# Or just use localhost +ASSETS_URL=http://localhost:8080 \ No newline at end of file From 0c457f72efdebb478cd5dea5259b2e09fd02c6cf Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:09:12 -0700 Subject: [PATCH 019/452] Use html replace instead of inject --- client/gulpfile.js | 22 +++++++++++++++++----- client/html/index.tpl.html | 4 ++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index 5177c90..11cabfa 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -3,7 +3,7 @@ var gulp = require('gulp'); var gulpFilter = require('gulp-filter'); var gulpIgnore = require('gulp-ignore'); -var inject = require('gulp-inject'); +var htmlReplace = require('gulp-html-replace'); var $ = require('gulp-load-plugins')(); var es = require('event-stream'); var runSequence = require('run-sequence'); @@ -62,9 +62,7 @@ gulp.task('html', function(){ var tplFilter = gulpFilter('**/*.tpl.html', {restore: true}); var htmlFilter = gulpFilter('**/*.html', {restore: true}); - - var sources = gulp.src([outputPath + '/**/*.js'], {read: false}); - + return gulp.src('./html/**/*') .pipe(gulpIgnore.exclude("partials/**")) .pipe(gulpIgnore.exclude("partials")) @@ -78,7 +76,7 @@ gulp.task('html', function(){ })) .pipe(tplFilter.restore) .pipe(htmlFilter) - .pipe(inject(sources)) + .pipe(htmlReplace({js: './app_web_pack_bundle.js'})) .pipe(!release ? $.util.noop() : $.htmlmin({ removeComments: true, collapseWhitespace: true, @@ -111,6 +109,20 @@ gulp.task('build', ['clean'], function(cb){ runSequence(['vendor', 'fonts', 'images', 'javascript', 'html'], cb); }); +// Compile index.tpl.html for webpack to use +// ----------------------------------------------------------------------------- +gulp.task('hot', function(cb){ + return gulp.src('./html/index.tpl.html') + .pipe(fileinclude()) // Compile html (tpl) templates + .pipe(rename({ + extname: "" + })) + .pipe(rename({ + extname: ".html" + })) + .pipe(htmlReplace({js: './app_web_pack_bundle.js'})) + .pipe(gulp.dest('./')); +}); // The default task gulp.task('default', ['build']); diff --git a/client/html/index.tpl.html b/client/html/index.tpl.html index 1627fbb..5d99eec 100644 --- a/client/html/index.tpl.html +++ b/client/html/index.tpl.html @@ -9,8 +9,8 @@ @@include('./partials/_header.html') - - + + @@include('./partials/_google_analytics.html') From f0abcb1e6190357cb3b94872387af0fc33f8cbda Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:09:19 -0700 Subject: [PATCH 020/452] Simplify header --- client/html/partials/_header.html | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/client/html/partials/_header.html b/client/html/partials/_header.html index b503954..e69de29 100644 --- a/client/html/partials/_header.html +++ b/client/html/partials/_header.html @@ -1,17 +0,0 @@ - \ No newline at end of file From 47779f5a5ab014e829495596f048c157fef23e7b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:09:40 -0700 Subject: [PATCH 021/452] Build index.html from index.tpl.html --- client/index.html | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/client/index.html b/client/index.html index fb7095c..50f1386 100644 --- a/client/index.html +++ b/client/index.html @@ -1,12 +1,24 @@ - - - - - Document - - -

This file is served directly from the Webpack dev server. It is used to - to test the app_web_pack_bundle.js directly and to test the webpack configuration.

- - - \ No newline at end of file + + + + + + React Client Starter + + + + + + + + + + + From 4d034a3ea7e8b87cb08a767ceba30f623703f251 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:09:56 -0700 Subject: [PATCH 022/452] added html replace --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index cd430cc..900760a 100644 --- a/client/package.json +++ b/client/package.json @@ -43,9 +43,9 @@ "gulp": "^3.9.0", "gulp-file-include": "^0.13.7", "gulp-filter": "^3.0.1", + "gulp-html-replace": "^1.5.4", "gulp-htmlmin": "^1.2.0", "gulp-ignore": "^2.0.1", - "gulp-inject": "^3.0.0", "gulp-load-plugins": "^1.0.0", "gulp-rename": "^1.2.2", "gulp-util": "^3.0.7", From b8b344150ceb290249be136eaa62d7ede50ec1bf Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:10:10 -0700 Subject: [PATCH 023/452] use gulp to build index.html before webpack runs --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 70a8c04..516c122 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "postinstall": "cd ./client && npm install", "build": "cd ./client && gulp build", - "hot": "cd ./client && node webpack.hot.js", + "hot": "cd ./client && gulp hot && node webpack.hot.js", "test": "cd ./client && node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls" }, From 870cb337c50374f56a66846664c3962f3b7c415c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:16:50 -0700 Subject: [PATCH 024/452] Fixed html page to render react app --- client/html/index.tpl.html | 6 +++++- client/index.html | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/client/html/index.tpl.html b/client/html/index.tpl.html index 5d99eec..cb66338 100644 --- a/client/html/index.tpl.html +++ b/client/html/index.tpl.html @@ -6,11 +6,15 @@ React Client Starter + @@include('./partials/_header.html') +
@@include('./partials/_google_analytics.html') - + \ No newline at end of file diff --git a/client/index.html b/client/index.html index 50f1386..f7aa02d 100644 --- a/client/index.html +++ b/client/index.html @@ -6,9 +6,13 @@ React Client Starter + +
- + \ No newline at end of file From 2068377b7b0143774621bc6f913b116011f3d2d8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:19:37 -0700 Subject: [PATCH 025/452] Output dev and prod to different directories --- client/config/settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 070c158..e55dc3d 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -6,8 +6,8 @@ var clientAppPath = path.join(__dirname, '../'); var devRelativeOutput = '/'; var prodRelativeOutput = '/'; -var devOutput = path.join(__dirname, '../../app', devRelativeOutput); -var prodOutput = path.join(__dirname, '../../build', prodRelativeOutput); +var devOutput = path.join(__dirname, '../../build/dev', devRelativeOutput); +var prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); // There is a warning if the .env file is missing // This is fine in a production setting, where settings From 98dca644afbe96f0dc71ab83f456a1ac25825a6b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 17:22:45 -0700 Subject: [PATCH 026/452] Updated example with new prod output path. --- s3_website.yml.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3_website.yml.example b/s3_website.yml.example index 32f2919..adb330f 100644 --- a/s3_website.yml.example +++ b/s3_website.yml.example @@ -5,7 +5,7 @@ s3_bucket: # Below are examples of all the available configurations. # See README for more detailed info on each of them. -site: build +site: build/prod # max_age: # "assets/*": 6000 From 8cf729d5b6147a2b7e05a9f1e458e2128a366f7a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 20:19:18 -0700 Subject: [PATCH 027/452] Fixed build process --- client/config/settings.js | 2 + client/config/webpack.config.js | 4 +- client/gulpfile.js | 62 +++++++++++++++----------- client/html/{404.html => 404.tpl.html} | 0 client/html/index.tpl.html | 3 +- client/index.html | 28 ------------ client/package.json | 2 +- client/webpack.hot.js | 1 + package.json | 3 +- 9 files changed, 45 insertions(+), 60 deletions(-) rename client/html/{404.html => 404.tpl.html} (100%) delete mode 100644 client/index.html diff --git a/client/config/settings.js b/client/config/settings.js index e55dc3d..6b88259 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -33,6 +33,8 @@ module.exports = { hotPort: hotPort, + buildSuffix: '_web_pack_bundle.js', + entries: { app: clientAppPath + 'js/app.jsx' }, diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 0bfc68f..b02a406 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -48,8 +48,8 @@ module.exports = function(release){ entry: entries, output: { path: release ? settings.prodOutput : settings.devOutput, - filename: release ? '[name]-[chunkhash]_web_pack_bundle.js' : '[name]_web_pack_bundle.js', - chunkFilename: release ? '[id]-[chunkhash]_web_pack_bundle.js' : "[id].js", + filename: release ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, + chunkFilename: release ? '[id]-[chunkhash]' + settings.buildSuffix : "[id].js", publicPath: release ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, sourceMapFilename: "debugging/[file].map", pathinfo: !release // http://webpack.github.io/docs/configuration.html#output-pathinfo diff --git a/client/gulpfile.js b/client/gulpfile.js index 11cabfa..da17ba3 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -1,10 +1,10 @@ 'use strict'; var gulp = require('gulp'); -var gulpFilter = require('gulp-filter'); var gulpIgnore = require('gulp-ignore'); -var htmlReplace = require('gulp-html-replace'); var $ = require('gulp-load-plugins')(); +var util = require('util'); +var through2 = require('through2'); var es = require('event-stream'); var runSequence = require('run-sequence'); var webpack = require('webpack'); @@ -17,7 +17,21 @@ var argv = require('minimist')(process.argv.slice(2)); var release = argv.release; var outputPath = release ? settings.prodOutput : settings.devOutput; var webpackConfig = require('./config/webpack.config.js')(release); - +var webpackStats; + + +// A bit hackish. This function can't be called until after the javascript task has been run +// because webpackStats is undefined until webpack has run. +function getHashed(entryPoint){ + var jsFile = webpackStats.assetsByChunkName[entryPoint]; + // ignore source maps ie 'file.js' will have a source map of 'file.js.map' + if (util.isArray(jsFile)) { + jsFile = jsFile.filter(function (filename) { + return path.extname(filename).toLowerCase() === '.js' + }).shift(); + } + return jsFile; +} // Clean up // ----------------------------------------------------------------------------- @@ -58,14 +72,14 @@ gulp.task('fonts', function(){ // Copy html files // ----------------------------------------------------------------------------- -gulp.task('html', function(){ +gulp.task('html', ['javascript'], function(){ + + var tplFilter = $.filter('**/*.tpl.html', {restore: true}); + var htmlFilter = $.filter('**/*.html', {restore: true}); - var tplFilter = gulpFilter('**/*.tpl.html', {restore: true}); - var htmlFilter = gulpFilter('**/*.html', {restore: true}); - return gulp.src('./html/**/*') - .pipe(gulpIgnore.exclude("partials/**")) - .pipe(gulpIgnore.exclude("partials")) + .pipe($.ignore.exclude("partials/**")) + .pipe($.ignore.exclude("partials")) .pipe(tplFilter) .pipe(fileinclude()) // Compile html (tpl) templates .pipe(rename({ @@ -76,7 +90,15 @@ gulp.task('html', function(){ })) .pipe(tplFilter.restore) .pipe(htmlFilter) - .pipe(htmlReplace({js: './app_web_pack_bundle.js'})) + .pipe(through2.obj(function (html, enc, cb) { // replace entry points with names generated by webpack + var result = String(html.contents); + for(var entry in webpackConfig.entry){ + result = result.replace(entry + settings.buildSuffix, getHashed(entry)); + } + html.contents = new Buffer(result); + this.push(html); + cb(); + })) .pipe(!release ? $.util.noop() : $.htmlmin({ removeComments: true, collapseWhitespace: true, @@ -86,6 +108,7 @@ gulp.task('html', function(){ .pipe(gulp.dest(outputPath)); }); + // Create JavaScript bundle // ----------------------------------------------------------------------------- gulp.task('javascript', function(cb){ @@ -93,11 +116,12 @@ gulp.task('javascript', function(cb){ var bundler = webpack(webpackConfig); function bundle(err, stats){ + webpackStats = stats.toJson(); if (err){ throw new $.util.PluginError('webpack', err); } - $.util.log('[webpack]', stats.toString({colors: true})); - return cb(); + //$.util.log('[webpack]', stats.toString({colors: true})); + cb(); } bundler.run(bundle); }); @@ -109,20 +133,6 @@ gulp.task('build', ['clean'], function(cb){ runSequence(['vendor', 'fonts', 'images', 'javascript', 'html'], cb); }); -// Compile index.tpl.html for webpack to use -// ----------------------------------------------------------------------------- -gulp.task('hot', function(cb){ - return gulp.src('./html/index.tpl.html') - .pipe(fileinclude()) // Compile html (tpl) templates - .pipe(rename({ - extname: "" - })) - .pipe(rename({ - extname: ".html" - })) - .pipe(htmlReplace({js: './app_web_pack_bundle.js'})) - .pipe(gulp.dest('./')); -}); // The default task gulp.task('default', ['build']); diff --git a/client/html/404.html b/client/html/404.tpl.html similarity index 100% rename from client/html/404.html rename to client/html/404.tpl.html diff --git a/client/html/index.tpl.html b/client/html/index.tpl.html index cb66338..f96ccc8 100644 --- a/client/html/index.tpl.html +++ b/client/html/index.tpl.html @@ -13,8 +13,7 @@ @@include('./partials/_header.html')
- - + @@include('./partials/_google_analytics.html') \ No newline at end of file diff --git a/client/index.html b/client/index.html deleted file mode 100644 index f7aa02d..0000000 --- a/client/index.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - React Client Starter - - - - - - -
- - - - - - \ No newline at end of file diff --git a/client/package.json b/client/package.json index 900760a..34db026 100644 --- a/client/package.json +++ b/client/package.json @@ -43,7 +43,6 @@ "gulp": "^3.9.0", "gulp-file-include": "^0.13.7", "gulp-filter": "^3.0.1", - "gulp-html-replace": "^1.5.4", "gulp-htmlmin": "^1.2.0", "gulp-ignore": "^2.0.1", "gulp-load-plugins": "^1.0.0", @@ -81,6 +80,7 @@ "run-sequence": "^1.1.4", "sass-loader": "^3.1.1", "style-loader": "^0.13.0", + "through2": "^2.0.0", "url-loader": "^0.5.6", "webpack": "^1.12.2", "webpack-compile-templates": "^0.1.4", diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 4cd384d..e73c64c 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -5,6 +5,7 @@ var settings = require('./config/settings.js'); var webpackConfig = require('./config/webpack.config.js')(release); new webpackDevServer(webpack(webpackConfig), { + contentBase: settings.devOutput, publicPath: webpackConfig.output.publicPath, watch: true, hot: true, diff --git a/package.json b/package.json index 516c122..3b2b653 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "scripts": { "postinstall": "cd ./client && npm install", "build": "cd ./client && gulp build", - "hot": "cd ./client && gulp hot && node webpack.hot.js", + "release": "cd ./client && gulp build --release", + "hot": "cd ./client && gulp build && node webpack.hot.js", "test": "cd ./client && node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls" }, From 163dd7c8985bb965a4e348daa5ac1cce8e80ec43 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 Nov 2015 21:06:20 -0700 Subject: [PATCH 028/452] Changed release to push to amazon. Updated docs --- README.md | 11 +++++++---- package.json | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5a15641..fee6200 100644 --- a/README.md +++ b/README.md @@ -79,14 +79,17 @@ Inside the client directory run: `s3_website cfg apply` - Build: +#Setup Deploy: +----------------------- + + Build a release without deploying: - `gulp build --release` + `npm run build` - Deploy: + Build a release and deploy: - `s3_website push` + `npm run release` License and attribution diff --git a/package.json b/package.json index 3b2b653..549564b 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ }, "scripts": { "postinstall": "cd ./client && npm install", - "build": "cd ./client && gulp build", - "release": "cd ./client && gulp build --release", + "build": "cd ./client && gulp build --release", + "release": "cd ./client && gulp build --release && cd .. && s3_website push", "hot": "cd ./client && gulp build && node webpack.hot.js", "test": "cd ./client && node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls" From ab34f5647f7138d8922f5401b24adc405d21650c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 5 Nov 2015 20:08:09 -0700 Subject: [PATCH 029/452] Fixed readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fee6200..2313b4c 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Inside the client directory run: `s3_website cfg apply` -#Setup Deploy: +#Deploy: ----------------------- Build a release without deploying: From a45ce859a75ca3eb33399c10da1689d09cc9f016 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 10 Nov 2015 19:39:38 -0700 Subject: [PATCH 030/452] Changes .env.example to run from localhost instead of grok. --- .env.example | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 735a5c4..3cac8b6 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,11 @@ ASSETS_PORT=8080 -# Use ngrok: -ASSETS_URL=https://rcsassets.ngrok.io - # Use a local domain. Change /etc/hosts and add sites.dev and rcsassets.sites.dev. # Each entry will point to 127.0.0.1 # ASSETS_URL=http://rcsassets.sites.dev:8080 -# Or just use localhost -ASSETS_URL=http://localhost:8080 \ No newline at end of file +# Use localhost +ASSETS_URL=http://localhost:8080 + +# Use ngrok: (you will need to start ngrok) +# ASSETS_URL=https://rcsassets.ngrok.io From 2dbc3e40d7d430519b0ee4bc03caf56b4f91c804 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 10 Nov 2015 19:39:54 -0700 Subject: [PATCH 031/452] Updates readme with getting started. --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2313b4c..88869f7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,12 @@ -#Notes: +#Getting Started: ----------------------- -1. Rename .env.example to .env and change the values as appropriate -2. Start server with: + +Assuming you have git and npm installed: + +1. git clone https://github.com/atomicjolt/react_client_starter_app.git my_project_name +2. Rename .env.example to .env and change the values as desired. The default should be fine. +3. npm install +4. Start server with: `npm run hot` From 4ed4440cb68ee185977cf24ab106bcaed93c7dd7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 13 Nov 2015 12:01:30 -0700 Subject: [PATCH 032/452] Started upgrade to Babel 6 --- .babelrc | 4 ++++ client/.babelrc | 4 ++++ client/config/webpack.config.js | 18 +++++++++------- client/package.json | 38 ++++++++++++++++++--------------- 4 files changed, 39 insertions(+), 25 deletions(-) create mode 100644 .babelrc create mode 100644 client/.babelrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..b5fe4a7 --- /dev/null +++ b/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["es2015", "react", "stage-0"], + "plugins": ["transform-runtime"] +} diff --git a/client/.babelrc b/client/.babelrc new file mode 100644 index 0000000..3ca1979 --- /dev/null +++ b/client/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["es2015"], + "plugins": ["transform-runtime"] +} diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index b02a406..b6ff9db 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -13,7 +13,7 @@ module.exports = function(release){ ]; var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; - var jsLoaders = ["babel-loader?stage=0&optional=runtime"]; // include the runtime + var jsLoaders = ["babel?presets[]=es2015&presets[]=react&presets[]=stage-0&plugins[]=transform-runtime"]; var cssLoaders = ['style-loader', 'css-loader', 'autoprefixer-loader?' + autoprefix]; @@ -23,18 +23,21 @@ module.exports = function(release){ var lessLoaders = cssLoaders.slice(0); lessLoaders.push("less-loader"); - var entries; - + var originalEntries = settings.entries; + var entries = {}; + if(release){ - entries = settings.entries; + // Configure entries with hotloader + for(var name in originalEntries){ + entries[name] = ['babel-polyfill', originalEntries[name]]; + } + } else { jsLoaders.unshift("react-hot-loader"); // Configure entries with hotloader - var originalEntries = settings.entries; - entries = {}; for(var name in originalEntries){ - entries[name] = ['webpack-dev-server/client?' + settings.devAssetsUrl, 'webpack/hot/only-dev-server', originalEntries[name]]; + entries[name] = ['webpack-dev-server/client?' + settings.devAssetsUrl, 'webpack/hot/only-dev-server', 'babel-polyfill', originalEntries[name]]; } } @@ -87,7 +90,6 @@ module.exports = function(release){ ], module: { loaders: [ - { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, { test: /\.scss$/, loader: scssLoaders.join('!') }, { test: /\.css$/ , loader: cssLoaders.join('!') }, diff --git a/client/package.json b/client/package.json index 34db026..4e84261 100644 --- a/client/package.json +++ b/client/package.json @@ -16,36 +16,40 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { - "babel": "^5.8.29", - "babel-runtime": "^5.8.29", + "babel-polyfill": "^6.1.19", + "babel-runtime": "^6.1.18", "flux": "^2.1.1", "history": "^1.13.0", "lodash": "^3.10.1", "null-loader": "^0.1.1", - "react": "^0.14.1", - "react-dom": "^0.14.1", + "react": "^0.14.2", + "react-dom": "^0.14.2", "react-proxy-loader": "^0.3.4", - "react-router": "^1.0.0-rc3", + "react-router": "^1.0.0", "react-tap-event-plugin": "^0.2.1", "superagent": "^1.4.0", "uuid": "^2.0.1" }, "devDependencies": { - "babel-core": "^5.8.29", - "babel-loader": "^5.3.2", + "babel-core": "^6.1.19", + "babel-loader": "^6.1.0", + "babel-plugin-transform-runtime": "^6.1.18", + "babel-preset-es2015": "^6.1.18", + "babel-preset-react": "^6.1.18", + "babel-preset-stage-0": "^6.1.18", "chunk-manifest-webpack-plugin": "0.0.1", "coveralls": "^2.11.4", - "css-loader": "^0.21.0", + "css-loader": "^0.22.0", "dotenv": "^1.2.0", - "ecstatic": "^1.1.3", + "ecstatic": "^1.2.0", "event-stream": "^3.3.2", - "extract-text-webpack-plugin": "^0.8.2", + "extract-text-webpack-plugin": "^0.9.1", "gulp": "^3.9.0", "gulp-file-include": "^0.13.7", "gulp-filter": "^3.0.1", "gulp-htmlmin": "^1.2.0", "gulp-ignore": "^2.0.1", - "gulp-load-plugins": "^1.0.0", + "gulp-load-plugins": "^1.1.0", "gulp-rename": "^1.2.2", "gulp-util": "^3.0.7", "html-minifier": "^1.0.0", @@ -53,14 +57,14 @@ "istanbul": "^0.4.0", "istanbul-instrumenter-loader": "^0.1.3", "jasmine-core": "^2.3.4", - "jshint": "^2.8.0", + "jshint": "^2.9.1-rc1", "jshint-loader": "^0.8.3", "jshint-stylish": "^2.0.1", - "karma": "^0.13.14", + "karma": "^0.13.15", "karma-chrome-launcher": "^0.2.1", "karma-cli": "0.1.1", "karma-coverage": "^0.5.3", - "karma-firefox-launcher": "^0.1.6", + "karma-firefox-launcher": "^0.1.7", "karma-jasmine": "^0.3.6", "karma-jasmine-ajax": "^0.1.13", "karma-phantomjs-launcher": "^0.2.1", @@ -69,11 +73,11 @@ "karma-webpack": "^1.7.0", "less-loader": "^2.2.1", "minimist": "^1.2.0", - "node-sass": "3.4.1", + "node-sass": "3.4.2", "npm-shrinkwrap": "^5.4.1", "phantomjs": "^1.9.18", "protractor": "^2.5.1", - "psi": "^1.0.6", + "psi": "^2.0.0", "react-hot-loader": "^1.3.0", "react-tools": "^0.13.3", "rimraf": "^2.4.3", @@ -82,7 +86,7 @@ "style-loader": "^0.13.0", "through2": "^2.0.0", "url-loader": "^0.5.6", - "webpack": "^1.12.2", + "webpack": "^1.12.4", "webpack-compile-templates": "^0.1.4", "webpack-dev-server": "^1.12.1" } From 24f314f5d3ce92dc67c80a57b657130f0824e26a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 5 Dec 2015 09:54:05 -0700 Subject: [PATCH 033/452] updates to node 5.1.1 --- .nvmrc | 2 +- client/.nvmrc | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.nvmrc b/.nvmrc index e96a871..3bff059 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -0.12.2 \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/client/.nvmrc b/client/.nvmrc index e96a871..3bff059 100644 --- a/client/.nvmrc +++ b/client/.nvmrc @@ -1 +1 @@ -0.12.2 \ No newline at end of file +5.1.1 \ No newline at end of file diff --git a/package.json b/package.json index 549564b..1ac6e04 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Client only React project.", "engines": { - "node": "4.2.1" + "node": "5.1.1" }, "scripts": { "postinstall": "cd ./client && npm install", From 2da2acc05da6f6c257d116ed7406c14240ab9bf0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 13:27:01 -0700 Subject: [PATCH 034/452] Changes to redux --- client/config/webpack.config.js | 2 +- client/js/actions/api.js | 272 ------------------ client/js/actions/settings.js | 20 -- client/js/actions/settings_actions.js | 10 + client/js/app.jsx | 41 ++- client/js/components/base_component.jsx | 44 --- client/js/components/containers/index.jsx | 23 ++ client/js/components/containers/index.spec.js | 22 ++ client/js/components/defines.js | 11 - client/js/components/index.jsx | 22 -- client/js/components/index.spec.js | 23 -- client/js/components/main/home.jsx | 9 - client/js/components/main/home.spec.js | 15 - client/js/components/mixins/store_keeper.js | 30 -- client/js/components/not_found.jsx | 9 - client/js/components/not_found.spec.js | 22 -- client/js/components/views/home.jsx | 16 ++ client/js/constants.js | 14 - client/js/constants/action_types.js | 3 + client/js/constants/network.js | 14 + client/js/dev/dev_tools.jsx | 12 + client/js/dispatcher.js | 5 - client/js/history.js | 5 +- client/js/libs/api.js | 193 +++++++++++++ client/js/libs/api.spec.js | 21 ++ client/js/{utils => libs}/query_string.js | 0 client/js/{utils => libs}/utils.js | 0 client/js/middleware/api.js | 28 ++ client/js/middleware/api.spec.js | 47 +++ client/js/reducers/index.js | 10 + client/js/reducers/settings.js | 8 + client/js/routes.jsx | 20 +- client/js/store/configure_store.js | 40 +++ client/js/store/configure_store.spec.js | 18 ++ client/js/stores/settings.js | 78 ----- client/js/stores/settings.spec.js | 45 --- client/js/stores/store_common.js | 24 -- client/karma.conf.js | 17 +- client/package.json | 10 +- client/specs_support/helper.js | 61 ++++ client/specs_support/spec_helper.js | 59 +--- client/specs_support/stub.jsx | 10 + 42 files changed, 604 insertions(+), 729 deletions(-) delete mode 100644 client/js/actions/api.js delete mode 100644 client/js/actions/settings.js create mode 100644 client/js/actions/settings_actions.js delete mode 100644 client/js/components/base_component.jsx create mode 100644 client/js/components/containers/index.jsx create mode 100644 client/js/components/containers/index.spec.js delete mode 100644 client/js/components/defines.js delete mode 100644 client/js/components/index.jsx delete mode 100644 client/js/components/index.spec.js delete mode 100644 client/js/components/main/home.jsx delete mode 100644 client/js/components/main/home.spec.js delete mode 100644 client/js/components/mixins/store_keeper.js delete mode 100644 client/js/components/not_found.jsx delete mode 100644 client/js/components/not_found.spec.js create mode 100644 client/js/components/views/home.jsx delete mode 100644 client/js/constants.js create mode 100644 client/js/constants/action_types.js create mode 100644 client/js/constants/network.js create mode 100644 client/js/dev/dev_tools.jsx delete mode 100644 client/js/dispatcher.js create mode 100644 client/js/libs/api.js create mode 100644 client/js/libs/api.spec.js rename client/js/{utils => libs}/query_string.js (100%) rename client/js/{utils => libs}/utils.js (100%) create mode 100644 client/js/middleware/api.js create mode 100644 client/js/middleware/api.spec.js create mode 100644 client/js/reducers/index.js create mode 100644 client/js/reducers/settings.js create mode 100644 client/js/store/configure_store.js create mode 100644 client/js/store/configure_store.spec.js delete mode 100644 client/js/stores/settings.js delete mode 100644 client/js/stores/settings.spec.js delete mode 100644 client/js/stores/store_common.js create mode 100644 client/specs_support/helper.js create mode 100644 client/specs_support/stub.jsx diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index b02a406..c926eac 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -68,7 +68,7 @@ module.exports = function(release){ colors: true }, plugins: release ? [ - new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"'}), + new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"', '__DEV__': false}), new webpack.optimize.DedupePlugin(), new webpack.optimize.UglifyJsPlugin(), new webpack.optimize.OccurenceOrderPlugin(), diff --git a/client/js/actions/api.js b/client/js/actions/api.js deleted file mode 100644 index 3015fc5..0000000 --- a/client/js/actions/api.js +++ /dev/null @@ -1,272 +0,0 @@ -"use strict"; - -import Request from "superagent"; -import Constants from "../constants"; -import Dispatcher from "../dispatcher"; -import SettingsStore from '../stores/settings'; -import _ from "lodash"; - -const TIMEOUT = 10000; -const GET = 'get'; -const POST = 'post'; -const PUT = 'put'; -const DEL = 'del'; - -var _pendingRequests = {}; -var _cache = {}; - -function abortPendingRequests(url) { - if(_pendingRequests[url]) { - _pendingRequests[url]._callback = function() {}; - _pendingRequests[url].abort(); - _pendingRequests[url] = null; - } -} - -// Get the JWT from settings -function jwt() { - return SettingsStore.current().jwt; -} - -function csrfToken() { - return SettingsStore.current().csrfToken; -} - -function makeUrl(part){ - if(part.indexOf("http") >= 0){ - return part; - } else { - var slash = _.last(SettingsStore.current().apiUrl.split("")) == "/" ? "" :"/"; - if(part[0] == "/"){ - part = part.slice(1); - } - return SettingsStore.current().apiUrl + slash + part; - } -} - -// GET request with a JWT token and CSRF token -function get(url) { - return Request - .get(url) - .timeout(TIMEOUT) - .set('Accept', 'application/json') - .set('Authorization', 'Bearer ' + jwt()) - .set('X-CSRF-Token', csrfToken()); -} - -// POST request with a JWT token and CSRF token -function post(url, body) { - return Request - .post(url) - .send(body) - .set('Accept', 'application/json') - .timeout(TIMEOUT) - .set('Authorization', 'Bearer ' + jwt()) - .set('X-CSRF-Token', csrfToken()); -} - -// PUT request with a JWT token and CSRF token -function put(url, body) { - return Request - .put(url) - .send(body) - .set('Accept', 'application/json') - .timeout(TIMEOUT) - .set('Authorization', 'Bearer ' + jwt()) - .set('X-CSRF-Token', csrfToken()); -} - -// DELETER request with a JWT token and CSRF token -function del(url) { - return Request - .del(url) - .set('Accept', 'application/json') - .timeout(TIMEOUT) - .set('Authorization', 'Bearer ' + jwt()) - .set('X-CSRF-Token', csrfToken()); -} - -function dispatch(key, response) { - Dispatcher.dispatch({ - action: key, - data: response - }); - return true; -} - -// Dispatch a response based on the server response -function dispatchResponse(key) { - return (err, response) => { - if(err && err.timeout === TIMEOUT) { - return dispatch(Constants.TIMEOUT, response); - } else if(response.status === 401) { - return dispatch(Constants.NOT_AUTHORIZED, response); - } else if(response.status === 400) { - return dispatch(Constants.ERROR, response); - } else if(response.status === 302) { - window.location = response.body.url; - } else if(!response.ok) { - return dispatch(Constants.ERROR, response); - } else if(key) { - return dispatch(key, response); - } - return false; - }; -} - -function doRequest(key, url, requestMethod, requestType){ - - var requestContainer = buildRequest(url, requestMethod, requestType); - if(requestContainer.promise){ - return requestContainer.promise; - } - - var promise = new Promise((resolve, reject) => { - requestContainer.request.end((error, res) => { - disposeRequest(url); - var handled = dispatchResponse(key)(error, res); - if(error && !handled){ - reject(error); - } else { - resolve(res); - } - }); - }); - - requestContainer.promise = promise; - return promise; -} - -function buildRequest(url, requestMethod, requestType){ - //abortPendingRequests(url); - if (requestType === POST) { - return { - request: requestMethod(makeUrl(url)) - }; - } else if (!_pendingRequests[url]) { - _pendingRequests[url] = { - request: requestMethod(makeUrl(url)) - }; - } - return _pendingRequests[url]; -} - -function disposeRequest(url){ - delete _pendingRequests[url]; -} - -function promisify(request) { - return new Promise((resolve, reject) => { - request.end((error, res) => { - if (error) { - reject(error); - } else { - resolve(res); - } - }); - }); -} - -function *doCacheRequest(url, key, requestMethod, requestType){ - - var promise; - var fullUrl = makeUrl(url); - - if (_cache[fullUrl]) { - setTimeout(() => { - dispatchResponse(key)(null, _cache[fullUrl]); - }, 1); - - promise = new Promise((resolve, reject) => { - resolve(_cache[fullUrl]); - }); - - yield promise; - }; - - var requestContainer = buildRequest(url, requestMethod, requestType); - if(requestContainer.promise){ - yield requestContainer.promise; - } else { - promise = promisify(requestContainer.request); - requestContainer.promise = promise; - promise.then((result) => { - disposeRequest(url); - dispatchResponse(key)(null, result); - _cache[fullUrl] = result; - _cache[fullUrl].isCached = true; - return result; - }, (err) => { - dispatchResponse(key)(err, err.response); - }); - yield promise; - } - -} - -var API = { - - get(key, url){ - return doRequest(key, url, (fullUrl) => { - return get(fullUrl); - }, GET); - }, - - post(key, url, body){ - return doRequest(key, url, (fullUrl) => { - return post(fullUrl, body); - }, POST); - }, - - put(key, url, body){ - return doRequest(key, url, (fullUrl) => { - return put(fullUrl, body); - }, PUT); - }, - - del(key, url){ - return doRequest(key, url, (fullUrl) => { - return del(fullUrl); - }, DEL); - }, - - async cacheGet(url, params, key, refresh){ - url = `${url}${API.queryStringFrom(params)}`; - var request = doCacheRequest(url, key, (fullUrl) => { - return get(fullUrl); - }, GET); - if (key) { - // We have a key. Invoke the generate to get data and dispatch. - var response = request.next(); - while (refresh && !response.done){ - response = request.next(); - } - } else { - // Return the generator and let the calling code invoke it. - return request; - } - }, - - queryStringFrom(params){ - var query = _.chain(params) - .map((val, key) => { - if(val){ - return `${key}=${val}`; - } else { - return ""; - } - }) - .compact() - .value(); - - if(query.length > 0){ - return `?${query.join("&")}`; - } else { - return ""; - } - - } - -}; - -export default API; diff --git a/client/js/actions/settings.js b/client/js/actions/settings.js deleted file mode 100644 index 87ae872..0000000 --- a/client/js/actions/settings.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; - -import Constants from "../constants"; -import Dispatcher from "../dispatcher"; -import Api from "./api"; - -export default { - - load(defaultSettings){ - Dispatcher.dispatch({ action: Constants.SETTINGS_LOAD, data: defaultSettings }); - if(defaultSettings.userId){ - // Add timeout to refresh jwt token - var refresh = 1000 * 60 * 20; // every 20 minutes - setInterval(function(){ - Api.get(Constants.REFRESH_JWT, `api/sessions/${defaultSettings.userId}`); - }, refresh); - } - } - -}; \ No newline at end of file diff --git a/client/js/actions/settings_actions.js b/client/js/actions/settings_actions.js new file mode 100644 index 0000000..6297da6 --- /dev/null +++ b/client/js/actions/settings_actions.js @@ -0,0 +1,10 @@ +import constants from '../constants/action_types'; + +export default { + loadSettings: function (settings){ + return { + type: constants.LOAD_SETTINGS, + settings + }; + } +}; diff --git a/client/js/app.jsx b/client/js/app.jsx index 53ba1da..ea80671 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,12 +1,12 @@ "use strict"; - -import React from 'react'; -import ReactDOM from 'react-dom'; -import Router from 'react-router'; -import Routes from './routes'; -import SettingsAction from './actions/settings'; -import history from './history'; - +import 'babel-core/polyfill'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import routes from './routes'; +import DevTools from './dev/dev_tools'; +import configureStore from './store/configure_store'; +import Immutable from 'immutable'; //Needed for onTouchTap //Can go away when react 1.0 release //Check this repo: @@ -14,7 +14,26 @@ import history from './history'; import injectTapEventPlugin from "react-tap-event-plugin"; injectTapEventPlugin(); -// Initialize store singletons -SettingsAction.load(window.DEFAULT_SETTINGS); +require("../../styles/styles.less"); + +class Root extends React.Component { + render(){ + const devTools = __DEV__ ? : null; + const { store } = this.props; + return ( + +
+ {routes} + {devTools} +
+
+ ); + } +} + +const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS)}); -ReactDOM.render(({Routes}), document.getElementById("main")); \ No newline at end of file +ReactDOM.render( + , + document.getElementById("main-app") +); \ No newline at end of file diff --git a/client/js/components/base_component.jsx b/client/js/components/base_component.jsx deleted file mode 100644 index 10ab31d..0000000 --- a/client/js/components/base_component.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from "react"; - -// Note: If you override componentDidMount or componentWillUnmount you will need to -// call super.componentDidMount() or super.componentWillUnmount() or call -// watchStores() and unWatchStores() directly. -export default class BaseComponent extends React.Component { - - constructor(props, context) { - super(props, context); - this._bind("storeChanged"); - } - - _bind(...methods) { - methods.forEach( (method) => this[method] = this[method].bind(this) ); - } - - // Method to update state based upon store changes - storeChanged(){ - this.setState(this.getState(this.props, this.context)); - } - - componentDidMount(){ - this.watchStores(); - } - - componentWillUnmount(){ - this.unWatchStores(); - } - - // Listen for changes in the stores - watchStores(){ - _.each(this.stores, function(store){ - store.addChangeListener(this.storeChanged); - }.bind(this)); - } - - // Remove change listers from stores - unWatchStores(){ - _.each(this.stores, function(store){ - store.removeChangeListener(this.storeChanged); - }.bind(this)); - } - -} \ No newline at end of file diff --git a/client/js/components/containers/index.jsx b/client/js/components/containers/index.jsx new file mode 100644 index 0000000..55b9ea3 --- /dev/null +++ b/client/js/components/containers/index.jsx @@ -0,0 +1,23 @@ +"use strict"; + +import React from 'react'; +import { Component } from 'react'; +import { connect } from 'react-redux'; + +@connect((state) => (state)) +class Index extends Component { + + constructor(){ + super(); + this.state = {}; + } + + render(){ + return
+ {this.props.children} +
; + } + +} + +export default Index; \ No newline at end of file diff --git a/client/js/components/containers/index.spec.js b/client/js/components/containers/index.spec.js new file mode 100644 index 0000000..afaf74c --- /dev/null +++ b/client/js/components/containers/index.spec.js @@ -0,0 +1,22 @@ +"use strict"; + +import React from 'react'; +import ReactDOM from 'react-dom'; +import TestUtils from 'react/lib/ReactTestUtils'; +import { Provider } from 'react-redux' +import Helper from '../../../specs_support/helper'; +import Index from './index'; + +describe('index', function() { + var result; + var props; + + beforeEach(()=>{ + props = {}; + result = TestUtils.renderIntoDocument(); + }); + + it('renders the index', function() { + expect(ReactDOM.findDOMNode(result)).toBeDefined(); + }); +}); \ No newline at end of file diff --git a/client/js/components/defines.js b/client/js/components/defines.js deleted file mode 100644 index 5a7fb34..0000000 --- a/client/js/components/defines.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - colors: { - grey : "#616161", - darkGrey : "#444444", - lightGrey : "#eeeeee", - snow : "#fafafa", - teal : "#009698", - white : "#ffffff", - black : "#000000" - } -}; \ No newline at end of file diff --git a/client/js/components/index.jsx b/client/js/components/index.jsx deleted file mode 100644 index 87c4e6c..0000000 --- a/client/js/components/index.jsx +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -import React from "react"; - -export default class Index extends React.Component { - - render(){ - - return ( -
-

React Starter App

- {this.props.children} -
-

- Built by Atomic Jolt. -

-
-
- ); - } - -} diff --git a/client/js/components/index.spec.js b/client/js/components/index.spec.js deleted file mode 100644 index 71de3b1..0000000 --- a/client/js/components/index.spec.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -import React from 'react'; -import ReactDOM from 'react-dom'; -import TestUtils from 'react/lib/ReactTestUtils'; -import Index from './index'; - -describe('index', function() { - var result; - - beforeEach(()=>{ - result = TestUtils.renderIntoDocument(); - }); - - it('renders the index', function() { - expect(ReactDOM.findDOMNode(result)).toBeDefined(); - }); - - afterEach(()=>{ - React.unmountComponentAtNode(ReactDOM.findDOMNode(result).parentNode) - }); -}); - diff --git a/client/js/components/main/home.jsx b/client/js/components/main/home.jsx deleted file mode 100644 index ef35281..0000000 --- a/client/js/components/main/home.jsx +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -import React from 'react'; - -export default class Home extends React.Component{ - render(){ - return

Home

; - } -}; \ No newline at end of file diff --git a/client/js/components/main/home.spec.js b/client/js/components/main/home.spec.js deleted file mode 100644 index 1a752d7..0000000 --- a/client/js/components/main/home.spec.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -import React from 'react'; -import ReactDOM from 'react-dom'; -import TestUtils from 'react/lib/ReactTestUtils'; -import Home from './home'; - -describe('Home', ()=> { - it('renders the home heading', ()=> { - - var result = TestUtils.renderIntoDocument(); - expect(ReactDOM.findDOMNode(result).textContent).toEqual('Home'); - - }); -}); \ No newline at end of file diff --git a/client/js/components/mixins/store_keeper.js b/client/js/components/mixins/store_keeper.js deleted file mode 100644 index 8454921..0000000 --- a/client/js/components/mixins/store_keeper.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -import _ from "lodash"; - -export default { - - getInitialState(){ - return this.constructor.getState(); - }, - - // Method to update state based upon store changes - storeChanged(){ - this.setState(this.constructor.getState()); - }, - - // Listen for changes in the stores - componentDidMount(){ - _.each(this.constructor.stores, function(store){ - store.addChangeListener(this.storeChanged); - }.bind(this)); - }, - - // Remove change listers from stores - componentWillUnmount(){ - _.each(this.constructor.stores, function(store){ - store.removeChangeListener(this.storeChanged); - }.bind(this)); - } - -}; \ No newline at end of file diff --git a/client/js/components/not_found.jsx b/client/js/components/not_found.jsx deleted file mode 100644 index 9fed79a..0000000 --- a/client/js/components/not_found.jsx +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -import React from 'react'; - -export default class NotFound extends React.Component{ - render(){ - return

Not Found

; - } -}; diff --git a/client/js/components/not_found.spec.js b/client/js/components/not_found.spec.js deleted file mode 100644 index e971fa4..0000000 --- a/client/js/components/not_found.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -import React from 'react'; -import ReactDOM from 'react-dom'; -import TestUtils from 'react/lib/ReactTestUtils'; -import NotFound from './not_found'; - -describe('not_found', function() { - var result; - - beforeEach(()=>{ - result = TestUtils.renderIntoDocument(); - }); - - it('renders a not found message', function() { - expect(ReactDOM.findDOMNode(result).textContent).toEqual('Not Found'); - }); - - afterEach(()=>{ - React.unmountComponentAtNode(ReactDOM.findDOMNode(result).parentNode) - }); -}); \ No newline at end of file diff --git a/client/js/components/views/home.jsx b/client/js/components/views/home.jsx new file mode 100644 index 0000000..d80e866 --- /dev/null +++ b/client/js/components/views/home.jsx @@ -0,0 +1,16 @@ +"use strict"; + +import React from 'react'; +import { Component } from 'react'; + +class Home extends Component { + + render(){ + return
+ Home +
; + } + +} + +export { Home as default }; \ No newline at end of file diff --git a/client/js/constants.js b/client/js/constants.js deleted file mode 100644 index 51d5f76..0000000 --- a/client/js/constants.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; - -export default { - - // settings - REFRESH_JWT: "refresh_jwt", - SETTINGS_LOAD: "settings_load", - - // Errors - TIMEOUT: "timeout", - ERROR: "error", - NOT_AUTHORIZED: "not_authorized" - -}; diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js new file mode 100644 index 0000000..7026030 --- /dev/null +++ b/client/js/constants/action_types.js @@ -0,0 +1,3 @@ +export default { + LOAD_SETTINGS: 'LOAD_SETTINGS' +}; \ No newline at end of file diff --git a/client/js/constants/network.js b/client/js/constants/network.js new file mode 100644 index 0000000..1be1f98 --- /dev/null +++ b/client/js/constants/network.js @@ -0,0 +1,14 @@ +export default { + + GET : 'get', + POST : 'post', + PUT : 'put', + DEL : 'del', + + TIMEOUT : 20000, + + TIMEOUT : 'NETWORK_TIMEOUT', + NOT_AUTHORIZED : 'NETWORK_NOT_AUTHORIZED', + ERROR : 'NETWORK_ERROR' + +}; \ No newline at end of file diff --git a/client/js/dev/dev_tools.jsx b/client/js/dev/dev_tools.jsx new file mode 100644 index 0000000..04a2157 --- /dev/null +++ b/client/js/dev/dev_tools.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { createDevTools } from 'redux-devtools'; +import LogMonitor from 'redux-devtools-log-monitor'; +import DockMonitor from 'redux-devtools-dock-monitor'; + +export default createDevTools( + + + +); diff --git a/client/js/dispatcher.js b/client/js/dispatcher.js deleted file mode 100644 index 0332015..0000000 --- a/client/js/dispatcher.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -import { Dispatcher } from 'flux'; - -export default new Dispatcher(); diff --git a/client/js/history.js b/client/js/history.js index ac89d01..2ef7251 100644 --- a/client/js/history.js +++ b/client/js/history.js @@ -1,5 +1,8 @@ // import createBrowserHistory from 'history/lib/createBrowserHistory'; // export default createBrowserHistory(); + import { createHashHistory } from 'history'; -export default new createHashHistory(); \ No newline at end of file +export default new createHashHistory({ + //queryKey: false // Opt-out of persistent state, not recommended. +}); \ No newline at end of file diff --git a/client/js/libs/api.js b/client/js/libs/api.js new file mode 100644 index 0000000..4302fe9 --- /dev/null +++ b/client/js/libs/api.js @@ -0,0 +1,193 @@ +"use strict"; + +import Request from "superagent"; +import Network from "../constants/network"; +import _ from "lodash"; + +var _pendingRequests = {}; +var _cache = {}; + +export default class Api{ + + static get(url, jwt, apiUrl, csrf, params){ + return Api.execRequest(Network.GET, url, jwt, apiUrl, csrf, params, null); + } + + static post(url, jwt, apiUrl, csrf, params, body){ + return Api.execRequest(Network.POST, url, jwt, apiUrl, csrf, params, body); + } + + static put(url, jwt, apiUrl, csrf, params, body){ + return Api.execRequest(Network.PUT, url, jwt, apiUrl, csrf, params, body); + } + + static del(url, jwt, apiUrl, csrf, params){ + return Api.execRequest(Network.DEL, url, jwt, apiUrl, csrf, params, null); + } + + static execRequest(method, url, jwt, apiUrl, csrf, params, body){ + return Api._doRequest(Api._makeUrl(`${url}${Api.queryStringFrom(params)}`, apiUrl), (fullUrl) => { + var request; + + switch (method){ + case Network.GET: + request = Request.get(url); + break; + case Network.POST: + request = Request.post(url).send(body); + break; + case Network.PUT: + request = Request.put(url).send(body); + break; + case Network.DEL: + request = Request.del(url); + break; + } + + request.set('Accept', 'application/json') + .timeout(Network.TIMEOUT) + .set('Authorization', 'Bearer ' + jwt) + .set('X-CSRF-Token', csrf); + return request; + }, method); + } + + static _makeUrl(part, apiUrl){ + if(part.indexOf("http") >= 0){ + return part; + } else { + var slash = _.last(apiUrl.split("")) == "/" ? "" :"/"; + if(part[0] == "/"){ + part = part.slice(1); + } + return apiUrl + slash + part; + } + } + + static _doRequest(url, requestMethod, requestType){ + + // Prevent duplicate requests + var wrapper = Api._wrapRequest(url, requestMethod, requestType); + if(wrapper.promise){ + // Existing request was found. Return promise from request + return wrapper.promise; + } + + // No request was found. Generate a promise, add it to the wrapper and return the promise. + wrapper.promise = Api._promisify(wrapper.request, url); + + // Dispose of the request when the call is complete + wrapper.promise.then((result) => { + Api._disposeRequest(url); + }); + + return wrapper.promise; + } + + static _wrapRequest(url, requestMethod, requestType){ + if (requestType === Network.POST) { + return { + request: requestMethod(url) + }; + } else if (!_pendingRequests[url]) { + _pendingRequests[url] = { + request: requestMethod(url) + }; + } + return _pendingRequests[url]; + } + + static _disposeRequest(url){ + delete _pendingRequests[url]; + } + + static _promisify(request) { + return new Promise((resolve, reject) => { + request.end((error, res) => { + if (error) { + reject(error); + } else { + resolve(res); + } + }); + }); + } + + static queryStringFrom(params){ + if(params){ + var query = _.chain(params) + .map((val, key) => { + if(val){ + return `${key}=${val}`; + } else { + return ""; + } + }) + .compact() + .value(); + + if(query.length > 0){ + return `?${query.join("&")}`; + } + } + return ""; + } + +} + + +// function *doCacheRequest(url, key, requestMethod, requestType){ + +// var promise; +// var fullUrl = Api._makeUrl(url); + +// if (_cache[fullUrl]) { +// setTimeout(() => { +// dispatchResponse(key)(null, _cache[fullUrl]); +// }, 1); + +// promise = new Promise((resolve, reject) => { +// resolve(_cache[fullUrl]); +// }); + +// yield promise; +// }; + +// var wrapper = Api._wrapRequest(url, requestMethod, requestType); +// if(wrapper.promise){ +// yield wrapper.promise; +// } else { +// promise = Api._promisify(wrapper.request); +// wrapper.promise = promise; +// promise.then((result) => { +// Api._disposeRequest(url); +// dispatchResponse(key)(null, result); +// _cache[fullUrl] = result; +// _cache[fullUrl].isCached = true; +// return result; +// }, (err) => { +// dispatchResponse(key)(err, err.response); +// }); +// yield promise; +// } + +// } + +// async cacheGet(url, jwt, csrf, params, key, store, refresh){ +// url = `${url}${Api.queryStringFrom(params)}`; +// var request = doCacheRequest(url, jwt, csrf, key, (fullUrl, jwt, csrt) => { +// return get(fullUrl); +// }, GET); +// if (key) { +// // We have a key. Invoke the generate to get data and dispatch. +// var response = request.next(); +// while (refresh && !response.done){ +// response = request.next(); +// } +// } else { +// // Return the generator and let the calling code invoke it. +// return request; +// } +// } + + diff --git a/client/js/libs/api.spec.js b/client/js/libs/api.spec.js new file mode 100644 index 0000000..f6bd2b1 --- /dev/null +++ b/client/js/libs/api.spec.js @@ -0,0 +1,21 @@ +import api from "./api"; +import Network from "../constants/network"; +import Helper from '../../specs_support/helper'; + +describe('api', function() { + + var jwt; + var apiUrl; + var csrf; + var params; + var body + + Helper.stubAjax(); + + it('calls Get', () => { + var url = "http://www.example.com"; + var promise = api.get(url); + + }); + +}); \ No newline at end of file diff --git a/client/js/utils/query_string.js b/client/js/libs/query_string.js similarity index 100% rename from client/js/utils/query_string.js rename to client/js/libs/query_string.js diff --git a/client/js/utils/utils.js b/client/js/libs/utils.js similarity index 100% rename from client/js/utils/utils.js rename to client/js/libs/utils.js diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js new file mode 100644 index 0000000..0563933 --- /dev/null +++ b/client/js/middleware/api.js @@ -0,0 +1,28 @@ +import api from "../libs/api"; +import Network from "../constants/network"; + +const API = store => next => action => { + var promise; + var state = store.getState(); + + // send the api request + if(action.method){ + promise = api.execRequest(action.method, action.url, state.settings.get("apiUrl"), state.settings.get("jwt"), state.settings.get("csrf"), action.params, action.body); + if(promise){ + promise.then((res, err) => { + store.dispatch({ + type: action.type + "_DONE", + res: res.body, + original: action, + err: err + }); // Dispatch the new data + }); + } + } + + // call the next middleWare + next(action); + +}; + +export { API as default }; diff --git a/client/js/middleware/api.spec.js b/client/js/middleware/api.spec.js new file mode 100644 index 0000000..ccfdb54 --- /dev/null +++ b/client/js/middleware/api.spec.js @@ -0,0 +1,47 @@ +import api from "./api"; +import Network from "../constants/network"; +import Helper from '../../specs_support/helper'; + +describe('api middleware', function() { + + Helper.stubAjax(); + + it('implements Redux middleware interface', () => { + const store = { getState: () => {} }; + const middleware = api(store); + const nextHandler = () => {}; + const actionHandler = middleware(nextHandler); + + expect(api.length).toBe(1); // api middleware takes one arg + expect(typeof middleware).toBe("function"); // api middleware must return a function to handle next + expect(middleware.length).toBe(1); // next handler returned by api middleware must take one argument + expect(typeof actionHandler).toBe("function"); // next handler must return a function to handle action + expect(actionHandler.length).toBe(1); // action handler must take one argument + }); + + it('passes action on to next middleware', () => { + const store = { getState: () => {} }; + const action = { + type: "TEST" + }; + const nextHandler = api(store); + const next = (actionPassed) => { + expect(actionPassed).toBe(action); + }; + const actionHandler = nextHandler(next); + actionHandler(action); + }); + + it('calls the api library', () => { + const action = { + type: "TEST", + method: Network.GET, + url: "http://www.example.com/api/stuff.json" + }; + const middleware = api(Helper.makeStore()); + const nextHandler = () => {}; + const actionHandler = middleware(nextHandler); + actionHandler(action); + }); + +}); \ No newline at end of file diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js new file mode 100644 index 0000000..0fe2d54 --- /dev/null +++ b/client/js/reducers/index.js @@ -0,0 +1,10 @@ +import { combineReducers } from 'redux'; +import { routerStateReducer as router } from 'redux-router'; +import settings from './settings' + +const rootReducer = combineReducers({ + router, + settings +}); + +export default rootReducer; \ No newline at end of file diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js new file mode 100644 index 0000000..9c25004 --- /dev/null +++ b/client/js/reducers/settings.js @@ -0,0 +1,8 @@ +import Immutable from 'immutable'; +import constants from '../constants/action_types'; + +const initialState = Immutable.fromJS({}); + +export default function settings(state = initialState, action) { + return state; // the settings state should never changed depending on action +} \ No newline at end of file diff --git a/client/js/routes.jsx b/client/js/routes.jsx index 2b6eea7..fd0e3e4 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -1,14 +1,16 @@ "use strict"; -import React from 'react'; +import React from 'react'; // if you use jsx, you have to have React imported +import Router from 'react-router'; import { Route, IndexRoute } from 'react-router'; -import Index from './components/index'; -import Home from './components/main/home'; -import NotFound from './components/not_found'; +import history from './history'; +import Index from './components/containers/index'; +import Home from './components/views/home'; export default ( - - - - -); \ No newline at end of file + + + + + +); diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js new file mode 100644 index 0000000..b558a57 --- /dev/null +++ b/client/js/store/configure_store.js @@ -0,0 +1,40 @@ +import { createStore, applyMiddleware, compose } from 'redux'; +import { reduxReactRouter } from 'redux-router'; +import { persistState } from 'redux-devtools'; +import thunk from 'redux-thunk'; +import rootReducer from '../reducers'; +import history from '../history'; +import routes from '../routes'; +import DevTools from '../dev/dev_tools.jsx' +import API from '../middleware/api'; + +let middleware = [ thunk, API ]; + +let enhancers = [ + applyMiddleware(...middleware), + reduxReactRouter({ routes, history }) +]; + +// In production, we want to use just the middleware. +// In development, we want to use some store enhancers from redux-devtools. +// UglifyJS will eliminate the dead code depending on the build environment. +if (__DEV__){ + enhancers = [ + ...enhancers, + DevTools.instrument(), + persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)) + ]; +} + +export default function(initialState){ + const store = compose(...enhancers)(createStore)(rootReducer, initialState); + + if (__DEV__ && module.hot) { + module.hot.accept( + '../reducers', + () => store.replaceReducer(require('../reducers')) + ); + } + + return store; +} diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js new file mode 100644 index 0000000..495cce9 --- /dev/null +++ b/client/js/store/configure_store.spec.js @@ -0,0 +1,18 @@ +import configureStore from "./configure_store"; +import Immutable from 'immutable'; + +describe('configure store', function() { + + it('setups up initial state', function() { + var initialState = Immutable.fromJS({ + jwt: "jwt_token", + csrf: "csrf_token", + apiUrl: "http://www.example.com" + }); + var settings = { + settings: initialState + } + var store = configureStore(settings); + expect(store.getState().settings.get("jwt")).toBe('jwt_token'); + }); +}); \ No newline at end of file diff --git a/client/js/stores/settings.js b/client/js/stores/settings.js deleted file mode 100644 index a197b2a..0000000 --- a/client/js/stores/settings.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; - -import Dispatcher from "../dispatcher"; -import Constants from "../constants"; -import StoreCommon from "./store_common"; -import QueryString from '../utils/query_string'; - -var _settings = {}; - -// Grab the jwt from the payload -function login(payload){ - _settings.jwt = payload.data.body.jwt_token; -} - -function loadSettings(defaultSettings){ - - defaultSettings = defaultSettings || {}; - - var bestValue = function(settings_prop, params_prop, default_prop){ - return defaultSettings[settings_prop] || QueryString.params()[params_prop] || default_prop; - }; - - _settings = { - apiUrl : bestValue('apiUrl', 'api_url', '/'), - csrfToken : defaultSettings.csrfToken || null, - jwt : defaultSettings.jwt - }; - -} - -function refreshJwt(payload){ - _settings.jwt = JSON.parse(payload.data.text).jwt; -} - -// Extend Message Store with EventEmitter to add eventing capabilities -var SettingsStore = {...StoreCommon, ...{ - - // Return current messages - current(){ - return _settings; - } - -}}; - -// Register callback with Dispatcher -Dispatcher.register(function(payload) { - - switch(payload.action){ - - case Constants.SETTINGS_LOAD: - loadSettings(payload.data); - break; - - case Constants.LOGIN: - login(payload); - break; - - case Constants.LOGOUT: - logout(payload); - break; - - case Constants.REFRESH_JWT: - refreshJwt(payload) - break; - - default: - return true; - } - - // If action was responded to, emit change event - SettingsStore.emitChange(); - - return true; - -}); - -export default SettingsStore; - diff --git a/client/js/stores/settings.spec.js b/client/js/stores/settings.spec.js deleted file mode 100644 index f4ca201..0000000 --- a/client/js/stores/settings.spec.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; - -import React from "react"; -import Router from "react-router"; -import Constants from "../constants"; -import SettingsStore from "./settings"; -import SettingsActions from "../actions/settings"; -import Dispatcher from "../dispatcher"; - -describe("SettingsStore", () => { - - describe("with initial state", () => { - - helpLoadSettings(SettingsActions); - - describe("current", () => { - it("returns current settings", (done) => { - var settings = SettingsStore.current(); - expect(settings).toEqual({...{ csrfToken: null, jwt: undefined }, ...helpDefaultSettings}); - done(); - }); - }); - - }); - - describe("jwt refresh", () => { - - helpLoadSettings(SettingsActions); - - describe("current", () => { - var jwt = "test"; - beforeEach(() => { - Dispatcher.dispatch({ action: Constants.REFRESH_JWT, data: {text: `{"jwt":"${jwt}"}`} }); - jasmine.clock().tick(); // Advance the clock to the next tick - }); - it("returns updated jwt", (done) => { - var settings = SettingsStore.current(); - expect(settings.jwt).toEqual(jwt); - done(); - }); - }); - - }); - -}); \ No newline at end of file diff --git a/client/js/stores/store_common.js b/client/js/stores/store_common.js deleted file mode 100644 index a351c00..0000000 --- a/client/js/stores/store_common.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -import EventEmitter from "events"; - -const CHANGE_EVENT = 'change'; - -export default {...EventEmitter.prototype, ...{ - - // Emit Change event - emitChange(){ - this.emit(CHANGE_EVENT); - }, - - // Add change listener - addChangeListener(callback){ - this.on(CHANGE_EVENT, callback); - }, - - // Remove change listener - removeChangeListener(callback){ - this.removeListener(CHANGE_EVENT, callback); - } - -}}; \ No newline at end of file diff --git a/client/karma.conf.js b/client/karma.conf.js index b8c293b..8d6b23f 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -1,10 +1,11 @@ // karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html +var webpack = require('webpack'); module.exports = function(config) { - + function isCoverage(argument) { return argument === '--coverage'; } - + // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' var reporters = ['spec']; @@ -27,6 +28,7 @@ module.exports = function(config) { port: 9876, files: [ + './specs_support/mocks/*.js', './specs_support/spec_helper.js', //'./js/**/*.spec.js' // Use webpack to build each test individually. If changed here, match the change in preprocessors './webpack.tests.js' // More performant but tests cannot be run individually @@ -34,8 +36,8 @@ module.exports = function(config) { // Transpile tests with the karma-webpack plugin preprocessors: { - //'./js/**/*.spec.js': ['webpack', 'sourcemap'] // Use webpack to build each test individually. If changed here, match the change in files - './webpack.tests.js': ['webpack', 'sourcemap'] // More performant but tests cannot be run individually + //'./js/**/*.spec.js': ['webpack', 'sourcemap'] // Use webpack to build each test individually. If changed here, match the change in files + './webpack.tests.js': ['webpack', 'sourcemap'], // More performant but tests cannot be run individually }, // Run the tests using any of the following browsers @@ -63,10 +65,15 @@ module.exports = function(config) { // Use istanbul-transformer post loader to generate code coverage report. webpack: { devtool: 'eval', + plugins: [ + new webpack.DefinePlugin({'process.env.NODE_ENV': '"development"', '__DEV__': true}) + ], module: { loaders: [ { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader?stage=0&optional=runtime" }, - { test: /\.jsx?$/, exclude: /node_modules/, loader: "babel-loader?stage=0&optional=runtime" } + { test: /\.jsx?$/, exclude: /node_modules/, loader: "babel-loader?stage=0&optional=runtime" }, + { test: /\.(png|woff|woff2|eot|ttf|svg)($|\?)/, loader: 'url-loader' }, + { test: /\.css$/, loader: 'css-loader'} ] }, resolve: { diff --git a/client/package.json b/client/package.json index 34db026..0fb4c64 100644 --- a/client/package.json +++ b/client/package.json @@ -20,13 +20,18 @@ "babel-runtime": "^5.8.29", "flux": "^2.1.1", "history": "^1.13.0", + "immutable": "3.7.5", "lodash": "^3.10.1", "null-loader": "^0.1.1", "react": "^0.14.1", "react-dom": "^0.14.1", "react-proxy-loader": "^0.3.4", - "react-router": "^1.0.0-rc3", + "react-redux": "4.0.0", + "react-router": "1.0.0", "react-tap-event-plugin": "^0.2.1", + "redux": "3.0.4", + "redux-router": "^1.0.0-beta5", + "redux-thunk": "^1.0.0", "superagent": "^1.4.0", "uuid": "^2.0.1" }, @@ -76,6 +81,9 @@ "psi": "^1.0.6", "react-hot-loader": "^1.3.0", "react-tools": "^0.13.3", + "redux-devtools": "3.0.0-beta-3", + "redux-devtools-dock-monitor": "^1.0.0-beta-3", + "redux-devtools-log-monitor": "^1.0.0-beta-3", "rimraf": "^2.4.3", "run-sequence": "^1.1.4", "sass-loader": "^3.1.1", diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js new file mode 100644 index 0000000..a5bf52b --- /dev/null +++ b/client/specs_support/helper.js @@ -0,0 +1,61 @@ +"use strict"; + +import _ from "lodash"; +import Immutable from 'immutable'; +import configureStore from "../js/store/configure_store"; + +export default class Helper{ + + static makeStore(settings){ + var initialSettings = _.assign({ + jwt: "jwt_token", + csrf: "csrf_token", + apiUrl: "http://www.example.com" + }, settings); + + return configureStore({ + settings: Immutable.fromJS(initialSettings) + }); + } + + static stubAjax(){ + + beforeEach(function(){ + jasmine.Ajax.install(); + + // Stub request to load problems + var accounts_payload = JSON.stringify([{ + "id":1, + "name":"Starter App", + "domain":"bfcoderServer.ngrok.io", + "code":"bfcoderServer" + }]); + + jasmine.Ajax.stubRequest( + RegExp('.*/api/accounts/') + ).andReturn({ + "status": 200, + "contentType": "json", + "statusText": "OK", + "responseText": accounts_payload + }); + }); + + afterEach(function(){ + jasmine.Ajax.uninstall(); + }); + } + + static mockClock(){ + + beforeEach(function(){ + jasmine.clock().install(); // Mock out the built in timers + }); + + afterEach(function(){ + jasmine.clock().uninstall(); + }); + + } + +} \ No newline at end of file diff --git a/client/specs_support/spec_helper.js b/client/specs_support/spec_helper.js index 270a04f..ec14f6e 100644 --- a/client/specs_support/spec_helper.js +++ b/client/specs_support/spec_helper.js @@ -20,61 +20,4 @@ if (typeof Function.prototype.bind != 'function') { bound.prototype = new nop(); return bound; }; -} - -function helpStubAjax(SettingsActions){ - - helpLoadSettings(SettingsActions); - - beforeEach(function(){ - jasmine.Ajax.install(); - - // Stub request to load problems - var accounts_payload = JSON.stringify([{ - "id":1, - "name":"Starter App", - "domain":"bfcoderServer.ngrok.io", - "code":"bfcoderServer" - }]); - - jasmine.Ajax.stubRequest( - RegExp('.*/api/accounts/') - ).andReturn({ - "status": 200, - "contentType": "json", - "statusText": "OK", - "responseText": accounts_payload - }); - }); - - afterEach(function(){ - jasmine.Ajax.uninstall(); - }); -} - -var helpDefaultSettings = { - apiUrl: "http://www.example.com/api" -}; - -function helpLoadSettings(SettingsActions){ - - helpMockClock(); - - beforeEach(function(){ - SettingsActions.load(helpDefaultSettings); - jasmine.clock().tick(); // Advance the clock to the next tick - }); - -} - -function helpMockClock(){ - - beforeEach(function(){ - jasmine.clock().install(); // Mock out the built in timers - }); - - afterEach(function(){ - jasmine.clock().uninstall(); - }); - -} +} \ No newline at end of file diff --git a/client/specs_support/stub.jsx b/client/specs_support/stub.jsx new file mode 100644 index 0000000..ea2ba9d --- /dev/null +++ b/client/specs_support/stub.jsx @@ -0,0 +1,10 @@ +"use strict"; + +import React from 'react'; + +export default class Stub extends React.Component{ + + render(){ + return
{this.props.children}
+ } +} \ No newline at end of file From 56c15c94a7284971ebb5deac852fb8d0c489e7c8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 13:37:49 -0700 Subject: [PATCH 035/452] Fixes styles --- client/js/app.jsx | 2 +- client/package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index ea80671..a5a5016 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -14,7 +14,7 @@ import Immutable from 'immutable'; import injectTapEventPlugin from "react-tap-event-plugin"; injectTapEventPlugin(); -require("../../styles/styles.less"); +require("../styles/styles.less"); class Root extends React.Component { render(){ diff --git a/client/package.json b/client/package.json index 0fb4c64..0c12750 100644 --- a/client/package.json +++ b/client/package.json @@ -36,6 +36,7 @@ "uuid": "^2.0.1" }, "devDependencies": { + "autoprefixer-loader": "^3.1.0", "babel-core": "^5.8.29", "babel-loader": "^5.3.2", "chunk-manifest-webpack-plugin": "0.0.1", From 84d36ffc5e096c68d5649c93b956f32714228a00 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 13:40:19 -0700 Subject: [PATCH 036/452] updates to node 5.2.0 --- client/.nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/.nvmrc b/client/.nvmrc index 3bff059..7cbea07 100644 --- a/client/.nvmrc +++ b/client/.nvmrc @@ -1 +1 @@ -5.1.1 \ No newline at end of file +5.2.0 \ No newline at end of file From 2bef27c509ad4685be91a71c2ee3c98496b0561a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 13:42:00 -0700 Subject: [PATCH 037/452] changes to 5.2.0 --- .nvmrc | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nvmrc b/.nvmrc index 3bff059..7cbea07 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -5.1.1 \ No newline at end of file +5.2.0 \ No newline at end of file diff --git a/package.json b/package.json index 1ac6e04..27f3d68 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Client only React project.", "engines": { - "node": "5.1.1" + "node": "5.2.0" }, "scripts": { "postinstall": "cd ./client && npm install", From 4a2189d399d2dc7e57801dca3a66a0a7e78dd815 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 14:07:34 -0700 Subject: [PATCH 038/452] Added peer dependencies --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 27f3d68..b944817 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,10 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": { + "dependencies": {}, + "devDependencies": { + "file-loader": "^0.8.5", + "less": "^2.5.3", + "node-sass": "^3.4.2" } } From f99579fcc071f282baaf4473ce3d271e40b7c73e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 14:29:19 -0700 Subject: [PATCH 039/452] Changes to main-app to match app.jsx --- client/html/index.tpl.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/html/index.tpl.html b/client/html/index.tpl.html index f96ccc8..16355ca 100644 --- a/client/html/index.tpl.html +++ b/client/html/index.tpl.html @@ -12,7 +12,7 @@ @@include('./partials/_header.html') -
+
@@include('./partials/_google_analytics.html') From f7c2f1398468a6d978dded0c347a998ffc708a5a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 14:35:04 -0700 Subject: [PATCH 040/452] Adds addition params to connect --- client/js/components/containers/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/components/containers/index.jsx b/client/js/components/containers/index.jsx index 55b9ea3..6a7777f 100644 --- a/client/js/components/containers/index.jsx +++ b/client/js/components/containers/index.jsx @@ -4,7 +4,7 @@ import React from 'react'; import { Component } from 'react'; import { connect } from 'react-redux'; -@connect((state) => (state)) +@connect((state) => (state), null, null, {withRef: true}) class Index extends Component { constructor(){ From 91954c6e990d1b1c086d2166324fc48343db0178 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 14:35:17 -0700 Subject: [PATCH 041/452] Remove libs from root package.son --- package.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/package.json b/package.json index b944817..46d76c8 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,5 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": {}, - "devDependencies": { - "file-loader": "^0.8.5", - "less": "^2.5.3", - "node-sass": "^3.4.2" - } + "devDependencies": {} } From 32cb0bb8b0acdaa2c4c909e564d2d87af961bccc Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 14:56:02 -0700 Subject: [PATCH 042/452] Updates libraries --- client/package.json | 65 ++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/client/package.json b/client/package.json index 0c12750..44e0aca 100644 --- a/client/package.json +++ b/client/package.json @@ -19,80 +19,83 @@ "babel": "^5.8.29", "babel-runtime": "^5.8.29", "flux": "^2.1.1", - "history": "^1.13.0", + "history": "^1.16.0", "immutable": "3.7.5", "lodash": "^3.10.1", "null-loader": "^0.1.1", - "react": "^0.14.1", - "react-dom": "^0.14.1", + "react": "^0.14.3", + "react": "^0.14.3", "react-proxy-loader": "^0.3.4", "react-redux": "4.0.0", - "react-router": "1.0.0", + "react-router": "1.0.2", "react-tap-event-plugin": "^0.2.1", "redux": "3.0.4", "redux-router": "^1.0.0-beta5", "redux-thunk": "^1.0.0", - "superagent": "^1.4.0", + "superagent": "^1.5.0", "uuid": "^2.0.1" }, "devDependencies": { + "file-loader": "^0.8.5", + "less": "^2.5.3", + "node-sass": "^3.4.2", "autoprefixer-loader": "^3.1.0", "babel-core": "^5.8.29", "babel-loader": "^5.3.2", "chunk-manifest-webpack-plugin": "0.0.1", - "coveralls": "^2.11.4", - "css-loader": "^0.21.0", + "coveralls": "^2.11.6", + "css-loader": "^0.23.0", "dotenv": "^1.2.0", - "ecstatic": "^1.1.3", + "ecstatic": "^1.3.1", "event-stream": "^3.3.2", - "extract-text-webpack-plugin": "^0.8.2", + "extract-text-webpack-plugin": "^0.9.1", "gulp": "^3.9.0", "gulp-file-include": "^0.13.7", "gulp-filter": "^3.0.1", - "gulp-htmlmin": "^1.2.0", + "gulp-htmlmin": "^1.3.0", "gulp-ignore": "^2.0.1", - "gulp-load-plugins": "^1.0.0", + "gulp-load-plugins": "^1.1.0", "gulp-rename": "^1.2.2", "gulp-util": "^3.0.7", "html-minifier": "^1.0.0", "imports-loader": "~0.6.5", - "istanbul": "^0.4.0", + "istanbul": "^0.4.1", "istanbul-instrumenter-loader": "^0.1.3", - "jasmine-core": "^2.3.4", - "jshint": "^2.8.0", + "jasmine-core": "^2.4.1", + "jshint": "^2.9.1-rc1", "jshint-loader": "^0.8.3", - "jshint-stylish": "^2.0.1", - "karma": "^0.13.14", - "karma-chrome-launcher": "^0.2.1", + "jshint-stylish": "^2.1.0", + "karma": "^0.13.15", + "karma-chrome-launcher": "^0.2.2", "karma-cli": "0.1.1", "karma-coverage": "^0.5.3", - "karma-firefox-launcher": "^0.1.6", + "karma-firefox-launcher": "^0.1.7", "karma-jasmine": "^0.3.6", "karma-jasmine-ajax": "^0.1.13", "karma-phantomjs-launcher": "^0.2.1", "karma-sourcemap-loader": "^0.3.6", - "karma-spec-reporter": "0.0.22", + "karma-spec-reporter": "0.0.23", "karma-webpack": "^1.7.0", - "less-loader": "^2.2.1", + "less-loader": "^2.2.2", "minimist": "^1.2.0", - "node-sass": "3.4.1", + "node-sass": "3.4.2", "npm-shrinkwrap": "^5.4.1", - "phantomjs": "^1.9.18", - "protractor": "^2.5.1", - "psi": "^1.0.6", + "phantomjs": "^1.9.19", + "protractor": "^3.0.0", + "psi": "^2.0.2", "react-hot-loader": "^1.3.0", "react-tools": "^0.13.3", - "redux-devtools": "3.0.0-beta-3", + "redux-devtools": "2.1.5", "redux-devtools-dock-monitor": "^1.0.0-beta-3", "redux-devtools-log-monitor": "^1.0.0-beta-3", - "rimraf": "^2.4.3", - "run-sequence": "^1.1.4", - "sass-loader": "^3.1.1", + "rimraf": "^2.4.4", + "run-sequence": "^1.1.5", + "sass-loader": "^3.1.2", "style-loader": "^0.13.0", "through2": "^2.0.0", - "url-loader": "^0.5.6", - "webpack": "^1.12.2", + "url-loader": "^0.5.7", + "webpack": "^1.12.9", "webpack-compile-templates": "^0.1.4", - "webpack-dev-server": "^1.12.1" + "webpack-dev-server": "^1.14.0" } } From b2ceeaa63f0603b874ac6be355b03cbc15eeefdd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 15:29:09 -0700 Subject: [PATCH 043/452] Use specific versions. Updates to latest dev tools. --- client/package.json | 142 ++++++++++++++++++++++---------------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/client/package.json b/client/package.json index 44e0aca..f932a06 100644 --- a/client/package.json +++ b/client/package.json @@ -16,86 +16,86 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { - "babel": "^5.8.29", - "babel-runtime": "^5.8.29", - "flux": "^2.1.1", - "history": "^1.16.0", + "babel": "5.8.29", + "babel-runtime": "5.8.29", + "flux": "2.1.1", + "history": "1.16.0", "immutable": "3.7.5", - "lodash": "^3.10.1", - "null-loader": "^0.1.1", - "react": "^0.14.3", - "react": "^0.14.3", - "react-proxy-loader": "^0.3.4", + "lodash": "3.10.1", + "null-loader": "0.1.1", + "react": "0.14.3", + "react": "0.14.3", + "react-proxy-loader": "0.3.4", "react-redux": "4.0.0", "react-router": "1.0.2", - "react-tap-event-plugin": "^0.2.1", + "react-tap-event-plugin": "0.2.1", "redux": "3.0.4", - "redux-router": "^1.0.0-beta5", - "redux-thunk": "^1.0.0", - "superagent": "^1.5.0", - "uuid": "^2.0.1" + "redux-router": "1.0.0-beta5", + "redux-thunk": "1.0.0", + "superagent": "1.5.0", + "uuid": "2.0.1" }, "devDependencies": { - "file-loader": "^0.8.5", - "less": "^2.5.3", - "node-sass": "^3.4.2", - "autoprefixer-loader": "^3.1.0", - "babel-core": "^5.8.29", - "babel-loader": "^5.3.2", + "file-loader": "0.8.5", + "less": "2.5.3", + "node-sass": "3.4.2", + "autoprefixer-loader": "3.1.0", + "babel-core": "5.8.29", + "babel-loader": "5.3.2", "chunk-manifest-webpack-plugin": "0.0.1", - "coveralls": "^2.11.6", - "css-loader": "^0.23.0", - "dotenv": "^1.2.0", - "ecstatic": "^1.3.1", - "event-stream": "^3.3.2", - "extract-text-webpack-plugin": "^0.9.1", - "gulp": "^3.9.0", - "gulp-file-include": "^0.13.7", - "gulp-filter": "^3.0.1", - "gulp-htmlmin": "^1.3.0", - "gulp-ignore": "^2.0.1", - "gulp-load-plugins": "^1.1.0", - "gulp-rename": "^1.2.2", - "gulp-util": "^3.0.7", - "html-minifier": "^1.0.0", - "imports-loader": "~0.6.5", - "istanbul": "^0.4.1", - "istanbul-instrumenter-loader": "^0.1.3", - "jasmine-core": "^2.4.1", - "jshint": "^2.9.1-rc1", - "jshint-loader": "^0.8.3", - "jshint-stylish": "^2.1.0", - "karma": "^0.13.15", - "karma-chrome-launcher": "^0.2.2", + "coveralls": "2.11.6", + "css-loader": "0.23.0", + "dotenv": "1.2.0", + "ecstatic": "1.3.1", + "event-stream": "3.3.2", + "extract-text-webpack-plugin": "0.9.1", + "gulp": "3.9.0", + "gulp-file-include": "0.13.7", + "gulp-filter": "3.0.1", + "gulp-htmlmin": "1.3.0", + "gulp-ignore": "2.0.1", + "gulp-load-plugins": "1.1.0", + "gulp-rename": "1.2.2", + "gulp-util": "3.0.7", + "html-minifier": "1.0.0", + "imports-loader": "0.6.5", + "istanbul": "0.4.1", + "istanbul-instrumenter-loader": "0.1.3", + "jasmine-core": "2.4.1", + "jshint": "2.9.1-rc1", + "jshint-loader": "0.8.3", + "jshint-stylish": "2.1.0", + "karma": "0.13.15", + "karma-chrome-launcher": "0.2.2", "karma-cli": "0.1.1", - "karma-coverage": "^0.5.3", - "karma-firefox-launcher": "^0.1.7", - "karma-jasmine": "^0.3.6", - "karma-jasmine-ajax": "^0.1.13", - "karma-phantomjs-launcher": "^0.2.1", - "karma-sourcemap-loader": "^0.3.6", + "karma-coverage": "0.5.3", + "karma-firefox-launcher": "0.1.7", + "karma-jasmine": "0.3.6", + "karma-jasmine-ajax": "0.1.13", + "karma-phantomjs-launcher": "0.2.1", + "karma-sourcemap-loader": "0.3.6", "karma-spec-reporter": "0.0.23", - "karma-webpack": "^1.7.0", - "less-loader": "^2.2.2", - "minimist": "^1.2.0", + "karma-webpack": "1.7.0", + "less-loader": "2.2.2", + "minimist": "1.2.0", "node-sass": "3.4.2", - "npm-shrinkwrap": "^5.4.1", - "phantomjs": "^1.9.19", - "protractor": "^3.0.0", - "psi": "^2.0.2", - "react-hot-loader": "^1.3.0", - "react-tools": "^0.13.3", - "redux-devtools": "2.1.5", - "redux-devtools-dock-monitor": "^1.0.0-beta-3", - "redux-devtools-log-monitor": "^1.0.0-beta-3", - "rimraf": "^2.4.4", - "run-sequence": "^1.1.5", - "sass-loader": "^3.1.2", - "style-loader": "^0.13.0", - "through2": "^2.0.0", - "url-loader": "^0.5.7", - "webpack": "^1.12.9", - "webpack-compile-templates": "^0.1.4", - "webpack-dev-server": "^1.14.0" + "npm-shrinkwrap": "5.4.1", + "phantomjs": "1.9.19", + "protractor": "3.0.0", + "psi": "2.0.2", + "react-hot-loader": "1.3.0", + "react-tools": "0.13.3", + "redux-devtools": "3.0.0-beta-3", + "redux-devtools-dock-monitor": "1.0.0-beta-3", + "redux-devtools-log-monitor": "1.0.0-beta-3", + "rimraf": "2.4.4", + "run-sequence": "1.1.5", + "sass-loader": "3.1.2", + "style-loader": "0.13.0", + "through2": "2.0.0", + "url-loader": "0.5.7", + "webpack": "1.12.9", + "webpack-compile-templates": "0.1.4", + "webpack-dev-server": "1.14.0" } } From c22d709962f3146ba0f944d82483916f9460459a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 15:52:47 -0700 Subject: [PATCH 044/452] Adds react dom --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index f932a06..787e347 100644 --- a/client/package.json +++ b/client/package.json @@ -24,7 +24,7 @@ "lodash": "3.10.1", "null-loader": "0.1.1", "react": "0.14.3", - "react": "0.14.3", + "react-dom": "0.14.3", "react-proxy-loader": "0.3.4", "react-redux": "4.0.0", "react-router": "1.0.2", From f22e4ee05ef68ea17618fc9934c4eeeb6b40980d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 16:37:21 -0700 Subject: [PATCH 045/452] Adds release script --- client/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 787e347..1fcc6e6 100644 --- a/client/package.json +++ b/client/package.json @@ -10,7 +10,8 @@ "test": "karma start", "coveralls": "cat coverage/lcov.info | coveralls", "build": "webpack --config webpack.release.js --progress --profile --colors", - "hot": "node webpack.hot.js" + "hot": "node webpack.hot.js", + "release": "cd ./client && gulp build --release && cd .. && s3_website push" }, "author": "atomicjolt, jbasdf", "license": "MIT", From c6106fc7d679b45120803af7c7d217d596f0aaeb Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 11 Dec 2015 18:54:21 -0700 Subject: [PATCH 046/452] Simplify constants --- client/js/actions/settings_actions.js | 2 +- client/js/constants/action_types.js | 3 --- .../js/{constants/network.js => contants.js} | 2 ++ client/js/libs/api.js | 22 +++++++++---------- client/js/libs/api.spec.js | 1 - client/js/middleware/api.js | 1 - client/js/middleware/api.spec.js | 4 ++-- client/js/reducers/settings.js | 1 - 8 files changed, 16 insertions(+), 20 deletions(-) delete mode 100644 client/js/constants/action_types.js rename client/js/{constants/network.js => contants.js} (88%) diff --git a/client/js/actions/settings_actions.js b/client/js/actions/settings_actions.js index 6297da6..2c18f04 100644 --- a/client/js/actions/settings_actions.js +++ b/client/js/actions/settings_actions.js @@ -1,4 +1,4 @@ -import constants from '../constants/action_types'; +import constants from '../constants'; export default { loadSettings: function (settings){ diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js deleted file mode 100644 index 7026030..0000000 --- a/client/js/constants/action_types.js +++ /dev/null @@ -1,3 +0,0 @@ -export default { - LOAD_SETTINGS: 'LOAD_SETTINGS' -}; \ No newline at end of file diff --git a/client/js/constants/network.js b/client/js/contants.js similarity index 88% rename from client/js/constants/network.js rename to client/js/contants.js index 1be1f98..adab4fb 100644 --- a/client/js/constants/network.js +++ b/client/js/contants.js @@ -1,5 +1,7 @@ export default { + LOAD_SETTINGS: 'LOAD_SETTINGS', + GET : 'get', POST : 'post', PUT : 'put', diff --git a/client/js/libs/api.js b/client/js/libs/api.js index 4302fe9..ab29bb6 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -1,7 +1,7 @@ "use strict"; import Request from "superagent"; -import Network from "../constants/network"; +import Constants from "../constants"; import _ from "lodash"; var _pendingRequests = {}; @@ -10,19 +10,19 @@ var _cache = {}; export default class Api{ static get(url, jwt, apiUrl, csrf, params){ - return Api.execRequest(Network.GET, url, jwt, apiUrl, csrf, params, null); + return Api.execRequest(Constants.GET, url, jwt, apiUrl, csrf, params, null); } static post(url, jwt, apiUrl, csrf, params, body){ - return Api.execRequest(Network.POST, url, jwt, apiUrl, csrf, params, body); + return Api.execRequest(Constants.POST, url, jwt, apiUrl, csrf, params, body); } static put(url, jwt, apiUrl, csrf, params, body){ - return Api.execRequest(Network.PUT, url, jwt, apiUrl, csrf, params, body); + return Api.execRequest(Constants.PUT, url, jwt, apiUrl, csrf, params, body); } static del(url, jwt, apiUrl, csrf, params){ - return Api.execRequest(Network.DEL, url, jwt, apiUrl, csrf, params, null); + return Api.execRequest(Constants.DEL, url, jwt, apiUrl, csrf, params, null); } static execRequest(method, url, jwt, apiUrl, csrf, params, body){ @@ -30,22 +30,22 @@ export default class Api{ var request; switch (method){ - case Network.GET: + case Constants.GET: request = Request.get(url); break; - case Network.POST: + case Constants.POST: request = Request.post(url).send(body); break; - case Network.PUT: + case Constants.PUT: request = Request.put(url).send(body); break; - case Network.DEL: + case Constants.DEL: request = Request.del(url); break; } request.set('Accept', 'application/json') - .timeout(Network.TIMEOUT) + .timeout(Constants.TIMEOUT) .set('Authorization', 'Bearer ' + jwt) .set('X-CSRF-Token', csrf); return request; @@ -85,7 +85,7 @@ export default class Api{ } static _wrapRequest(url, requestMethod, requestType){ - if (requestType === Network.POST) { + if (requestType === Constants.POST) { return { request: requestMethod(url) }; diff --git a/client/js/libs/api.spec.js b/client/js/libs/api.spec.js index f6bd2b1..e9c782a 100644 --- a/client/js/libs/api.spec.js +++ b/client/js/libs/api.spec.js @@ -1,5 +1,4 @@ import api from "./api"; -import Network from "../constants/network"; import Helper from '../../specs_support/helper'; describe('api', function() { diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index 0563933..2c54a04 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -1,5 +1,4 @@ import api from "../libs/api"; -import Network from "../constants/network"; const API = store => next => action => { var promise; diff --git a/client/js/middleware/api.spec.js b/client/js/middleware/api.spec.js index ccfdb54..62c6427 100644 --- a/client/js/middleware/api.spec.js +++ b/client/js/middleware/api.spec.js @@ -1,5 +1,5 @@ import api from "./api"; -import Network from "../constants/network"; +import Contants from "../constants"; import Helper from '../../specs_support/helper'; describe('api middleware', function() { @@ -35,7 +35,7 @@ describe('api middleware', function() { it('calls the api library', () => { const action = { type: "TEST", - method: Network.GET, + method: Contants.GET, url: "http://www.example.com/api/stuff.json" }; const middleware = api(Helper.makeStore()); diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js index 9c25004..021c37a 100644 --- a/client/js/reducers/settings.js +++ b/client/js/reducers/settings.js @@ -1,5 +1,4 @@ import Immutable from 'immutable'; -import constants from '../constants/action_types'; const initialState = Immutable.fromJS({}); From 854a9e71ecf5eec3659a9ee8a0667f13010865dd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:36:03 -0700 Subject: [PATCH 047/452] Removed unused actions --- client/js/actions/settings_actions.js | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 client/js/actions/settings_actions.js diff --git a/client/js/actions/settings_actions.js b/client/js/actions/settings_actions.js deleted file mode 100644 index 2c18f04..0000000 --- a/client/js/actions/settings_actions.js +++ /dev/null @@ -1,10 +0,0 @@ -import constants from '../constants'; - -export default { - loadSettings: function (settings){ - return { - type: constants.LOAD_SETTINGS, - settings - }; - } -}; From fbe217230369109d7b54d2e06a860cf52267782b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:38:14 -0700 Subject: [PATCH 048/452] Adds messages --- client/js/actions/message.js | 16 ++++++++++ client/js/components/common/message.jsx | 15 ++++++++++ client/js/components/common/message.spec.js | 17 +++++++++++ client/js/components/common/messages.jsx | 31 ++++++++++++++++++++ client/js/components/common/messages.spec.js | 29 ++++++++++++++++++ client/js/constants/action_types.js | 23 +++++++++++++++ client/package.json | 1 - 7 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 client/js/actions/message.js create mode 100644 client/js/components/common/message.jsx create mode 100644 client/js/components/common/message.spec.js create mode 100644 client/js/components/common/messages.jsx create mode 100644 client/js/components/common/messages.spec.js create mode 100644 client/js/constants/action_types.js diff --git a/client/js/actions/message.js b/client/js/actions/message.js new file mode 100644 index 0000000..d446201 --- /dev/null +++ b/client/js/actions/message.js @@ -0,0 +1,16 @@ +"use strict"; + +import ActionTypes from "../constants/action_types"; + +export function addMessage(message){ + return { + type: ActionTypes.ADD_MESSAGE, + data: message + }; +} + +export function clearMessages(){ + return { + type: ActionTypes.CLEAR_MESSAGES + }; +} \ No newline at end of file diff --git a/client/js/components/common/message.jsx b/client/js/components/common/message.jsx new file mode 100644 index 0000000..36fce6a --- /dev/null +++ b/client/js/components/common/message.jsx @@ -0,0 +1,15 @@ +"use strict"; + +import React from 'react'; + +export default class Message extends React.Component{ + + render() { + return ( +
  • + {this.props.children} +
  • + ); + } + +} diff --git a/client/js/components/common/message.spec.js b/client/js/components/common/message.spec.js new file mode 100644 index 0000000..26c1b50 --- /dev/null +++ b/client/js/components/common/message.spec.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import TestUtils from 'react/lib/ReactTestUtils'; +import Message from './message'; + +describe('message', () => { + + describe('messages exist', () => { + var message = "A test message"; + + it('renders a single message', () => { + var result = TestUtils.renderIntoDocument({message}); + expect(ReactDOM.findDOMNode(result).textContent).toContain(message); + }); + }); + +}); \ No newline at end of file diff --git a/client/js/components/common/messages.jsx b/client/js/components/common/messages.jsx new file mode 100644 index 0000000..b9fb40f --- /dev/null +++ b/client/js/components/common/messages.jsx @@ -0,0 +1,31 @@ +"use strict"; + +import React from "react"; +import { connect } from 'react-redux'; +import Message from "./message"; +import Immutable from 'immutable'; + +const select = (state) => { + return { + messages: state.messages + }; +}; + +@connect(select, null, null, {withRef: true}) +export default class Messages extends React.Component{ + + render() { + + if(this.props.messages.size <= 0){ + return null; + } + + return ( +
      + {this.props.messages.map((message, i) => { + return {message}; + })} +
    + ); + } +} diff --git a/client/js/components/common/messages.spec.js b/client/js/components/common/messages.spec.js new file mode 100644 index 0000000..0558134 --- /dev/null +++ b/client/js/components/common/messages.spec.js @@ -0,0 +1,29 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import TestUtils from "react/lib/ReactTestUtils"; +import Helper from "../../../specs_support/helper"; +import Messages from "./messages"; +import Immutable from "immutable"; + + +describe('messages', () => { + + describe('empty state', () => { + it('renders nothing', () => { + const store = Helper.mockStore({ messages: Immutable.fromJS([]) }) + const result = TestUtils.renderIntoDocument(); + expect(ReactDOM.findDOMNode(result)).toBe(null); + }); + }); + + describe('messages exist', () => { + it('renders a list of messages', () => { + const message = "A test message"; + const store = Helper.mockStore({ messages: Immutable.fromJS([message]) }) + const result = TestUtils.renderIntoDocument(); + expect(ReactDOM.findDOMNode(result).textContent).toContain(message); + }); + + }); + +}); \ No newline at end of file diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js new file mode 100644 index 0000000..a82841c --- /dev/null +++ b/client/js/constants/action_types.js @@ -0,0 +1,23 @@ +"use strict"; + +import _ from "lodash"; + +const finished = "_DONE"; +const actionTypes = [ + + // MESSAGES + "ADD_MESSAGE", + "REMOVE_MESSAGE", + "CLEAR_MESSAGES" + +]; + +var types = _.reduce(actionTypes, (result, key) => { + result[key] = key; + result[`${key}${finished}`] = `${key}${finished}`; + return result +}, {}); + +types.FINISHED = finished; + +export default types; \ No newline at end of file diff --git a/client/package.json b/client/package.json index 1fcc6e6..0e9251a 100644 --- a/client/package.json +++ b/client/package.json @@ -19,7 +19,6 @@ "dependencies": { "babel": "5.8.29", "babel-runtime": "5.8.29", - "flux": "2.1.1", "history": "1.16.0", "immutable": "3.7.5", "lodash": "3.10.1", From 5d0e13ec33435a48531a23b0b66e2ff575e923df Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:38:27 -0700 Subject: [PATCH 049/452] Adds error and network constants --- client/js/constants/error.js | 7 +++++++ client/js/constants/network.js | 10 ++++++++++ 2 files changed, 17 insertions(+) create mode 100644 client/js/constants/error.js create mode 100644 client/js/constants/network.js diff --git a/client/js/constants/error.js b/client/js/constants/error.js new file mode 100644 index 0000000..4358eb1 --- /dev/null +++ b/client/js/constants/error.js @@ -0,0 +1,7 @@ +export default { + + TIMEOUT : "NETWORK_TIMEOUT", + ERROR : "NETWORK_ERROR", + NOT_AUTHORIZED : "NETWORK_NOT_AUTHORIZED" + +}; \ No newline at end of file diff --git a/client/js/constants/network.js b/client/js/constants/network.js new file mode 100644 index 0000000..2f3c9ae --- /dev/null +++ b/client/js/constants/network.js @@ -0,0 +1,10 @@ +export default { + + GET : 'get', + POST : 'post', + PUT : 'put', + DEL : 'del', + + TIMEOUT : 20000, + +}; \ No newline at end of file From e3dc8b6e2e52ab432bb2ba44f632fb97d8adbfe6 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:38:44 -0700 Subject: [PATCH 050/452] Refactors API lib. --- client/js/libs/api.js | 32 ++++++++++++++++---------------- client/js/libs/api.spec.js | 1 + 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/client/js/libs/api.js b/client/js/libs/api.js index ab29bb6..2d95800 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -1,7 +1,7 @@ "use strict"; import Request from "superagent"; -import Constants from "../constants"; +import NetworkConstants from "../constants/network"; import _ from "lodash"; var _pendingRequests = {}; @@ -9,43 +9,43 @@ var _cache = {}; export default class Api{ - static get(url, jwt, apiUrl, csrf, params){ - return Api.execRequest(Constants.GET, url, jwt, apiUrl, csrf, params, null); + static get(url, apiUrl, jwt, csrf, params){ + return Api.execRequest(NetworkConstants.GET, url, apiUrl, jwt, csrf, params, null); } - static post(url, jwt, apiUrl, csrf, params, body){ - return Api.execRequest(Constants.POST, url, jwt, apiUrl, csrf, params, body); + static post(url, apiUrl, jwt, csrf, params, body){ + return Api.execRequest(NetworkConstants.POST, url, apiUrl, jwt, csrf, params, body); } - static put(url, jwt, apiUrl, csrf, params, body){ - return Api.execRequest(Constants.PUT, url, jwt, apiUrl, csrf, params, body); + static put(url, apiUrl, jwt, csrf, params, body){ + return Api.execRequest(NetworkConstants.PUT, url, apiUrl, jwt, csrf, params, body); } - static del(url, jwt, apiUrl, csrf, params){ - return Api.execRequest(Constants.DEL, url, jwt, apiUrl, csrf, params, null); + static del(url, apiUrl, jwt, csrf, params){ + return Api.execRequest(NetworkConstants.DEL, url, apiUrl, jwt, csrf, params, null); } - static execRequest(method, url, jwt, apiUrl, csrf, params, body){ + static execRequest(method, url, apiUrl, jwt, csrf, params, body){ return Api._doRequest(Api._makeUrl(`${url}${Api.queryStringFrom(params)}`, apiUrl), (fullUrl) => { var request; switch (method){ - case Constants.GET: + case NetworkConstants.GET: request = Request.get(url); break; - case Constants.POST: + case NetworkConstants.POST: request = Request.post(url).send(body); break; - case Constants.PUT: + case NetworkConstants.PUT: request = Request.put(url).send(body); break; - case Constants.DEL: + case NetworkConstants.DEL: request = Request.del(url); break; } request.set('Accept', 'application/json') - .timeout(Constants.TIMEOUT) + .timeout(NetworkConstants.TIMEOUT) .set('Authorization', 'Bearer ' + jwt) .set('X-CSRF-Token', csrf); return request; @@ -85,7 +85,7 @@ export default class Api{ } static _wrapRequest(url, requestMethod, requestType){ - if (requestType === Constants.POST) { + if (requestType === NetworkConstants.POST) { return { request: requestMethod(url) }; diff --git a/client/js/libs/api.spec.js b/client/js/libs/api.spec.js index e9c782a..f6bd2b1 100644 --- a/client/js/libs/api.spec.js +++ b/client/js/libs/api.spec.js @@ -1,4 +1,5 @@ import api from "./api"; +import Network from "../constants/network"; import Helper from '../../specs_support/helper'; describe('api', function() { From 7d18a31a3e678781d55d1856fa9b8f001a92a2bd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:40:41 -0700 Subject: [PATCH 051/452] Integrate redux router --- client/js/routes.jsx | 8 +++----- client/js/store/configure_store.js | 5 +++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/client/js/routes.jsx b/client/js/routes.jsx index fd0e3e4..f4bd349 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -3,14 +3,12 @@ import React from 'react'; // if you use jsx, you have to have React imported import Router from 'react-router'; import { Route, IndexRoute } from 'react-router'; -import history from './history'; +import { ReduxRouter } from 'redux-router'; import Index from './components/containers/index'; -import Home from './components/views/home'; export default ( - + - - + ); diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index b558a57..4db441d 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -3,16 +3,17 @@ import { reduxReactRouter } from 'redux-router'; import { persistState } from 'redux-devtools'; import thunk from 'redux-thunk'; import rootReducer from '../reducers'; -import history from '../history'; import routes from '../routes'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; +import { createHashHistory as createHistory } from 'history'; + let middleware = [ thunk, API ]; let enhancers = [ applyMiddleware(...middleware), - reduxReactRouter({ routes, history }) + reduxReactRouter({ createHistory }) ]; // In production, we want to use just the middleware. From 655b665515242e799dd8b7a1aabebe07f196a288 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:51:46 -0700 Subject: [PATCH 052/452] Adds reducers --- client/js/reducers/application.js | 15 ++++++++++ client/js/reducers/index.js | 6 +++- client/js/reducers/messages.js | 43 +++++++++++++++++++++++++++++ client/js/reducers/messages.spec.js | 14 ++++++++++ client/js/reducers/settings.js | 2 +- client/js/reducers/settings.spec.js | 14 ++++++++++ 6 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 client/js/reducers/application.js create mode 100644 client/js/reducers/messages.js create mode 100644 client/js/reducers/messages.spec.js create mode 100644 client/js/reducers/settings.spec.js diff --git a/client/js/reducers/application.js b/client/js/reducers/application.js new file mode 100644 index 0000000..04bb2b3 --- /dev/null +++ b/client/js/reducers/application.js @@ -0,0 +1,15 @@ +"use strict"; + +import Immutable from 'immutable'; +import Constants from '../constants/action_types'; + +const initialState = Immutable.fromJS([]); + +export default (state = initialState, action) => { + + switch(action.type){ + + default: + return state; + } +} \ No newline at end of file diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index 0fe2d54..d7ef3d3 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,10 +1,14 @@ import { combineReducers } from 'redux'; import { routerStateReducer as router } from 'redux-router'; import settings from './settings' +import application from './application'; +import messages from './messages'; const rootReducer = combineReducers({ router, - settings + settings, + application, + messages }); export default rootReducer; \ No newline at end of file diff --git a/client/js/reducers/messages.js b/client/js/reducers/messages.js new file mode 100644 index 0000000..f6b1298 --- /dev/null +++ b/client/js/reducers/messages.js @@ -0,0 +1,43 @@ +"use strict"; + +import Immutable from "immutable"; +import ActionTypes from "../constants/action_types"; +import ErrorTypes from "../constants/error"; +import _ from "lodash"; + +const initialState = Immutable.fromJS([]); + +export default (state = initialState, action) => { + + switch(action.type){ + + case ErrorTypes.TIMEOUT: + return state.push(`Request timed out. Response was: ${action.payload}`); + break; + + case ErrorTypes.NOT_AUTHORIZED: + return state.push(`Request not authorized: ${action.payload}`); + break; + + case ErrorTypes.ERROR: + return state.push(`Request error: ${action.payload}`); + break; + + case ActionTypes.ADD_MESSAGE: + return state.push(action.payload); + break; + + case ActionTypes.REMOVE_MESSAGE: + return state.push(action.payload); + removeMessage(payload.messageId); + break; + + case ActionTypes.CLEAR_MESSAGES: + clearMessages(); + break; + + default: + return state; + + } +} \ No newline at end of file diff --git a/client/js/reducers/messages.spec.js b/client/js/reducers/messages.spec.js new file mode 100644 index 0000000..1571424 --- /dev/null +++ b/client/js/reducers/messages.spec.js @@ -0,0 +1,14 @@ +import messages from "./messages"; + +describe("message reducer", () => { + + describe("initial state", () => { + + it("has no messages", () => { + const state = messages(undefined, {}); + expect(state.toJS()).toEqual([]); + }); + + }); + +}); \ No newline at end of file diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js index 021c37a..5347c21 100644 --- a/client/js/reducers/settings.js +++ b/client/js/reducers/settings.js @@ -2,6 +2,6 @@ import Immutable from 'immutable'; const initialState = Immutable.fromJS({}); -export default function settings(state = initialState, action) { +export default (state = initialState, action) => { return state; // the settings state should never changed depending on action } \ No newline at end of file diff --git a/client/js/reducers/settings.spec.js b/client/js/reducers/settings.spec.js new file mode 100644 index 0000000..9e811af --- /dev/null +++ b/client/js/reducers/settings.spec.js @@ -0,0 +1,14 @@ +import settings from "./settings"; + +describe('settings reducer', () => { + + describe("initial state", () => { + + it("returns empty state", () => { + const state = settings(); + expect(state.toJS()).toEqual({}); + }); + + }); + +}); From 57b1448786173656d7d56149488700878a39507a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:51:59 -0700 Subject: [PATCH 053/452] API middleware refactor --- client/js/middleware/api.js | 12 +++++++----- client/js/middleware/api.spec.js | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index 2c54a04..aeb6097 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -1,4 +1,5 @@ -import api from "../libs/api"; +import api from "../libs/api"; +import actionTypes from "../constants/action_types"; const API = store => next => action => { var promise; @@ -8,12 +9,13 @@ const API = store => next => action => { if(action.method){ promise = api.execRequest(action.method, action.url, state.settings.get("apiUrl"), state.settings.get("jwt"), state.settings.get("csrf"), action.params, action.body); if(promise){ - promise.then((res, err) => { + promise.then((response, error) => { store.dispatch({ - type: action.type + "_DONE", - res: res.body, + type: action.type + actionTypes.FINISHED, + payload: response.body, original: action, - err: err + response, + error }); // Dispatch the new data }); } diff --git a/client/js/middleware/api.spec.js b/client/js/middleware/api.spec.js index 62c6427..ccfdb54 100644 --- a/client/js/middleware/api.spec.js +++ b/client/js/middleware/api.spec.js @@ -1,5 +1,5 @@ import api from "./api"; -import Contants from "../constants"; +import Network from "../constants/network"; import Helper from '../../specs_support/helper'; describe('api middleware', function() { @@ -35,7 +35,7 @@ describe('api middleware', function() { it('calls the api library', () => { const action = { type: "TEST", - method: Contants.GET, + method: Network.GET, url: "http://www.example.com/api/stuff.json" }; const middleware = api(Helper.makeStore()); From bdc9262ba3891a849dc72c603d8f244e79f498f2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:52:19 -0700 Subject: [PATCH 054/452] Remove unused code --- client/js/libs/utils.js | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 client/js/libs/utils.js diff --git a/client/js/libs/utils.js b/client/js/libs/utils.js deleted file mode 100644 index 6ad6038..0000000 --- a/client/js/libs/utils.js +++ /dev/null @@ -1,38 +0,0 @@ - var Utils = { - - currentTime: function(){ - return new Date().getTime(); - }, - - makeId: function(){ - var result, i, j; - result = ''; - for(j=0; j<32; j++) - { - if( j == 8 || j == 12|| j == 16|| j == 20) - result = result + '-'; - i = Math.floor(Math.random()*16).toString(16).toUpperCase(); - result = result + i; - } - return result; - }, - - htmlDecode: function(input){ - var e = document.createElement('div'); - e.innerHTML = input; - return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; - }, - - htmlDecodeWithRoot: function(input){ - return '' + Utils.htmlDecode(input) + ''; - }, - - getLocation: function(href){ - var l = document.createElement("a"); - l.href = href; - return l; - } - -}; - -export default Utils; \ No newline at end of file From 46498c33dccba5c8ebeef3cebee6c126504f143c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:52:28 -0700 Subject: [PATCH 055/452] Remove unused code --- client/js/libs/query_string.js | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 client/js/libs/query_string.js diff --git a/client/js/libs/query_string.js b/client/js/libs/query_string.js deleted file mode 100644 index aa520c5..0000000 --- a/client/js/libs/query_string.js +++ /dev/null @@ -1,13 +0,0 @@ -export default { - - params(){ - var queryDict = {}; - var vars = window.location.search.substring(1).split('&'); - for (var i = 0; i < vars.length; i++){ - var pair = vars[i].split('='); - queryDict[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); - } - return queryDict; - } - -}; \ No newline at end of file From bcbf444f59b67aebbe77dfbfe9c16e296169c2d0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 13:52:46 -0700 Subject: [PATCH 056/452] Move index --- client/js/components/{containers => }/index.jsx | 7 +++---- client/js/components/{containers => }/index.spec.js | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) rename client/js/components/{containers => }/index.jsx (56%) rename client/js/components/{containers => }/index.spec.js (90%) diff --git a/client/js/components/containers/index.jsx b/client/js/components/index.jsx similarity index 56% rename from client/js/components/containers/index.jsx rename to client/js/components/index.jsx index 6a7777f..641c7d6 100644 --- a/client/js/components/containers/index.jsx +++ b/client/js/components/index.jsx @@ -1,11 +1,10 @@ "use strict"; -import React from 'react'; -import { Component } from 'react'; -import { connect } from 'react-redux'; +import React from "react"; +import { connect } from "react-redux"; @connect((state) => (state), null, null, {withRef: true}) -class Index extends Component { +class Index extends React.Component { constructor(){ super(); diff --git a/client/js/components/containers/index.spec.js b/client/js/components/index.spec.js similarity index 90% rename from client/js/components/containers/index.spec.js rename to client/js/components/index.spec.js index afaf74c..1a27709 100644 --- a/client/js/components/containers/index.spec.js +++ b/client/js/components/index.spec.js @@ -4,7 +4,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import TestUtils from 'react/lib/ReactTestUtils'; import { Provider } from 'react-redux' -import Helper from '../../../specs_support/helper'; +import Helper from '../../specs_support/helper'; import Index from './index'; describe('index', function() { From c3251251775020fbc7f4ab5ab184d51f56566600 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 14:00:52 -0700 Subject: [PATCH 057/452] Move files --- client/js/components/{views => }/home.jsx | 0 client/js/components/{ => layout}/index.jsx | 0 client/js/components/{ => layout}/index.spec.js | 2 +- client/js/routes.jsx | 4 +++- 4 files changed, 4 insertions(+), 2 deletions(-) rename client/js/components/{views => }/home.jsx (100%) rename client/js/components/{ => layout}/index.jsx (100%) rename client/js/components/{ => layout}/index.spec.js (90%) diff --git a/client/js/components/views/home.jsx b/client/js/components/home.jsx similarity index 100% rename from client/js/components/views/home.jsx rename to client/js/components/home.jsx diff --git a/client/js/components/index.jsx b/client/js/components/layout/index.jsx similarity index 100% rename from client/js/components/index.jsx rename to client/js/components/layout/index.jsx diff --git a/client/js/components/index.spec.js b/client/js/components/layout/index.spec.js similarity index 90% rename from client/js/components/index.spec.js rename to client/js/components/layout/index.spec.js index 1a27709..afaf74c 100644 --- a/client/js/components/index.spec.js +++ b/client/js/components/layout/index.spec.js @@ -4,7 +4,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import TestUtils from 'react/lib/ReactTestUtils'; import { Provider } from 'react-redux' -import Helper from '../../specs_support/helper'; +import Helper from '../../../specs_support/helper'; import Index from './index'; describe('index', function() { diff --git a/client/js/routes.jsx b/client/js/routes.jsx index f4bd349..fe1d216 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -4,11 +4,13 @@ import React from 'react'; // if you use jsx, you have to have import Router from 'react-router'; import { Route, IndexRoute } from 'react-router'; import { ReduxRouter } from 'redux-router'; -import Index from './components/containers/index'; +import Index from './components/layout/index'; +import Home from './components/home'; export default ( + ); From e3e22f2082d4b40480cd564124167484f63e3e55 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 14 Dec 2015 14:01:00 -0700 Subject: [PATCH 058/452] Added mock store --- client/specs_support/helper.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index a5bf52b..d0e1bf1 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -6,6 +6,18 @@ import configureStore from "../js/store/configure_store"; export default class Helper{ + // Create a fake store for testing + static mockStore(state) { + return { + subscribe: () => {}, + dispatch: () => {}, + getState: () => { + return {...state}; + } + }; + } + + // Create a real store that can be used for testing static makeStore(settings){ var initialSettings = _.assign({ jwt: "jwt_token", From 892d36e646dc842bb6f4852916bf869186658f38 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 15 Dec 2015 18:11:13 -0700 Subject: [PATCH 059/452] Added message specs --- client/js/reducers/messages.js | 14 ++-- client/js/reducers/messages.spec.js | 116 +++++++++++++++++++++++++++- 2 files changed, 121 insertions(+), 9 deletions(-) diff --git a/client/js/reducers/messages.js b/client/js/reducers/messages.js index f6b1298..1c29d82 100644 --- a/client/js/reducers/messages.js +++ b/client/js/reducers/messages.js @@ -3,7 +3,6 @@ import Immutable from "immutable"; import ActionTypes from "../constants/action_types"; import ErrorTypes from "../constants/error"; -import _ from "lodash"; const initialState = Immutable.fromJS([]); @@ -12,28 +11,27 @@ export default (state = initialState, action) => { switch(action.type){ case ErrorTypes.TIMEOUT: - return state.push(`Request timed out. Response was: ${action.payload}`); + return state.push(`Request timed out. Response was: ${action.payload.message}`); break; case ErrorTypes.NOT_AUTHORIZED: - return state.push(`Request not authorized: ${action.payload}`); + return state.push(`Request not authorized: ${action.payload.message}`); break; case ErrorTypes.ERROR: - return state.push(`Request error: ${action.payload}`); + return state.push(`Request error: ${action.payload.message}`); break; case ActionTypes.ADD_MESSAGE: - return state.push(action.payload); + return state.push(action.payload.message); break; case ActionTypes.REMOVE_MESSAGE: - return state.push(action.payload); - removeMessage(payload.messageId); + return state.filter(message => message != action.payload.message); break; case ActionTypes.CLEAR_MESSAGES: - clearMessages(); + return initialState; break; default: diff --git a/client/js/reducers/messages.spec.js b/client/js/reducers/messages.spec.js index 1571424..a41384c 100644 --- a/client/js/reducers/messages.spec.js +++ b/client/js/reducers/messages.spec.js @@ -1,4 +1,10 @@ -import messages from "./messages"; +"use strict"; + +import _ from "lodash"; +import Immutable from "immutable"; +import ActionTypes from "../constants/action_types"; +import ErrorTypes from "../constants/error"; +import messages from "./messages"; describe("message reducer", () => { @@ -10,5 +16,113 @@ describe("message reducer", () => { }); }); + + describe("TIMEOUT", () => { + + it("adds a timeout message", () => { + const initialState = Immutable.fromJS([]); + const state = messages(initialState, { + type: ErrorTypes.TIMEOUT, + payload: { + message: "No response" + } + }); + expect(_.contains(state.get(0),"Request timed out")).toBe(true); + }); + + }); + + describe("NOT_AUTHORIZED", () => { + + it("Adds a not authorized error", () => { + const initialState = Immutable.fromJS([]); + const state = messages(initialState, { + type: ErrorTypes.NOT_AUTHORIZED, + payload: { + message: "Not authorized" + } + }); + expect(_.contains(state.get(0),"Request not authorized")).toBe(true); + }); + + }); + + describe("ERROR", () => { + + it("Adds an error", () => { + const initialState = Immutable.fromJS([]); + const state = messages(initialState, { + type: ErrorTypes.ERROR, + payload: { + message: "Error" + } + }); + expect(_.contains(state.get(0),"Request error")).toBe(true); + }); + + }); + + describe("ADD_MESSAGE", () => { + + it("Adds a message", () => { + const initialState = Immutable.fromJS([]); + const action = { + type: ActionTypes.ADD_MESSAGE, + payload: { + message: "Things are great" + } + } + const state = messages(initialState, action); + expect(_.contains(state.get(0),action.payload.message)).toBe(true); + }); + + }); + + describe("REMOVE_MESSAGE", () => { + + it("Removes message", () => { + const action = { + type: ActionTypes.ADD_MESSAGE, + payload: { + message: "Things are great" + } + }; + const removeAction = { + type: ActionTypes.REMOVE_MESSAGE, + payload: { + message: "Things are great" + } + }; + const initialState = Immutable.fromJS([action.payload.message]); + const state = messages(initialState, action); + expect(_.contains(state.get(0),action.payload.message)).toBe(true); + const newState = messages(state, removeAction); + expect(newState.toJS()).toEqual([]); + }); + + }); + + describe("CLEAR_MESSAGES", () => { + + it("Removes message", () => { + const action = { + type: ActionTypes.ADD_MESSAGE, + payload: { + message: "Things are great" + } + }; + const removeAction = { + type: ActionTypes.CLEAR_MESSAGES + }; + const initialState = Immutable.fromJS([action.payload.message]); + const state = messages(initialState, action); + expect(_.contains(state.get(0),action.payload.message)).toBe(true); + const newState = messages(state, removeAction); + expect(newState.toJS()).toEqual([]); + }); + + }); + + }); \ No newline at end of file From 07bf16ee2650e6a15f40391bae24d3715e23d1a0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 15 Dec 2015 18:11:20 -0700 Subject: [PATCH 060/452] Added whitespace --- client/js/app.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/js/app.jsx b/client/js/app.jsx index a5a5016..3762e63 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,4 +1,5 @@ "use strict"; + import 'babel-core/polyfill'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -7,6 +8,7 @@ import routes from './routes'; import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; import Immutable from 'immutable'; + //Needed for onTouchTap //Can go away when react 1.0 release //Check this repo: From f008bc5a0791e9c0a75a16335c8f89dd7f1b1203 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 15 Dec 2015 18:11:41 -0700 Subject: [PATCH 061/452] Removes unused files. --- client/js/routes.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/client/js/routes.jsx b/client/js/routes.jsx index fe1d216..847f052 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -1,7 +1,6 @@ "use strict"; import React from 'react'; // if you use jsx, you have to have React imported -import Router from 'react-router'; import { Route, IndexRoute } from 'react-router'; import { ReduxRouter } from 'redux-router'; import Index from './components/layout/index'; From 77cc6ea8baf871e6aa2af9c5bd41420af5e12a93 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 17 Dec 2015 16:35:32 -0700 Subject: [PATCH 062/452] Changes to DONE --- client/js/constants/action_types.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js index a82841c..c1ad23c 100644 --- a/client/js/constants/action_types.js +++ b/client/js/constants/action_types.js @@ -2,7 +2,8 @@ import _ from "lodash"; -const finished = "_DONE"; +const done = "_DONE"; + const actionTypes = [ // MESSAGES @@ -12,12 +13,15 @@ const actionTypes = [ ]; -var types = _.reduce(actionTypes, (result, key) => { +const asyncActionTypes = [ +]; + +var types = _.reduce(asyncActionTypes, (result, key) => { result[key] = key; - result[`${key}${finished}`] = `${key}${finished}`; + result[`${key}${done}`] = `${key}${done}`; return result }, {}); -types.FINISHED = finished; +types.DONE = done; export default types; \ No newline at end of file From 1621acd0a3b8a5d331acba05de3472e07789ed8e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 17 Dec 2015 16:35:50 -0700 Subject: [PATCH 063/452] Changes to DONE. Fixes csrfToken. --- client/js/middleware/api.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index aeb6097..87f7ada 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -7,11 +7,11 @@ const API = store => next => action => { // send the api request if(action.method){ - promise = api.execRequest(action.method, action.url, state.settings.get("apiUrl"), state.settings.get("jwt"), state.settings.get("csrf"), action.params, action.body); + promise = api.execRequest(action.method, action.url, state.settings.get("apiUrl"), state.settings.get("jwt"), state.settings.get("csrfToken"), action.params, action.body); if(promise){ promise.then((response, error) => { store.dispatch({ - type: action.type + actionTypes.FINISHED, + type: action.type + actionTypes.DONE, payload: response.body, original: action, response, From 3c1f907f8b4ae4ca9ea79e7f6e70170e6a25897e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 17 Dec 2015 16:49:49 -0700 Subject: [PATCH 064/452] Handle async with DONE. Don't add DONE to other actions. --- client/js/constants/action_types.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js index c1ad23c..46b5368 100644 --- a/client/js/constants/action_types.js +++ b/client/js/constants/action_types.js @@ -4,6 +4,7 @@ import _ from "lodash"; const done = "_DONE"; +// These action types will have a _DONE action added const actionTypes = [ // MESSAGES @@ -13,15 +14,21 @@ const actionTypes = [ ]; +// These types will receive a _DONE const asyncActionTypes = [ ]; -var types = _.reduce(asyncActionTypes, (result, key) => { +var types = _.reduce(actionTypes, (result, key) => { result[key] = key; - result[`${key}${done}`] = `${key}${done}`; return result }, {}); +types = _.reduce(asyncActionTypes, (result, key) => { + result[key] = key; + result[`${key}${done}`] = `${key}${done}`; + return result +}, types); + types.DONE = done; export default types; \ No newline at end of file From c5dc3686db6b47d6392f01ec2282a0fb788ec1f0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 18 Dec 2015 15:32:11 -0700 Subject: [PATCH 065/452] Extract constant wrapper. Remove junk files --- client/js/constants/action_types.js | 21 ++------------------- client/js/constants/constants_wrapper.js | 23 +++++++++++++++++++++++ client/js/contants.js | 16 ---------------- client/js/history.js | 8 -------- 4 files changed, 25 insertions(+), 43 deletions(-) create mode 100644 client/js/constants/constants_wrapper.js delete mode 100644 client/js/contants.js delete mode 100644 client/js/history.js diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js index 46b5368..6b2f6ef 100644 --- a/client/js/constants/action_types.js +++ b/client/js/constants/action_types.js @@ -1,8 +1,4 @@ -"use strict"; - -import _ from "lodash"; - -const done = "_DONE"; +import wrapper from "./constants_wrapper"; // These action types will have a _DONE action added const actionTypes = [ @@ -18,17 +14,4 @@ const actionTypes = [ const asyncActionTypes = [ ]; -var types = _.reduce(actionTypes, (result, key) => { - result[key] = key; - return result -}, {}); - -types = _.reduce(asyncActionTypes, (result, key) => { - result[key] = key; - result[`${key}${done}`] = `${key}${done}`; - return result -}, types); - -types.DONE = done; - -export default types; \ No newline at end of file +export default wrapper(actionTypes, asyncActionTypes); \ No newline at end of file diff --git a/client/js/constants/constants_wrapper.js b/client/js/constants/constants_wrapper.js new file mode 100644 index 0000000..2992c2c --- /dev/null +++ b/client/js/constants/constants_wrapper.js @@ -0,0 +1,23 @@ +"use strict"; + +import _ from "lodash"; + +const done = "_DONE"; + +export default function(actionTypes, asyncActionTypes){ + + var types = _.reduce(actionTypes, (result, key) => { + result[key] = key; + return result + }, {}); + + types = _.reduce(asyncActionTypes, (result, key) => { + result[key] = key; + result[`${key}${done}`] = `${key}${done}`; + return result + }, types); + + types.DONE = done; + + return types; +} \ No newline at end of file diff --git a/client/js/contants.js b/client/js/contants.js deleted file mode 100644 index adab4fb..0000000 --- a/client/js/contants.js +++ /dev/null @@ -1,16 +0,0 @@ -export default { - - LOAD_SETTINGS: 'LOAD_SETTINGS', - - GET : 'get', - POST : 'post', - PUT : 'put', - DEL : 'del', - - TIMEOUT : 20000, - - TIMEOUT : 'NETWORK_TIMEOUT', - NOT_AUTHORIZED : 'NETWORK_NOT_AUTHORIZED', - ERROR : 'NETWORK_ERROR' - -}; \ No newline at end of file diff --git a/client/js/history.js b/client/js/history.js deleted file mode 100644 index 2ef7251..0000000 --- a/client/js/history.js +++ /dev/null @@ -1,8 +0,0 @@ -// import createBrowserHistory from 'history/lib/createBrowserHistory'; -// export default createBrowserHistory(); - - -import { createHashHistory } from 'history'; -export default new createHashHistory({ - //queryKey: false // Opt-out of persistent state, not recommended. -}); \ No newline at end of file From a131466e7699838090689eac0556d69e02c6bf84 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 24 Dec 2015 12:53:49 -0700 Subject: [PATCH 066/452] Switch to redux-simple-router --- client/js/app.jsx | 18 +++++++++++------- client/js/history.js | 8 ++++++++ client/js/reducers/index.js | 4 ++-- client/js/routes.jsx | 14 +++++++------- client/js/store/configure_store.js | 5 +---- client/package.json | 3 +-- 6 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 client/js/history.js diff --git a/client/js/app.jsx b/client/js/app.jsx index 3762e63..c72ce1b 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,13 +1,15 @@ "use strict"; import 'babel-core/polyfill'; -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Provider } from 'react-redux'; -import routes from './routes'; -import DevTools from './dev/dev_tools'; -import configureStore from './store/configure_store'; -import Immutable from 'immutable'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import { syncReduxAndRouter } from 'redux-simple-router'; +import Immutable from 'immutable'; +import routes from './routes'; +import DevTools from './dev/dev_tools'; +import configureStore from './store/configure_store'; +import history from './history'; //Needed for onTouchTap //Can go away when react 1.0 release @@ -35,6 +37,8 @@ class Root extends React.Component { const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS)}); +syncReduxAndRouter(history, store); + ReactDOM.render( , document.getElementById("main-app") diff --git a/client/js/history.js b/client/js/history.js new file mode 100644 index 0000000..2ef7251 --- /dev/null +++ b/client/js/history.js @@ -0,0 +1,8 @@ +// import createBrowserHistory from 'history/lib/createBrowserHistory'; +// export default createBrowserHistory(); + + +import { createHashHistory } from 'history'; +export default new createHashHistory({ + //queryKey: false // Opt-out of persistent state, not recommended. +}); \ No newline at end of file diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index d7ef3d3..ea8a29c 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,11 +1,11 @@ import { combineReducers } from 'redux'; -import { routerStateReducer as router } from 'redux-router'; +import { routeReducer as routing } from 'redux-simple-router'; import settings from './settings' import application from './application'; import messages from './messages'; const rootReducer = combineReducers({ - router, + routing, settings, application, messages diff --git a/client/js/routes.jsx b/client/js/routes.jsx index 847f052..2839de4 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -1,15 +1,15 @@ "use strict"; -import React from 'react'; // if you use jsx, you have to have React imported -import { Route, IndexRoute } from 'react-router'; -import { ReduxRouter } from 'redux-router'; -import Index from './components/layout/index'; -import Home from './components/home'; +import React from 'react'; // if you use jsx, you have to have React imported +import { Router, Route, IndexRoute } from 'react-router'; +import Index from './components/layout/index'; +import Home from './components/home'; +import history from './history'; export default ( - + - + ); diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 4db441d..464fc55 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -1,9 +1,7 @@ import { createStore, applyMiddleware, compose } from 'redux'; -import { reduxReactRouter } from 'redux-router'; import { persistState } from 'redux-devtools'; import thunk from 'redux-thunk'; import rootReducer from '../reducers'; -import routes from '../routes'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; @@ -12,8 +10,7 @@ import { createHashHistory as createHistory } from 'history'; let middleware = [ thunk, API ]; let enhancers = [ - applyMiddleware(...middleware), - reduxReactRouter({ createHistory }) + applyMiddleware(...middleware) ]; // In production, we want to use just the middleware. diff --git a/client/package.json b/client/package.json index 0e9251a..6ab3760 100644 --- a/client/package.json +++ b/client/package.json @@ -30,7 +30,7 @@ "react-router": "1.0.2", "react-tap-event-plugin": "0.2.1", "redux": "3.0.4", - "redux-router": "1.0.0-beta5", + "redux-simple-router": "^1.0.1", "redux-thunk": "1.0.0", "superagent": "1.5.0", "uuid": "2.0.1" @@ -78,7 +78,6 @@ "karma-webpack": "1.7.0", "less-loader": "2.2.2", "minimist": "1.2.0", - "node-sass": "3.4.2", "npm-shrinkwrap": "5.4.1", "phantomjs": "1.9.19", "protractor": "3.0.0", From 37584ea227e0cccb6b75629307c1e7badab771eb Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 28 Dec 2015 16:23:22 -0700 Subject: [PATCH 067/452] Added jwt refresh --- client/html/index.tpl.html | 4 +++- client/js/actions/jwt.js | 12 ++++++++++++ client/js/app.jsx | 4 ++++ client/js/constants/action_types.js | 3 +++ client/js/loaders/jwt.js | 12 ++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 client/js/actions/jwt.js create mode 100644 client/js/loaders/jwt.js diff --git a/client/html/index.tpl.html b/client/html/index.tpl.html index 16355ca..8086275 100644 --- a/client/html/index.tpl.html +++ b/client/html/index.tpl.html @@ -7,7 +7,9 @@ diff --git a/client/js/actions/jwt.js b/client/js/actions/jwt.js new file mode 100644 index 0000000..0838e6a --- /dev/null +++ b/client/js/actions/jwt.js @@ -0,0 +1,12 @@ +"use strict"; + +import ActionTypes from "../constants/action_types"; +import Network from "../constants/network"; + +export function refreshJwt(userId){ + return { + type: ActionTypes.REFRESH_JWT, + method: Network.GET, + url: `api/sessions/${userId}` + } +} \ No newline at end of file diff --git a/client/js/app.jsx b/client/js/app.jsx index c72ce1b..035605d 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -10,6 +10,7 @@ import routes from './routes'; import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; import history from './history'; +import jwt from './loaders/jwt'; //Needed for onTouchTap //Can go away when react 1.0 release @@ -39,6 +40,9 @@ const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS syncReduxAndRouter(history, store); +// Setup JWT refresh +jwt(store.dispatch, window.DEFAULT_SETTINGS.userId); + ReactDOM.render( , document.getElementById("main-app") diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js index 6b2f6ef..ceb7478 100644 --- a/client/js/constants/action_types.js +++ b/client/js/constants/action_types.js @@ -3,6 +3,9 @@ import wrapper from "./constants_wrapper"; // These action types will have a _DONE action added const actionTypes = [ + // Jwt + "REFRESH_JWT", + // MESSAGES "ADD_MESSAGE", "REMOVE_MESSAGE", diff --git a/client/js/loaders/jwt.js b/client/js/loaders/jwt.js new file mode 100644 index 0000000..424f94c --- /dev/null +++ b/client/js/loaders/jwt.js @@ -0,0 +1,12 @@ +"use strict"; + +import { refreshJwt } from "../actions/jwt"; + +export default function(dispatch, currentUserId){ + + var refresh = 1000 * 60 * 20; // every 20 minutes + setInterval(function(){ + dispatch(refreshJwt(currentUserId)); + }, refresh); + +} \ No newline at end of file From 30b4b3b1fac0ef0f84ddc30946e0441b340c0632 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 28 Dec 2015 16:24:57 -0700 Subject: [PATCH 068/452] Removed unused code --- client/js/store/configure_store.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 464fc55..73f7572 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -5,8 +5,6 @@ import rootReducer from '../reducers'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; -import { createHashHistory as createHistory } from 'history'; - let middleware = [ thunk, API ]; let enhancers = [ From a623e0c4d60decdd10e86786fed441a19517ea6d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jan 2016 14:27:09 -0700 Subject: [PATCH 069/452] Updated redux simple router --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 6ab3760..6dc7edb 100644 --- a/client/package.json +++ b/client/package.json @@ -30,7 +30,7 @@ "react-router": "1.0.2", "react-tap-event-plugin": "0.2.1", "redux": "3.0.4", - "redux-simple-router": "^1.0.1", + "redux-simple-router": "^1.0.2", "redux-thunk": "1.0.0", "superagent": "1.5.0", "uuid": "2.0.1" From f0d57d2af93e55f764b7b8c371b7621baae41bb8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jan 2016 14:27:21 -0700 Subject: [PATCH 070/452] Adds helper component for testing --- client/specs_support/rapper.jsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 client/specs_support/rapper.jsx diff --git a/client/specs_support/rapper.jsx b/client/specs_support/rapper.jsx new file mode 100644 index 0000000..366fcc6 --- /dev/null +++ b/client/specs_support/rapper.jsx @@ -0,0 +1,12 @@ +"use strict"; + +import React from 'react'; +import { connect } from 'react-redux'; + +export default class Rapper extends React.Component{ + + render(){ + if(this.props.child) return
    + return
    {this.props.children}
    + } +} \ No newline at end of file From 24f62dff8917d9fc5d60be2e02efb62f15629398 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 11 Jan 2016 23:16:40 -0700 Subject: [PATCH 071/452] Load webpack settings from webpack config --- client/karma.conf.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/client/karma.conf.js b/client/karma.conf.js index 8d6b23f..586c062 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -1,5 +1,7 @@ // karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html -var webpack = require('webpack'); +var webpack = require('webpack'); +var webpackConfig = require('./config/webpack.config.js')(false); + module.exports = function(config) { function isCoverage(argument) { @@ -68,18 +70,8 @@ module.exports = function(config) { plugins: [ new webpack.DefinePlugin({'process.env.NODE_ENV': '"development"', '__DEV__': true}) ], - module: { - loaders: [ - { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader?stage=0&optional=runtime" }, - { test: /\.jsx?$/, exclude: /node_modules/, loader: "babel-loader?stage=0&optional=runtime" }, - { test: /\.(png|woff|woff2|eot|ttf|svg)($|\?)/, loader: 'url-loader' }, - { test: /\.css$/, loader: 'css-loader'} - ] - }, - resolve: { - extensions: ['', '.js', '.jsx'], - modulesDirectories: ["node_modules", "web_modules", "vendor"] - } + module: webpackConfig.module, + resolve: webpackConfig.resolve }, // Reduce the noise to the console From 36e31c2ae6cc13f59e4949cb4e619fc6f96b7f5c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 12 Jan 2016 15:10:11 -0700 Subject: [PATCH 072/452] Let webpack handle assets --- client/config/webpack.config.js | 5 ++--- client/gulpfile.js | 19 +------------------ client/js/libs/assets.js | 3 +++ client/js/libs/assets.spec.js | 31 +++++++++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 21 deletions(-) create mode 100644 client/js/libs/assets.js create mode 100644 client/js/libs/assets.spec.js diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index c926eac..d88d604 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -93,9 +93,8 @@ module.exports = function(release){ { test: /\.css$/ , loader: cssLoaders.join('!') }, { test: /\.less$/ , loader: lessLoaders.join('!') }, //{ test: /\.html$/, loader: 'webpack-compile-templates' }, // Add if you need to compile underscore.js - https://www.npmjs.com/package/webpack-compile-templates - //{ test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['file?hash=sha512&digest=hex&size=16&name=[hash].[ext]', 'image-webpack-loader?optimizationLevel=7&interlaced=false']}, - //{ test: /.*\.(eot|woff2|woff|ttf)/, loader: 'file?hash=sha512&digest=hex&size=16&name=cd [hash].[ext]'} - { test: /\.(png|woff|woff2|eot|ttf|svg)($|\?)/, loader: 'url-loader' } + { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' + { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=cd [name]-[hash].[ext]']} ] }, devServer: { diff --git a/client/gulpfile.js b/client/gulpfile.js index da17ba3..4ab065f 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -1,7 +1,6 @@ 'use strict'; var gulp = require('gulp'); -var gulpIgnore = require('gulp-ignore'); var $ = require('gulp-load-plugins')(); var util = require('util'); var through2 = require('through2'); @@ -54,22 +53,6 @@ gulp.task('vendor', function(){ }); -// Copy images -// ----------------------------------------------------------------------------- -gulp.task('images', function(){ - gulp.src('./images/**/*') - .pipe(gulp.dest(outputPath + '/images/')); -}); - - -// Copy fonts -// ----------------------------------------------------------------------------- -gulp.task('fonts', function(){ - gulp.src('./fonts/**/*') - .pipe(gulp.dest(outputPath + '/styles/fonts/')); -}); - - // Copy html files // ----------------------------------------------------------------------------- gulp.task('html', ['javascript'], function(){ @@ -130,7 +113,7 @@ gulp.task('javascript', function(cb){ // Build the app from source code // ----------------------------------------------------------------------------- gulp.task('build', ['clean'], function(cb){ - runSequence(['vendor', 'fonts', 'images', 'javascript', 'html'], cb); + runSequence(['html'], cb); }); diff --git a/client/js/libs/assets.js b/client/js/libs/assets.js new file mode 100644 index 0000000..771b7b4 --- /dev/null +++ b/client/js/libs/assets.js @@ -0,0 +1,3 @@ +// See http://webpack.github.io/docs/context.html#dynamic-requires + +export default require.context("../../assets", true, /^\.\//); diff --git a/client/js/libs/assets.spec.js b/client/js/libs/assets.spec.js new file mode 100644 index 0000000..0af7b18 --- /dev/null +++ b/client/js/libs/assets.spec.js @@ -0,0 +1,31 @@ +import assets from "./assets"; +import _ from "lodash"; + +describe('assets', () => { + + describe('default functionality', ()=> { + + it('Provides the url for an asset', () => { + + const jpg = assets('./images/atomicjolt.jpg'); + expect(jpg).toBe('data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhBMDlGMEVGQjBEODExRTU4Q0Y4RTJCOTU4QTNFMzM2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhBMDlGMEYwQjBEODExRTU4Q0Y4RTJCOTU4QTNFMzM2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OEEwOUYwRURCMEQ4MTFFNThDRjhFMkI5NThBM0UzMzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OEEwOUYwRUVCMEQ4MTFFNThDRjhFMkI5NThBM0UzMzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDg8QDw4MExMUFBMTHBsbGxwfHx8fHx8fHx8fAQcHBw0MDRgQEBgaFREVGh8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx//wAARCABFAGQDAREAAhEBAxEB/8QAiQABAAMBAQADAAAAAAAAAAAAAAQFBgcDAQIIAQEBAQAAAAAAAAAAAAAAAAAAAQIQAAAEBAQEAgYFBREAAAAAAAECAwQAEQUGIRITBzEiFBVBFlFhgTJCI3FSchcIYjNDJCax8YKSU2OT00SUJTXFVoYYSBEBAQEBAAAAAAAAAAAAAAAAAAERQf/aAAwDAQACEQMRAD8A/VMAgEAgEBiN1r6c21R0GNHT6q664p0dCZhIRFU0gMsYB+BLNMZ4TlPCcFjje3Fw7n2KrcBHgHuShUKoqN68xTMZR03A/P1rfPiZNTmMYo/SMpiaItfom3LkotyUdvWKM5K7YOQmmqWYCAhgYpijiUxRwEBisrKAQCAQCAQCAQCAhVqs06i0l3VqksDdiyTMs4VN4FKHgHiI8ADxHCA5xtZRqjctbc7o3EiKTmoEFC2WCmPSU7HKf7a05z9AiPA0gLWMvol0t9465alqnKk4vtkyO9dgbFokgB0llZBwNpEN6+bDEQiK1mxTIttVS8rC1DnTolQTcsjKyzi2epAYnAAAZAmAjLxGKldbghAIBAIBAIBAIDj9xHPujfnlRsYTWTbKpVrjXKMiPHpR+WzAQ4lIIc/t8QKMFb2+7ypVk2s4q7ooCCIAixZkwMsuYJJIkAPTLwDAoCPhBHF21r121Lwsa/LjXOe4rkqiraulER00e4Igm1bgHAoIlzfucChEabmpf4F+ISlOvdbXZSFmR58BcsTawG+nTApQ+mKnHUoIQCAQCAQCAQFbcrKrvrfqLOjuysKo4bqJs3hgEwJKGLIpsMfb4cZDwgOcbFVqjUmhOLKfNQotzUEVFay1XME18w5jPSqD75DBLH4Ql8MhgteNrpKbn3z5yeEHybbqp0LXbHAQK6dFGSj0xR4gUQ5PXLxKaYWn4h2wn2ydP0jlI8pDlrUGYmEA+YisADKfjkOaBEDeh6l5ZtO/mn5ui1JjUDHDH9TdSKoXD62YgQI60UxTFAxRASiEwEOAgMEIBAIBAIBAIBAc73g2laXzSRXZnBjcrRI5GL8oiTUTOAgdssJcRTOBhD8mfoEQEsrAbfONzLrTcWsnXmdjlt3K0cUJi0Ez0qRAAAOBlzG5TD+kIcccfEJxa15tk9tadKq3jUXNbXJiZ/XnxtMB4jhmSJL1GnFTVTuNubtdUbKqVlUNc1UdOGYtadT6Q3OuQh0yh0+USACeQhyF90w4QJHR9uXFUXsOgnqrZVpUiskUnaDghk1QUSLpmExTSEBNlzY+mCVo4BAIBAIBAIBAIDD31tYyuaqM62wqLi37haAKXdmHKso3MAgZI+JZ8eUfCC6rqf8Ah/2/TcA8rJXlyVAMRd1d0o4MI+PKUSEEPtAMDW9pdEo1Ib9PSmLdg3/kmyRES4eogFCCJkAgEAgEBDe1mlsXjFk7cERdVNQyLFIw8ypyJmVMBfoIQf3xCAzNxbxbb25V1qPWqyVpUW4EFZuKLg4lBQgHLzJpnLiUwDxguPYm623praG5u9IlogKmbg7OVQmZUoTEhEzFBQ5pYyKUYJj1tHcyxrvUVRt6rJvHCIZlW4lURVAs5ZtNYqZxLjxAJQMXtNqlPqbQrunuCOWxjGICqYzDMmYSHKPoEpgEBAeAwEKq3dbdJRqSz9+mkSkJpLVOQGUMgRcRBITlIBjc2UZBKfjAR67f1n0Gitq1V6ok0pzwhVGipwOJ1SnKBw00igKhuUQGQFw8YD4tHcCz7vRWVt2ppvunEAXTAp01ST4CZJUpDgAywGUoCWvdNBQuRvbSrrLW3aBnbdpkUHMiQRAx84F0wxKOAmnAZ6tb1bX0WrHpNRryKb5I2RZMiayxUzzkJVFEiHIUQHiAmw8YLi9fXnbDJOkqOKgnpV1ZNtSVUwMqRdVb82UhkwOXmnxEZQRCu3cqybQXbt7iqZWCzohlG5RSWUzFKMhH5RDyx9MDFB/2F2d/3ET+7O/6mC45PuZWLmu69ajW7dp1QetLOOVtQnrIgHbkft1U1naqsxATAJS5AAs5hlGIsazd26GV07U2lX2cgRf1mnqCSc8igAqVRMfWQ4CX2RUiduspT2G7djVe5gL5USI5RIusE2yL8xREh1Z8pZ8khH6s/hGBEe7anQa7vVY5rRXRfVlmZdWtvWJiqEKwygGRdVOZRmAnAoCOE/yggMltuz3TZN7grFkqIvUXtbfU55SnYyTQUmUUnxBEfgFT5geIAGA/DFqGjSX1Itbein1B8epP0O3dU/U95VU4nOc2M8MxsPVAaVuvS6XudZVUu4xE6GpbDZGgu3MgaovylIJ8xjchT5BHmH0l9lR1q3LjsCqV2qpW86ZOquQEj1VVoBTGOEhKmJ1iBlUy8MDDl4DKCMJdxHan4gqQRmbI8NbTsrY44SUEy4EH+NBeKrZe4tuKPte5pdxOGbGpt1HRLnYvxIVwqpqn99M/Or8vKUAABxw4wKxNFBen2Xty6qAmZ0kbxB1TBdGyAlTxOUxTGMYeUuYDmmOEseERXat0a/QqttXdg0qotagCLBTW6VZNbJmAcubTMaU8oynFSPP/AM7/APEf9MgdbC2/K3bf2Z6Htmof/LdHQ1Pj/Mcmb0+MEVA/dV2BvLsfl/rA6XL0nR9bjl05fL1uPDmgq6uLy72hx5j6Ts8g6nr9Pp5Twz6vJx9MEVVj/dt06/kntelMOq7XoTn8OrpY/RmgJ1r+Uuld+Wej6Xq1et6HJk6vl1dTJhqe7mnjAQF/u1/aLqe1Sml5p1dDLOQ6PWZsPs54CVXPI3lonfO3eWsiej1ej0eTL8rJn+X7vuS9kB9bK8h9tP5M7d2/N83tmjkzy/SaXxS+tjAc8tMj8N8Xhr1VzXUNMHsaTVMC04rAFRzCkoZQyxlRNmmByBLm48sFay5vuY7+TzL2HvvLLrul6j8jPqc32c3sgLS7vu97e183dq7dn/Uu6dPo58v6LW5Z5fq+EEV9F+53tFW7L2Ds+mTvnSdJ0+nzZOq0+TL70s/rgrQ/s55b/snlvo/5vouh0v6LR0v4OX1QR//Z'); + + const svg = assets('./images/atomicjolt.svg'); + expect(svg).toBe('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0zOTIgNDc3LjcgMjE0IDQ3LjMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTM5MiA0NzcuNyAyMTQgNDcuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6I0ZDQ0MwRjt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMTcuNCw0OTEuNWM1LjEtMC4xLDkuMiwzLjksOS4zLDlzLTMuOSw5LjEtOS4xLDkuMmMtNS4yLDAuMS05LjItMy44LTkuMy05DQoJCUMtMjI2LjYsNDk1LjQtMjIyLjgsNDkxLjYtMjE3LjQsNDkxLjV6IE0tMjExLjgsNTAwLjZjMC0xLjItMC4zLTIuMy0xLTMuM2MtMi4yLTMuNS02LjktMy42LTktMC4xYy0xLjQsMi4yLTEuMiw1LjMsMC4zLDcuMw0KCQljMS44LDIuNSw1LjMsMi44LDcuNiwwLjhDLTIxMi41LDUwNC0yMTEuOSw1MDIuNC0yMTEuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI0Ni4zLDUwNC40bDIuNCwxLjljMC4xLDAuMSwwLjEsMC4zLDAsMC40Yy0yLjMsMi41LTYuMiwzLjktMTAsMi41Yy0zLjktMS40LTYuNC01LjEtNi4yLTkuMQ0KCQljMC4yLTMuOCwzLjItNy4yLDcuMi04LjNjMy4yLTAuOCw3LjEsMC40LDguNywyLjdjMC4xLDAuMSwwLDAuMy0wLjEsMC4zbC0yLjQsMS45Yy0wLjEsMC4xLTAuMywwLjEtMC40LTAuMQ0KCQljLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4zYy0yLjYtMi44LTUuOC0xLjktNy42LDAuMmMtMi4zLDIuNi0yLDYuNywwLjcsOC45YzIuMSwxLjcsNC44LDEuNSw2LjgtMC40YzAuMi0wLjIsMC40LTAuNCwwLjctMC42DQoJCUMtMjQ2LjUsNTA0LjMtMjQ2LjQsNTA0LjMtMjQ2LjMsNTA0LjR6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMDQuOSw0OTEuOGgzYzAuMiwwLDAuMywwLjEsMC4zLDAuM3YxNGMwLDAuMiwwLjEsMC4zLDAuMywwLjNoNy40YzAuMiwwLDAuMywwLjEsMC4zLDAuM3YyLjMNCgkJYzAsMC4yLTAuMSwwLjMtMC4zLDAuM0gtMjA1Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjN2LTE2LjlDLTIwNS4zLDQ5Mi0yMDUuMSw0OTEuOC0yMDQuOSw0OTEuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI4NS41LDUwOS42aC0zLjRjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtMTcuNmMwLTAuMSwwLjEtMC4yLDAuMi0wLjFjMywzLjEsNS45LDYuMSw4LjgsOS4xDQoJCWMwLDAuMSwwLjEsMC4xLDAuMiwwYzIuOS0zLDUuOC02LDguNy05LjFjMC4xLTAuMSwwLjIsMCwwLjIsMC4xdjE3LjZjMCwwLjEtMC4xLDAuMS0wLjEsMC4xaC0zLjNjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtOS4yDQoJCWMtMC4yLTAuMS0wLjItMC4xLTAuMy0wLjFjLTEuNywxLjctMy40LDMuNC01LjEsNS4yYzAsMC0wLjEsMC0wLjIsMGMtMS43LTEuNy0zLjQtMy41LTUuMS01LjNjLTAuMS0wLjEtMC4yLDAtMC4yLDAuMXY5LjQNCgkJQy0yODUuNCw1MDkuNS0yODUuNCw1MDkuNi0yODUuNSw1MDkuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMwMS4zLDQ5MS41YzUuMS0wLjEsOS4yLDMuOSw5LjMsOXMtMy45LDkuMS05LjEsOS4yYy01LjIsMC4xLTkuMi0zLjgtOS4zLTkuMQ0KCQlDLTMxMC41LDQ5NS40LTMwNi43LDQ5MS42LTMwMS4zLDQ5MS41eiBNLTMwNi44LDUwMC42YzAuMSwwLjYsMC4xLDEuMywwLjMsMS45YzAuNiwyLDEuOCwzLjQsMy44LDRjMiwwLjUsMy43LDAsNS4yLTEuNQ0KCQljMi4xLTIuMiwyLjItNS44LDAuMy04LjJjLTEuMy0xLjYtMy0yLjQtNS4yLTJDLTMwNSw0OTUuMy0zMDYuNyw0OTcuNi0zMDYuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMzMi44LDQ5MS40YzIuOCw1LjksNS42LDExLjcsOC40LDE3LjVjMC4xLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjcsMC0xLjMsMC0yLDBjLTAuNSwwLTEuMiwwLjItMS41LTAuMQ0KCQljLTAuNC0wLjItMC41LTAuOS0wLjctMS40Yy0wLjMtMC43LTAuNi0xLjQtMC45LTJjLTAuMS0wLjItMC4zLTAuMy0wLjUtMC4zYy0xLjksMC0zLjcsMC01LjYsMGMtMC4zLDAtMC41LDAuMS0wLjYsMC40DQoJCWMtMC40LDEtMC44LDEuOS0xLjIsMi45Yy0wLjEsMC4zLTAuNSwwLjUtMC44LDAuNWMtMSwwLTIsMC0zLDBjLTAuMSwwLTAuMi0wLjEtMC4xLTAuMmMyLjgtNS45LDUuNi0xMS42LDguNC0xNy41DQoJCUMtMzMzLDQ5MS4zLTMzMi44LDQ5MS4zLTMzMi44LDQ5MS40eiBNLTMzMyw0OTguNGwtMS43LDMuOGMwLDAuMSwwLDAuMiwwLjEsMC4yaDMuM2MwLjEsMCwwLjItMC4xLDAuMS0wLjJsLTEuNi0zLjgNCgkJQy0zMzIuOCw0OTguMy0zMzMsNDk4LjMtMzMzLDQ5OC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzI1LjEsNDk0LjZ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41YzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtNC41DQoJCWMtMC4xLDAtMC4yLDAuMS0wLjIsMC4ydjE0LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTVjMC0wLjEtMC4xLTAuMi0wLjItMC4yaC00LjUNCgkJQy0zMjUsNDk0LjgtMzI1LjEsNDk0LjctMzI1LjEsNDk0LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMzMsNDkxLjdoMy4yYzAuMSwwLDAuMywwLjEsMC4zLDAuM2MwLDAuMSwwLDAuMiwwLDAuMmMwLDQuOSwwLDEwLjMsMCwxNS4zYzAsMy44LTIuNSw3LTYuMSw3LjkNCgkJYy0wLjYsMC4yLTEuMywwLjItMiwwLjNjLTAuMiwwLTAuMy0wLjEtMC4zLTAuM3YtMi42YzAtMC4xLDAuMS0wLjMsMC4yLTAuM2MwLjMsMCwwLjYsMCwwLjktMC4xYzEuOC0wLjQsMy4yLTIsMy40LTQNCgkJYzAtMC40LDAuMS0wLjksMC4xLTEuM2MwLTQuOCwwLTEwLDAtMTQuOHYtMC40Qy0yMzMuMyw0OTEuOS0yMzMuMiw0OTEuNy0yMzMsNDkxLjd6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjYuNiw0OTEuOGgzLjJjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjE3LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTINCgkJQy0yNjYuOCw0OTEuOS0yNjYuOCw0OTEuOC0yNjYuNiw0OTEuOHoiLz4NCgk8Zz4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xODkuNCw0OTQuOGgtNC41Yy0wLjEsMC0wLjItMC4xLTAuMi0wLjJ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41DQoJCQljMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC00LjVjLTAuMSwwLTAuMiwwLjEtMC4yLDAuMnYxNC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtMy4yYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJWNDk1DQoJCQlDLTE4OS4xLDQ5NC45LTE4OS4yLDQ5NC44LTE4OS40LDQ5NC44eiIvPg0KCTwvZz4NCjwvZz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzYyLDQ4NS44bC04LjctN2MtMC4xLTAuMS0wLjItMC4xLTAuMywwbC0xOC4zLDI2LjVjLTAuMSwwLjEsMCwwLjIsMCwwLjJsMTUsMTZjMCwwLjEsMC4xLDAuMSwwLjIsMC4xDQoJbDE5LjItNS4xYzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtNy4zLTMwLjRDLTM2MS45LDQ4NS45LTM2Miw0ODUuOS0zNjIsNDg1Ljh6IE0tMzc5LjcsNTEyLjVsMTEuMi0xNmMwLjEtMC4xLDAuMy0wLjEsMC40LDAuMQ0KCWwyLjcsMTIuOWMwLDAuMSwwLDAuMi0wLjEsMC4ybC0xMy4zLDMuN2MtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMC41LTAuNUMtMzc5LjgsNTEyLjctMzc5LjgsNTEyLjYtMzc5LjcsNTEyLjV6IE0tMzY3LjMsNDkxDQoJTC0zNjcuMyw0OTFsLTEuNy03LjdjMC0wLjIsMC4yLTAuMywwLjMtMC4ybDQuMywzLjRjMC4xLDAuMSwwLjEsMC4yLDAsMC4zTC0zNjcuMyw0OTFMLTM2Ny4zLDQ5MXogTS0zNzEuMSw0ODMuM2wyLjIsMTANCgljMCwwLjEsMCwwLjEsMCwwLjJsLTEyLjIsMTcuNGMtMC4xLDAuMS0wLjIsMC4xLTAuMywwbC01LjEtNS41Yy0wLjEtMC4xLTAuMS0wLjIsMC0wLjJsMTUuMi0yMg0KCUMtMzcxLjQsNDgzLjEtMzcxLjEsNDgzLjEtMzcxLjEsNDgzLjN6IE0tMzc3LjIsNTE1bDEzLjktMy45YzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtMy41LTE3YzAtMC4xLDAtMC4xLDAtMC4ybDMuMS00LjQNCgljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjFsNi4yLDI1LjVjMCwwLjEsMCwwLjItMC4xLDAuMmwtMTYuMSw0LjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTMuOC00Qy0zNzcuNCw1MTUuMi0zNzcuNCw1MTUtMzc3LjIsNTE1eiINCgkvPg0KPC9zdmc+DQo='); + + const big = assets('./images/atomicjolt.svg'); + expect(big).toBe('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0zOTIgNDc3LjcgMjE0IDQ3LjMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTM5MiA0NzcuNyAyMTQgNDcuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6I0ZDQ0MwRjt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMTcuNCw0OTEuNWM1LjEtMC4xLDkuMiwzLjksOS4zLDlzLTMuOSw5LjEtOS4xLDkuMmMtNS4yLDAuMS05LjItMy44LTkuMy05DQoJCUMtMjI2LjYsNDk1LjQtMjIyLjgsNDkxLjYtMjE3LjQsNDkxLjV6IE0tMjExLjgsNTAwLjZjMC0xLjItMC4zLTIuMy0xLTMuM2MtMi4yLTMuNS02LjktMy42LTktMC4xYy0xLjQsMi4yLTEuMiw1LjMsMC4zLDcuMw0KCQljMS44LDIuNSw1LjMsMi44LDcuNiwwLjhDLTIxMi41LDUwNC0yMTEuOSw1MDIuNC0yMTEuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI0Ni4zLDUwNC40bDIuNCwxLjljMC4xLDAuMSwwLjEsMC4zLDAsMC40Yy0yLjMsMi41LTYuMiwzLjktMTAsMi41Yy0zLjktMS40LTYuNC01LjEtNi4yLTkuMQ0KCQljMC4yLTMuOCwzLjItNy4yLDcuMi04LjNjMy4yLTAuOCw3LjEsMC40LDguNywyLjdjMC4xLDAuMSwwLDAuMy0wLjEsMC4zbC0yLjQsMS45Yy0wLjEsMC4xLTAuMywwLjEtMC40LTAuMQ0KCQljLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4zYy0yLjYtMi44LTUuOC0xLjktNy42LDAuMmMtMi4zLDIuNi0yLDYuNywwLjcsOC45YzIuMSwxLjcsNC44LDEuNSw2LjgtMC40YzAuMi0wLjIsMC40LTAuNCwwLjctMC42DQoJCUMtMjQ2LjUsNTA0LjMtMjQ2LjQsNTA0LjMtMjQ2LjMsNTA0LjR6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMDQuOSw0OTEuOGgzYzAuMiwwLDAuMywwLjEsMC4zLDAuM3YxNGMwLDAuMiwwLjEsMC4zLDAuMywwLjNoNy40YzAuMiwwLDAuMywwLjEsMC4zLDAuM3YyLjMNCgkJYzAsMC4yLTAuMSwwLjMtMC4zLDAuM0gtMjA1Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjN2LTE2LjlDLTIwNS4zLDQ5Mi0yMDUuMSw0OTEuOC0yMDQuOSw0OTEuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI4NS41LDUwOS42aC0zLjRjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtMTcuNmMwLTAuMSwwLjEtMC4yLDAuMi0wLjFjMywzLjEsNS45LDYuMSw4LjgsOS4xDQoJCWMwLDAuMSwwLjEsMC4xLDAuMiwwYzIuOS0zLDUuOC02LDguNy05LjFjMC4xLTAuMSwwLjIsMCwwLjIsMC4xdjE3LjZjMCwwLjEtMC4xLDAuMS0wLjEsMC4xaC0zLjNjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtOS4yDQoJCWMtMC4yLTAuMS0wLjItMC4xLTAuMy0wLjFjLTEuNywxLjctMy40LDMuNC01LjEsNS4yYzAsMC0wLjEsMC0wLjIsMGMtMS43LTEuNy0zLjQtMy41LTUuMS01LjNjLTAuMS0wLjEtMC4yLDAtMC4yLDAuMXY5LjQNCgkJQy0yODUuNCw1MDkuNS0yODUuNCw1MDkuNi0yODUuNSw1MDkuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMwMS4zLDQ5MS41YzUuMS0wLjEsOS4yLDMuOSw5LjMsOXMtMy45LDkuMS05LjEsOS4yYy01LjIsMC4xLTkuMi0zLjgtOS4zLTkuMQ0KCQlDLTMxMC41LDQ5NS40LTMwNi43LDQ5MS42LTMwMS4zLDQ5MS41eiBNLTMwNi44LDUwMC42YzAuMSwwLjYsMC4xLDEuMywwLjMsMS45YzAuNiwyLDEuOCwzLjQsMy44LDRjMiwwLjUsMy43LDAsNS4yLTEuNQ0KCQljMi4xLTIuMiwyLjItNS44LDAuMy04LjJjLTEuMy0xLjYtMy0yLjQtNS4yLTJDLTMwNSw0OTUuMy0zMDYuNyw0OTcuNi0zMDYuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMzMi44LDQ5MS40YzIuOCw1LjksNS42LDExLjcsOC40LDE3LjVjMC4xLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjcsMC0xLjMsMC0yLDBjLTAuNSwwLTEuMiwwLjItMS41LTAuMQ0KCQljLTAuNC0wLjItMC41LTAuOS0wLjctMS40Yy0wLjMtMC43LTAuNi0xLjQtMC45LTJjLTAuMS0wLjItMC4zLTAuMy0wLjUtMC4zYy0xLjksMC0zLjcsMC01LjYsMGMtMC4zLDAtMC41LDAuMS0wLjYsMC40DQoJCWMtMC40LDEtMC44LDEuOS0xLjIsMi45Yy0wLjEsMC4zLTAuNSwwLjUtMC44LDAuNWMtMSwwLTIsMC0zLDBjLTAuMSwwLTAuMi0wLjEtMC4xLTAuMmMyLjgtNS45LDUuNi0xMS42LDguNC0xNy41DQoJCUMtMzMzLDQ5MS4zLTMzMi44LDQ5MS4zLTMzMi44LDQ5MS40eiBNLTMzMyw0OTguNGwtMS43LDMuOGMwLDAuMSwwLDAuMiwwLjEsMC4yaDMuM2MwLjEsMCwwLjItMC4xLDAuMS0wLjJsLTEuNi0zLjgNCgkJQy0zMzIuOCw0OTguMy0zMzMsNDk4LjMtMzMzLDQ5OC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzI1LjEsNDk0LjZ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41YzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtNC41DQoJCWMtMC4xLDAtMC4yLDAuMS0wLjIsMC4ydjE0LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTVjMC0wLjEtMC4xLTAuMi0wLjItMC4yaC00LjUNCgkJQy0zMjUsNDk0LjgtMzI1LjEsNDk0LjctMzI1LjEsNDk0LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMzMsNDkxLjdoMy4yYzAuMSwwLDAuMywwLjEsMC4zLDAuM2MwLDAuMSwwLDAuMiwwLDAuMmMwLDQuOSwwLDEwLjMsMCwxNS4zYzAsMy44LTIuNSw3LTYuMSw3LjkNCgkJYy0wLjYsMC4yLTEuMywwLjItMiwwLjNjLTAuMiwwLTAuMy0wLjEtMC4zLTAuM3YtMi42YzAtMC4xLDAuMS0wLjMsMC4yLTAuM2MwLjMsMCwwLjYsMCwwLjktMC4xYzEuOC0wLjQsMy4yLTIsMy40LTQNCgkJYzAtMC40LDAuMS0wLjksMC4xLTEuM2MwLTQuOCwwLTEwLDAtMTQuOHYtMC40Qy0yMzMuMyw0OTEuOS0yMzMuMiw0OTEuNy0yMzMsNDkxLjd6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjYuNiw0OTEuOGgzLjJjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjE3LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTINCgkJQy0yNjYuOCw0OTEuOS0yNjYuOCw0OTEuOC0yNjYuNiw0OTEuOHoiLz4NCgk8Zz4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xODkuNCw0OTQuOGgtNC41Yy0wLjEsMC0wLjItMC4xLTAuMi0wLjJ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41DQoJCQljMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC00LjVjLTAuMSwwLTAuMiwwLjEtMC4yLDAuMnYxNC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtMy4yYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJWNDk1DQoJCQlDLTE4OS4xLDQ5NC45LTE4OS4yLDQ5NC44LTE4OS40LDQ5NC44eiIvPg0KCTwvZz4NCjwvZz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzYyLDQ4NS44bC04LjctN2MtMC4xLTAuMS0wLjItMC4xLTAuMywwbC0xOC4zLDI2LjVjLTAuMSwwLjEsMCwwLjIsMCwwLjJsMTUsMTZjMCwwLjEsMC4xLDAuMSwwLjIsMC4xDQoJbDE5LjItNS4xYzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtNy4zLTMwLjRDLTM2MS45LDQ4NS45LTM2Miw0ODUuOS0zNjIsNDg1Ljh6IE0tMzc5LjcsNTEyLjVsMTEuMi0xNmMwLjEtMC4xLDAuMy0wLjEsMC40LDAuMQ0KCWwyLjcsMTIuOWMwLDAuMSwwLDAuMi0wLjEsMC4ybC0xMy4zLDMuN2MtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMC41LTAuNUMtMzc5LjgsNTEyLjctMzc5LjgsNTEyLjYtMzc5LjcsNTEyLjV6IE0tMzY3LjMsNDkxDQoJTC0zNjcuMyw0OTFsLTEuNy03LjdjMC0wLjIsMC4yLTAuMywwLjMtMC4ybDQuMywzLjRjMC4xLDAuMSwwLjEsMC4yLDAsMC4zTC0zNjcuMyw0OTFMLTM2Ny4zLDQ5MXogTS0zNzEuMSw0ODMuM2wyLjIsMTANCgljMCwwLjEsMCwwLjEsMCwwLjJsLTEyLjIsMTcuNGMtMC4xLDAuMS0wLjIsMC4xLTAuMywwbC01LjEtNS41Yy0wLjEtMC4xLTAuMS0wLjIsMC0wLjJsMTUuMi0yMg0KCUMtMzcxLjQsNDgzLjEtMzcxLjEsNDgzLjEtMzcxLjEsNDgzLjN6IE0tMzc3LjIsNTE1bDEzLjktMy45YzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtMy41LTE3YzAtMC4xLDAtMC4xLDAtMC4ybDMuMS00LjQNCgljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjFsNi4yLDI1LjVjMCwwLjEsMCwwLjItMC4xLDAuMmwtMTYuMSw0LjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTMuOC00Qy0zNzcuNCw1MTUuMi0zNzcuNCw1MTUtMzc3LjIsNTE1eiINCgkvPg0KPC9zdmc+DQo='); + + }); + + }); + + describe('context', ()=> { + + it('gets the context object', ()=> { + expect(_.include(assets.keys(), './images/atomicjolt.jpg')).toBe(true); + }); + + }); + +}); \ No newline at end of file From f512c349ba5723ad37145c1494d7c2af05a9836c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 12 Jan 2016 15:10:23 -0700 Subject: [PATCH 073/452] Cleaned up package.json --- client/package.json | 18 +++++++++--------- package.json | 18 ++++++++---------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/client/package.json b/client/package.json index 6dc7edb..b756527 100644 --- a/client/package.json +++ b/client/package.json @@ -1,16 +1,16 @@ { "name": "react_client_starter_app", - "version": "0.0.1", - "description": "Javascript for the React Starter App.", + "version": "0.0.2", + "description": "Client only React Starter App.", "repository": { "type": "git", "url": "https://github.com/atomicjolt/react_client_starter_app" }, "scripts": { - "test": "karma start", + "test": "./node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls", - "build": "webpack --config webpack.release.js --progress --profile --colors", - "hot": "node webpack.hot.js", + "build": "gulp build && webpack --config webpack.release.js --progress --profile --colors", + "hot": "gulp build && node webpack.hot.js", "release": "cd ./client && gulp build --release && cd .. && s3_website push" }, "author": "atomicjolt, jbasdf", @@ -36,9 +36,6 @@ "uuid": "2.0.1" }, "devDependencies": { - "file-loader": "0.8.5", - "less": "2.5.3", - "node-sass": "3.4.2", "autoprefixer-loader": "3.1.0", "babel-core": "5.8.29", "babel-loader": "5.3.2", @@ -49,6 +46,7 @@ "ecstatic": "1.3.1", "event-stream": "3.3.2", "extract-text-webpack-plugin": "0.9.1", + "file-loader": "0.8.5", "gulp": "3.9.0", "gulp-file-include": "0.13.7", "gulp-filter": "3.0.1", @@ -76,8 +74,10 @@ "karma-sourcemap-loader": "0.3.6", "karma-spec-reporter": "0.0.23", "karma-webpack": "1.7.0", + "less": "2.5.3", "less-loader": "2.2.2", "minimist": "1.2.0", + "node-sass": "3.4.2", "npm-shrinkwrap": "5.4.1", "phantomjs": "1.9.19", "protractor": "3.0.0", @@ -88,7 +88,7 @@ "redux-devtools-dock-monitor": "1.0.0-beta-3", "redux-devtools-log-monitor": "1.0.0-beta-3", "rimraf": "2.4.4", - "run-sequence": "1.1.5", + "run-sequence": "^1.1.5", "sass-loader": "3.1.2", "style-loader": "0.13.0", "through2": "2.0.0", diff --git a/package.json b/package.json index 46d76c8..9b5469d 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,24 @@ { "name": "react_client_starter_app", - "version": "0.0.1", - "description": "Client only React project.", + "version": "0.0.2", + "description": "Client only React Starter App.", "engines": { "node": "5.2.0" }, "scripts": { "postinstall": "cd ./client && npm install", - "build": "cd ./client && gulp build --release", - "release": "cd ./client && gulp build --release && cd .. && s3_website push", - "hot": "cd ./client && gulp build && node webpack.hot.js", - "test": "cd ./client && node_modules/karma/bin/karma start", - "coveralls": "cat coverage/lcov.info | coveralls" + "build": "cd ./client && npm run build", + "release": "cd ./client && npm run build && cd .. && s3_website push", + "hot": "cd ./client && npm run hot", + "test": "cd ./client && npm run test", + "coveralls": "cd ./client && npm run coveralls" }, "repository": { "type": "git", "url": "https://github.com/atomicjolt/react_client_starter_app" }, "keywords": [ - "react", - "Rails", - "OAuth" + "react" ], "author": "atomicjolt", "license": "MIT", From 1044cd2381177aa0c43856d68b91fef059d52f0d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 12 Jan 2016 15:11:17 -0700 Subject: [PATCH 074/452] Demo load assets in home.jsx --- client/assets/images/atomicjolt.jpg | Bin 0 -> 3312 bytes client/assets/images/atomicjolt.png | Bin 0 -> 29513 bytes client/assets/images/atomicjolt.svg | 52 ++++++++++++++++++++++++++++ client/js/components/home.jsx | 6 +++- 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 client/assets/images/atomicjolt.jpg create mode 100644 client/assets/images/atomicjolt.png create mode 100644 client/assets/images/atomicjolt.svg diff --git a/client/assets/images/atomicjolt.jpg b/client/assets/images/atomicjolt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b55e6eb6b4e5f3617ae4ae9525e571bc8d542bd9 GIT binary patch literal 3312 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.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 Sx9Rn7No@@S^*YrTZ~qTE!FAdI literal 0 HcmV?d00001 diff --git a/client/assets/images/atomicjolt.svg b/client/assets/images/atomicjolt.svg new file mode 100644 index 0000000..5a1ec77 --- /dev/null +++ b/client/assets/images/atomicjolt.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/client/js/components/home.jsx b/client/js/components/home.jsx index d80e866..07dcfbb 100644 --- a/client/js/components/home.jsx +++ b/client/js/components/home.jsx @@ -2,12 +2,16 @@ import React from 'react'; import { Component } from 'react'; +import assets from '../libs/assets'; class Home extends Component { render(){ + + const img = assets("./images/atomicjolt.png"); + return

    - Home +
    ; } From 4d790f03e356a83012832a9616ca1ca86a90d070 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 12 Jan 2016 17:47:30 -0700 Subject: [PATCH 075/452] Fixed spec --- client/js/libs/assets.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/js/libs/assets.spec.js b/client/js/libs/assets.spec.js index 0af7b18..8110c78 100644 --- a/client/js/libs/assets.spec.js +++ b/client/js/libs/assets.spec.js @@ -13,8 +13,8 @@ describe('assets', () => { const svg = assets('./images/atomicjolt.svg'); expect(svg).toBe('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0zOTIgNDc3LjcgMjE0IDQ3LjMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTM5MiA0NzcuNyAyMTQgNDcuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6I0ZDQ0MwRjt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMTcuNCw0OTEuNWM1LjEtMC4xLDkuMiwzLjksOS4zLDlzLTMuOSw5LjEtOS4xLDkuMmMtNS4yLDAuMS05LjItMy44LTkuMy05DQoJCUMtMjI2LjYsNDk1LjQtMjIyLjgsNDkxLjYtMjE3LjQsNDkxLjV6IE0tMjExLjgsNTAwLjZjMC0xLjItMC4zLTIuMy0xLTMuM2MtMi4yLTMuNS02LjktMy42LTktMC4xYy0xLjQsMi4yLTEuMiw1LjMsMC4zLDcuMw0KCQljMS44LDIuNSw1LjMsMi44LDcuNiwwLjhDLTIxMi41LDUwNC0yMTEuOSw1MDIuNC0yMTEuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI0Ni4zLDUwNC40bDIuNCwxLjljMC4xLDAuMSwwLjEsMC4zLDAsMC40Yy0yLjMsMi41LTYuMiwzLjktMTAsMi41Yy0zLjktMS40LTYuNC01LjEtNi4yLTkuMQ0KCQljMC4yLTMuOCwzLjItNy4yLDcuMi04LjNjMy4yLTAuOCw3LjEsMC40LDguNywyLjdjMC4xLDAuMSwwLDAuMy0wLjEsMC4zbC0yLjQsMS45Yy0wLjEsMC4xLTAuMywwLjEtMC40LTAuMQ0KCQljLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4zYy0yLjYtMi44LTUuOC0xLjktNy42LDAuMmMtMi4zLDIuNi0yLDYuNywwLjcsOC45YzIuMSwxLjcsNC44LDEuNSw2LjgtMC40YzAuMi0wLjIsMC40LTAuNCwwLjctMC42DQoJCUMtMjQ2LjUsNTA0LjMtMjQ2LjQsNTA0LjMtMjQ2LjMsNTA0LjR6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMDQuOSw0OTEuOGgzYzAuMiwwLDAuMywwLjEsMC4zLDAuM3YxNGMwLDAuMiwwLjEsMC4zLDAuMywwLjNoNy40YzAuMiwwLDAuMywwLjEsMC4zLDAuM3YyLjMNCgkJYzAsMC4yLTAuMSwwLjMtMC4zLDAuM0gtMjA1Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjN2LTE2LjlDLTIwNS4zLDQ5Mi0yMDUuMSw0OTEuOC0yMDQuOSw0OTEuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI4NS41LDUwOS42aC0zLjRjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtMTcuNmMwLTAuMSwwLjEtMC4yLDAuMi0wLjFjMywzLjEsNS45LDYuMSw4LjgsOS4xDQoJCWMwLDAuMSwwLjEsMC4xLDAuMiwwYzIuOS0zLDUuOC02LDguNy05LjFjMC4xLTAuMSwwLjIsMCwwLjIsMC4xdjE3LjZjMCwwLjEtMC4xLDAuMS0wLjEsMC4xaC0zLjNjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtOS4yDQoJCWMtMC4yLTAuMS0wLjItMC4xLTAuMy0wLjFjLTEuNywxLjctMy40LDMuNC01LjEsNS4yYzAsMC0wLjEsMC0wLjIsMGMtMS43LTEuNy0zLjQtMy41LTUuMS01LjNjLTAuMS0wLjEtMC4yLDAtMC4yLDAuMXY5LjQNCgkJQy0yODUuNCw1MDkuNS0yODUuNCw1MDkuNi0yODUuNSw1MDkuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMwMS4zLDQ5MS41YzUuMS0wLjEsOS4yLDMuOSw5LjMsOXMtMy45LDkuMS05LjEsOS4yYy01LjIsMC4xLTkuMi0zLjgtOS4zLTkuMQ0KCQlDLTMxMC41LDQ5NS40LTMwNi43LDQ5MS42LTMwMS4zLDQ5MS41eiBNLTMwNi44LDUwMC42YzAuMSwwLjYsMC4xLDEuMywwLjMsMS45YzAuNiwyLDEuOCwzLjQsMy44LDRjMiwwLjUsMy43LDAsNS4yLTEuNQ0KCQljMi4xLTIuMiwyLjItNS44LDAuMy04LjJjLTEuMy0xLjYtMy0yLjQtNS4yLTJDLTMwNSw0OTUuMy0zMDYuNyw0OTcuNi0zMDYuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMzMi44LDQ5MS40YzIuOCw1LjksNS42LDExLjcsOC40LDE3LjVjMC4xLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjcsMC0xLjMsMC0yLDBjLTAuNSwwLTEuMiwwLjItMS41LTAuMQ0KCQljLTAuNC0wLjItMC41LTAuOS0wLjctMS40Yy0wLjMtMC43LTAuNi0xLjQtMC45LTJjLTAuMS0wLjItMC4zLTAuMy0wLjUtMC4zYy0xLjksMC0zLjcsMC01LjYsMGMtMC4zLDAtMC41LDAuMS0wLjYsMC40DQoJCWMtMC40LDEtMC44LDEuOS0xLjIsMi45Yy0wLjEsMC4zLTAuNSwwLjUtMC44LDAuNWMtMSwwLTIsMC0zLDBjLTAuMSwwLTAuMi0wLjEtMC4xLTAuMmMyLjgtNS45LDUuNi0xMS42LDguNC0xNy41DQoJCUMtMzMzLDQ5MS4zLTMzMi44LDQ5MS4zLTMzMi44LDQ5MS40eiBNLTMzMyw0OTguNGwtMS43LDMuOGMwLDAuMSwwLDAuMiwwLjEsMC4yaDMuM2MwLjEsMCwwLjItMC4xLDAuMS0wLjJsLTEuNi0zLjgNCgkJQy0zMzIuOCw0OTguMy0zMzMsNDk4LjMtMzMzLDQ5OC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzI1LjEsNDk0LjZ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41YzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtNC41DQoJCWMtMC4xLDAtMC4yLDAuMS0wLjIsMC4ydjE0LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTVjMC0wLjEtMC4xLTAuMi0wLjItMC4yaC00LjUNCgkJQy0zMjUsNDk0LjgtMzI1LjEsNDk0LjctMzI1LjEsNDk0LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMzMsNDkxLjdoMy4yYzAuMSwwLDAuMywwLjEsMC4zLDAuM2MwLDAuMSwwLDAuMiwwLDAuMmMwLDQuOSwwLDEwLjMsMCwxNS4zYzAsMy44LTIuNSw3LTYuMSw3LjkNCgkJYy0wLjYsMC4yLTEuMywwLjItMiwwLjNjLTAuMiwwLTAuMy0wLjEtMC4zLTAuM3YtMi42YzAtMC4xLDAuMS0wLjMsMC4yLTAuM2MwLjMsMCwwLjYsMCwwLjktMC4xYzEuOC0wLjQsMy4yLTIsMy40LTQNCgkJYzAtMC40LDAuMS0wLjksMC4xLTEuM2MwLTQuOCwwLTEwLDAtMTQuOHYtMC40Qy0yMzMuMyw0OTEuOS0yMzMuMiw0OTEuNy0yMzMsNDkxLjd6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjYuNiw0OTEuOGgzLjJjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjE3LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTINCgkJQy0yNjYuOCw0OTEuOS0yNjYuOCw0OTEuOC0yNjYuNiw0OTEuOHoiLz4NCgk8Zz4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xODkuNCw0OTQuOGgtNC41Yy0wLjEsMC0wLjItMC4xLTAuMi0wLjJ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41DQoJCQljMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC00LjVjLTAuMSwwLTAuMiwwLjEtMC4yLDAuMnYxNC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtMy4yYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJWNDk1DQoJCQlDLTE4OS4xLDQ5NC45LTE4OS4yLDQ5NC44LTE4OS40LDQ5NC44eiIvPg0KCTwvZz4NCjwvZz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzYyLDQ4NS44bC04LjctN2MtMC4xLTAuMS0wLjItMC4xLTAuMywwbC0xOC4zLDI2LjVjLTAuMSwwLjEsMCwwLjIsMCwwLjJsMTUsMTZjMCwwLjEsMC4xLDAuMSwwLjIsMC4xDQoJbDE5LjItNS4xYzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtNy4zLTMwLjRDLTM2MS45LDQ4NS45LTM2Miw0ODUuOS0zNjIsNDg1Ljh6IE0tMzc5LjcsNTEyLjVsMTEuMi0xNmMwLjEtMC4xLDAuMy0wLjEsMC40LDAuMQ0KCWwyLjcsMTIuOWMwLDAuMSwwLDAuMi0wLjEsMC4ybC0xMy4zLDMuN2MtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMC41LTAuNUMtMzc5LjgsNTEyLjctMzc5LjgsNTEyLjYtMzc5LjcsNTEyLjV6IE0tMzY3LjMsNDkxDQoJTC0zNjcuMyw0OTFsLTEuNy03LjdjMC0wLjIsMC4yLTAuMywwLjMtMC4ybDQuMywzLjRjMC4xLDAuMSwwLjEsMC4yLDAsMC4zTC0zNjcuMyw0OTFMLTM2Ny4zLDQ5MXogTS0zNzEuMSw0ODMuM2wyLjIsMTANCgljMCwwLjEsMCwwLjEsMCwwLjJsLTEyLjIsMTcuNGMtMC4xLDAuMS0wLjIsMC4xLTAuMywwbC01LjEtNS41Yy0wLjEtMC4xLTAuMS0wLjIsMC0wLjJsMTUuMi0yMg0KCUMtMzcxLjQsNDgzLjEtMzcxLjEsNDgzLjEtMzcxLjEsNDgzLjN6IE0tMzc3LjIsNTE1bDEzLjktMy45YzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtMy41LTE3YzAtMC4xLDAtMC4xLDAtMC4ybDMuMS00LjQNCgljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjFsNi4yLDI1LjVjMCwwLjEsMCwwLjItMC4xLDAuMmwtMTYuMSw0LjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTMuOC00Qy0zNzcuNCw1MTUuMi0zNzcuNCw1MTUtMzc3LjIsNTE1eiINCgkvPg0KPC9zdmc+DQo='); - const big = assets('./images/atomicjolt.svg'); - expect(big).toBe('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0zOTIgNDc3LjcgMjE0IDQ3LjMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTM5MiA0NzcuNyAyMTQgNDcuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6I0ZDQ0MwRjt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMTcuNCw0OTEuNWM1LjEtMC4xLDkuMiwzLjksOS4zLDlzLTMuOSw5LjEtOS4xLDkuMmMtNS4yLDAuMS05LjItMy44LTkuMy05DQoJCUMtMjI2LjYsNDk1LjQtMjIyLjgsNDkxLjYtMjE3LjQsNDkxLjV6IE0tMjExLjgsNTAwLjZjMC0xLjItMC4zLTIuMy0xLTMuM2MtMi4yLTMuNS02LjktMy42LTktMC4xYy0xLjQsMi4yLTEuMiw1LjMsMC4zLDcuMw0KCQljMS44LDIuNSw1LjMsMi44LDcuNiwwLjhDLTIxMi41LDUwNC0yMTEuOSw1MDIuNC0yMTEuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI0Ni4zLDUwNC40bDIuNCwxLjljMC4xLDAuMSwwLjEsMC4zLDAsMC40Yy0yLjMsMi41LTYuMiwzLjktMTAsMi41Yy0zLjktMS40LTYuNC01LjEtNi4yLTkuMQ0KCQljMC4yLTMuOCwzLjItNy4yLDcuMi04LjNjMy4yLTAuOCw3LjEsMC40LDguNywyLjdjMC4xLDAuMSwwLDAuMy0wLjEsMC4zbC0yLjQsMS45Yy0wLjEsMC4xLTAuMywwLjEtMC40LTAuMQ0KCQljLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4zYy0yLjYtMi44LTUuOC0xLjktNy42LDAuMmMtMi4zLDIuNi0yLDYuNywwLjcsOC45YzIuMSwxLjcsNC44LDEuNSw2LjgtMC40YzAuMi0wLjIsMC40LTAuNCwwLjctMC42DQoJCUMtMjQ2LjUsNTA0LjMtMjQ2LjQsNTA0LjMtMjQ2LjMsNTA0LjR6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMDQuOSw0OTEuOGgzYzAuMiwwLDAuMywwLjEsMC4zLDAuM3YxNGMwLDAuMiwwLjEsMC4zLDAuMywwLjNoNy40YzAuMiwwLDAuMywwLjEsMC4zLDAuM3YyLjMNCgkJYzAsMC4yLTAuMSwwLjMtMC4zLDAuM0gtMjA1Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjN2LTE2LjlDLTIwNS4zLDQ5Mi0yMDUuMSw0OTEuOC0yMDQuOSw0OTEuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI4NS41LDUwOS42aC0zLjRjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtMTcuNmMwLTAuMSwwLjEtMC4yLDAuMi0wLjFjMywzLjEsNS45LDYuMSw4LjgsOS4xDQoJCWMwLDAuMSwwLjEsMC4xLDAuMiwwYzIuOS0zLDUuOC02LDguNy05LjFjMC4xLTAuMSwwLjIsMCwwLjIsMC4xdjE3LjZjMCwwLjEtMC4xLDAuMS0wLjEsMC4xaC0zLjNjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtOS4yDQoJCWMtMC4yLTAuMS0wLjItMC4xLTAuMy0wLjFjLTEuNywxLjctMy40LDMuNC01LjEsNS4yYzAsMC0wLjEsMC0wLjIsMGMtMS43LTEuNy0zLjQtMy41LTUuMS01LjNjLTAuMS0wLjEtMC4yLDAtMC4yLDAuMXY5LjQNCgkJQy0yODUuNCw1MDkuNS0yODUuNCw1MDkuNi0yODUuNSw1MDkuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMwMS4zLDQ5MS41YzUuMS0wLjEsOS4yLDMuOSw5LjMsOXMtMy45LDkuMS05LjEsOS4yYy01LjIsMC4xLTkuMi0zLjgtOS4zLTkuMQ0KCQlDLTMxMC41LDQ5NS40LTMwNi43LDQ5MS42LTMwMS4zLDQ5MS41eiBNLTMwNi44LDUwMC42YzAuMSwwLjYsMC4xLDEuMywwLjMsMS45YzAuNiwyLDEuOCwzLjQsMy44LDRjMiwwLjUsMy43LDAsNS4yLTEuNQ0KCQljMi4xLTIuMiwyLjItNS44LDAuMy04LjJjLTEuMy0xLjYtMy0yLjQtNS4yLTJDLTMwNSw0OTUuMy0zMDYuNyw0OTcuNi0zMDYuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMzMi44LDQ5MS40YzIuOCw1LjksNS42LDExLjcsOC40LDE3LjVjMC4xLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjcsMC0xLjMsMC0yLDBjLTAuNSwwLTEuMiwwLjItMS41LTAuMQ0KCQljLTAuNC0wLjItMC41LTAuOS0wLjctMS40Yy0wLjMtMC43LTAuNi0xLjQtMC45LTJjLTAuMS0wLjItMC4zLTAuMy0wLjUtMC4zYy0xLjksMC0zLjcsMC01LjYsMGMtMC4zLDAtMC41LDAuMS0wLjYsMC40DQoJCWMtMC40LDEtMC44LDEuOS0xLjIsMi45Yy0wLjEsMC4zLTAuNSwwLjUtMC44LDAuNWMtMSwwLTIsMC0zLDBjLTAuMSwwLTAuMi0wLjEtMC4xLTAuMmMyLjgtNS45LDUuNi0xMS42LDguNC0xNy41DQoJCUMtMzMzLDQ5MS4zLTMzMi44LDQ5MS4zLTMzMi44LDQ5MS40eiBNLTMzMyw0OTguNGwtMS43LDMuOGMwLDAuMSwwLDAuMiwwLjEsMC4yaDMuM2MwLjEsMCwwLjItMC4xLDAuMS0wLjJsLTEuNi0zLjgNCgkJQy0zMzIuOCw0OTguMy0zMzMsNDk4LjMtMzMzLDQ5OC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzI1LjEsNDk0LjZ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41YzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtNC41DQoJCWMtMC4xLDAtMC4yLDAuMS0wLjIsMC4ydjE0LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTVjMC0wLjEtMC4xLTAuMi0wLjItMC4yaC00LjUNCgkJQy0zMjUsNDk0LjgtMzI1LjEsNDk0LjctMzI1LjEsNDk0LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMzMsNDkxLjdoMy4yYzAuMSwwLDAuMywwLjEsMC4zLDAuM2MwLDAuMSwwLDAuMiwwLDAuMmMwLDQuOSwwLDEwLjMsMCwxNS4zYzAsMy44LTIuNSw3LTYuMSw3LjkNCgkJYy0wLjYsMC4yLTEuMywwLjItMiwwLjNjLTAuMiwwLTAuMy0wLjEtMC4zLTAuM3YtMi42YzAtMC4xLDAuMS0wLjMsMC4yLTAuM2MwLjMsMCwwLjYsMCwwLjktMC4xYzEuOC0wLjQsMy4yLTIsMy40LTQNCgkJYzAtMC40LDAuMS0wLjksMC4xLTEuM2MwLTQuOCwwLTEwLDAtMTQuOHYtMC40Qy0yMzMuMyw0OTEuOS0yMzMuMiw0OTEuNy0yMzMsNDkxLjd6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjYuNiw0OTEuOGgzLjJjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjE3LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTINCgkJQy0yNjYuOCw0OTEuOS0yNjYuOCw0OTEuOC0yNjYuNiw0OTEuOHoiLz4NCgk8Zz4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xODkuNCw0OTQuOGgtNC41Yy0wLjEsMC0wLjItMC4xLTAuMi0wLjJ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41DQoJCQljMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC00LjVjLTAuMSwwLTAuMiwwLjEtMC4yLDAuMnYxNC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtMy4yYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJWNDk1DQoJCQlDLTE4OS4xLDQ5NC45LTE4OS4yLDQ5NC44LTE4OS40LDQ5NC44eiIvPg0KCTwvZz4NCjwvZz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzYyLDQ4NS44bC04LjctN2MtMC4xLTAuMS0wLjItMC4xLTAuMywwbC0xOC4zLDI2LjVjLTAuMSwwLjEsMCwwLjIsMCwwLjJsMTUsMTZjMCwwLjEsMC4xLDAuMSwwLjIsMC4xDQoJbDE5LjItNS4xYzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtNy4zLTMwLjRDLTM2MS45LDQ4NS45LTM2Miw0ODUuOS0zNjIsNDg1Ljh6IE0tMzc5LjcsNTEyLjVsMTEuMi0xNmMwLjEtMC4xLDAuMy0wLjEsMC40LDAuMQ0KCWwyLjcsMTIuOWMwLDAuMSwwLDAuMi0wLjEsMC4ybC0xMy4zLDMuN2MtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMC41LTAuNUMtMzc5LjgsNTEyLjctMzc5LjgsNTEyLjYtMzc5LjcsNTEyLjV6IE0tMzY3LjMsNDkxDQoJTC0zNjcuMyw0OTFsLTEuNy03LjdjMC0wLjIsMC4yLTAuMywwLjMtMC4ybDQuMywzLjRjMC4xLDAuMSwwLjEsMC4yLDAsMC4zTC0zNjcuMyw0OTFMLTM2Ny4zLDQ5MXogTS0zNzEuMSw0ODMuM2wyLjIsMTANCgljMCwwLjEsMCwwLjEsMCwwLjJsLTEyLjIsMTcuNGMtMC4xLDAuMS0wLjIsMC4xLTAuMywwbC01LjEtNS41Yy0wLjEtMC4xLTAuMS0wLjIsMC0wLjJsMTUuMi0yMg0KCUMtMzcxLjQsNDgzLjEtMzcxLjEsNDgzLjEtMzcxLjEsNDgzLjN6IE0tMzc3LjIsNTE1bDEzLjktMy45YzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtMy41LTE3YzAtMC4xLDAtMC4xLDAtMC4ybDMuMS00LjQNCgljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjFsNi4yLDI1LjVjMCwwLjEsMCwwLjItMC4xLDAuMmwtMTYuMSw0LjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTMuOC00Qy0zNzcuNCw1MTUuMi0zNzcuNCw1MTUtMzc3LjIsNTE1eiINCgkvPg0KPC9zdmc+DQo='); + const big = assets('./images/atomicjolt.png'); + expect(big).toBe('/_karma_webpack_//atomicjolt-92b4dadbb4b4c6bc62bcd225dbefa9d3.png'); }); From c36f1823622ea14f55b169339ad292f5ea117c2b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 12 Jan 2016 17:47:40 -0700 Subject: [PATCH 076/452] Removes unused packages --- client/package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/client/package.json b/client/package.json index b756527..4fc3250 100644 --- a/client/package.json +++ b/client/package.json @@ -60,9 +60,6 @@ "istanbul": "0.4.1", "istanbul-instrumenter-loader": "0.1.3", "jasmine-core": "2.4.1", - "jshint": "2.9.1-rc1", - "jshint-loader": "0.8.3", - "jshint-stylish": "2.1.0", "karma": "0.13.15", "karma-chrome-launcher": "0.2.2", "karma-cli": "0.1.1", From 4ec360e8d38ca00c265390590d88e1ae741e066e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 12 Jan 2016 17:47:49 -0700 Subject: [PATCH 077/452] Simplify default code --- client/js/components/home.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/js/components/home.jsx b/client/js/components/home.jsx index 07dcfbb..f43dba5 100644 --- a/client/js/components/home.jsx +++ b/client/js/components/home.jsx @@ -1,14 +1,13 @@ "use strict"; import React from 'react'; -import { Component } from 'react'; import assets from '../libs/assets'; -class Home extends Component { +class Home extends React.Component { render(){ - const img = assets("./images/atomicjolt.png"); + const img = assets("./images/atomicjolt.jpg"); return
    From f0dd10d05c4a40d152379d587a54132dbde82052 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 26 Jan 2016 15:04:25 -0700 Subject: [PATCH 078/452] Handle css, sass and less via webpack --- client/config/settings.js | 2 +- client/config/webpack.config.js | 16 +++++++++------- client/gulpfile.js | 1 + client/html/index.tpl.html | 1 + 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 6b88259..46e172f 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -40,7 +40,7 @@ module.exports = { }, cssEntries: { - + styles: clientAppPath + 'styles/styles.js' } }; diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index d88d604..215e0ad 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -15,7 +15,7 @@ module.exports = function(release){ var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; var jsLoaders = ["babel-loader?stage=0&optional=runtime"]; // include the runtime - var cssLoaders = ['style-loader', 'css-loader', 'autoprefixer-loader?' + autoprefix]; + var cssLoaders = ['css-loader', 'autoprefixer-loader?' + autoprefix]; var scssLoaders = cssLoaders.slice(0); scssLoaders.push('sass-loader?outputStyle=expanded&includePaths[]=' + (path.resolve(__dirname, './node_modules/bootstrap-sass'))); @@ -43,6 +43,8 @@ module.exports = function(release){ entries[name] = cssEntries[name]; } + var extractCSS = new ExtractTextPlugin('[name].css'); + return { context: __dirname, entry: entries, @@ -76,11 +78,11 @@ module.exports = function(release){ new ChunkManifestPlugin({ filename: 'webpack-common-manifest.json', manfiestVariable: 'webpackBundleManifest' - }) - //new ExtractTextPlugin("[name]_web_pack_bundle.css"), + }), + extractCSS //new webpack.optimize.CommonsChunkPlugin('init.js') // Use to extract common code from multiple entry points into a single init.js ] : [ - //new ExtractTextPlugin("[name]_web_pack_bundle.css"), + extractCSS, new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), new webpack.HotModuleReplacementPlugin(), new webpack.NoErrorsPlugin() @@ -89,9 +91,9 @@ module.exports = function(release){ loaders: [ { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.scss$/, loader: scssLoaders.join('!') }, - { test: /\.css$/ , loader: cssLoaders.join('!') }, - { test: /\.less$/ , loader: lessLoaders.join('!') }, + { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, + { test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }, + { test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }, //{ test: /\.html$/, loader: 'webpack-compile-templates' }, // Add if you need to compile underscore.js - https://www.npmjs.com/package/webpack-compile-templates { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=cd [name]-[hash].[ext]']} diff --git a/client/gulpfile.js b/client/gulpfile.js index 4ab065f..0a8250a 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -11,6 +11,7 @@ var fileinclude = require('gulp-file-include'); var rename = require('gulp-rename'); var settings = require('./config/settings.js'); var argv = require('minimist')(process.argv.slice(2)); +var path = require('path'); // Settings var release = argv.release; diff --git a/client/html/index.tpl.html b/client/html/index.tpl.html index 8086275..94f43f8 100644 --- a/client/html/index.tpl.html +++ b/client/html/index.tpl.html @@ -11,6 +11,7 @@ userId: 0 }; + @@include('./partials/_header.html') From 635f7d73966ee720c6525dc24d64330ac30700b0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 26 Jan 2016 16:31:56 -0700 Subject: [PATCH 079/452] Upgrades history and router --- client/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/package.json b/client/package.json index 4fc3250..091e34e 100644 --- a/client/package.json +++ b/client/package.json @@ -19,7 +19,7 @@ "dependencies": { "babel": "5.8.29", "babel-runtime": "5.8.29", - "history": "1.16.0", + "history": "1.17.0", "immutable": "3.7.5", "lodash": "3.10.1", "null-loader": "0.1.1", @@ -27,7 +27,7 @@ "react-dom": "0.14.3", "react-proxy-loader": "0.3.4", "react-redux": "4.0.0", - "react-router": "1.0.2", + "react-router": "1.0.3", "react-tap-event-plugin": "0.2.1", "redux": "3.0.4", "redux-simple-router": "^1.0.2", From 1f7167f3ae4a8d93026c6132c019194ef37cc538 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 1 Feb 2016 16:33:03 -0700 Subject: [PATCH 080/452] Delegate release to scripts in client dir. --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 9b5469d..81c0ef9 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,12 @@ "node": "5.2.0" }, "scripts": { - "postinstall": "cd ./client && npm install", - "build": "cd ./client && npm run build", - "release": "cd ./client && npm run build && cd .. && s3_website push", - "hot": "cd ./client && npm run hot", - "test": "cd ./client && npm run test", - "coveralls": "cd ./client && npm run coveralls" + "postinstall" : "cd ./client && npm install", + "build" : "cd ./client && npm run build", + "release" : "cd ./client && npm run release", + "hot" : "cd ./client && npm run hot", + "test" : "cd ./client && npm run test", + "coveralls" : "cd ./client && npm run coveralls" }, "repository": { "type": "git", From ff82ef5d660a8f124db1e8e7fafa9f162c877bf3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 1 Feb 2016 16:33:20 -0700 Subject: [PATCH 081/452] Removes .tpl --- client/html/{404.tpl.html => 404.html} | 0 client/html/{index.tpl.html => index.html} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename client/html/{404.tpl.html => 404.html} (100%) rename client/html/{index.tpl.html => index.html} (100%) diff --git a/client/html/404.tpl.html b/client/html/404.html similarity index 100% rename from client/html/404.tpl.html rename to client/html/404.html diff --git a/client/html/index.tpl.html b/client/html/index.html similarity index 100% rename from client/html/index.tpl.html rename to client/html/index.html From cfbf8d9c141c453acae6f155b0dd99c3ba0c7e9c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 1 Feb 2016 16:33:40 -0700 Subject: [PATCH 082/452] Removes unused file --- client/webpack.release.js | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 client/webpack.release.js diff --git a/client/webpack.release.js b/client/webpack.release.js deleted file mode 100644 index 69a49cd..0000000 --- a/client/webpack.release.js +++ /dev/null @@ -1,4 +0,0 @@ -var release = true; -var webpackConfig = require('./config/webpack.config.js')(release); - -module.exports = webpackConfig; \ No newline at end of file From e5e3835b5295bd42fe2a8f418f391dc788ade818 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 1 Feb 2016 22:33:23 -0700 Subject: [PATCH 083/452] Adds build process for files in html directory. --- README.md | 17 ++- client/config/webpack.config.js | 5 +- client/gulpfile.js | 163 ++++++++++++++++++++------- client/html/404.html | 16 +-- client/html/about.md | 14 +++ client/html/index.html | 24 +--- client/html/layouts/application.html | 21 ++++ client/package.json | 17 ++- client/webpack.hot.js | 3 +- 9 files changed, 193 insertions(+), 87 deletions(-) create mode 100644 client/html/about.md create mode 100644 client/html/layouts/application.html diff --git a/README.md b/README.md index 88869f7..a1aadd2 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,20 @@ then visit http://localhost:8080 #Development: ----------------------- -Source code lives in the client directory. Modify html and js files in that directory to build your -application. +Source code lives in the client directory. Modify html and js files in that directory to build your application. +## React.js +----------- +React code can be found in client/js. We use Redux and the React-Router. + +## Html +----------- +All html files live in client/html. The build process will properly process ejs in any html files as well as process markdown for files that end in .md. All front matter in .md files will be available to the ejs templates. See about.md for an example. #Tests ----------- +Karma and Jasmine are used for testing. To run tests run: + `npm run test` @@ -87,6 +95,11 @@ Inside the client directory run: #Deploy: ----------------------- + Build a development release without deploying: + + `npm run build_dev` + + Build a release without deploying: `npm run build` diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 215e0ad..f8dc648 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -5,6 +5,7 @@ var path = require('path'); var ExtractTextPlugin = require('extract-text-webpack-plugin'); var ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); var settings = require('./settings.js'); +var _ = require('lodash'); module.exports = function(release){ @@ -26,7 +27,7 @@ module.exports = function(release){ var entries; if(release){ - entries = settings.entries; + entries = _.cloneDeep(settings.entries); } else { jsLoaders.unshift("react-hot-loader"); @@ -43,7 +44,7 @@ module.exports = function(release){ entries[name] = cssEntries[name]; } - var extractCSS = new ExtractTextPlugin('[name].css'); + var extractCSS = new ExtractTextPlugin(release ? '[name]-[chunkhash].css' : '[name].css'); return { context: __dirname, diff --git a/client/gulpfile.js b/client/gulpfile.js index 0a8250a..edca682 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -7,11 +7,17 @@ var through2 = require('through2'); var es = require('event-stream'); var runSequence = require('run-sequence'); var webpack = require('webpack'); -var fileinclude = require('gulp-file-include'); var rename = require('gulp-rename'); var settings = require('./config/settings.js'); var argv = require('minimist')(process.argv.slice(2)); var path = require('path'); +var glob = require("glob"); +var _ = require("lodash"); +var fs = require("fs"); +var mkdirp = require("mkdirp"); +var marked = require('gulp-markdown'); +var frontMatter = require('gulp-front-matter'); +var ejs = require('ejs'); // Settings var release = argv.release; @@ -19,19 +25,7 @@ var outputPath = release ? settings.prodOutput : settings.devOutput; var webpackConfig = require('./config/webpack.config.js')(release); var webpackStats; - -// A bit hackish. This function can't be called until after the javascript task has been run -// because webpackStats is undefined until webpack has run. -function getHashed(entryPoint){ - var jsFile = webpackStats.assetsByChunkName[entryPoint]; - // ignore source maps ie 'file.js' will have a source map of 'file.js.map' - if (util.isArray(jsFile)) { - jsFile = jsFile.filter(function (filename) { - return path.extname(filename).toLowerCase() === '.js' - }).shift(); - } - return jsFile; -} +var defaultLayout = 'application.html'; // Clean up // ----------------------------------------------------------------------------- @@ -54,35 +48,54 @@ gulp.task('vendor', function(){ }); -// Copy html files +// Build markdown files // ----------------------------------------------------------------------------- -gulp.task('html', ['javascript'], function(){ +gulp.task('markdown', function(){ + + var options = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: true, + smartypants: false + // highlight: function (code, lang, callback) { + // require('pygmentize-bundled')({ lang: lang, format: 'html' }, code, function (err, result) { + // callback(err, result.toString()); + // }); + // } + }; + + return gulp.src('./html/**/*.md') + .pipe(frontMatter({property: 'metadata', remove: true})) + .pipe(applyLayout(defaultLayout)) + .pipe(marked(options)) + .pipe(applyWebpack()) // Change to webpack hashed file names in release + .pipe(!release ? $.util.noop() : $.htmlmin({ + removeComments: true, + collapseWhitespace: true, + minifyJS: true + })) + .pipe(rename({extname: '.html'})) + .pipe(gulp.dest(outputPath)); +}); - var tplFilter = $.filter('**/*.tpl.html', {restore: true}); - var htmlFilter = $.filter('**/*.html', {restore: true}); +// Process files in the html diretory +// ----------------------------------------------------------------------------- +gulp.task('html', function(){ + var htmlFilter = $.filter('**/*.html', {restore: true}); + return gulp.src('./html/**/*') - .pipe($.ignore.exclude("partials/**")) - .pipe($.ignore.exclude("partials")) - .pipe(tplFilter) - .pipe(fileinclude()) // Compile html (tpl) templates - .pipe(rename({ - extname: "" - })) - .pipe(rename({ - extname: ".html" - })) - .pipe(tplFilter.restore) + .pipe($.ignore.exclude('layouts/**')) + .pipe($.ignore.exclude('layouts')) + .pipe($.ignore.exclude('partials/**')) + .pipe($.ignore.exclude('partials')) + .pipe($.ignore.exclude('**/*.md')) .pipe(htmlFilter) - .pipe(through2.obj(function (html, enc, cb) { // replace entry points with names generated by webpack - var result = String(html.contents); - for(var entry in webpackConfig.entry){ - result = result.replace(entry + settings.buildSuffix, getHashed(entry)); - } - html.contents = new Buffer(result); - this.push(html); - cb(); - })) + .pipe(applyLayout(defaultLayout)) + .pipe(applyWebpack()) // Change to webpack hashed file names in release .pipe(!release ? $.util.noop() : $.htmlmin({ removeComments: true, collapseWhitespace: true, @@ -98,7 +111,6 @@ gulp.task('html', ['javascript'], function(){ gulp.task('javascript', function(cb){ var bundler = webpack(webpackConfig); - function bundle(err, stats){ webpackStats = stats.toJson(); if (err){ @@ -114,9 +126,78 @@ gulp.task('javascript', function(cb){ // Build the app from source code // ----------------------------------------------------------------------------- gulp.task('build', ['clean'], function(cb){ - runSequence(['html'], cb); + runSequence('javascript', ['html', 'markdown'], cb); }); +// Watch for changes to html files and rebuild as needed. Webpack watches everything else +// and serves js, css, etc from memory. Html files are served from the build directory. +// ----------------------------------------------------------------------------- +gulp.task('watch', ['html', 'markdown'], function() { + gulp.watch(['html/**/*'], ['html', 'markdown']); +}); + // The default task -gulp.task('default', ['build']); +gulp.task('default', ['watch']); + + +// A bit hackish. This function can't be called until after the javascript task has been run +// because webpackStats is undefined until webpack has run. +function getHashed(entryPoint, ext){ + return _.find(webpackStats.assetsByChunkName[entryPoint], function(hashEntry){ + return path.extname(hashEntry).toLowerCase() === '.' + ext; + }); +} + + +// Changes webpack paths as needed. +function applyWebpack(){ + return through2.obj(function (html, enc, cb) { // replace entry points with names generated by webpack + if(release){ + var result = String(html.contents); + _.each(webpackConfig.entry, function(path, entry){ + if(_.has(settings.entries, entry)){ + result = result.replace(entry + settings.buildSuffix, getHashed(entry, 'js')); + } else if(_.has(settings.cssEntries, entry)){ + result = result.replace(entry + '.css', getHashed(entry, 'css')); + } + }); + html.contents = new Buffer(result); + } + this.push(html); + cb(); + }); +} + + +// Apply templates to content +function applyLayout(defaultLayout){ + return through2.obj(function (file, enc, cb) { + + var data = { + metadata: file.metadata + }; + + // Allow ejs code in content + data.content = ejs.compile(String(file.contents), { + cache: false, + filename: file.path + })(data); + + // If the user has specified a layout in the front matter user that. + // Otherwise use the default + var layout = file.metadata && file.metadata.layout ? file.metadata.layout : defaultLayout; + layout = path.extname(layout) ? layout : layout + '.html'; + layout = path.join(__dirname, './html/layouts/' + layout); + + var template = ejs.compile(fs.readFileSync(layout, 'utf8'), { + cache: false, + filename: layout + }); + + file.contents = new Buffer(template(data), 'utf8'); + this.push(file); + cb(); + + }); +} \ No newline at end of file diff --git a/client/html/404.html b/client/html/404.html index 45f7af5..f435443 100644 --- a/client/html/404.html +++ b/client/html/404.html @@ -1,14 +1,2 @@ - - - - - Page Not Found - - - - @@include('./partials/_header.html') -

    Page Not Found

    -

    Sorry, but the page you were trying to view does not exist.

    - - - +

    Page Not Found

    +

    Sorry, but the page you were trying to view does not exist.

    \ No newline at end of file diff --git a/client/html/about.md b/client/html/about.md new file mode 100644 index 0000000..05a6b3d --- /dev/null +++ b/client/html/about.md @@ -0,0 +1,14 @@ +--- +title: About +author: Atomic Jolt +layout: application +permalink: /about-us +categories: + - About Us +tags: + - About Us + - Atomic Jolt +--- +About Us +--------------- +<%= metadata.tags %> \ No newline at end of file diff --git a/client/html/index.html b/client/html/index.html index 94f43f8..65da103 100644 --- a/client/html/index.html +++ b/client/html/index.html @@ -1,22 +1,2 @@ - - - - - - React Client Starter - - - - - - - @@include('./partials/_header.html') -
    - - @@include('./partials/_google_analytics.html') - - \ No newline at end of file +
    + \ No newline at end of file diff --git a/client/html/layouts/application.html b/client/html/layouts/application.html new file mode 100644 index 0000000..e19e403 --- /dev/null +++ b/client/html/layouts/application.html @@ -0,0 +1,21 @@ + + + + + + React Client Starter + + + + + + + <%- include('../partials/_header.html') %> + <%- content %> + <%- include('../partials/_google_analytics.html') %> + + \ No newline at end of file diff --git a/client/package.json b/client/package.json index 091e34e..a7a2e54 100644 --- a/client/package.json +++ b/client/package.json @@ -9,9 +9,10 @@ "scripts": { "test": "./node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls", - "build": "gulp build && webpack --config webpack.release.js --progress --profile --colors", - "hot": "gulp build && node webpack.hot.js", - "release": "cd ./client && gulp build --release && cd .. && s3_website push" + "hot": "gulp watch & node webpack.hot.js", + "build_dev": "gulp build", + "build": "gulp build --release", + "release": "gulp build --release && cd .. && s3_website push" }, "author": "atomicjolt, jbasdf", "license": "MIT", @@ -22,7 +23,6 @@ "history": "1.17.0", "immutable": "3.7.5", "lodash": "3.10.1", - "null-loader": "0.1.1", "react": "0.14.3", "react-dom": "0.14.3", "react-proxy-loader": "0.3.4", @@ -44,15 +44,19 @@ "css-loader": "0.23.0", "dotenv": "1.2.0", "ecstatic": "1.3.1", + "ejs": "^2.4.1", "event-stream": "3.3.2", "extract-text-webpack-plugin": "0.9.1", "file-loader": "0.8.5", + "glob": "^6.0.3", "gulp": "3.9.0", "gulp-file-include": "0.13.7", "gulp-filter": "3.0.1", + "gulp-front-matter": "^1.3.0", "gulp-htmlmin": "1.3.0", "gulp-ignore": "2.0.1", "gulp-load-plugins": "1.1.0", + "gulp-markdown": "^1.2.0", "gulp-rename": "1.2.2", "gulp-util": "3.0.7", "html-minifier": "1.0.0", @@ -74,8 +78,11 @@ "less": "2.5.3", "less-loader": "2.2.2", "minimist": "1.2.0", + "mkdirp": "^0.5.1", "node-sass": "3.4.2", "npm-shrinkwrap": "5.4.1", + "null-loader": "0.1.1", + "path": "^0.12.7", "phantomjs": "1.9.19", "protractor": "3.0.0", "psi": "2.0.2", @@ -85,7 +92,7 @@ "redux-devtools-dock-monitor": "1.0.0-beta-3", "redux-devtools-log-monitor": "1.0.0-beta-3", "rimraf": "2.4.4", - "run-sequence": "^1.1.5", + "run-sequence": "1.1.5", "sass-loader": "3.1.2", "style-loader": "0.13.0", "through2": "2.0.0", diff --git a/client/webpack.hot.js b/client/webpack.hot.js index e73c64c..f998e16 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -12,10 +12,11 @@ new webpackDevServer(webpack(webpackConfig), { inline: true, progress: true, headers: { "Access-Control-Allow-Origin": "*" }, - filename: '[name]_web_pack_bundle.js', + filename: '[name]' + settings.buildSuffix, }).listen(settings.hotPort, 'localhost', function(err, result){ if(err){ console.log('webpack-dev-server', err); } console.log('Webpack hot load server listening on: ' + webpackConfig.output.publicPath); + console.log('Webpack hot load server serving content from: ' + settings.devOutput); }); \ No newline at end of file From e08aa19191c87ed2e692b6d1eb2634d1faf578d8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 8 Feb 2016 19:44:00 -0700 Subject: [PATCH 084/452] Move constants into action files. --- client/js/actions/jwt.js | 16 +++++++++--- client/js/actions/message.js | 25 ++++++++++++++++--- client/js/app.jsx | 6 +++-- client/js/constants/action_types.js | 20 --------------- .../{constants_wrapper.js => wrapper.js} | 6 ++--- client/js/middleware/api.js | 4 +-- client/js/reducers/application.js | 1 - client/js/reducers/messages.js | 12 ++++----- client/js/reducers/messages.spec.js | 20 +++++++-------- client/js/reducers/settings.js | 16 ++++++++++-- client/js/reducers/settings.spec.js | 22 ++++++++++++++-- 11 files changed, 94 insertions(+), 54 deletions(-) delete mode 100644 client/js/constants/action_types.js rename client/js/constants/{constants_wrapper.js => wrapper.js} (78%) diff --git a/client/js/actions/jwt.js b/client/js/actions/jwt.js index 0838e6a..ebc3259 100644 --- a/client/js/actions/jwt.js +++ b/client/js/actions/jwt.js @@ -1,11 +1,21 @@ "use strict"; -import ActionTypes from "../constants/action_types"; -import Network from "../constants/network"; +import wrapper from "../constants/wrapper"; +import Network from "../constants/network"; + +// Local actions +const actions = []; + +// Actions that make an api request +const requests = [ + "REFRESH_JWT" +]; + +export const Constants = wrapper(actions, requests); export function refreshJwt(userId){ return { - type: ActionTypes.REFRESH_JWT, + type: Constants.REFRESH_JWT, method: Network.GET, url: `api/sessions/${userId}` } diff --git a/client/js/actions/message.js b/client/js/actions/message.js index d446201..24a17d6 100644 --- a/client/js/actions/message.js +++ b/client/js/actions/message.js @@ -1,16 +1,35 @@ "use strict"; -import ActionTypes from "../constants/action_types"; +import wrapper from "../constants/wrapper"; + +// Local actions +const actions = []; + +// Actions that make an api request +const requests = [ + "ADD_MESSAGE", + "REMOVE_MESSAGE", + "CLEAR_MESSAGES" +]; + +export const Constants = wrapper(actions, requests); export function addMessage(message){ return { - type: ActionTypes.ADD_MESSAGE, + type: Constants.ADD_MESSAGE, + data: message + }; +} + +export function removeMessage(message){ + return { + type: Constants.REMOVE_MESSAGE, data: message }; } export function clearMessages(){ return { - type: ActionTypes.CLEAR_MESSAGES + type: Constants.CLEAR_MESSAGES }; } \ No newline at end of file diff --git a/client/js/app.jsx b/client/js/app.jsx index 035605d..713e92d 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -40,8 +40,10 @@ const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS syncReduxAndRouter(history, store); -// Setup JWT refresh -jwt(store.dispatch, window.DEFAULT_SETTINGS.userId); +(window.DEFAULT_SETTINGS.jwt){ + // Setup JWT refresh + jwt(store.dispatch, window.DEFAULT_SETTINGS.userId); +} ReactDOM.render( , diff --git a/client/js/constants/action_types.js b/client/js/constants/action_types.js deleted file mode 100644 index ceb7478..0000000 --- a/client/js/constants/action_types.js +++ /dev/null @@ -1,20 +0,0 @@ -import wrapper from "./constants_wrapper"; - -// These action types will have a _DONE action added -const actionTypes = [ - - // Jwt - "REFRESH_JWT", - - // MESSAGES - "ADD_MESSAGE", - "REMOVE_MESSAGE", - "CLEAR_MESSAGES" - -]; - -// These types will receive a _DONE -const asyncActionTypes = [ -]; - -export default wrapper(actionTypes, asyncActionTypes); \ No newline at end of file diff --git a/client/js/constants/constants_wrapper.js b/client/js/constants/wrapper.js similarity index 78% rename from client/js/constants/constants_wrapper.js rename to client/js/constants/wrapper.js index 2992c2c..fb90a88 100644 --- a/client/js/constants/constants_wrapper.js +++ b/client/js/constants/wrapper.js @@ -2,7 +2,7 @@ import _ from "lodash"; -const done = "_DONE"; +const DONE = "_DONE"; export default function(actionTypes, asyncActionTypes){ @@ -13,11 +13,11 @@ export default function(actionTypes, asyncActionTypes){ types = _.reduce(asyncActionTypes, (result, key) => { result[key] = key; - result[`${key}${done}`] = `${key}${done}`; + result[`${key}${DONE}`] = `${key}${DONE}`; return result }, types); - types.DONE = done; + types.DONE = DONE; return types; } \ No newline at end of file diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index 87f7ada..bc9003c 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -1,5 +1,5 @@ import api from "../libs/api"; -import actionTypes from "../constants/action_types"; +import { DONE } from "../constants/wrapper"; const API = store => next => action => { var promise; @@ -11,7 +11,7 @@ const API = store => next => action => { if(promise){ promise.then((response, error) => { store.dispatch({ - type: action.type + actionTypes.DONE, + type: action.type + DONE, payload: response.body, original: action, response, diff --git a/client/js/reducers/application.js b/client/js/reducers/application.js index 04bb2b3..bad1662 100644 --- a/client/js/reducers/application.js +++ b/client/js/reducers/application.js @@ -1,7 +1,6 @@ "use strict"; import Immutable from 'immutable'; -import Constants from '../constants/action_types'; const initialState = Immutable.fromJS([]); diff --git a/client/js/reducers/messages.js b/client/js/reducers/messages.js index 1c29d82..d9fc860 100644 --- a/client/js/reducers/messages.js +++ b/client/js/reducers/messages.js @@ -1,8 +1,8 @@ "use strict"; -import Immutable from "immutable"; -import ActionTypes from "../constants/action_types"; -import ErrorTypes from "../constants/error"; +import Immutable from "immutable"; +import { Constants as MessageConstants } from "../actions/message"; +import ErrorTypes from "../constants/error"; const initialState = Immutable.fromJS([]); @@ -22,15 +22,15 @@ export default (state = initialState, action) => { return state.push(`Request error: ${action.payload.message}`); break; - case ActionTypes.ADD_MESSAGE: + case MessageConstants.ADD_MESSAGE: return state.push(action.payload.message); break; - case ActionTypes.REMOVE_MESSAGE: + case MessageConstants.REMOVE_MESSAGE: return state.filter(message => message != action.payload.message); break; - case ActionTypes.CLEAR_MESSAGES: + case MessageConstants.CLEAR_MESSAGES: return initialState; break; diff --git a/client/js/reducers/messages.spec.js b/client/js/reducers/messages.spec.js index a41384c..66c6688 100644 --- a/client/js/reducers/messages.spec.js +++ b/client/js/reducers/messages.spec.js @@ -1,10 +1,10 @@ "use strict"; -import _ from "lodash"; -import Immutable from "immutable"; -import ActionTypes from "../constants/action_types"; -import ErrorTypes from "../constants/error"; -import messages from "./messages"; +import _ from "lodash"; +import Immutable from "immutable"; +import { Constants as MessageConstants } from "../actions/message"; +import ErrorTypes from "../constants/error"; +import messages from "./messages"; describe("message reducer", () => { @@ -67,7 +67,7 @@ describe("message reducer", () => { it("Adds a message", () => { const initialState = Immutable.fromJS([]); const action = { - type: ActionTypes.ADD_MESSAGE, + type: MessageConstants.ADD_MESSAGE, payload: { message: "Things are great" } @@ -83,13 +83,13 @@ describe("message reducer", () => { it("Removes message", () => { const action = { - type: ActionTypes.ADD_MESSAGE, + type: MessageConstants.ADD_MESSAGE, payload: { message: "Things are great" } }; const removeAction = { - type: ActionTypes.REMOVE_MESSAGE, + type: MessageConstants.REMOVE_MESSAGE, payload: { message: "Things are great" } @@ -107,13 +107,13 @@ describe("message reducer", () => { it("Removes message", () => { const action = { - type: ActionTypes.ADD_MESSAGE, + type: MessageConstants.ADD_MESSAGE, payload: { message: "Things are great" } }; const removeAction = { - type: ActionTypes.CLEAR_MESSAGES + type: MessageConstants.CLEAR_MESSAGES }; const initialState = Immutable.fromJS([action.payload.message]); const state = messages(initialState, action); diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js index 5347c21..07af3d0 100644 --- a/client/js/reducers/settings.js +++ b/client/js/reducers/settings.js @@ -1,7 +1,19 @@ -import Immutable from 'immutable'; +import Immutable from 'immutable'; +import { Constants as JwtConstants } from "../actions/jwt"; const initialState = Immutable.fromJS({}); export default (state = initialState, action) => { - return state; // the settings state should never changed depending on action + + switch(action.type){ + + case JwtConstants.REFRESH_JWT: + return state.set('jwt', action.payload); + break; + + default: + return state; + + } + } \ No newline at end of file diff --git a/client/js/reducers/settings.spec.js b/client/js/reducers/settings.spec.js index 9e811af..bddcfa8 100644 --- a/client/js/reducers/settings.spec.js +++ b/client/js/reducers/settings.spec.js @@ -1,13 +1,31 @@ -import settings from "./settings"; +import Immutable from 'immutable'; +import { Constants as JwtConstants } from "../actions/jwt"; +import settings from "./settings"; describe('settings reducer', () => { describe("initial state", () => { it("returns empty state", () => { - const state = settings(); + const initialState = Immutable.fromJS({}); + const state = settings(initialState, {}); expect(state.toJS()).toEqual({}); }); + + it("has a jwt token", () => { + const initial = {jwt: 'asdf'}; + const initialState = Immutable.fromJS(initial); + const state = settings(initialState, {}); + expect(state.toJS()).toEqual(initial); + + const newJwt = '1234'; + const newState = settings(state, { + type: JwtConstants.REFRESH_JWT, + payload: newJwt + }); + + expect(newState.toJS().jwt).toEqual(newJwt); + }); }); From f9fd08506d9190fdb29587ea3b7c110fd3f95dda Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 9 Feb 2016 21:07:40 -0700 Subject: [PATCH 085/452] Removed unused libraries --- client/gulpfile.js | 1 - client/package.json | 2 -- 2 files changed, 3 deletions(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index edca682..a7bdc9d 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -11,7 +11,6 @@ var rename = require('gulp-rename'); var settings = require('./config/settings.js'); var argv = require('minimist')(process.argv.slice(2)); var path = require('path'); -var glob = require("glob"); var _ = require("lodash"); var fs = require("fs"); var mkdirp = require("mkdirp"); diff --git a/client/package.json b/client/package.json index a7a2e54..411efda 100644 --- a/client/package.json +++ b/client/package.json @@ -48,9 +48,7 @@ "event-stream": "3.3.2", "extract-text-webpack-plugin": "0.9.1", "file-loader": "0.8.5", - "glob": "^6.0.3", "gulp": "3.9.0", - "gulp-file-include": "0.13.7", "gulp-filter": "3.0.1", "gulp-front-matter": "^1.3.0", "gulp-htmlmin": "1.3.0", From b7737b261e384f7f7caf6823a79719604240aedd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 9 Feb 2016 21:08:36 -0700 Subject: [PATCH 086/452] fixes syntax error --- client/js/app.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index 713e92d..d121adc 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -40,7 +40,7 @@ const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS syncReduxAndRouter(history, store); -(window.DEFAULT_SETTINGS.jwt){ +if (window.DEFAULT_SETTINGS.jwt){ // Setup JWT refresh jwt(store.dispatch, window.DEFAULT_SETTINGS.userId); } From b73e215c37e2c8a3499a5d57b3635de53e046ebe Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 10 Feb 2016 10:56:21 -0700 Subject: [PATCH 087/452] Updated react --- client/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/package.json b/client/package.json index 411efda..cef55a3 100644 --- a/client/package.json +++ b/client/package.json @@ -23,8 +23,8 @@ "history": "1.17.0", "immutable": "3.7.5", "lodash": "3.10.1", - "react": "0.14.3", - "react-dom": "0.14.3", + "react": "0.14.7", + "react-dom": "0.14.7", "react-proxy-loader": "0.3.4", "react-redux": "4.0.0", "react-router": "1.0.3", From 941ec3593319a6ac77e09bbd0c788de3637db397 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 10 Feb 2016 11:01:29 -0700 Subject: [PATCH 088/452] Updated to latest packages --- client/package.json | 80 ++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/client/package.json b/client/package.json index cef55a3..88883ba 100644 --- a/client/package.json +++ b/client/package.json @@ -18,62 +18,62 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { - "babel": "5.8.29", - "babel-runtime": "5.8.29", - "history": "1.17.0", - "immutable": "3.7.5", - "lodash": "3.10.1", + "babel": "6.5.1", + "babel": "6.5.1", + "history": "2.0.0", + "immutable": "3.7.6", + "lodash": "4.3.0", "react": "0.14.7", "react-dom": "0.14.7", "react-proxy-loader": "0.3.4", - "react-redux": "4.0.0", - "react-router": "1.0.3", - "react-tap-event-plugin": "0.2.1", - "redux": "3.0.4", - "redux-simple-router": "^1.0.2", - "redux-thunk": "1.0.0", - "superagent": "1.5.0", + "react-redux": "4.4.0", + "react-router": "2.0.0", + "react-tap-event-plugin": "0.2.2", + "redux": "3.3.1", + "redux-simple-router": "^2.0.4", + "redux-thunk": "1.0.3", + "superagent": "1.7.2", "uuid": "2.0.1" }, "devDependencies": { - "autoprefixer-loader": "3.1.0", - "babel-core": "5.8.29", - "babel-loader": "5.3.2", + "autoprefixer-loader": "3.2.0", + "babel": "6.5.1", + "babel-loader": "6.2.2", "chunk-manifest-webpack-plugin": "0.0.1", "coveralls": "2.11.6", - "css-loader": "0.23.0", - "dotenv": "1.2.0", - "ecstatic": "1.3.1", + "css-loader": "0.23.1", + "dotenv": "2.0.0", + "ecstatic": "1.4.0", "ejs": "^2.4.1", "event-stream": "3.3.2", - "extract-text-webpack-plugin": "0.9.1", + "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.8.5", - "gulp": "3.9.0", + "gulp": "3.9.1", "gulp-filter": "3.0.1", "gulp-front-matter": "^1.3.0", "gulp-htmlmin": "1.3.0", "gulp-ignore": "2.0.1", - "gulp-load-plugins": "1.1.0", + "gulp-load-plugins": "1.2.0", "gulp-markdown": "^1.2.0", "gulp-rename": "1.2.2", "gulp-util": "3.0.7", - "html-minifier": "1.0.0", + "html-minifier": "1.1.1", "imports-loader": "0.6.5", - "istanbul": "0.4.1", + "istanbul": "0.4.2", "istanbul-instrumenter-loader": "0.1.3", "jasmine-core": "2.4.1", - "karma": "0.13.15", + "karma": "0.13.19", "karma-chrome-launcher": "0.2.2", - "karma-cli": "0.1.1", + "karma-cli": "0.1.2", "karma-coverage": "0.5.3", "karma-firefox-launcher": "0.1.7", - "karma-jasmine": "0.3.6", + "karma-jasmine": "0.3.7", "karma-jasmine-ajax": "0.1.13", - "karma-phantomjs-launcher": "0.2.1", - "karma-sourcemap-loader": "0.3.6", - "karma-spec-reporter": "0.0.23", + "karma-phantomjs-launcher": "1.0.0", + "karma-sourcemap-loader": "0.3.7", + "karma-spec-reporter": "0.0.24", "karma-webpack": "1.7.0", - "less": "2.5.3", + "less": "2.6.0", "less-loader": "2.2.2", "minimist": "1.2.0", "mkdirp": "^0.5.1", @@ -81,22 +81,22 @@ "npm-shrinkwrap": "5.4.1", "null-loader": "0.1.1", "path": "^0.12.7", - "phantomjs": "1.9.19", - "protractor": "3.0.0", + "phantomjs": "2.1.3", + "protractor": "3.1.0", "psi": "2.0.2", "react-hot-loader": "1.3.0", "react-tools": "0.13.3", - "redux-devtools": "3.0.0-beta-3", - "redux-devtools-dock-monitor": "1.0.0-beta-3", - "redux-devtools-log-monitor": "1.0.0-beta-3", - "rimraf": "2.4.4", + "redux-devtools": "3.1.1", + "redux-devtools-dock-monitor": "1.0.1", + "redux-devtools-log-monitor": "1.0.4", + "rimraf": "2.5.1", "run-sequence": "1.1.5", "sass-loader": "3.1.2", "style-loader": "0.13.0", - "through2": "2.0.0", + "through2": "2.0.1", "url-loader": "0.5.7", - "webpack": "1.12.9", - "webpack-compile-templates": "0.1.4", - "webpack-dev-server": "1.14.0" + "webpack": "1.12.13", + "webpack-compile-templates": "0.2.0", + "webpack-dev-server": "1.14.1" } } From df588907e193da875b320aa9ab6c931dd340d5ea Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 10 Feb 2016 11:02:12 -0700 Subject: [PATCH 089/452] Removed redux thunk --- client/js/store/configure_store.js | 3 +-- client/package.json | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 73f7572..78bf399 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -1,11 +1,10 @@ import { createStore, applyMiddleware, compose } from 'redux'; import { persistState } from 'redux-devtools'; -import thunk from 'redux-thunk'; import rootReducer from '../reducers'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; -let middleware = [ thunk, API ]; +let middleware = [ API ]; let enhancers = [ applyMiddleware(...middleware) diff --git a/client/package.json b/client/package.json index 88883ba..ce68443 100644 --- a/client/package.json +++ b/client/package.json @@ -31,7 +31,6 @@ "react-tap-event-plugin": "0.2.2", "redux": "3.3.1", "redux-simple-router": "^2.0.4", - "redux-thunk": "1.0.3", "superagent": "1.7.2", "uuid": "2.0.1" }, From 22238f869401584b1ddd3472c7baddb99118d9e9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 12 Feb 2016 16:08:57 -0700 Subject: [PATCH 090/452] babel 6 updates --- .babelrc | 4 -- .eslintrc | 25 +++++++++++ .gitignore | 4 ++ .nvmrc | 2 +- client/.babelrc | 15 ++++++- client/config/webpack.config.js | 31 +++++--------- client/js/app.jsx | 2 +- client/package.json | 30 +++++++++++--- client/webpack.hot.js | 73 ++++++++++++++++++++++++--------- package.json | 2 +- 10 files changed, 133 insertions(+), 55 deletions(-) delete mode 100644 .babelrc create mode 100644 .eslintrc diff --git a/.babelrc b/.babelrc deleted file mode 100644 index b5fe4a7..0000000 --- a/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["es2015", "react", "stage-0"], - "plugins": ["transform-runtime"] -} diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..bdc20da --- /dev/null +++ b/.eslintrc @@ -0,0 +1,25 @@ +{ + "ecmaFeatures": { + "jsx": true, + "modules": true + }, + "env": { + "browser": true, + "node": true + }, + "parser": "babel-eslint", + "rules": { + "babel/generator-star-spacing": 1, + "babel/new-cap": 1, + "babel/object-shorthand": 1, + "babel/arrow-parens": 1, + "babel/no-await-in-loop": 1, + "react/jsx-uses-react": 2, + "react/jsx-uses-vars": 2, + "react/react-in-jsx-scope": 2 + }, + "plugins": [ + "babel", + "react" + ] +} diff --git a/.gitignore b/.gitignore index 9a30599..6006585 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store *.rbc capybara-*.html /log @@ -23,3 +24,6 @@ s3_website.yml node_modules npm-debug.log build + + + diff --git a/.nvmrc b/.nvmrc index 7cbea07..4cc0e35 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -5.2.0 \ No newline at end of file +5.6.0 \ No newline at end of file diff --git a/client/.babelrc b/client/.babelrc index 3ca1979..a558ea0 100644 --- a/client/.babelrc +++ b/client/.babelrc @@ -1,4 +1,15 @@ { - "presets": ["es2015"], - "plugins": ["transform-runtime"] + "presets": ["es2015", "stage-0", "react"], + "plugins": ["transform-runtime", "transform-decorators-legacy"], + "env": { + "development": { + "plugins": [["react-transform", { + "transforms": [{ + "transform": "react-transform-hmr", + "imports": ["react"], + "locals": ["module"] + }] + }]] + } + } } diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index f8dc648..8780f64 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -1,5 +1,3 @@ -'use strict'; - var webpack = require('webpack'); var path = require('path'); var ExtractTextPlugin = require('extract-text-webpack-plugin'); @@ -14,7 +12,7 @@ module.exports = function(release){ ]; var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; - var jsLoaders = ["babel-loader?stage=0&optional=runtime"]; // include the runtime + var jsLoaders = ['babel']; var cssLoaders = ['css-loader', 'autoprefixer-loader?' + autoprefix]; @@ -22,21 +20,13 @@ module.exports = function(release){ scssLoaders.push('sass-loader?outputStyle=expanded&includePaths[]=' + (path.resolve(__dirname, './node_modules/bootstrap-sass'))); var lessLoaders = cssLoaders.slice(0); - lessLoaders.push("less-loader"); + lessLoaders.push('less-loader'); - var entries; - - if(release){ - entries = _.cloneDeep(settings.entries); - } else { - jsLoaders.unshift("react-hot-loader"); + var entries = _.cloneDeep(settings.entries); - // Configure entries with hotloader - var originalEntries = settings.entries; - entries = {}; - for(var name in originalEntries){ - entries[name] = ['webpack-dev-server/client?' + settings.devAssetsUrl, 'webpack/hot/only-dev-server', originalEntries[name]]; - } + if(!release){ + entries['eventsource-polyfill'] = 'eventsource-polyfill'; // necessary for hot reloading with IE + entries['webpack-hot-middleware/client'] = 'webpack-hot-middleware/client'; } var cssEntries = settings.cssEntries; @@ -52,21 +42,21 @@ module.exports = function(release){ output: { path: release ? settings.prodOutput : settings.devOutput, filename: release ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, - chunkFilename: release ? '[id]-[chunkhash]' + settings.buildSuffix : "[id].js", + chunkFilename: release ? '[id]-[chunkhash]' + settings.buildSuffix : '[id].js', publicPath: release ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, - sourceMapFilename: "debugging/[file].map", + sourceMapFilename: 'debugging/[file].map', pathinfo: !release // http://webpack.github.io/docs/configuration.html#output-pathinfo }, resolve: { extensions: ['', '.js', '.json', '.jsx'], - modulesDirectories: ["node_modules", "vendor"] + modulesDirectories: ['node_modules', 'vendor'] }, cache: true, quiet: false, noInfo: false, debug: false, outputPathinfo: !release, - devtool: release ? false : "eval", // http://webpack.github.io/docs/configuration.html#devtool + devtool: release ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool stats: { colors: true }, @@ -95,7 +85,6 @@ module.exports = function(release){ { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, { test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }, { test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }, - //{ test: /\.html$/, loader: 'webpack-compile-templates' }, // Add if you need to compile underscore.js - https://www.npmjs.com/package/webpack-compile-templates { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=cd [name]-[hash].[ext]']} ] diff --git a/client/js/app.jsx b/client/js/app.jsx index d121adc..1f9383e 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,6 +1,6 @@ "use strict"; -import 'babel-core/polyfill'; +import 'babel-polyfill'; import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; diff --git a/client/package.json b/client/package.json index ce68443..d1c1eab 100644 --- a/client/package.json +++ b/client/package.json @@ -12,14 +12,16 @@ "hot": "gulp watch & node webpack.hot.js", "build_dev": "gulp build", "build": "gulp build --release", - "release": "gulp build --release && cd .. && s3_website push" + "release": "gulp build --release && cd .. && s3_website push", + "lint": "eslint js" }, "author": "atomicjolt, jbasdf", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { "babel": "6.5.1", - "babel": "6.5.1", + "babel-polyfill": "^6.5.0", + "babel-runtime": "^6.5.0", "history": "2.0.0", "immutable": "3.7.6", "lodash": "4.3.0", @@ -37,14 +39,28 @@ "devDependencies": { "autoprefixer-loader": "3.2.0", "babel": "6.5.1", - "babel-loader": "6.2.2", + "babel-core": "^6.5.1", + "babel-eslint": "^4.1.8", + "babel-loader": "^6.2.2", + "babel-plugin-react-transform": "^2.0.0", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-runtime": "^6.5.0", + "babel-preset-es2015": "^6.5.0", + "babel-preset-react": "^6.5.0", + "babel-preset-react-hmre": "^1.1.0", + "babel-preset-stage-0": "^6.5.0", "chunk-manifest-webpack-plugin": "0.0.1", "coveralls": "2.11.6", "css-loader": "0.23.1", "dotenv": "2.0.0", "ecstatic": "1.4.0", "ejs": "^2.4.1", + "eslint": "^1.10.3", + "eslint-plugin-babel": "^3.1.0", + "eslint-plugin-react": "^3.16.1", "event-stream": "3.3.2", + "eventsource-polyfill": "^0.9.6", + "express": "^4.13.4", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.8.5", "gulp": "3.9.1", @@ -81,10 +97,12 @@ "null-loader": "0.1.1", "path": "^0.12.7", "phantomjs": "2.1.3", - "protractor": "3.1.0", + "protractor": "3.1.1", "psi": "2.0.2", "react-hot-loader": "1.3.0", "react-tools": "0.13.3", + "react-transform-catch-errors": "^1.0.2", + "redbox-react": "^1.2.2", "redux-devtools": "3.1.1", "redux-devtools-dock-monitor": "1.0.1", "redux-devtools-log-monitor": "1.0.4", @@ -95,7 +113,7 @@ "through2": "2.0.1", "url-loader": "0.5.7", "webpack": "1.12.13", - "webpack-compile-templates": "0.2.0", - "webpack-dev-server": "1.14.1" + "webpack-dev-middleware": "^1.5.1", + "webpack-hot-middleware": "^2.7.1" } } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index f998e16..c627dd6 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -1,22 +1,57 @@ -var webpack = require('webpack'); -var webpackDevServer = require('webpack-dev-server'); -var release = false; -var settings = require('./config/settings.js'); -var webpackConfig = require('./config/webpack.config.js')(release); - -new webpackDevServer(webpack(webpackConfig), { - contentBase: settings.devOutput, +var release = false; +var express = require('express'); +var webpack = require('webpack'); +var webpackMiddleware = require('webpack-dev-middleware'); +var webpackHotMiddleware = require('webpack-hot-middleware'); +var settings = require('./config/settings.js'); +var webpackConfig = require('./config/webpack.config.js')(release); +var path = require('path'); +var app = express(); +var compiler = webpack(webpackConfig); + +// new webpackDevServer(webpack(webpackConfig), { +// contentBase: settings.devOutput, +// publicPath: webpackConfig.output.publicPath, +// watch: true, +// hot: true, +// inline: true, +// progress: true, +// headers: { "Access-Control-Allow-Origin": "*" }, +// filename: '[name]' + settings.buildSuffix, +// }).listen(settings.hotPort, 'localhost', function(err, result){ +// if(err){ +// console.log('webpack-dev-server', err); +// } +// console.log('Webpack hot load server listening on: ' + webpackConfig.output.publicPath); +// console.log('Webpack hot load server serving content from: ' + settings.devOutput); +// }); + + +app.use(express.static(settings.devOutput)); + +app.use(webpackMiddleware(compiler, { + noInfo: true, publicPath: webpackConfig.output.publicPath, watch: true, - hot: true, - inline: true, - progress: true, - headers: { "Access-Control-Allow-Origin": "*" }, - filename: '[name]' + settings.buildSuffix, -}).listen(settings.hotPort, 'localhost', function(err, result){ - if(err){ - console.log('webpack-dev-server', err); + noInfo: true, + headers: { 'Access-Control-Allow-Origin': '*' } +})); + +app.use(webpackHotMiddleware(compiler)); + +app.get('*', function response(req, res) { + res.sendFile(path.join(devOutput, 'index.html')); +}); + +app.listen(settings.hotPort, 'localhost', function(err) { + if (err) { + console.log(err); + return; } - console.log('Webpack hot load server listening on: ' + webpackConfig.output.publicPath); - console.log('Webpack hot load server serving content from: ' + settings.devOutput); -}); \ No newline at end of file + console.log('Listening on: ' + webpackConfig.output.publicPath); + console.log('Serving content from: ' + settings.devOutput); +}); + + + + diff --git a/package.json b/package.json index 81c0ef9..16076f7 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.2", "description": "Client only React Starter App.", "engines": { - "node": "5.2.0" + "node": "5.6.0" }, "scripts": { "postinstall" : "cd ./client && npm install", From 33b4662a10d81f3a0472c6fd9fa2578d76c344c8 Mon Sep 17 00:00:00 2001 From: bensmith Date: Fri, 12 Feb 2016 16:38:16 -0700 Subject: [PATCH 091/452] fixes devOutput ref --- .gitignore | 1 + client/webpack.hot.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6006585..5f702ee 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ pickle-email-*.html secrets.js *_web_pack_bundle.js .idea/ +*.iml .env config/secrets.js diff --git a/client/webpack.hot.js b/client/webpack.hot.js index c627dd6..7a0b02a 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -40,7 +40,7 @@ app.use(webpackMiddleware(compiler, { app.use(webpackHotMiddleware(compiler)); app.get('*', function response(req, res) { - res.sendFile(path.join(devOutput, 'index.html')); + res.sendFile(path.join(settings.devOutput, 'index.html')); }); app.listen(settings.hotPort, 'localhost', function(err) { From 00c73d4bf90ddc0f2ff2787dff45abf948189181 Mon Sep 17 00:00:00 2001 From: bensmith Date: Fri, 12 Feb 2016 16:59:13 -0700 Subject: [PATCH 092/452] Fixes depricated stuff --- client/js/app.jsx | 3 --- client/js/store/configure_store.js | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index 1f9383e..d9c54cf 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -4,7 +4,6 @@ import 'babel-polyfill'; import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; -import { syncReduxAndRouter } from 'redux-simple-router'; import Immutable from 'immutable'; import routes from './routes'; import DevTools from './dev/dev_tools'; @@ -38,8 +37,6 @@ class Root extends React.Component { const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS)}); -syncReduxAndRouter(history, store); - if (window.DEFAULT_SETTINGS.jwt){ // Setup JWT refresh jwt(store.dispatch, window.DEFAULT_SETTINGS.userId); diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 78bf399..7237a0b 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -1,10 +1,11 @@ import { createStore, applyMiddleware, compose } from 'redux'; import { persistState } from 'redux-devtools'; +import { syncHistory } from 'redux-simple-router'; import rootReducer from '../reducers'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; -let middleware = [ API ]; +let middleware = [ API , syncHistory(history)]; let enhancers = [ applyMiddleware(...middleware) From c1dbc3e55bc8bef5826d09af1139f0bb4c0c4fa0 Mon Sep 17 00:00:00 2001 From: dittonjs Date: Fri, 12 Feb 2016 17:35:07 -0700 Subject: [PATCH 093/452] fixes all compile and runtime errors --- client/js/history.js | 11 +++-------- client/js/store/configure_store.js | 1 + 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/client/js/history.js b/client/js/history.js index 2ef7251..58396e6 100644 --- a/client/js/history.js +++ b/client/js/history.js @@ -1,8 +1,3 @@ -// import createBrowserHistory from 'history/lib/createBrowserHistory'; -// export default createBrowserHistory(); - - -import { createHashHistory } from 'history'; -export default new createHashHistory({ - //queryKey: false // Opt-out of persistent state, not recommended. -}); \ No newline at end of file +import { browserHistory } from 'react-router'; +export default browserHistory; + \ No newline at end of file diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 7237a0b..74f0e16 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -2,6 +2,7 @@ import { createStore, applyMiddleware, compose } from 'redux'; import { persistState } from 'redux-devtools'; import { syncHistory } from 'redux-simple-router'; import rootReducer from '../reducers'; +import history from '../history'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; From a2348f44c7d0abfc8af53856ac2c09a7052bc789 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 15 Feb 2016 15:13:48 -0700 Subject: [PATCH 094/452] Export done --- client/js/constants/wrapper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/constants/wrapper.js b/client/js/constants/wrapper.js index fb90a88..a567365 100644 --- a/client/js/constants/wrapper.js +++ b/client/js/constants/wrapper.js @@ -2,7 +2,7 @@ import _ from "lodash"; -const DONE = "_DONE"; +export const DONE = "_DONE"; export default function(actionTypes, asyncActionTypes){ From 1620b1384a190ff509af322ea4436b049e4558b2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 15 Feb 2016 15:13:48 -0700 Subject: [PATCH 095/452] Export done --- client/js/constants/wrapper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/constants/wrapper.js b/client/js/constants/wrapper.js index fb90a88..a567365 100644 --- a/client/js/constants/wrapper.js +++ b/client/js/constants/wrapper.js @@ -2,7 +2,7 @@ import _ from "lodash"; -const DONE = "_DONE"; +export const DONE = "_DONE"; export default function(actionTypes, asyncActionTypes){ From 1463c43c7ec2bf40bd6f2d4b7d4f0f1b5f813200 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 17 Feb 2016 17:18:55 -0700 Subject: [PATCH 096/452] Upgraded react router --- client/js/app.jsx | 4 ---- client/js/history.js | 8 -------- client/js/reducers/index.js | 4 ++-- client/js/routes.jsx | 4 ++-- client/js/store/configure_store.js | 9 ++++++++- client/package.json | 5 ++--- 6 files changed, 14 insertions(+), 20 deletions(-) delete mode 100644 client/js/history.js diff --git a/client/js/app.jsx b/client/js/app.jsx index d121adc..6fef664 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -4,12 +4,10 @@ import 'babel-core/polyfill'; import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; -import { syncReduxAndRouter } from 'redux-simple-router'; import Immutable from 'immutable'; import routes from './routes'; import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; -import history from './history'; import jwt from './loaders/jwt'; //Needed for onTouchTap @@ -38,8 +36,6 @@ class Root extends React.Component { const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS)}); -syncReduxAndRouter(history, store); - if (window.DEFAULT_SETTINGS.jwt){ // Setup JWT refresh jwt(store.dispatch, window.DEFAULT_SETTINGS.userId); diff --git a/client/js/history.js b/client/js/history.js deleted file mode 100644 index 2ef7251..0000000 --- a/client/js/history.js +++ /dev/null @@ -1,8 +0,0 @@ -// import createBrowserHistory from 'history/lib/createBrowserHistory'; -// export default createBrowserHistory(); - - -import { createHashHistory } from 'history'; -export default new createHashHistory({ - //queryKey: false // Opt-out of persistent state, not recommended. -}); \ No newline at end of file diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index ea8a29c..231869e 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,11 +1,11 @@ import { combineReducers } from 'redux'; -import { routeReducer as routing } from 'redux-simple-router'; import settings from './settings' import application from './application'; import messages from './messages'; +import { routeReducer } from 'react-router-redux'; const rootReducer = combineReducers({ - routing, + routing: routeReducer, settings, application, messages diff --git a/client/js/routes.jsx b/client/js/routes.jsx index 2839de4..d98273b 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -4,10 +4,10 @@ import React from 'react'; // if you use jsx, you have import { Router, Route, IndexRoute } from 'react-router'; import Index from './components/layout/index'; import Home from './components/home'; -import history from './history'; +import { hashHistory } from 'react-router' export default ( - + diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 73f7572..3956722 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -4,8 +4,12 @@ import thunk from 'redux-thunk'; import rootReducer from '../reducers'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; +import { hashHistory } from 'react-router' +import { syncHistory } from 'react-router-redux'; -let middleware = [ thunk, API ]; +const reduxRouterMiddleware = syncHistory(hashHistory); + +let middleware = [ thunk, API, reduxRouterMiddleware ]; let enhancers = [ applyMiddleware(...middleware) @@ -32,5 +36,8 @@ export default function(initialState){ ); } + // Required for replaying actions from devtools to work + reduxRouterMiddleware.listenForReplays(store); + return store; } diff --git a/client/package.json b/client/package.json index cef55a3..c520b30 100644 --- a/client/package.json +++ b/client/package.json @@ -20,17 +20,16 @@ "dependencies": { "babel": "5.8.29", "babel-runtime": "5.8.29", - "history": "1.17.0", "immutable": "3.7.5", "lodash": "3.10.1", "react": "0.14.7", "react-dom": "0.14.7", "react-proxy-loader": "0.3.4", "react-redux": "4.0.0", - "react-router": "1.0.3", + "react-router": "^2.0.0", + "react-router-redux": "^3.0.0", "react-tap-event-plugin": "0.2.1", "redux": "3.0.4", - "redux-simple-router": "^1.0.2", "redux-thunk": "1.0.0", "superagent": "1.5.0", "uuid": "2.0.1" From 75e0504c4543d043c0fac8076a9acfb8e5984850 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 17 Feb 2016 17:19:31 -0700 Subject: [PATCH 097/452] Removed redux-thunk --- client/js/store/configure_store.js | 3 +-- client/package.json | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 3956722..69dde39 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -1,6 +1,5 @@ import { createStore, applyMiddleware, compose } from 'redux'; import { persistState } from 'redux-devtools'; -import thunk from 'redux-thunk'; import rootReducer from '../reducers'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; @@ -9,7 +8,7 @@ import { syncHistory } from 'react-router-redux'; const reduxRouterMiddleware = syncHistory(hashHistory); -let middleware = [ thunk, API, reduxRouterMiddleware ]; +let middleware = [ API, reduxRouterMiddleware ]; let enhancers = [ applyMiddleware(...middleware) diff --git a/client/package.json b/client/package.json index c520b30..b015c6f 100644 --- a/client/package.json +++ b/client/package.json @@ -30,7 +30,6 @@ "react-router-redux": "^3.0.0", "react-tap-event-plugin": "0.2.1", "redux": "3.0.4", - "redux-thunk": "1.0.0", "superagent": "1.5.0", "uuid": "2.0.1" }, From 7370bc715f0cf9d7400a48af31ab798f54bf601b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 17 Feb 2016 17:44:03 -0700 Subject: [PATCH 098/452] Added missing semicolon --- client/js/routes.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/routes.jsx b/client/js/routes.jsx index d98273b..bd39507 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -4,7 +4,7 @@ import React from 'react'; // if you use jsx, you have import { Router, Route, IndexRoute } from 'react-router'; import Index from './components/layout/index'; import Home from './components/home'; -import { hashHistory } from 'react-router' +import { hashHistory } from 'react-router'; export default ( From 41bce9d331368f55b57737ef89c5f87e75235b54 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 17 Feb 2016 20:30:09 -0700 Subject: [PATCH 099/452] Removed unused code in comments --- client/webpack.hot.js | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 7a0b02a..6149563 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -9,24 +9,6 @@ var path = require('path'); var app = express(); var compiler = webpack(webpackConfig); -// new webpackDevServer(webpack(webpackConfig), { -// contentBase: settings.devOutput, -// publicPath: webpackConfig.output.publicPath, -// watch: true, -// hot: true, -// inline: true, -// progress: true, -// headers: { "Access-Control-Allow-Origin": "*" }, -// filename: '[name]' + settings.buildSuffix, -// }).listen(settings.hotPort, 'localhost', function(err, result){ -// if(err){ -// console.log('webpack-dev-server', err); -// } -// console.log('Webpack hot load server listening on: ' + webpackConfig.output.publicPath); -// console.log('Webpack hot load server serving content from: ' + settings.devOutput); -// }); - - app.use(express.static(settings.devOutput)); app.use(webpackMiddleware(compiler, { @@ -50,8 +32,4 @@ app.listen(settings.hotPort, 'localhost', function(err) { } console.log('Listening on: ' + webpackConfig.output.publicPath); console.log('Serving content from: ' + settings.devOutput); -}); - - - - +}); \ No newline at end of file From 1c8a8ef7b31d49243f490902d1f8690b51d38db2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 17 Feb 2016 20:30:22 -0700 Subject: [PATCH 100/452] Use react-hmre preset --- client/.babelrc | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/client/.babelrc b/client/.babelrc index a558ea0..07f4939 100644 --- a/client/.babelrc +++ b/client/.babelrc @@ -3,13 +3,7 @@ "plugins": ["transform-runtime", "transform-decorators-legacy"], "env": { "development": { - "plugins": [["react-transform", { - "transforms": [{ - "transform": "react-transform-hmr", - "imports": ["react"], - "locals": ["module"] - }] - }]] + "presets": ["react-hmre"] } } -} +} \ No newline at end of file From b439c4d99331b2f1451d18ed3694fbdc19d1658c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 17 Feb 2016 20:37:38 -0700 Subject: [PATCH 101/452] Fixed hot reload. --- client/config/webpack.config.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 8780f64..7d9f553 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -24,16 +24,22 @@ module.exports = function(release){ var entries = _.cloneDeep(settings.entries); - if(!release){ - entries['eventsource-polyfill'] = 'eventsource-polyfill'; // necessary for hot reloading with IE - entries['webpack-hot-middleware/client'] = 'webpack-hot-middleware/client'; - } - var cssEntries = settings.cssEntries; for(var name in cssEntries){ entries[name] = cssEntries[name]; } + if(!release){ + entries = _.reduce(entries, function(result, entry, key){ + result[key] = [ + 'eventsource-polyfill', + 'webpack-hot-middleware/client', + entry + ]; + return result; + }, {}); + } + var extractCSS = new ExtractTextPlugin(release ? '[name]-[chunkhash].css' : '[name].css'); return { From 3ee3f2fe7ba56642313cc561b19a2e53d8b24512 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 17 Feb 2016 21:58:41 -0700 Subject: [PATCH 102/452] requires phantomjs-prebuilt --- client/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/package.json b/client/package.json index db9de35..e7b873c 100644 --- a/client/package.json +++ b/client/package.json @@ -29,7 +29,7 @@ "react-proxy-loader": "0.3.4", "react-redux": "4.4.0", "react-router": "2.0.0", - "react-router-redux": "^3.0.0", + "react-router-redux": "^3.0.0", "react-tap-event-plugin": "0.2.2", "redux": "3.3.1", "redux-simple-router": "^2.0.4", @@ -96,7 +96,7 @@ "npm-shrinkwrap": "5.4.1", "null-loader": "0.1.1", "path": "^0.12.7", - "phantomjs": "2.1.3", + "phantomjs-prebuilt": "^2.1.4", "protractor": "3.1.1", "psi": "2.0.2", "react-hot-loader": "1.3.0", From ba6013108d5bf21b5a7e07811f4367a31ae66ae1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 19 Feb 2016 16:03:25 -0700 Subject: [PATCH 103/452] Removes react-router-redux --- client/js/store/configure_store.js | 9 +-------- client/package.json | 1 - 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 69dde39..78bf399 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -3,12 +3,8 @@ import { persistState } from 'redux-devtools'; import rootReducer from '../reducers'; import DevTools from '../dev/dev_tools.jsx' import API from '../middleware/api'; -import { hashHistory } from 'react-router' -import { syncHistory } from 'react-router-redux'; -const reduxRouterMiddleware = syncHistory(hashHistory); - -let middleware = [ API, reduxRouterMiddleware ]; +let middleware = [ API ]; let enhancers = [ applyMiddleware(...middleware) @@ -35,8 +31,5 @@ export default function(initialState){ ); } - // Required for replaying actions from devtools to work - reduxRouterMiddleware.listenForReplays(store); - return store; } diff --git a/client/package.json b/client/package.json index e7b873c..cdd5802 100644 --- a/client/package.json +++ b/client/package.json @@ -29,7 +29,6 @@ "react-proxy-loader": "0.3.4", "react-redux": "4.4.0", "react-router": "2.0.0", - "react-router-redux": "^3.0.0", "react-tap-event-plugin": "0.2.2", "redux": "3.3.1", "redux-simple-router": "^2.0.4", From a9bb20c6dfc1fa4f8daf53cca6f1ca670784a8d2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 19 Feb 2016 17:15:08 -0700 Subject: [PATCH 104/452] Fixes npm test --- client/.babelrc | 9 --------- client/config/webpack.config.js | 13 ++++++++++--- client/gulpfile.js | 5 +++-- client/karma.conf.js | 2 +- client/webpack.hot.js | 2 +- 5 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 client/.babelrc diff --git a/client/.babelrc b/client/.babelrc deleted file mode 100644 index 07f4939..0000000 --- a/client/.babelrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "presets": ["es2015", "stage-0", "react"], - "plugins": ["transform-runtime", "transform-decorators-legacy"], - "env": { - "development": { - "presets": ["react-hmre"] - } - } -} \ No newline at end of file diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 7d9f553..4582fa6 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -5,14 +5,21 @@ var ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); var settings = require('./settings.js'); var _ = require('lodash'); -module.exports = function(release){ +module.exports = function(stage){ + + var release = stage == "production"; var excludeFromStats = [ /node_modules[\\\/]react(-router)?[\\\/]/ ]; var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; - var jsLoaders = ['babel']; + + var babel = 'babel?plugins[]=transform-runtime,plugins[]=transform-decorators-legacy&presets[]=react,presets[]=es2015,presets[]=stage-0'; + if(stage == "development"){ + babel = babel + ',presets[]=react-hmre'; + } + var jsLoaders = [babel]; var cssLoaders = ['css-loader', 'autoprefixer-loader?' + autoprefix]; @@ -29,7 +36,7 @@ module.exports = function(release){ entries[name] = cssEntries[name]; } - if(!release){ + if(stage == "development"){ entries = _.reduce(entries, function(result, entry, key){ result[key] = [ 'eventsource-polyfill', diff --git a/client/gulpfile.js b/client/gulpfile.js index a7bdc9d..66a48c7 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -8,7 +8,7 @@ var es = require('event-stream'); var runSequence = require('run-sequence'); var webpack = require('webpack'); var rename = require('gulp-rename'); -var settings = require('./config/settings.js'); +var settings = require('./config/settings'); var argv = require('minimist')(process.argv.slice(2)); var path = require('path'); var _ = require("lodash"); @@ -20,8 +20,9 @@ var ejs = require('ejs'); // Settings var release = argv.release; +var stage = release ? "production" : "development"; var outputPath = release ? settings.prodOutput : settings.devOutput; -var webpackConfig = require('./config/webpack.config.js')(release); +var webpackConfig = require('./config/webpack.config')(stage); var webpackStats; var defaultLayout = 'application.html'; diff --git a/client/karma.conf.js b/client/karma.conf.js index 586c062..af86446 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -1,6 +1,6 @@ // karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html var webpack = require('webpack'); -var webpackConfig = require('./config/webpack.config.js')(false); +var webpackConfig = require('./config/webpack.config')("test"); module.exports = function(config) { diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 6149563..88e8ced 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -4,7 +4,7 @@ var webpack = require('webpack'); var webpackMiddleware = require('webpack-dev-middleware'); var webpackHotMiddleware = require('webpack-hot-middleware'); var settings = require('./config/settings.js'); -var webpackConfig = require('./config/webpack.config.js')(release); +var webpackConfig = require('./config/webpack.config')("development"); var path = require('path'); var app = express(); var compiler = webpack(webpackConfig); From 96d86680775bdaf9de4306989bcbd3270132a057 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 19 Feb 2016 17:15:23 -0700 Subject: [PATCH 105/452] Fix node version --- client/.nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/.nvmrc b/client/.nvmrc index 7cbea07..4cc0e35 100644 --- a/client/.nvmrc +++ b/client/.nvmrc @@ -1 +1 @@ -5.2.0 \ No newline at end of file +5.6.0 \ No newline at end of file From 3f6eabb41b457efd29a90241e719893eee9365cb Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 19 Feb 2016 17:25:59 -0700 Subject: [PATCH 106/452] Clean up --- .eslintrc | 53 ++++++++++++++++++++++++++++++------- client/js/reducers/index.js | 2 -- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/.eslintrc b/.eslintrc index bdc20da..a730098 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,22 +1,55 @@ { - "ecmaFeatures": { - "jsx": true, - "modules": true - }, - "env": { - "browser": true, - "node": true - }, "parser": "babel-eslint", "rules": { - "babel/generator-star-spacing": 1, + "babel/generator-star-spacing": 1, "babel/new-cap": 1, "babel/object-shorthand": 1, "babel/arrow-parens": 1, "babel/no-await-in-loop": 1, "react/jsx-uses-react": 2, "react/jsx-uses-vars": 2, - "react/react-in-jsx-scope": 2 + "react/react-in-jsx-scope": 2, + "indent": [ + 2, + 2, + {"SwitchCase": 1} + ], + "quotes": 0, + "linebreak-style": [ + 2, + "unix" + ], + "semi": [ + 2, + "always" + ], + "global-strict": [0, "never"], + "strict": [ + 0, + "global" + ], + "no-underscore-dangle": 0, + "no-multi-spaces": [ + 2, + { "exceptions": { + "ImportDeclaration": true, + "AssignmentPattern": true, + "VariableDeclarator": true, + "JSXAttribute": true + } + } + ], + "comma-dangle": 0, + "camelcase": 0 + }, + "env": { + "es6": true, + "browser": true, + "node": true + }, + "ecmaFeatures": { + "jsx": true, + "modules": true }, "plugins": [ "babel", diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index 231869e..1033893 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -2,10 +2,8 @@ import { combineReducers } from 'redux'; import settings from './settings' import application from './application'; import messages from './messages'; -import { routeReducer } from 'react-router-redux'; const rootReducer = combineReducers({ - routing: routeReducer, settings, application, messages From ec39b73917cef945547146310a9ce61ed8b418bd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 21 Feb 2016 12:05:50 -0700 Subject: [PATCH 107/452] Use gutil --- client/gulpfile.js | 9 ++++----- package.json | 16 +++++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index 66a48c7..a274dc2 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -2,7 +2,6 @@ var gulp = require('gulp'); var $ = require('gulp-load-plugins')(); -var util = require('util'); var through2 = require('through2'); var es = require('event-stream'); var runSequence = require('run-sequence'); @@ -72,7 +71,7 @@ gulp.task('markdown', function(){ .pipe(applyLayout(defaultLayout)) .pipe(marked(options)) .pipe(applyWebpack()) // Change to webpack hashed file names in release - .pipe(!release ? $.util.noop() : $.htmlmin({ + .pipe(!release ? $.noop() : $.htmlmin({ removeComments: true, collapseWhitespace: true, minifyJS: true @@ -96,7 +95,7 @@ gulp.task('html', function(){ .pipe(htmlFilter) .pipe(applyLayout(defaultLayout)) .pipe(applyWebpack()) // Change to webpack hashed file names in release - .pipe(!release ? $.util.noop() : $.htmlmin({ + .pipe(!release ? $.noop() : $.htmlmin({ removeComments: true, collapseWhitespace: true, minifyJS: true @@ -114,9 +113,9 @@ gulp.task('javascript', function(cb){ function bundle(err, stats){ webpackStats = stats.toJson(); if (err){ - throw new $.util.PluginError('webpack', err); + throw new $.PluginError('webpack', err); } - //$.util.log('[webpack]', stats.toString({colors: true})); + //$.log('[webpack]', stats.toString({colors: true})); cb(); } bundler.run(bundle); diff --git a/package.json b/package.json index 16076f7..ad1d170 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,12 @@ "node": "5.6.0" }, "scripts": { - "postinstall" : "cd ./client && npm install", - "build" : "cd ./client && npm run build", - "release" : "cd ./client && npm run release", - "hot" : "cd ./client && npm run hot", - "test" : "cd ./client && npm run test", - "coveralls" : "cd ./client && npm run coveralls" + "postinstall": "cd ./client && npm install", + "build": "cd ./client && npm run build", + "release": "cd ./client && npm run release", + "hot": "cd ./client && npm run hot", + "test": "cd ./client && npm run test", + "coveralls": "cd ./client && npm run coveralls" }, "repository": { "type": "git", @@ -24,5 +24,7 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": {}, - "devDependencies": {} + "devDependencies": { + "gutil": "^1.6.4" + } } From 1f343ea466b5285ac9d066695d456074dd0b98dc Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 21 Feb 2016 12:28:04 -0700 Subject: [PATCH 108/452] Explicitly require plugins --- client/gulpfile.js | 44 ++++++++++++++++++++++++-------------------- client/package.json | 1 - 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index a274dc2..4e4d75f 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -1,20 +1,24 @@ 'use strict'; var gulp = require('gulp'); -var $ = require('gulp-load-plugins')(); +var filter = require('gulp-filter'); +var util = require('gulp-util'); +var htmlmin = require('gulp-htmlmin'); +var ignore = require('gulp-ignore'); +var rename = require('gulp-rename'); +var marked = require('gulp-markdown'); +var frontMatter = require('gulp-front-matter'); + var through2 = require('through2'); var es = require('event-stream'); var runSequence = require('run-sequence'); var webpack = require('webpack'); -var rename = require('gulp-rename'); var settings = require('./config/settings'); var argv = require('minimist')(process.argv.slice(2)); var path = require('path'); var _ = require("lodash"); var fs = require("fs"); var mkdirp = require("mkdirp"); -var marked = require('gulp-markdown'); -var frontMatter = require('gulp-front-matter'); var ejs = require('ejs'); // Settings @@ -71,10 +75,10 @@ gulp.task('markdown', function(){ .pipe(applyLayout(defaultLayout)) .pipe(marked(options)) .pipe(applyWebpack()) // Change to webpack hashed file names in release - .pipe(!release ? $.noop() : $.htmlmin({ - removeComments: true, - collapseWhitespace: true, - minifyJS: true + .pipe(!release ? util.noop() : htmlmin({ + removeComments: true, + collapseWhitespace: true, + minifyJS: true })) .pipe(rename({extname: '.html'})) .pipe(gulp.dest(outputPath)); @@ -84,21 +88,21 @@ gulp.task('markdown', function(){ // ----------------------------------------------------------------------------- gulp.task('html', function(){ - var htmlFilter = $.filter('**/*.html', {restore: true}); + var htmlFilter = filter('**/*.html', {restore: true}); return gulp.src('./html/**/*') - .pipe($.ignore.exclude('layouts/**')) - .pipe($.ignore.exclude('layouts')) - .pipe($.ignore.exclude('partials/**')) - .pipe($.ignore.exclude('partials')) - .pipe($.ignore.exclude('**/*.md')) + .pipe(ignore.exclude('layouts/**')) + .pipe(ignore.exclude('layouts')) + .pipe(ignore.exclude('partials/**')) + .pipe(ignore.exclude('partials')) + .pipe(ignore.exclude('**/*.md')) .pipe(htmlFilter) .pipe(applyLayout(defaultLayout)) .pipe(applyWebpack()) // Change to webpack hashed file names in release - .pipe(!release ? $.noop() : $.htmlmin({ - removeComments: true, - collapseWhitespace: true, - minifyJS: true + .pipe(!release ? util.noop() : htmlmin({ + removeComments: true, + collapseWhitespace: true, + minifyJS: true })) .pipe(htmlFilter.restore) .pipe(gulp.dest(outputPath)); @@ -113,9 +117,9 @@ gulp.task('javascript', function(cb){ function bundle(err, stats){ webpackStats = stats.toJson(); if (err){ - throw new $.PluginError('webpack', err); + throw new util.PluginError('webpack', err); } - //$.log('[webpack]', stats.toString({colors: true})); + //util.log('[webpack]', stats.toString({colors: true})); cb(); } bundler.run(bundle); diff --git a/client/package.json b/client/package.json index cdd5802..4676d73 100644 --- a/client/package.json +++ b/client/package.json @@ -67,7 +67,6 @@ "gulp-front-matter": "^1.3.0", "gulp-htmlmin": "1.3.0", "gulp-ignore": "2.0.1", - "gulp-load-plugins": "1.2.0", "gulp-markdown": "^1.2.0", "gulp-rename": "1.2.2", "gulp-util": "3.0.7", From 86c339d9ec2a96f2b68b6a72e35de7aaed00fd52 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 28 Feb 2016 20:08:39 -0700 Subject: [PATCH 109/452] Cleaner comments in gulp file --- client/gulpfile.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client/gulpfile.js b/client/gulpfile.js index 4e4d75f..42649cd 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -30,6 +30,7 @@ var webpackStats; var defaultLayout = 'application.html'; +// ----------------------------------------------------------------------------- // Clean up // ----------------------------------------------------------------------------- gulp.task('clean', function(cb){ @@ -38,6 +39,7 @@ gulp.task('clean', function(cb){ }); +// ----------------------------------------------------------------------------- // Copy vendor files // ----------------------------------------------------------------------------- // Use this task to copy assets (ie fonts) from node modules @@ -51,6 +53,7 @@ gulp.task('vendor', function(){ }); +// ----------------------------------------------------------------------------- // Build markdown files // ----------------------------------------------------------------------------- gulp.task('markdown', function(){ @@ -84,6 +87,8 @@ gulp.task('markdown', function(){ .pipe(gulp.dest(outputPath)); }); + +// ----------------------------------------------------------------------------- // Process files in the html diretory // ----------------------------------------------------------------------------- gulp.task('html', function(){ @@ -109,6 +114,7 @@ gulp.task('html', function(){ }); +// ----------------------------------------------------------------------------- // Create JavaScript bundle // ----------------------------------------------------------------------------- gulp.task('javascript', function(cb){ @@ -126,6 +132,7 @@ gulp.task('javascript', function(cb){ }); +// ----------------------------------------------------------------------------- // Build the app from source code // ----------------------------------------------------------------------------- gulp.task('build', ['clean'], function(cb){ @@ -133,6 +140,7 @@ gulp.task('build', ['clean'], function(cb){ }); +// ----------------------------------------------------------------------------- // Watch for changes to html files and rebuild as needed. Webpack watches everything else // and serves js, css, etc from memory. Html files are served from the build directory. // ----------------------------------------------------------------------------- @@ -140,12 +148,17 @@ gulp.task('watch', ['html', 'markdown'], function() { gulp.watch(['html/**/*'], ['html', 'markdown']); }); + +// ----------------------------------------------------------------------------- // The default task +// ----------------------------------------------------------------------------- gulp.task('default', ['watch']); +// ***************************************************************************** // A bit hackish. This function can't be called until after the javascript task has been run // because webpackStats is undefined until webpack has run. +// ***************************************************************************** function getHashed(entryPoint, ext){ return _.find(webpackStats.assetsByChunkName[entryPoint], function(hashEntry){ return path.extname(hashEntry).toLowerCase() === '.' + ext; @@ -153,7 +166,9 @@ function getHashed(entryPoint, ext){ } +// ***************************************************************************** // Changes webpack paths as needed. +// ***************************************************************************** function applyWebpack(){ return through2.obj(function (html, enc, cb) { // replace entry points with names generated by webpack if(release){ @@ -173,7 +188,9 @@ function applyWebpack(){ } +// ***************************************************************************** // Apply templates to content +// ***************************************************************************** function applyLayout(defaultLayout){ return through2.obj(function (file, enc, cb) { From 7c3a6816e012582f094053599720f9421aa6782a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 29 Feb 2016 22:02:23 -0700 Subject: [PATCH 110/452] Moved to latest node --- .nvmrc | 2 +- client/.nvmrc | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.nvmrc b/.nvmrc index 4cc0e35..3b867cc 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -5.6.0 \ No newline at end of file +5.7.0 \ No newline at end of file diff --git a/client/.nvmrc b/client/.nvmrc index 4cc0e35..3b867cc 100644 --- a/client/.nvmrc +++ b/client/.nvmrc @@ -1 +1 @@ -5.6.0 \ No newline at end of file +5.7.0 \ No newline at end of file diff --git a/package.json b/package.json index ad1d170..3a7a74f 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.2", "description": "Client only React Starter App.", "engines": { - "node": "5.6.0" + "node": "5.7.0" }, "scripts": { "postinstall": "cd ./client && npm install", From 928a81a3199c507f78e04de3678b892e2225633e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 29 Feb 2016 22:07:00 -0700 Subject: [PATCH 111/452] Cleans up package.json files --- client/package.json | 16 ++++++++-------- package.json | 17 +++++++---------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/client/package.json b/client/package.json index 4676d73..bcad6ea 100644 --- a/client/package.json +++ b/client/package.json @@ -1,19 +1,19 @@ { "name": "react_client_starter_app", - "version": "0.0.2", + "version": "0.0.3", "description": "Client only React Starter App.", "repository": { "type": "git", "url": "https://github.com/atomicjolt/react_client_starter_app" }, "scripts": { - "test": "./node_modules/karma/bin/karma start", - "coveralls": "cat coverage/lcov.info | coveralls", - "hot": "gulp watch & node webpack.hot.js", - "build_dev": "gulp build", - "build": "gulp build --release", - "release": "gulp build --release && cd .. && s3_website push", - "lint": "eslint js" + "test" : "./node_modules/karma/bin/karma start", + "coveralls" : "cat coverage/lcov.info | coveralls", + "hot" : "gulp watch & node webpack.hot.js", + "build_dev" : "gulp build", + "build" : "gulp build --release", + "release" : "gulp build --release && cd .. && s3_website push", + "lint" : "eslint js" }, "author": "atomicjolt, jbasdf", "license": "MIT", diff --git a/package.json b/package.json index 3a7a74f..b491672 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,12 @@ "node": "5.7.0" }, "scripts": { - "postinstall": "cd ./client && npm install", - "build": "cd ./client && npm run build", - "release": "cd ./client && npm run release", - "hot": "cd ./client && npm run hot", - "test": "cd ./client && npm run test", - "coveralls": "cd ./client && npm run coveralls" + "postinstall" : "cd ./client && npm install", + "build" : "cd ./client && npm run build", + "release" : "cd ./client && npm run release", + "hot" : "cd ./client && npm run hot", + "test" : "cd ./client && npm run test", + "coveralls" : "cd ./client && npm run coveralls" }, "repository": { "type": "git", @@ -23,8 +23,5 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": {}, - "devDependencies": { - "gutil": "^1.6.4" - } + "dependencies": {} } From 1a295fafbeca87e3403ab387d259f5c231394058 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 1 Mar 2016 17:43:04 -0700 Subject: [PATCH 112/452] Serve files based on request url --- client/webpack.hot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 88e8ced..2abb83c 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -22,7 +22,7 @@ app.use(webpackMiddleware(compiler, { app.use(webpackHotMiddleware(compiler)); app.get('*', function response(req, res) { - res.sendFile(path.join(settings.devOutput, 'index.html')); + res.sendFile(path.join(settings.devOutput, req.url)); }); app.listen(settings.hotPort, 'localhost', function(err) { From 76db726d919540b99ef1e0c53cd13ae91872a269 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 1 Mar 2016 19:54:41 -0700 Subject: [PATCH 113/452] Shorter bundle name --- client/config/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/settings.js b/client/config/settings.js index 46e172f..8682e2b 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -33,7 +33,7 @@ module.exports = { hotPort: hotPort, - buildSuffix: '_web_pack_bundle.js', + buildSuffix: '_bundle.js', entries: { app: clientAppPath + 'js/app.jsx' From 986c94718f39b58c27074ed87d9e2f60ef1b280a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 1 Mar 2016 19:57:16 -0700 Subject: [PATCH 114/452] Fixes script src --- client/html/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/html/index.html b/client/html/index.html index 65da103..5179e63 100644 --- a/client/html/index.html +++ b/client/html/index.html @@ -1,2 +1,2 @@
    - \ No newline at end of file + \ No newline at end of file From 596efc35ecf5a797a2c51cdfdd377d308491744c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 1 Mar 2016 20:10:14 -0700 Subject: [PATCH 115/452] Changes processing order for md files --- client/gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index 42649cd..3aff4b7 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -75,8 +75,8 @@ gulp.task('markdown', function(){ return gulp.src('./html/**/*.md') .pipe(frontMatter({property: 'metadata', remove: true})) - .pipe(applyLayout(defaultLayout)) .pipe(marked(options)) + .pipe(applyLayout(defaultLayout)) .pipe(applyWebpack()) // Change to webpack hashed file names in release .pipe(!release ? util.noop() : htmlmin({ removeComments: true, From 8d4522f1e3c637188940a0aed1ffb5f1750c2abf Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 1 Mar 2016 21:36:18 -0700 Subject: [PATCH 116/452] Removes unused package --- client/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/client/package.json b/client/package.json index bcad6ea..e41d81f 100644 --- a/client/package.json +++ b/client/package.json @@ -31,7 +31,6 @@ "react-router": "2.0.0", "react-tap-event-plugin": "0.2.2", "redux": "3.3.1", - "redux-simple-router": "^2.0.4", "superagent": "1.7.2", "uuid": "2.0.1" }, From 2fa9ad481617385dab468dd0054c896c7ccee5af Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 2 Mar 2016 09:22:01 -0700 Subject: [PATCH 117/452] Adds babel-plugin-transform-class-properties to allow for static class declarations --- client/config/webpack.config.js | 2 +- package.json | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 4582fa6..6093ace 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -15,7 +15,7 @@ module.exports = function(stage){ var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; - var babel = 'babel?plugins[]=transform-runtime,plugins[]=transform-decorators-legacy&presets[]=react,presets[]=es2015,presets[]=stage-0'; + var babel = 'babel?plugins[]=transform-runtime,plugins[]=transform-decorators-legacy&plugins[]=transform-class-properties&presets[]=react,presets[]=es2015,presets[]=stage-0'; if(stage == "development"){ babel = babel + ',presets[]=react-hmre'; } diff --git a/package.json b/package.json index b491672..e542c6c 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,12 @@ "node": "5.7.0" }, "scripts": { - "postinstall" : "cd ./client && npm install", - "build" : "cd ./client && npm run build", - "release" : "cd ./client && npm run release", - "hot" : "cd ./client && npm run hot", - "test" : "cd ./client && npm run test", - "coveralls" : "cd ./client && npm run coveralls" + "postinstall": "cd ./client && npm install", + "build": "cd ./client && npm run build", + "release": "cd ./client && npm run release", + "hot": "cd ./client && npm run hot", + "test": "cd ./client && npm run test", + "coveralls": "cd ./client && npm run coveralls" }, "repository": { "type": "git", @@ -23,5 +23,8 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": {} + "dependencies": {}, + "devDependencies": { + "babel-plugin-transform-class-properties": "^6.6.0" + } } From 61edaeff26503cd230c1ef1aca6578470c5ff972 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 2 Mar 2016 09:24:45 -0700 Subject: [PATCH 118/452] Fixed package location --- client/package.json | 15 ++++++++------- package.json | 5 +---- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/client/package.json b/client/package.json index e41d81f..aeef458 100644 --- a/client/package.json +++ b/client/package.json @@ -7,13 +7,13 @@ "url": "https://github.com/atomicjolt/react_client_starter_app" }, "scripts": { - "test" : "./node_modules/karma/bin/karma start", - "coveralls" : "cat coverage/lcov.info | coveralls", - "hot" : "gulp watch & node webpack.hot.js", - "build_dev" : "gulp build", - "build" : "gulp build --release", - "release" : "gulp build --release && cd .. && s3_website push", - "lint" : "eslint js" + "test": "./node_modules/karma/bin/karma start", + "coveralls": "cat coverage/lcov.info | coveralls", + "hot": "gulp watch & node webpack.hot.js", + "build_dev": "gulp build", + "build": "gulp build --release", + "release": "gulp build --release && cd .. && s3_website push", + "lint": "eslint js" }, "author": "atomicjolt, jbasdf", "license": "MIT", @@ -41,6 +41,7 @@ "babel-eslint": "^4.1.8", "babel-loader": "^6.2.2", "babel-plugin-react-transform": "^2.0.0", + "babel-plugin-transform-class-properties": "^6.6.0", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-runtime": "^6.5.0", "babel-preset-es2015": "^6.5.0", diff --git a/package.json b/package.json index e542c6c..f409b94 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,5 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": {}, - "devDependencies": { - "babel-plugin-transform-class-properties": "^6.6.0" - } + "dependencies": {} } From 2a64e66c5145fa1efca50c2712bc383b2508d583 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 2 Mar 2016 21:04:39 -0700 Subject: [PATCH 119/452] Adds missing semi-colon. --- client/js/store/configure_store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 78bf399..1dd6a08 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -1,7 +1,7 @@ import { createStore, applyMiddleware, compose } from 'redux'; import { persistState } from 'redux-devtools'; import rootReducer from '../reducers'; -import DevTools from '../dev/dev_tools.jsx' +import DevTools from '../dev/dev_tools.jsx'; import API from '../middleware/api'; let middleware = [ API ]; From c6750e30c85e57dc68339131dc1e32145cffd9d4 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 4 Mar 2016 14:34:45 -0700 Subject: [PATCH 120/452] Removes deprecated tools --- client/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/client/package.json b/client/package.json index aeef458..c71cf7e 100644 --- a/client/package.json +++ b/client/package.json @@ -98,7 +98,6 @@ "protractor": "3.1.1", "psi": "2.0.2", "react-hot-loader": "1.3.0", - "react-tools": "0.13.3", "react-transform-catch-errors": "^1.0.2", "redbox-react": "^1.2.2", "redux-devtools": "3.1.1", From e543433d68b68653ba70aac7a63e81091a7d0bd1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 13 Apr 2016 18:52:23 -0600 Subject: [PATCH 121/452] Updates to latest node, updates packages, adds production performance optimizations --- .nvmrc | 2 +- client/.nvmrc | 2 +- client/config/webpack.config.js | 26 ++++++-- client/package.json | 101 ++++++++++++++++---------------- package.json | 6 +- 5 files changed, 78 insertions(+), 59 deletions(-) diff --git a/.nvmrc b/.nvmrc index 3b867cc..a620310 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -5.7.0 \ No newline at end of file +5.10.1 \ No newline at end of file diff --git a/client/.nvmrc b/client/.nvmrc index 3b867cc..a620310 100644 --- a/client/.nvmrc +++ b/client/.nvmrc @@ -1 +1 @@ -5.7.0 \ No newline at end of file +5.10.1 \ No newline at end of file diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 6093ace..12d07f7 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -14,11 +14,25 @@ module.exports = function(stage){ ]; var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; - - var babel = 'babel?plugins[]=transform-runtime,plugins[]=transform-decorators-legacy&plugins[]=transform-class-properties&presets[]=react,presets[]=es2015,presets[]=stage-0'; + + var plugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. + ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. + ',plugins[]=transform-class-properties'; // Allows class instance fields and class static properties. + + var presets = 'presets[]=react' + // Include all plugins needed for React + ',presets[]=es2015' + // Include all plugins needed to handle es2015 syntax + ',presets[]=stage-0'; // Enables experimental ES features. + if(stage == "development"){ - babel = babel + ',presets[]=react-hmre'; + presets = presets + ',presets[]=react-hmre'; // Adds react hot module reload + } else if (stage == "production") { + plugins = plugins + ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement + plugins = plugins + ',plugins[]=transform-react-inline-elements'; // Replaces the React.createElement function with a more optimized one for production + plugins = plugins + ',transform-react-remove-prop-types'; // Removes prop types from code } + + var babel = 'babel?' + plugins + '&' + presets; + var jsLoaders = [babel]; var cssLoaders = ['css-loader', 'autoprefixer-loader?' + autoprefix]; @@ -28,7 +42,7 @@ module.exports = function(stage){ var lessLoaders = cssLoaders.slice(0); lessLoaders.push('less-loader'); - + var entries = _.cloneDeep(settings.entries); var cssEntries = settings.cssEntries; @@ -53,10 +67,10 @@ module.exports = function(stage){ context: __dirname, entry: entries, output: { - path: release ? settings.prodOutput : settings.devOutput, + path: release ? settings.prodOutput : settings.devOutput, // Location where generated files will be output filename: release ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, chunkFilename: release ? '[id]-[chunkhash]' + settings.buildSuffix : '[id].js', - publicPath: release ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, + publicPath: release ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, // Public path indicates where the assets will be served from. In dev this will likely be localhost or a local domain. In production this could be a CDN. sourceMapFilename: 'debugging/[file].map', pathinfo: !release // http://webpack.github.io/docs/configuration.html#output-pathinfo }, diff --git a/client/package.json b/client/package.json index c71cf7e..7e3889d 100644 --- a/client/package.json +++ b/client/package.json @@ -19,98 +19,101 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { - "babel": "6.5.1", - "babel-polyfill": "^6.5.0", - "babel-runtime": "^6.5.0", + "babel": "6.5.2", + "babel-polyfill": "^6.7.4", + "babel-runtime": "^6.6.1", "immutable": "3.7.6", - "lodash": "4.3.0", - "react": "0.14.7", - "react-dom": "0.14.7", + "lodash": "4.11.0", + "react": "15.0.1", + "react-dom": "15.0.1", "react-proxy-loader": "0.3.4", - "react-redux": "4.4.0", - "react-router": "2.0.0", - "react-tap-event-plugin": "0.2.2", - "redux": "3.3.1", - "superagent": "1.7.2", - "uuid": "2.0.1" + "react-redux": "4.4.4", + "react-router": "2.1.1", + "react-tap-event-plugin": "1.0.0", + "redux": "3.4.0", + "superagent": "1.8.3", + "uuid": "2.0.2" }, "devDependencies": { + "babel-plugin-transform-react-constant-elements": "^6.5.0", + "babel-plugin-transform-react-inline-elements": "^6.6.5", + "babel-plugin-transform-react-remove-prop-types": "^0.2.5", "autoprefixer-loader": "3.2.0", - "babel": "6.5.1", - "babel-core": "^6.5.1", - "babel-eslint": "^4.1.8", - "babel-loader": "^6.2.2", - "babel-plugin-react-transform": "^2.0.0", + "babel": "6.5.2", + "babel-core": "^6.7.6", + "babel-eslint": "^6.0.2", + "babel-loader": "^6.2.4", + "babel-plugin-react-transform": "^2.0.2", "babel-plugin-transform-class-properties": "^6.6.0", "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-runtime": "^6.5.0", - "babel-preset-es2015": "^6.5.0", + "babel-plugin-transform-runtime": "^6.7.5", + "babel-preset-es2015": "^6.6.0", "babel-preset-react": "^6.5.0", - "babel-preset-react-hmre": "^1.1.0", + "babel-preset-react-hmre": "^1.1.1", "babel-preset-stage-0": "^6.5.0", "chunk-manifest-webpack-plugin": "0.0.1", - "coveralls": "2.11.6", + "coveralls": "2.11.9", "css-loader": "0.23.1", "dotenv": "2.0.0", "ecstatic": "1.4.0", "ejs": "^2.4.1", - "eslint": "^1.10.3", - "eslint-plugin-babel": "^3.1.0", - "eslint-plugin-react": "^3.16.1", + "eslint": "^2.7.0", + "eslint-plugin-babel": "^3.2.0", + "eslint-plugin-react": "^4.3.0", "event-stream": "3.3.2", "eventsource-polyfill": "^0.9.6", "express": "^4.13.4", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.8.5", "gulp": "3.9.1", - "gulp-filter": "3.0.1", + "gulp-filter": "4.0.0", "gulp-front-matter": "^1.3.0", "gulp-htmlmin": "1.3.0", "gulp-ignore": "2.0.1", "gulp-markdown": "^1.2.0", "gulp-rename": "1.2.2", "gulp-util": "3.0.7", - "html-minifier": "1.1.1", + "html-minifier": "1.5.0", "imports-loader": "0.6.5", - "istanbul": "0.4.2", - "istanbul-instrumenter-loader": "0.1.3", + "istanbul": "0.4.3", + "istanbul-instrumenter-loader": "0.2.0", "jasmine-core": "2.4.1", - "karma": "0.13.19", - "karma-chrome-launcher": "0.2.2", + "karma": "0.13.22", + "karma-chrome-launcher": "0.2.3", "karma-cli": "0.1.2", - "karma-coverage": "0.5.3", + "karma-coverage": "0.5.5", "karma-firefox-launcher": "0.1.7", - "karma-jasmine": "0.3.7", + "karma-jasmine": "0.3.8", "karma-jasmine-ajax": "0.1.13", "karma-phantomjs-launcher": "1.0.0", "karma-sourcemap-loader": "0.3.7", - "karma-spec-reporter": "0.0.24", + "karma-spec-reporter": "0.0.26", "karma-webpack": "1.7.0", - "less": "2.6.0", - "less-loader": "2.2.2", + "less": "2.6.1", + "less-loader": "2.2.3", "minimist": "1.2.0", "mkdirp": "^0.5.1", "node-sass": "3.4.2", - "npm-shrinkwrap": "5.4.1", + "npm-shrinkwrap": "200.5.1", "null-loader": "0.1.1", "path": "^0.12.7", - "phantomjs-prebuilt": "^2.1.4", - "protractor": "3.1.1", - "psi": "2.0.2", + "phantomjs-prebuilt": "^2.1.7", + "protractor": "3.2.2", + "psi": "2.0.3", "react-hot-loader": "1.3.0", "react-transform-catch-errors": "^1.0.2", - "redbox-react": "^1.2.2", - "redux-devtools": "3.1.1", - "redux-devtools-dock-monitor": "1.0.1", - "redux-devtools-log-monitor": "1.0.4", - "rimraf": "2.5.1", + "redbox-react": "^1.2.3", + "redux-devtools": "3.2.0", + "redux-devtools-dock-monitor": "1.1.1", + "redux-devtools-log-monitor": "1.0.9", + "rimraf": "2.5.2", "run-sequence": "1.1.5", - "sass-loader": "3.1.2", - "style-loader": "0.13.0", + "sass-loader": "3.2.0", + "style-loader": "0.13.1", "through2": "2.0.1", "url-loader": "0.5.7", - "webpack": "1.12.13", - "webpack-dev-middleware": "^1.5.1", - "webpack-hot-middleware": "^2.7.1" + "webpack": "1.12.15", + "webpack-dev-middleware": "^1.6.1", + "webpack-hot-middleware": "^2.10.0" } } diff --git a/package.json b/package.json index f409b94..e23ad0c 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,12 @@ "version": "0.0.2", "description": "Client only React Starter App.", "engines": { - "node": "5.7.0" + "node": "5.10.1" }, "scripts": { "postinstall": "cd ./client && npm install", "build": "cd ./client && npm run build", + "build_dev": "cd ./client && npm run build_dev", "release": "cd ./client && npm run release", "hot": "cd ./client && npm run hot", "test": "cd ./client && npm run test", @@ -23,5 +24,6 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": {} + "dependencies": {}, + "devDependencies": {} } From bc36569f6cdc3c22686c05d2d301e75d841068dc Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 18 Apr 2016 15:39:41 -0600 Subject: [PATCH 122/452] Separates Karma config into function --- client/config/karma.js | 106 +++++++++++++++++++++++++++++++++++++++ client/karma.conf.js | 109 ++--------------------------------------- 2 files changed, 109 insertions(+), 106 deletions(-) create mode 100644 client/config/karma.js diff --git a/client/config/karma.js b/client/config/karma.js new file mode 100644 index 0000000..9060395 --- /dev/null +++ b/client/config/karma.js @@ -0,0 +1,106 @@ +// karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html +var webpack = require('webpack'); +var webpackConfig = require('./webpack.config')("test"); + +module.exports = function(){ + + function isCoverage(argument) { + return argument === '--coverage'; + } + + // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' + var reporters = ['spec']; + + if(process.argv.some(isCoverage)){ + reporters.push('coverage'); + } + + var testConfig = { + + // If browser does not capture in given timeout [ms], kill it + captureTimeout: 60000, + + // How long will Karma wait for a message from a browser before disconnecting from it (in ms) + browserNoActivityTimeout: 60000, + + // enable / disable colors in the output (reporters and logs) + colors: true, + + // web server port + port: 9876, + + files: [ + './specs_support/mocks/*.js', + './specs_support/spec_helper.js', + //'./js/**/*.spec.js' // Use webpack to build each test individually. If changed here, match the change in preprocessors + './webpack.tests.js' // More performant but tests cannot be run individually + ], + + // Transpile tests with the karma-webpack plugin + preprocessors: { + //'./js/**/*.spec.js': ['webpack', 'sourcemap'] // Use webpack to build each test individually. If changed here, match the change in files + './webpack.tests.js': ['webpack', 'sourcemap'], // More performant but tests cannot be run individually + }, + + // Run the tests using any of the following browsers + // - Chrome npm install --save-dev karma-chrome-launcher + // - ChromeCanary + // - Firefox npm install --save-dev karma-firefox-launcher + // - Opera npm install --save-dev karma-opera-launcher + // - Safari npm install --save-dev karma-safari-launcher (only Mac) + // - PhantomJS npm install --save-dev karma-phantomjs-launcher + // - IE npm install karma-ie-launcher (only Windows) + browsers: ['Chrome'], + + // Exit the test runner as well when the test suite returns. + singleRun: false, + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + // Use jasmine as the test framework + frameworks: ['jasmine-ajax', 'jasmine'], + + reporters: reporters, + + // karma-webpack configuration. Load and transpile js and jsx files. + // Use istanbul-transformer post loader to generate code coverage report. + webpack: { + devtool: 'eval', + plugins: webpackConfig.plugins, + module: webpackConfig.module, + resolve: webpackConfig.resolve + }, + + // Reduce the noise to the console + webpackMiddleware: { + noInfo: true, + stats: { + colors: true + } + } + + }; + + + // Generate code coverage report if --coverage is specified + if(process.argv.some(isCoverage)) { + // Generate a code coverage report using `lcov` format. Result will be output to coverage/lcov.info + // run using `npm coveralls` + testConfig['webpack']['module']['postLoaders'] = [{ + test: /\.jsx?$/, + exclude: /(test|node_modules)\//, + loader: 'istanbul-instrumenter' + }]; + + testConfig['coverageReporter'] = { + dir: 'coverage/', + reporters: [ + { type: 'lcovonly', subdir: '.', file: 'lcov.info' }, + { type: 'html', subdir: 'html' } + ] + }; + } + + return testConfig; +}; \ No newline at end of file diff --git a/client/karma.conf.js b/client/karma.conf.js index af86446..8b28d82 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -1,108 +1,5 @@ -// karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html -var webpack = require('webpack'); -var webpackConfig = require('./config/webpack.config')("test"); +var karmaConf = require('./config/karma'); -module.exports = function(config) { - - function isCoverage(argument) { - return argument === '--coverage'; - } - - // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' - var reporters = ['spec']; - - if(process.argv.some(isCoverage)){ - reporters.push('coverage'); - } - - var testConfig = { - - // If browser does not capture in given timeout [ms], kill it - captureTimeout: 60000, - - // How long will Karma wait for a message from a browser before disconnecting from it (in ms) - browserNoActivityTimeout: 60000, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // web server port - port: 9876, - - files: [ - './specs_support/mocks/*.js', - './specs_support/spec_helper.js', - //'./js/**/*.spec.js' // Use webpack to build each test individually. If changed here, match the change in preprocessors - './webpack.tests.js' // More performant but tests cannot be run individually - ], - - // Transpile tests with the karma-webpack plugin - preprocessors: { - //'./js/**/*.spec.js': ['webpack', 'sourcemap'] // Use webpack to build each test individually. If changed here, match the change in files - './webpack.tests.js': ['webpack', 'sourcemap'], // More performant but tests cannot be run individually - }, - - // Run the tests using any of the following browsers - // - Chrome npm install --save-dev karma-chrome-launcher - // - ChromeCanary - // - Firefox npm install --save-dev karma-firefox-launcher - // - Opera npm install --save-dev karma-opera-launcher - // - Safari npm install --save-dev karma-safari-launcher (only Mac) - // - PhantomJS npm install --save-dev karma-phantomjs-launcher - // - IE npm install karma-ie-launcher (only Windows) - browsers: ['Chrome'], - - // Exit the test runner as well when the test suite returns. - singleRun: false, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - // Use jasmine as the test framework - frameworks: ['jasmine-ajax', 'jasmine'], - - reporters: reporters, - - // karma-webpack configuration. Load and transpile js and jsx files. - // Use istanbul-transformer post loader to generate code coverage report. - webpack: { - devtool: 'eval', - plugins: [ - new webpack.DefinePlugin({'process.env.NODE_ENV': '"development"', '__DEV__': true}) - ], - module: webpackConfig.module, - resolve: webpackConfig.resolve - }, - - // Reduce the noise to the console - webpackMiddleware: { - noInfo: true, - stats: { - colors: true - } - } - - }; - - - // Generate code coverage report if --coverage is specified - if(process.argv.some(isCoverage)) { - // Generate a code coverage report using `lcov` format. Result will be output to coverage/lcov.info - // run using `npm coveralls` - testConfig['webpack']['module']['postLoaders'] = [{ - test: /\.jsx?$/, - exclude: /(test|node_modules)\//, - loader: 'istanbul-instrumenter' - }]; - - testConfig['coverageReporter'] = { - dir: 'coverage/', - reporters: [ - { type: 'lcovonly', subdir: '.', file: 'lcov.info' }, - { type: 'html', subdir: 'html' } - ] - }; - } - - config.set(testConfig); +module.exports = function(config){ + config.set(karmaConf()); }; From 1ef71b6a946e495dac6da3fdeaca5d84c278d89b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 18 Apr 2016 15:39:57 -0600 Subject: [PATCH 123/452] Adds karma codeship config --- client/karma.conf.js.codeship | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 client/karma.conf.js.codeship diff --git a/client/karma.conf.js.codeship b/client/karma.conf.js.codeship new file mode 100644 index 0000000..10128b9 --- /dev/null +++ b/client/karma.conf.js.codeship @@ -0,0 +1,8 @@ +var karmaConfig = require('./config/karma'); + +module.exports = function(config){ + var testConfig = karmaConfig(); + testConfig.singleRun = true + testConfig.autoWatch = false; + config.set(testConfig); +}; From ff8dd8afb8f855cfbb94c13cc3a43ceb92fe2795 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 18 Apr 2016 15:40:18 -0600 Subject: [PATCH 124/452] Adds webpack plugins setup for testing env --- client/config/webpack.config.js | 49 +++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 12d07f7..3535778 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -63,6 +63,36 @@ module.exports = function(stage){ var extractCSS = new ExtractTextPlugin(release ? '[name]-[chunkhash].css' : '[name].css'); + var plugins = []; + + if(stage == "production"){ + plugins = [ + new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"', '__DEV__': false}), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.UglifyJsPlugin(), + new webpack.optimize.OccurenceOrderPlugin(), + new webpack.optimize.AggressiveMergingPlugin(), + new ChunkManifestPlugin({ + filename: 'webpack-common-manifest.json', + manfiestVariable: 'webpackBundleManifest' + }), + extractCSS + //new webpack.optimize.CommonsChunkPlugin('init.js') // Use to extract common code from multiple entry points into a single init.js + ]; + } else if (stage == "development"){ + plugins = [ + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), + new webpack.HotModuleReplacementPlugin(), + new webpack.NoErrorsPlugin(), + extractCSS + ]; + } else if (stage == "test"){ + plugins = [ + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), + extractCSS + ]; + } + return { context: __dirname, entry: entries, @@ -87,24 +117,7 @@ module.exports = function(stage){ stats: { colors: true }, - plugins: release ? [ - new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"', '__DEV__': false}), - new webpack.optimize.DedupePlugin(), - new webpack.optimize.UglifyJsPlugin(), - new webpack.optimize.OccurenceOrderPlugin(), - new webpack.optimize.AggressiveMergingPlugin(), - new ChunkManifestPlugin({ - filename: 'webpack-common-manifest.json', - manfiestVariable: 'webpackBundleManifest' - }), - extractCSS - //new webpack.optimize.CommonsChunkPlugin('init.js') // Use to extract common code from multiple entry points into a single init.js - ] : [ - extractCSS, - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), - new webpack.HotModuleReplacementPlugin(), - new webpack.NoErrorsPlugin() - ], + plugins: plugins, module: { loaders: [ { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, From 1ba1b172aeef1044178aa6ec95ac89a7405df0b0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 18 Apr 2016 15:40:39 -0600 Subject: [PATCH 125/452] Removes whitespace. Update for loads 4 --- client/js/libs/assets.spec.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/js/libs/assets.spec.js b/client/js/libs/assets.spec.js index 8110c78..cc7d099 100644 --- a/client/js/libs/assets.spec.js +++ b/client/js/libs/assets.spec.js @@ -12,18 +12,18 @@ describe('assets', () => { const svg = assets('./images/atomicjolt.svg'); expect(svg).toBe('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0zOTIgNDc3LjcgMjE0IDQ3LjMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTM5MiA0NzcuNyAyMTQgNDcuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6I0ZDQ0MwRjt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMTcuNCw0OTEuNWM1LjEtMC4xLDkuMiwzLjksOS4zLDlzLTMuOSw5LjEtOS4xLDkuMmMtNS4yLDAuMS05LjItMy44LTkuMy05DQoJCUMtMjI2LjYsNDk1LjQtMjIyLjgsNDkxLjYtMjE3LjQsNDkxLjV6IE0tMjExLjgsNTAwLjZjMC0xLjItMC4zLTIuMy0xLTMuM2MtMi4yLTMuNS02LjktMy42LTktMC4xYy0xLjQsMi4yLTEuMiw1LjMsMC4zLDcuMw0KCQljMS44LDIuNSw1LjMsMi44LDcuNiwwLjhDLTIxMi41LDUwNC0yMTEuOSw1MDIuNC0yMTEuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI0Ni4zLDUwNC40bDIuNCwxLjljMC4xLDAuMSwwLjEsMC4zLDAsMC40Yy0yLjMsMi41LTYuMiwzLjktMTAsMi41Yy0zLjktMS40LTYuNC01LjEtNi4yLTkuMQ0KCQljMC4yLTMuOCwzLjItNy4yLDcuMi04LjNjMy4yLTAuOCw3LjEsMC40LDguNywyLjdjMC4xLDAuMSwwLDAuMy0wLjEsMC4zbC0yLjQsMS45Yy0wLjEsMC4xLTAuMywwLjEtMC40LTAuMQ0KCQljLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4zYy0yLjYtMi44LTUuOC0xLjktNy42LDAuMmMtMi4zLDIuNi0yLDYuNywwLjcsOC45YzIuMSwxLjcsNC44LDEuNSw2LjgtMC40YzAuMi0wLjIsMC40LTAuNCwwLjctMC42DQoJCUMtMjQ2LjUsNTA0LjMtMjQ2LjQsNTA0LjMtMjQ2LjMsNTA0LjR6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMDQuOSw0OTEuOGgzYzAuMiwwLDAuMywwLjEsMC4zLDAuM3YxNGMwLDAuMiwwLjEsMC4zLDAuMywwLjNoNy40YzAuMiwwLDAuMywwLjEsMC4zLDAuM3YyLjMNCgkJYzAsMC4yLTAuMSwwLjMtMC4zLDAuM0gtMjA1Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjN2LTE2LjlDLTIwNS4zLDQ5Mi0yMDUuMSw0OTEuOC0yMDQuOSw0OTEuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI4NS41LDUwOS42aC0zLjRjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtMTcuNmMwLTAuMSwwLjEtMC4yLDAuMi0wLjFjMywzLjEsNS45LDYuMSw4LjgsOS4xDQoJCWMwLDAuMSwwLjEsMC4xLDAuMiwwYzIuOS0zLDUuOC02LDguNy05LjFjMC4xLTAuMSwwLjIsMCwwLjIsMC4xdjE3LjZjMCwwLjEtMC4xLDAuMS0wLjEsMC4xaC0zLjNjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtOS4yDQoJCWMtMC4yLTAuMS0wLjItMC4xLTAuMy0wLjFjLTEuNywxLjctMy40LDMuNC01LjEsNS4yYzAsMC0wLjEsMC0wLjIsMGMtMS43LTEuNy0zLjQtMy41LTUuMS01LjNjLTAuMS0wLjEtMC4yLDAtMC4yLDAuMXY5LjQNCgkJQy0yODUuNCw1MDkuNS0yODUuNCw1MDkuNi0yODUuNSw1MDkuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMwMS4zLDQ5MS41YzUuMS0wLjEsOS4yLDMuOSw5LjMsOXMtMy45LDkuMS05LjEsOS4yYy01LjIsMC4xLTkuMi0zLjgtOS4zLTkuMQ0KCQlDLTMxMC41LDQ5NS40LTMwNi43LDQ5MS42LTMwMS4zLDQ5MS41eiBNLTMwNi44LDUwMC42YzAuMSwwLjYsMC4xLDEuMywwLjMsMS45YzAuNiwyLDEuOCwzLjQsMy44LDRjMiwwLjUsMy43LDAsNS4yLTEuNQ0KCQljMi4xLTIuMiwyLjItNS44LDAuMy04LjJjLTEuMy0xLjYtMy0yLjQtNS4yLTJDLTMwNSw0OTUuMy0zMDYuNyw0OTcuNi0zMDYuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMzMi44LDQ5MS40YzIuOCw1LjksNS42LDExLjcsOC40LDE3LjVjMC4xLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjcsMC0xLjMsMC0yLDBjLTAuNSwwLTEuMiwwLjItMS41LTAuMQ0KCQljLTAuNC0wLjItMC41LTAuOS0wLjctMS40Yy0wLjMtMC43LTAuNi0xLjQtMC45LTJjLTAuMS0wLjItMC4zLTAuMy0wLjUtMC4zYy0xLjksMC0zLjcsMC01LjYsMGMtMC4zLDAtMC41LDAuMS0wLjYsMC40DQoJCWMtMC40LDEtMC44LDEuOS0xLjIsMi45Yy0wLjEsMC4zLTAuNSwwLjUtMC44LDAuNWMtMSwwLTIsMC0zLDBjLTAuMSwwLTAuMi0wLjEtMC4xLTAuMmMyLjgtNS45LDUuNi0xMS42LDguNC0xNy41DQoJCUMtMzMzLDQ5MS4zLTMzMi44LDQ5MS4zLTMzMi44LDQ5MS40eiBNLTMzMyw0OTguNGwtMS43LDMuOGMwLDAuMSwwLDAuMiwwLjEsMC4yaDMuM2MwLjEsMCwwLjItMC4xLDAuMS0wLjJsLTEuNi0zLjgNCgkJQy0zMzIuOCw0OTguMy0zMzMsNDk4LjMtMzMzLDQ5OC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzI1LjEsNDk0LjZ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41YzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtNC41DQoJCWMtMC4xLDAtMC4yLDAuMS0wLjIsMC4ydjE0LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTVjMC0wLjEtMC4xLTAuMi0wLjItMC4yaC00LjUNCgkJQy0zMjUsNDk0LjgtMzI1LjEsNDk0LjctMzI1LjEsNDk0LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMzMsNDkxLjdoMy4yYzAuMSwwLDAuMywwLjEsMC4zLDAuM2MwLDAuMSwwLDAuMiwwLDAuMmMwLDQuOSwwLDEwLjMsMCwxNS4zYzAsMy44LTIuNSw3LTYuMSw3LjkNCgkJYy0wLjYsMC4yLTEuMywwLjItMiwwLjNjLTAuMiwwLTAuMy0wLjEtMC4zLTAuM3YtMi42YzAtMC4xLDAuMS0wLjMsMC4yLTAuM2MwLjMsMCwwLjYsMCwwLjktMC4xYzEuOC0wLjQsMy4yLTIsMy40LTQNCgkJYzAtMC40LDAuMS0wLjksMC4xLTEuM2MwLTQuOCwwLTEwLDAtMTQuOHYtMC40Qy0yMzMuMyw0OTEuOS0yMzMuMiw0OTEuNy0yMzMsNDkxLjd6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjYuNiw0OTEuOGgzLjJjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjE3LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTINCgkJQy0yNjYuOCw0OTEuOS0yNjYuOCw0OTEuOC0yNjYuNiw0OTEuOHoiLz4NCgk8Zz4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xODkuNCw0OTQuOGgtNC41Yy0wLjEsMC0wLjItMC4xLTAuMi0wLjJ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41DQoJCQljMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC00LjVjLTAuMSwwLTAuMiwwLjEtMC4yLDAuMnYxNC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtMy4yYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJWNDk1DQoJCQlDLTE4OS4xLDQ5NC45LTE4OS4yLDQ5NC44LTE4OS40LDQ5NC44eiIvPg0KCTwvZz4NCjwvZz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzYyLDQ4NS44bC04LjctN2MtMC4xLTAuMS0wLjItMC4xLTAuMywwbC0xOC4zLDI2LjVjLTAuMSwwLjEsMCwwLjIsMCwwLjJsMTUsMTZjMCwwLjEsMC4xLDAuMSwwLjIsMC4xDQoJbDE5LjItNS4xYzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtNy4zLTMwLjRDLTM2MS45LDQ4NS45LTM2Miw0ODUuOS0zNjIsNDg1Ljh6IE0tMzc5LjcsNTEyLjVsMTEuMi0xNmMwLjEtMC4xLDAuMy0wLjEsMC40LDAuMQ0KCWwyLjcsMTIuOWMwLDAuMSwwLDAuMi0wLjEsMC4ybC0xMy4zLDMuN2MtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMC41LTAuNUMtMzc5LjgsNTEyLjctMzc5LjgsNTEyLjYtMzc5LjcsNTEyLjV6IE0tMzY3LjMsNDkxDQoJTC0zNjcuMyw0OTFsLTEuNy03LjdjMC0wLjIsMC4yLTAuMywwLjMtMC4ybDQuMywzLjRjMC4xLDAuMSwwLjEsMC4yLDAsMC4zTC0zNjcuMyw0OTFMLTM2Ny4zLDQ5MXogTS0zNzEuMSw0ODMuM2wyLjIsMTANCgljMCwwLjEsMCwwLjEsMCwwLjJsLTEyLjIsMTcuNGMtMC4xLDAuMS0wLjIsMC4xLTAuMywwbC01LjEtNS41Yy0wLjEtMC4xLTAuMS0wLjIsMC0wLjJsMTUuMi0yMg0KCUMtMzcxLjQsNDgzLjEtMzcxLjEsNDgzLjEtMzcxLjEsNDgzLjN6IE0tMzc3LjIsNTE1bDEzLjktMy45YzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtMy41LTE3YzAtMC4xLDAtMC4xLDAtMC4ybDMuMS00LjQNCgljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjFsNi4yLDI1LjVjMCwwLjEsMCwwLjItMC4xLDAuMmwtMTYuMSw0LjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTMuOC00Qy0zNzcuNCw1MTUuMi0zNzcuNCw1MTUtMzc3LjIsNTE1eiINCgkvPg0KPC9zdmc+DQo='); - + const big = assets('./images/atomicjolt.png'); expect(big).toBe('/_karma_webpack_//atomicjolt-92b4dadbb4b4c6bc62bcd225dbefa9d3.png'); - + }); }); - + describe('context', ()=> { - + it('gets the context object', ()=> { - expect(_.include(assets.keys(), './images/atomicjolt.jpg')).toBe(true); + expect(_.includes(assets.keys(), './images/atomicjolt.jpg')).toBe(true); }); }); From 71e148f41f105f9faf88a37f4f9bb1c03afdaee9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 18 Apr 2016 15:40:47 -0600 Subject: [PATCH 126/452] Add missing ';' --- client/js/reducers/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index 1033893..58b16a7 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,5 +1,5 @@ import { combineReducers } from 'redux'; -import settings from './settings' +import settings from './settings'; import application from './application'; import messages from './messages'; From bba500728c18475a27e02b5f75310b13b932fd3c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 18 Apr 2016 15:40:56 -0600 Subject: [PATCH 127/452] Update for lodash 4 --- client/js/reducers/messages.spec.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/client/js/reducers/messages.spec.js b/client/js/reducers/messages.spec.js index 66c6688..034cc04 100644 --- a/client/js/reducers/messages.spec.js +++ b/client/js/reducers/messages.spec.js @@ -9,12 +9,12 @@ import messages from "./messages"; describe("message reducer", () => { describe("initial state", () => { - + it("has no messages", () => { const state = messages(undefined, {}); expect(state.toJS()).toEqual([]); }); - + }); describe("TIMEOUT", () => { @@ -27,7 +27,7 @@ describe("message reducer", () => { message: "No response" } }); - expect(_.contains(state.get(0),"Request timed out")).toBe(true); + expect(_.includes(state.get(0),"Request timed out")).toBe(true); }); }); @@ -42,7 +42,7 @@ describe("message reducer", () => { message: "Not authorized" } }); - expect(_.contains(state.get(0),"Request not authorized")).toBe(true); + expect(_.includes(state.get(0),"Request not authorized")).toBe(true); }); }); @@ -57,7 +57,7 @@ describe("message reducer", () => { message: "Error" } }); - expect(_.contains(state.get(0),"Request error")).toBe(true); + expect(_.includes(state.get(0),"Request error")).toBe(true); }); }); @@ -73,12 +73,12 @@ describe("message reducer", () => { } } const state = messages(initialState, action); - expect(_.contains(state.get(0),action.payload.message)).toBe(true); + expect(_.includes(state.get(0),action.payload.message)).toBe(true); }); }); - + describe("REMOVE_MESSAGE", () => { it("Removes message", () => { @@ -96,7 +96,7 @@ describe("message reducer", () => { }; const initialState = Immutable.fromJS([action.payload.message]); const state = messages(initialState, action); - expect(_.contains(state.get(0),action.payload.message)).toBe(true); + expect(_.includes(state.get(0),action.payload.message)).toBe(true); const newState = messages(state, removeAction); expect(newState.toJS()).toEqual([]); }); @@ -117,7 +117,7 @@ describe("message reducer", () => { }; const initialState = Immutable.fromJS([action.payload.message]); const state = messages(initialState, action); - expect(_.contains(state.get(0),action.payload.message)).toBe(true); + expect(_.includes(state.get(0),action.payload.message)).toBe(true); const newState = messages(state, removeAction); expect(newState.toJS()).toEqual([]); }); From 69d6f8004a1bfff161bc34676dd76f40c3473bff Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 18 Apr 2016 16:29:18 -0600 Subject: [PATCH 128/452] Change loaders based on stage. --- client/config/webpack.config.js | 58 ++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 3535778..2ed14ad 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -7,7 +7,9 @@ var _ = require('lodash'); module.exports = function(stage){ - var release = stage == "production"; + var production = stage == "production"; + var development = stage == "development"; + var test = stage == "test"; var excludeFromStats = [ /node_modules[\\\/]react(-router)?[\\\/]/ @@ -25,7 +27,7 @@ module.exports = function(stage){ if(stage == "development"){ presets = presets + ',presets[]=react-hmre'; // Adds react hot module reload - } else if (stage == "production") { + } else if (production) { plugins = plugins + ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement plugins = plugins + ',plugins[]=transform-react-inline-elements'; // Replaces the React.createElement function with a more optimized one for production plugins = plugins + ',transform-react-remove-prop-types'; // Removes prop types from code @@ -50,7 +52,7 @@ module.exports = function(stage){ entries[name] = cssEntries[name]; } - if(stage == "development"){ + if(development){ entries = _.reduce(entries, function(result, entry, key){ result[key] = [ 'eventsource-polyfill', @@ -61,11 +63,11 @@ module.exports = function(stage){ }, {}); } - var extractCSS = new ExtractTextPlugin(release ? '[name]-[chunkhash].css' : '[name].css'); + var extractCSS = new ExtractTextPlugin(production ? '[name]-[chunkhash].css' : '[name].css'); var plugins = []; - if(stage == "production"){ + if(production){ plugins = [ new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"', '__DEV__': false}), new webpack.optimize.DedupePlugin(), @@ -79,30 +81,48 @@ module.exports = function(stage){ extractCSS //new webpack.optimize.CommonsChunkPlugin('init.js') // Use to extract common code from multiple entry points into a single init.js ]; - } else if (stage == "development"){ + } else if (development){ plugins = [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), new webpack.HotModuleReplacementPlugin(), new webpack.NoErrorsPlugin(), extractCSS ]; - } else if (stage == "test"){ + } else if (test){ plugins = [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), extractCSS ]; } + var loaders = [ + { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' + { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=cd [name]-[hash].[ext]']} + ]; + + // Don't process css in test environment + if(test){ + loaders.push({ test: /\.scss$/i, loaders: scssLoaders }); + loaders.push({ test: /\.css$/i , loaders: cssLoaders }); + loaders.push({ test: /\.less$/i , loaders: lessLoaders }); + } else { + loaders.push({ test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }); + loaders.push({ test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }); + loaders.push({ test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }); + } + return { context: __dirname, entry: entries, output: { - path: release ? settings.prodOutput : settings.devOutput, // Location where generated files will be output - filename: release ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, - chunkFilename: release ? '[id]-[chunkhash]' + settings.buildSuffix : '[id].js', - publicPath: release ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, // Public path indicates where the assets will be served from. In dev this will likely be localhost or a local domain. In production this could be a CDN. + path: production ? settings.prodOutput : settings.devOutput, // Location where generated files will be output + filename: production ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, + chunkFilename: production ? '[id]-[chunkhash]' + settings.buildSuffix : '[id].js', + publicPath: production ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, // Public path indicates where the assets will be served from. In dev this will likely be localhost or a local domain. In production this could be a CDN. sourceMapFilename: 'debugging/[file].map', - pathinfo: !release // http://webpack.github.io/docs/configuration.html#output-pathinfo + pathinfo: !production // http://webpack.github.io/docs/configuration.html#output-pathinfo }, resolve: { extensions: ['', '.js', '.json', '.jsx'], @@ -112,22 +132,14 @@ module.exports = function(stage){ quiet: false, noInfo: false, debug: false, - outputPathinfo: !release, - devtool: release ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool + outputPathinfo: !production, + devtool: production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool stats: { colors: true }, plugins: plugins, module: { - loaders: [ - { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, - { test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }, - { test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }, - { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' - { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=cd [name]-[hash].[ext]']} - ] + loaders: loaders }, devServer: { stats: { From 81eae36b6773fbc6afaf63d9222381f2c0f4855e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 21 Apr 2016 09:05:14 -0600 Subject: [PATCH 129/452] Include css in all stages. --- client/config/webpack.config.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 2ed14ad..222d5f4 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -98,21 +98,13 @@ module.exports = function(stage){ var loaders = [ { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, + { test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }, + { test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }, { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=cd [name]-[hash].[ext]']} ]; - // Don't process css in test environment - if(test){ - loaders.push({ test: /\.scss$/i, loaders: scssLoaders }); - loaders.push({ test: /\.css$/i , loaders: cssLoaders }); - loaders.push({ test: /\.less$/i , loaders: lessLoaders }); - } else { - loaders.push({ test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }); - loaders.push({ test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }); - loaders.push({ test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }); - } - return { context: __dirname, entry: entries, From a08bb86de5f6252c4b0218901df3eea5131e5a5f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 24 Apr 2016 17:23:33 -0600 Subject: [PATCH 130/452] Add array support to generating query params. --- client/js/libs/api.js | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/client/js/libs/api.js b/client/js/libs/api.js index 2d95800..2522912 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -114,23 +114,27 @@ export default class Api{ } static queryStringFrom(params){ - if(params){ - var query = _.chain(params) - .map((val, key) => { - if(val){ - return `${key}=${val}`; + var query = _.chain(params) + .map((val, key) => { + if(val){ + if (_.isArray(val)) { + return _.map(val, (subVal) => { return `${key}[]=${subVal}`; }).join(`&`); } else { - return ""; + return `${key}=${val}`; } - }) - .compact() - .value(); + } else { + return ""; + } + }) + .compact() + .value(); - if(query.length > 0){ - return `?${query.join("&")}`; - } + if(query.length > 0){ + return `?${query.join("&")}`; + } else { + return ""; } - return ""; + } } From 68e74750783825ebaaff4c4f95bea52716d153ac Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 26 Apr 2016 15:10:27 -0600 Subject: [PATCH 131/452] code organization --- client/config/settings.js | 2 +- client/package.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 8682e2b..912c94d 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -32,7 +32,7 @@ module.exports = { devAssetsUrl: process.env.ASSETS_URL || 'http://localhost:' + hotPort, hotPort: hotPort, - + buildSuffix: '_bundle.js', entries: { diff --git a/client/package.json b/client/package.json index 7e3889d..07cbab0 100644 --- a/client/package.json +++ b/client/package.json @@ -35,9 +35,6 @@ "uuid": "2.0.2" }, "devDependencies": { - "babel-plugin-transform-react-constant-elements": "^6.5.0", - "babel-plugin-transform-react-inline-elements": "^6.6.5", - "babel-plugin-transform-react-remove-prop-types": "^0.2.5", "autoprefixer-loader": "3.2.0", "babel": "6.5.2", "babel-core": "^6.7.6", @@ -45,6 +42,9 @@ "babel-loader": "^6.2.4", "babel-plugin-react-transform": "^2.0.2", "babel-plugin-transform-class-properties": "^6.6.0", + "babel-plugin-transform-react-constant-elements": "^6.5.0", + "babel-plugin-transform-react-inline-elements": "^6.6.5", + "babel-plugin-transform-react-remove-prop-types": "^0.2.5", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-runtime": "^6.7.5", "babel-preset-es2015": "^6.6.0", From 66c02bbc22036e2ba1133f3aca0d63c35955ec61 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 26 Apr 2016 16:46:03 -0600 Subject: [PATCH 132/452] fix build process --- client/config/webpack.config.js | 2 +- client/gulpfile.js | 2 +- client/package.json | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 222d5f4..1249551 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -30,7 +30,7 @@ module.exports = function(stage){ } else if (production) { plugins = plugins + ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement plugins = plugins + ',plugins[]=transform-react-inline-elements'; // Replaces the React.createElement function with a more optimized one for production - plugins = plugins + ',transform-react-remove-prop-types'; // Removes prop types from code + plugins = plugins + ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code } var babel = 'babel?' + plugins + '&' + presets; diff --git a/client/gulpfile.js b/client/gulpfile.js index 3aff4b7..08f7648 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -125,7 +125,7 @@ gulp.task('javascript', function(cb){ if (err){ throw new util.PluginError('webpack', err); } - //util.log('[webpack]', stats.toString({colors: true})); + util.log('[webpack]', stats.toString({colors: true})); cb(); } bundler.run(bundle); diff --git a/client/package.json b/client/package.json index 07cbab0..2a15c53 100644 --- a/client/package.json +++ b/client/package.json @@ -36,16 +36,15 @@ }, "devDependencies": { "autoprefixer-loader": "3.2.0", - "babel": "6.5.2", "babel-core": "^6.7.6", "babel-eslint": "^6.0.2", "babel-loader": "^6.2.4", "babel-plugin-react-transform": "^2.0.2", "babel-plugin-transform-class-properties": "^6.6.0", + "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.5.0", "babel-plugin-transform-react-inline-elements": "^6.6.5", - "babel-plugin-transform-react-remove-prop-types": "^0.2.5", - "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-react-remove-prop-types": "^0.2.6", "babel-plugin-transform-runtime": "^6.7.5", "babel-preset-es2015": "^6.6.0", "babel-preset-react": "^6.5.0", From 4fcf8e556e62be30fe33cd8a067c5b95fdcdd969 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 17:50:26 -0600 Subject: [PATCH 133/452] Changes comment style --- client/gulpfile.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/client/gulpfile.js b/client/gulpfile.js index 08f7648..ae0315b 100644 --- a/client/gulpfile.js +++ b/client/gulpfile.js @@ -94,7 +94,7 @@ gulp.task('markdown', function(){ gulp.task('html', function(){ var htmlFilter = filter('**/*.html', {restore: true}); - + return gulp.src('./html/**/*') .pipe(ignore.exclude('layouts/**')) .pipe(ignore.exclude('layouts')) @@ -141,7 +141,7 @@ gulp.task('build', ['clean'], function(cb){ // ----------------------------------------------------------------------------- -// Watch for changes to html files and rebuild as needed. Webpack watches everything else +// Watch for changes to html files and rebuild as needed. Webpack watches everything else // and serves js, css, etc from memory. Html files are served from the build directory. // ----------------------------------------------------------------------------- gulp.task('watch', ['html', 'markdown'], function() { @@ -155,10 +155,10 @@ gulp.task('watch', ['html', 'markdown'], function() { gulp.task('default', ['watch']); -// ***************************************************************************** +// ----------------------------------------------------------------------------- // A bit hackish. This function can't be called until after the javascript task has been run // because webpackStats is undefined until webpack has run. -// ***************************************************************************** +// ----------------------------------------------------------------------------- function getHashed(entryPoint, ext){ return _.find(webpackStats.assetsByChunkName[entryPoint], function(hashEntry){ return path.extname(hashEntry).toLowerCase() === '.' + ext; @@ -166,18 +166,18 @@ function getHashed(entryPoint, ext){ } -// ***************************************************************************** +// ----------------------------------------------------------------------------- // Changes webpack paths as needed. -// ***************************************************************************** +// ----------------------------------------------------------------------------- function applyWebpack(){ return through2.obj(function (html, enc, cb) { // replace entry points with names generated by webpack if(release){ var result = String(html.contents); _.each(webpackConfig.entry, function(path, entry){ if(_.has(settings.entries, entry)){ - result = result.replace(entry + settings.buildSuffix, getHashed(entry, 'js')); + result = result.replace(entry + settings.buildSuffix, getHashed(entry, 'js')); } else if(_.has(settings.cssEntries, entry)){ - result = result.replace(entry + '.css', getHashed(entry, 'css')); + result = result.replace(entry + '.css', getHashed(entry, 'css')); } }); html.contents = new Buffer(result); @@ -188,16 +188,16 @@ function applyWebpack(){ } -// ***************************************************************************** +// ----------------------------------------------------------------------------- // Apply templates to content -// ***************************************************************************** +// ----------------------------------------------------------------------------- function applyLayout(defaultLayout){ - return through2.obj(function (file, enc, cb) { - + return through2.obj(function (file, enc, cb) { + var data = { metadata: file.metadata }; - + // Allow ejs code in content data.content = ejs.compile(String(file.contents), { cache: false, @@ -214,7 +214,7 @@ function applyLayout(defaultLayout){ cache: false, filename: layout }); - + file.contents = new Buffer(template(data), 'utf8'); this.push(file); cb(); From 89811f61324180d4e5090d9029c28c9c87fd2e05 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 17:50:35 -0600 Subject: [PATCH 134/452] Moves files --- client/html/{ => layouts}/partials/_google_analytics.html | 0 client/html/{ => layouts}/partials/_header.html | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename client/html/{ => layouts}/partials/_google_analytics.html (100%) rename client/html/{ => layouts}/partials/_header.html (100%) diff --git a/client/html/partials/_google_analytics.html b/client/html/layouts/partials/_google_analytics.html similarity index 100% rename from client/html/partials/_google_analytics.html rename to client/html/layouts/partials/_google_analytics.html diff --git a/client/html/partials/_header.html b/client/html/layouts/partials/_header.html similarity index 100% rename from client/html/partials/_header.html rename to client/html/layouts/partials/_header.html From 96c84196cf2af233bdd4a1108c7b1aa475f2dfd9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 17:50:49 -0600 Subject: [PATCH 135/452] Change file path --- client/html/layouts/application.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/html/layouts/application.html b/client/html/layouts/application.html index e19e403..b1d6d25 100644 --- a/client/html/layouts/application.html +++ b/client/html/layouts/application.html @@ -14,8 +14,8 @@ - <%- include('../partials/_header.html') %> + <%- include('./partials/_header.html') %> <%- content %> - <%- include('../partials/_google_analytics.html') %> + <%- include('./partials/_google_analytics.html') %> \ No newline at end of file From 4ed1e78a4f8a8ecac0660417d4d691fd68fa55b2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 18:13:51 -0600 Subject: [PATCH 136/452] Adds build tools for html files --- client/package.json | 5 +-- client/tools/build.js | 83 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 client/tools/build.js diff --git a/client/package.json b/client/package.json index 2a15c53..95fddab 100644 --- a/client/package.json +++ b/client/package.json @@ -10,8 +10,8 @@ "test": "./node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls", "hot": "gulp watch & node webpack.hot.js", - "build_dev": "gulp build", - "build": "gulp build --release", + "build_dev": "node ./tools/build.js", + "build": "node ./tools/build.js --release", "release": "gulp build --release && cd .. && s3_website push", "lint": "eslint js" }, @@ -73,6 +73,7 @@ "gulp-rename": "1.2.2", "gulp-util": "3.0.7", "html-minifier": "1.5.0", + "html-truncate": "^1.2.1", "imports-loader": "0.6.5", "istanbul": "0.4.3", "istanbul-instrumenter-loader": "0.2.0", diff --git a/client/tools/build.js b/client/tools/build.js new file mode 100644 index 0000000..1b6b95c --- /dev/null +++ b/client/tools/build.js @@ -0,0 +1,83 @@ +var path = require("path"); +var _ = require("lodash"); +var fs = require("fs"); +var webpack = require("webpack"); + +var buildContent = require("./build/content"); + +// Settings +var webpackConfigBuilder = require("../config/webpack.config"); +var settings = require("../config/settings"); +var argv = require("minimist")(process.argv.slice(2)); +var release = argv.release; +var stage = release ? "production" : "development"; + +// ----------------------------------------------------------------------------- +// Delete everything +// ----------------------------------------------------------------------------- +function clean(stage, cb){ + var rimraf = require("rimraf"); + var outputPath = stage == "production" ? settings.prodOutput : settings.devOutput; + rimraf(outputPath, cb); +} + +// ----------------------------------------------------------------------------- +// run webpack to build entry points +// ----------------------------------------------------------------------------- +function buildWebpackEntries(webpackConfig, cb){ + var bundler = webpack(webpackConfig); + function bundle(err, stats){ + if (err){ + throw new util.PluginError("webpack", err); + } + //util.log("[webpack]", stats.toString({colors: true})); + cb(webpackConfig, stats.toJson()); + } + bundler.run(bundle); +} + +// ----------------------------------------------------------------------------- +// build html and markdown files in a given directory +// ----------------------------------------------------------------------------- +function buildContents(dir, webpackConfig, webpackStats, stage, options){ + var results = []; + var files = fs.readdirSync(dir); + files.forEach(function(file){ + var fullPath = path.join(dir, file); + if(options.templateDirs.indexOf(fullPath) < 0){ // Ignore template dirs + if(fs.statSync(fullPath).isDirectory()){ + results = _.concat(results, buildContents(fullPath, webpackConfig, webpackStats, options)); + } else { + var page = buildContent(fullPath, webpackConfig, webpackStats, stage, options); + results.push(page); + } + } + }); + return results; +} + +// ----------------------------------------------------------------------------- +// main build +// ----------------------------------------------------------------------------- +function build(dir, stage, options){ + clean(stage, function(){ + buildWebpackEntries(webpackConfigBuilder(stage), function(webpackConfig, webpackStats){ + results = buildContents(dir, webpackConfig, webpackStats, stage, options); + }); + }); +}; + + +var templateDirs = [path.join(__dirname, "../html/layouts")]; + +var options = { + entries: settings.entries, // Webpack entry points + cssEntries: settings.cssEntries, // Webpack css entry points + buildSuffix: settings.buildSuffix, // Webpack build suffix. ie _bundle.js + templateData: {}, // Object that will be passed to every page as it is rendered + templateMap: {}, // Used to specify specific templates on a per file basis + templateDirs: templateDirs // Directories to look in for template +}; + +build(path.join(__dirname, "../html"), stage, options); + From 5a9bd9b4eb92ca2981883a46d5d3ed2436490bf7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 18:14:50 -0600 Subject: [PATCH 137/452] Removes whitespace --- client/webpack.hot.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 2abb83c..fbb91d4 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -9,7 +9,7 @@ var path = require('path'); var app = express(); var compiler = webpack(webpackConfig); -app.use(express.static(settings.devOutput)); +app.use(express.static(settings.devOutput)); app.use(webpackMiddleware(compiler, { noInfo: true, @@ -21,7 +21,7 @@ app.use(webpackMiddleware(compiler, { app.use(webpackHotMiddleware(compiler)); -app.get('*', function response(req, res) { +app.get('*', function response(req, res) { res.sendFile(path.join(settings.devOutput, req.url)); }); From ac376b8f0f584f04a1888041e9933e7b97e4b9b2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 22:21:27 -0600 Subject: [PATCH 138/452] No gulp. Just scripts. --- client/build.js | 2 + client/gulpfile.js | 223 --------------------------- client/html/{about.md => about.html} | 0 client/package.json | 22 +-- client/tools/build.js | 83 ---------- client/webpack.hot.js | 75 +++++---- 6 files changed, 50 insertions(+), 355 deletions(-) create mode 100644 client/build.js delete mode 100644 client/gulpfile.js rename client/html/{about.md => about.html} (100%) delete mode 100644 client/tools/build.js diff --git a/client/build.js b/client/build.js new file mode 100644 index 0000000..1b08058 --- /dev/null +++ b/client/build.js @@ -0,0 +1,2 @@ +var build = require("./tools/build"); +build.build(); \ No newline at end of file diff --git a/client/gulpfile.js b/client/gulpfile.js deleted file mode 100644 index ae0315b..0000000 --- a/client/gulpfile.js +++ /dev/null @@ -1,223 +0,0 @@ -'use strict'; - -var gulp = require('gulp'); -var filter = require('gulp-filter'); -var util = require('gulp-util'); -var htmlmin = require('gulp-htmlmin'); -var ignore = require('gulp-ignore'); -var rename = require('gulp-rename'); -var marked = require('gulp-markdown'); -var frontMatter = require('gulp-front-matter'); - -var through2 = require('through2'); -var es = require('event-stream'); -var runSequence = require('run-sequence'); -var webpack = require('webpack'); -var settings = require('./config/settings'); -var argv = require('minimist')(process.argv.slice(2)); -var path = require('path'); -var _ = require("lodash"); -var fs = require("fs"); -var mkdirp = require("mkdirp"); -var ejs = require('ejs'); - -// Settings -var release = argv.release; -var stage = release ? "production" : "development"; -var outputPath = release ? settings.prodOutput : settings.devOutput; -var webpackConfig = require('./config/webpack.config')(stage); -var webpackStats; - -var defaultLayout = 'application.html'; - -// ----------------------------------------------------------------------------- -// Clean up -// ----------------------------------------------------------------------------- -gulp.task('clean', function(cb){ - var rimraf = require('rimraf'); - rimraf(outputPath, cb); -}); - - -// ----------------------------------------------------------------------------- -// Copy vendor files -// ----------------------------------------------------------------------------- -// Use this task to copy assets (ie fonts) from node modules -gulp.task('vendor', function(){ - return es.merge( - gulp.src('./node_modules/bootstrap-sass/assets/fonts/**') - .pipe(gulp.dest(outputPath + '/fonts')), - gulp.src('./node_modules/font-awesome/fonts/**') - .pipe(gulp.dest(outputPath + '/fonts')) - ); -}); - - -// ----------------------------------------------------------------------------- -// Build markdown files -// ----------------------------------------------------------------------------- -gulp.task('markdown', function(){ - - var options = { - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - smartLists: true, - smartypants: false - // highlight: function (code, lang, callback) { - // require('pygmentize-bundled')({ lang: lang, format: 'html' }, code, function (err, result) { - // callback(err, result.toString()); - // }); - // } - }; - - return gulp.src('./html/**/*.md') - .pipe(frontMatter({property: 'metadata', remove: true})) - .pipe(marked(options)) - .pipe(applyLayout(defaultLayout)) - .pipe(applyWebpack()) // Change to webpack hashed file names in release - .pipe(!release ? util.noop() : htmlmin({ - removeComments: true, - collapseWhitespace: true, - minifyJS: true - })) - .pipe(rename({extname: '.html'})) - .pipe(gulp.dest(outputPath)); -}); - - -// ----------------------------------------------------------------------------- -// Process files in the html diretory -// ----------------------------------------------------------------------------- -gulp.task('html', function(){ - - var htmlFilter = filter('**/*.html', {restore: true}); - - return gulp.src('./html/**/*') - .pipe(ignore.exclude('layouts/**')) - .pipe(ignore.exclude('layouts')) - .pipe(ignore.exclude('partials/**')) - .pipe(ignore.exclude('partials')) - .pipe(ignore.exclude('**/*.md')) - .pipe(htmlFilter) - .pipe(applyLayout(defaultLayout)) - .pipe(applyWebpack()) // Change to webpack hashed file names in release - .pipe(!release ? util.noop() : htmlmin({ - removeComments: true, - collapseWhitespace: true, - minifyJS: true - })) - .pipe(htmlFilter.restore) - .pipe(gulp.dest(outputPath)); -}); - - -// ----------------------------------------------------------------------------- -// Create JavaScript bundle -// ----------------------------------------------------------------------------- -gulp.task('javascript', function(cb){ - - var bundler = webpack(webpackConfig); - function bundle(err, stats){ - webpackStats = stats.toJson(); - if (err){ - throw new util.PluginError('webpack', err); - } - util.log('[webpack]', stats.toString({colors: true})); - cb(); - } - bundler.run(bundle); -}); - - -// ----------------------------------------------------------------------------- -// Build the app from source code -// ----------------------------------------------------------------------------- -gulp.task('build', ['clean'], function(cb){ - runSequence('javascript', ['html', 'markdown'], cb); -}); - - -// ----------------------------------------------------------------------------- -// Watch for changes to html files and rebuild as needed. Webpack watches everything else -// and serves js, css, etc from memory. Html files are served from the build directory. -// ----------------------------------------------------------------------------- -gulp.task('watch', ['html', 'markdown'], function() { - gulp.watch(['html/**/*'], ['html', 'markdown']); -}); - - -// ----------------------------------------------------------------------------- -// The default task -// ----------------------------------------------------------------------------- -gulp.task('default', ['watch']); - - -// ----------------------------------------------------------------------------- -// A bit hackish. This function can't be called until after the javascript task has been run -// because webpackStats is undefined until webpack has run. -// ----------------------------------------------------------------------------- -function getHashed(entryPoint, ext){ - return _.find(webpackStats.assetsByChunkName[entryPoint], function(hashEntry){ - return path.extname(hashEntry).toLowerCase() === '.' + ext; - }); -} - - -// ----------------------------------------------------------------------------- -// Changes webpack paths as needed. -// ----------------------------------------------------------------------------- -function applyWebpack(){ - return through2.obj(function (html, enc, cb) { // replace entry points with names generated by webpack - if(release){ - var result = String(html.contents); - _.each(webpackConfig.entry, function(path, entry){ - if(_.has(settings.entries, entry)){ - result = result.replace(entry + settings.buildSuffix, getHashed(entry, 'js')); - } else if(_.has(settings.cssEntries, entry)){ - result = result.replace(entry + '.css', getHashed(entry, 'css')); - } - }); - html.contents = new Buffer(result); - } - this.push(html); - cb(); - }); -} - - -// ----------------------------------------------------------------------------- -// Apply templates to content -// ----------------------------------------------------------------------------- -function applyLayout(defaultLayout){ - return through2.obj(function (file, enc, cb) { - - var data = { - metadata: file.metadata - }; - - // Allow ejs code in content - data.content = ejs.compile(String(file.contents), { - cache: false, - filename: file.path - })(data); - - // If the user has specified a layout in the front matter user that. - // Otherwise use the default - var layout = file.metadata && file.metadata.layout ? file.metadata.layout : defaultLayout; - layout = path.extname(layout) ? layout : layout + '.html'; - layout = path.join(__dirname, './html/layouts/' + layout); - - var template = ejs.compile(fs.readFileSync(layout, 'utf8'), { - cache: false, - filename: layout - }); - - file.contents = new Buffer(template(data), 'utf8'); - this.push(file); - cb(); - - }); -} \ No newline at end of file diff --git a/client/html/about.md b/client/html/about.html similarity index 100% rename from client/html/about.md rename to client/html/about.html diff --git a/client/package.json b/client/package.json index 95fddab..291d214 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "react_client_starter_app", - "version": "0.0.3", + "version": "0.0.4", "description": "Client only React Starter App.", "repository": { "type": "git", @@ -9,10 +9,10 @@ "scripts": { "test": "./node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls", - "hot": "gulp watch & node webpack.hot.js", - "build_dev": "node ./tools/build.js", - "build": "node ./tools/build.js --release", - "release": "gulp build --release && cd .. && s3_website push", + "hot": "node webpack.hot.js", + "build_dev": "node ./build.js", + "build": "node ./build.js --release", + "release": "node ./build.js --release && cd .. && s3_website push", "lint": "eslint js" }, "author": "atomicjolt, jbasdf", @@ -64,14 +64,6 @@ "express": "^4.13.4", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.8.5", - "gulp": "3.9.1", - "gulp-filter": "4.0.0", - "gulp-front-matter": "^1.3.0", - "gulp-htmlmin": "1.3.0", - "gulp-ignore": "2.0.1", - "gulp-markdown": "^1.2.0", - "gulp-rename": "1.2.2", - "gulp-util": "3.0.7", "html-minifier": "1.5.0", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", @@ -92,8 +84,8 @@ "less": "2.6.1", "less-loader": "2.2.3", "minimist": "1.2.0", - "mkdirp": "^0.5.1", "node-sass": "3.4.2", + "node-watch": "^0.3.5", "npm-shrinkwrap": "200.5.1", "null-loader": "0.1.1", "path": "^0.12.7", @@ -107,10 +99,8 @@ "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.0.9", "rimraf": "2.5.2", - "run-sequence": "1.1.5", "sass-loader": "3.2.0", "style-loader": "0.13.1", - "through2": "2.0.1", "url-loader": "0.5.7", "webpack": "1.12.15", "webpack-dev-middleware": "^1.6.1", diff --git a/client/tools/build.js b/client/tools/build.js deleted file mode 100644 index 1b6b95c..0000000 --- a/client/tools/build.js +++ /dev/null @@ -1,83 +0,0 @@ -var path = require("path"); -var _ = require("lodash"); -var fs = require("fs"); -var webpack = require("webpack"); - -var buildContent = require("./build/content"); - -// Settings -var webpackConfigBuilder = require("../config/webpack.config"); -var settings = require("../config/settings"); -var argv = require("minimist")(process.argv.slice(2)); -var release = argv.release; -var stage = release ? "production" : "development"; - -// ----------------------------------------------------------------------------- -// Delete everything -// ----------------------------------------------------------------------------- -function clean(stage, cb){ - var rimraf = require("rimraf"); - var outputPath = stage == "production" ? settings.prodOutput : settings.devOutput; - rimraf(outputPath, cb); -} - -// ----------------------------------------------------------------------------- -// run webpack to build entry points -// ----------------------------------------------------------------------------- -function buildWebpackEntries(webpackConfig, cb){ - var bundler = webpack(webpackConfig); - function bundle(err, stats){ - if (err){ - throw new util.PluginError("webpack", err); - } - //util.log("[webpack]", stats.toString({colors: true})); - cb(webpackConfig, stats.toJson()); - } - bundler.run(bundle); -} - -// ----------------------------------------------------------------------------- -// build html and markdown files in a given directory -// ----------------------------------------------------------------------------- -function buildContents(dir, webpackConfig, webpackStats, stage, options){ - var results = []; - var files = fs.readdirSync(dir); - files.forEach(function(file){ - var fullPath = path.join(dir, file); - if(options.templateDirs.indexOf(fullPath) < 0){ // Ignore template dirs - if(fs.statSync(fullPath).isDirectory()){ - results = _.concat(results, buildContents(fullPath, webpackConfig, webpackStats, options)); - } else { - var page = buildContent(fullPath, webpackConfig, webpackStats, stage, options); - results.push(page); - } - } - }); - return results; -} - -// ----------------------------------------------------------------------------- -// main build -// ----------------------------------------------------------------------------- -function build(dir, stage, options){ - clean(stage, function(){ - buildWebpackEntries(webpackConfigBuilder(stage), function(webpackConfig, webpackStats){ - results = buildContents(dir, webpackConfig, webpackStats, stage, options); - }); - }); -}; - - -var templateDirs = [path.join(__dirname, "../html/layouts")]; - -var options = { - entries: settings.entries, // Webpack entry points - cssEntries: settings.cssEntries, // Webpack css entry points - buildSuffix: settings.buildSuffix, // Webpack build suffix. ie _bundle.js - templateData: {}, // Object that will be passed to every page as it is rendered - templateMap: {}, // Used to specify specific templates on a per file basis - templateDirs: templateDirs // Directories to look in for template -}; - -build(path.join(__dirname, "../html"), stage, options); - diff --git a/client/webpack.hot.js b/client/webpack.hot.js index fbb91d4..6b2d749 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -1,35 +1,44 @@ var release = false; -var express = require('express'); -var webpack = require('webpack'); -var webpackMiddleware = require('webpack-dev-middleware'); -var webpackHotMiddleware = require('webpack-hot-middleware'); -var settings = require('./config/settings.js'); -var webpackConfig = require('./config/webpack.config')("development"); -var path = require('path'); +var express = require("express"); +var webpack = require("webpack"); +var webpackMiddleware = require("webpack-dev-middleware"); +var webpackHotMiddleware = require("webpack-hot-middleware"); +var settings = require("./config/settings.js"); +var webpackConfig = require("./config/webpack.config")("development"); +var path = require("path"); var app = express(); -var compiler = webpack(webpackConfig); - -app.use(express.static(settings.devOutput)); - -app.use(webpackMiddleware(compiler, { - noInfo: true, - publicPath: webpackConfig.output.publicPath, - watch: true, - noInfo: true, - headers: { 'Access-Control-Allow-Origin': '*' } -})); - -app.use(webpackHotMiddleware(compiler)); - -app.get('*', function response(req, res) { - res.sendFile(path.join(settings.devOutput, req.url)); -}); - -app.listen(settings.hotPort, 'localhost', function(err) { - if (err) { - console.log(err); - return; - } - console.log('Listening on: ' + webpackConfig.output.publicPath); - console.log('Serving content from: ' + settings.devOutput); -}); \ No newline at end of file + +var build = require("./tools/build"); + +function launch(){ + + var compiler = webpack(webpackConfig); + var webpackMiddlewareInstance = webpackMiddleware(compiler, { + noInfo: true, + publicPath: webpackConfig.output.publicPath, + watch: true, + noInfo: true, + headers: { "Access-Control-Allow-Origin": "*" } + }); + + app.use(express.static(settings.devOutput)); + + app.use(webpackMiddlewareInstance); + + app.use(webpackHotMiddleware(compiler)); + + app.get("*", function response(req, res) { + res.sendFile(path.join(settings.devOutput, req.url)); + }); + + app.listen(settings.hotPort, "localhost", function(err) { + if (err) { + console.log(err); + return; + } + console.log("Listening on: " + webpackConfig.output.publicPath); + console.log("Serving content from: " + settings.devOutput); + }); +} + +build.watch(launch); From 611cca1983c62c14e1fc1443162da07f77bf9f35 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 22:32:56 -0600 Subject: [PATCH 139/452] Adds build tools --- .gitignore | 2 +- client/tools/build/content.js | 46 ++++++++++ client/tools/build/index.js | 134 ++++++++++++++++++++++++++++ client/tools/build/markdown.js | 14 +++ client/tools/build/templates.js | 74 +++++++++++++++ client/tools/build/utils.js | 40 +++++++++ client/tools/build/webpack_utils.js | 31 +++++++ 7 files changed, 340 insertions(+), 1 deletion(-) create mode 100644 client/tools/build/content.js create mode 100644 client/tools/build/index.js create mode 100644 client/tools/build/markdown.js create mode 100644 client/tools/build/templates.js create mode 100644 client/tools/build/utils.js create mode 100644 client/tools/build/webpack_utils.js diff --git a/.gitignore b/.gitignore index 5f702ee..cfbaa21 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,7 @@ s3_website.yml node_modules npm-debug.log -build +/build diff --git a/client/tools/build/content.js b/client/tools/build/content.js new file mode 100644 index 0000000..82ea3a9 --- /dev/null +++ b/client/tools/build/content.js @@ -0,0 +1,46 @@ +var path = require("path"); +var _ = require("lodash"); +var fs = require("fs"); +var frontMatter = require("front-matter"); +var minify = require('html-minifier').minify; +var truncate = require("html-truncate"); + +var webpackUtils = require("./webpack_utils"); +var utils = require("./utils"); +var marked = require("./markdown"); +var templates = require("./templates"); + + +// ----------------------------------------------------------------------------- +// build a single file +// ----------------------------------------------------------------------------- +module.exports = function(fullPath, webpackConfig, webpackStats, stage, options){ + var content = fs.readFileSync(fullPath, "utf8"); + var ext = path.extname(fullPath); + var parsed = frontMatter(content); + var html = marked(parsed.body); + var metadata = parsed.attributes; + var summary = _.includes(content, options.summaryMarker) ? content.split(options.summaryMarker)[0] : truncate(content, 1000, { keepImageTag: true }); + + summary = marked(summary); + + html = templates.apply(content, fullPath, metadata, options.templateMap, options.templateData, options.templateDirs); + + if(stage == "production"){ + html = webpackUtils.apply(html, webpackStats, webpackConfig, options.entries, options.cssEntries, options.buildSuffix); + html = minify(html, { + removeComments: true, + collapseWhitespace: true, + minifyJS: true + }); + } + + return { + metadata: metadata, + summary: summary, + source: fullPath, + destination: metadata.permalink || utils.filename2date(fullPath), + html: html + }; + +}; diff --git a/client/tools/build/index.js b/client/tools/build/index.js new file mode 100644 index 0000000..09696db --- /dev/null +++ b/client/tools/build/index.js @@ -0,0 +1,134 @@ +var path = require("path"); +var _ = require("lodash"); +var fs = require("fs"); +var webpack = require("webpack"); +var nodeWatch = require("node-watch"); + +var buildContent = require("./content"); + +// Settings +var webpackConfigBuilder = require("../../config/webpack.config"); +var settings = require("../../config/settings"); +var argv = require("minimist")(process.argv.slice(2)); +var release = argv.release; +var stage = release ? "production" : "development"; + +var inputPath = path.join(__dirname, "../../html"); +var templateDirs = [path.join(inputPath, "layouts")]; +var outputPath = stage == "production" ? settings.prodOutput : settings.devOutput; + +var ignoreFiles = [".DS_Store"]; + +var options = { + inputPath: inputPath, // Original input path + entries: settings.entries, // Webpack entry points + cssEntries: settings.cssEntries, // Webpack css entry points + buildSuffix: settings.buildSuffix, // Webpack build suffix. ie _bundle.js + templateData: {}, // Object that will be passed to every page as it is rendered + templateMap: {}, // Used to specify specific templates on a per file basis + templateDirs: templateDirs // Directories to look in for template +}; + +// ----------------------------------------------------------------------------- +// Delete everything +// ----------------------------------------------------------------------------- +function clean(outputPath, cb){ + var rimraf = require("rimraf"); + rimraf(outputPath, cb); +} + +// ----------------------------------------------------------------------------- +// run webpack to build entry points +// ----------------------------------------------------------------------------- +function buildWebpackEntries(webpackConfig, cb){ + var bundler = webpack(webpackConfig); + function bundle(err, stats){ + if (err){ + throw new util.PluginError("webpack", err); + } + //console.log("[webpack]", stats.toString({colors: true})); + cb(webpackConfig, stats.toJson()); + } + bundler.run(bundle); +} + +// ----------------------------------------------------------------------------- +// build html and markdown files in a given directory +// ----------------------------------------------------------------------------- +function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage, options){ + var results = []; + var files = fs.readdirSync(inputPath); + files.forEach(function(fileName){ + var fullInputPath = path.join(inputPath, fileName); + var doOutput = options.templateDirs.indexOf(fullInputPath) < 0 && // Ignore template dirs + !_.includes(ignoreFiles, fileName); + if(doOutput){ + if(fs.statSync(fullInputPath).isDirectory()){ + results = _.concat(results, buildContents(inputPath, fullInputPath, webpackConfig, webpackStats, options)); + } else { + var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); + page.outputFilePath = write(inputPath, outputPath, fileName, page.html, options); + results.push(page); + } + } + }); + return results; +} + +// ----------------------------------------------------------------------------- +// write file +// ----------------------------------------------------------------------------- +function write(inputPath, outputPath, fileName, content, options){ + var relPath = inputPath.replace(options.inputPath, ""); // build relative path for output file + var out = path.join(outputPath, relPath, fileName); + fs.writeFile(out, content, function(err){ + if(err){ return console.log(err); } + }); + return out; +} + +// ----------------------------------------------------------------------------- +// main build +// ----------------------------------------------------------------------------- +function build(cb){ + console.log("Building files in: " + inputPath); + clean(outputPath, function(){ + buildWebpackEntries(webpackConfigBuilder(stage), function(webpackConfig, webpackStats){ + results = buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage, options); + if(cb){ + cb(results, inputPath, outputPath, webpackConfig, webpackStats, stage, options); + } + }); + }); +}; + +// ----------------------------------------------------------------------------- +// watch +// ----------------------------------------------------------------------------- +function watch(cb){ + build(function(results, inputPath, outputPath, webpackConfig, webpackStats, stage, options){ + nodeWatch(inputPath, function(filePath){ + var page = buildContent(filePath, webpackConfig, webpackStats, stage, options); + page.outputFilePath = write(inputPath, outputPath, path.basename(filePath), page.html, options); + }); + if(cb){ cb(); } + }); +} + +module.exports = { + watch : watch, + build : build +}; + + + + + + + + + + + + + diff --git a/client/tools/build/markdown.js b/client/tools/build/markdown.js new file mode 100644 index 0000000..a3fc49e --- /dev/null +++ b/client/tools/build/markdown.js @@ -0,0 +1,14 @@ +var marked = require("marked"); + +var markedOptions = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + smartLists: true, + smartypants: false +}; +marked.setOptions(markedOptions); + +module.exports = marked; \ No newline at end of file diff --git a/client/tools/build/templates.js b/client/tools/build/templates.js new file mode 100644 index 0000000..1ba753e --- /dev/null +++ b/client/tools/build/templates.js @@ -0,0 +1,74 @@ +var fs = require("fs"); +var path = require("path"); +var _ = require("lodash"); +var ejs = require("ejs"); + +// ----------------------------------------------------------------------------- +// Apply layouts to content +// ----------------------------------------------------------------------------- +function apply(content, fullPath, metadata, templateMap, templateData, templateDirs){ + var data = _.merge({ + metadata: metadata || {}, + "_": _ + }, templateData); + + // Allow ejs code in content + content = ejs.compile(content, { + cache: false, + filename: fullPath + })(data); + + // If the user has specified a layout in the front matter use that. + // Then try the layout map and finally default to application.html + var layoutFile = metadata.layout || templateMap[fullPath] || "application.html"; + + var result = loadTemplate(layoutFile, templateDirs); + var template = ejs.compile(result.value, { + cache: false, + filename: result.item + }); + + data.content = content; + + return template(data); +} + +function safeReadLayout(file){ + try{ + return fs.readFileSync(file, 'utf8'); + } catch(e){ + return false; + } +} + +function firstValid(func, collection){ + for(var i=0; i Date: Wed, 27 Apr 2016 22:33:05 -0600 Subject: [PATCH 140/452] Adds missing packages --- client/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 291d214..7bf0860 100644 --- a/client/package.json +++ b/client/package.json @@ -22,10 +22,11 @@ "babel": "6.5.2", "babel-polyfill": "^6.7.4", "babel-runtime": "^6.6.1", + "front-matter": "^2.0.7", "immutable": "3.7.6", "lodash": "4.11.0", "react": "15.0.1", - "react-dom": "15.0.1", + "react-dom": "^15.0.1", "react-proxy-loader": "0.3.4", "react-redux": "4.4.4", "react-router": "2.1.1", From 20c4bad70b2939fd6f13cd8ab8497f785cc3dfb1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 27 Apr 2016 22:35:04 -0600 Subject: [PATCH 141/452] Updated packages --- client/package.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/client/package.json b/client/package.json index 7bf0860..abd1758 100644 --- a/client/package.json +++ b/client/package.json @@ -23,22 +23,22 @@ "babel-polyfill": "^6.7.4", "babel-runtime": "^6.6.1", "front-matter": "^2.0.7", - "immutable": "3.7.6", - "lodash": "4.11.0", + "immutable": "3.8.1", + "lodash": "4.11.1", "react": "15.0.1", "react-dom": "^15.0.1", "react-proxy-loader": "0.3.4", - "react-redux": "4.4.4", - "react-router": "2.1.1", + "react-redux": "4.4.5", + "react-router": "2.3.0", "react-tap-event-plugin": "1.0.0", - "redux": "3.4.0", + "redux": "3.5.2", "superagent": "1.8.3", "uuid": "2.0.2" }, "devDependencies": { "autoprefixer-loader": "3.2.0", - "babel-core": "^6.7.6", - "babel-eslint": "^6.0.2", + "babel-core": "^6.7.7", + "babel-eslint": "^6.0.4", "babel-loader": "^6.2.4", "babel-plugin-react-transform": "^2.0.2", "babel-plugin-transform-class-properties": "^6.6.0", @@ -57,15 +57,15 @@ "dotenv": "2.0.0", "ecstatic": "1.4.0", "ejs": "^2.4.1", - "eslint": "^2.7.0", + "eslint": "^2.8.0", "eslint-plugin-babel": "^3.2.0", - "eslint-plugin-react": "^4.3.0", + "eslint-plugin-react": "^5.0.1", "event-stream": "3.3.2", "eventsource-polyfill": "^0.9.6", "express": "^4.13.4", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.8.5", - "html-minifier": "1.5.0", + "html-minifier": "2.1.0", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", "istanbul": "0.4.3", @@ -85,25 +85,25 @@ "less": "2.6.1", "less-loader": "2.2.3", "minimist": "1.2.0", - "node-sass": "3.4.2", + "node-sass": "3.6.0", "node-watch": "^0.3.5", "npm-shrinkwrap": "200.5.1", "null-loader": "0.1.1", "path": "^0.12.7", "phantomjs-prebuilt": "^2.1.7", - "protractor": "3.2.2", + "protractor": "3.3.0", "psi": "2.0.3", "react-hot-loader": "1.3.0", "react-transform-catch-errors": "^1.0.2", "redbox-react": "^1.2.3", "redux-devtools": "3.2.0", "redux-devtools-dock-monitor": "1.1.1", - "redux-devtools-log-monitor": "1.0.9", + "redux-devtools-log-monitor": "1.0.11", "rimraf": "2.5.2", "sass-loader": "3.2.0", "style-loader": "0.13.1", "url-loader": "0.5.7", - "webpack": "1.12.15", + "webpack": "1.13.0", "webpack-dev-middleware": "^1.6.1", "webpack-hot-middleware": "^2.10.0" } From c81aada5fc8043fac1ffff57a313f0b2c723152f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 29 Apr 2016 11:40:38 -0600 Subject: [PATCH 142/452] Adds missing param --- client/tools/build/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 09696db..4cc1515 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -64,7 +64,7 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage !_.includes(ignoreFiles, fileName); if(doOutput){ if(fs.statSync(fullInputPath).isDirectory()){ - results = _.concat(results, buildContents(inputPath, fullInputPath, webpackConfig, webpackStats, options)); + results = _.concat(results, buildContents(inputPath, fullInputPath, webpackConfig, webpackStats, stage, options)); } else { var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); page.outputFilePath = write(inputPath, outputPath, fileName, page.html, options); From bac5131ab7ec3b9027414582b441c99845f976d2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 29 Apr 2016 14:20:00 -0600 Subject: [PATCH 143/452] Fixes recursive build content error --- client/tools/build/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 4cc1515..2499fd6 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -20,7 +20,7 @@ var outputPath = stage == "production" ? settings.prodOutput : setting var ignoreFiles = [".DS_Store"]; var options = { - inputPath: inputPath, // Original input path + rootInputPath: inputPath, // Original input path entries: settings.entries, // Webpack entry points cssEntries: settings.cssEntries, // Webpack css entry points buildSuffix: settings.buildSuffix, // Webpack build suffix. ie _bundle.js @@ -64,10 +64,10 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage !_.includes(ignoreFiles, fileName); if(doOutput){ if(fs.statSync(fullInputPath).isDirectory()){ - results = _.concat(results, buildContents(inputPath, fullInputPath, webpackConfig, webpackStats, stage, options)); + results = _.concat(results, buildContents(fullInputPath, outputPath, webpackConfig, webpackStats, stage, options)); } else { var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); - page.outputFilePath = write(inputPath, outputPath, fileName, page.html, options); + page.outputFilePath = write(options.rootInputPath, outputPath, fileName, page.html, options); results.push(page); } } @@ -79,7 +79,7 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage // write file // ----------------------------------------------------------------------------- function write(inputPath, outputPath, fileName, content, options){ - var relPath = inputPath.replace(options.inputPath, ""); // build relative path for output file + var relPath = inputPath.replace(options.rootInputPath, ""); // build relative path for output file var out = path.join(outputPath, relPath, fileName); fs.writeFile(out, content, function(err){ if(err){ return console.log(err); } From f8ce71e609ea93c4b45e1997a3d70dcc0d1225ef Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 29 Apr 2016 16:43:06 -0600 Subject: [PATCH 144/452] Fixed hot reload --- client/js/components/home.jsx | 4 ++-- client/package.json | 1 - client/tools/build/index.js | 16 ++++++---------- package.json | 4 +++- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/client/js/components/home.jsx b/client/js/components/home.jsx index f43dba5..80f4038 100644 --- a/client/js/components/home.jsx +++ b/client/js/components/home.jsx @@ -6,11 +6,11 @@ import assets from '../libs/assets'; class Home extends React.Component { render(){ - + const img = assets("./images/atomicjolt.jpg"); return
    - +
    ; } diff --git a/client/package.json b/client/package.json index abd1758..26b734e 100644 --- a/client/package.json +++ b/client/package.json @@ -99,7 +99,6 @@ "redux-devtools": "3.2.0", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.0.11", - "rimraf": "2.5.2", "sass-loader": "3.2.0", "style-loader": "0.13.1", "url-loader": "0.5.7", diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 2499fd6..ae71a94 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -3,6 +3,7 @@ var _ = require("lodash"); var fs = require("fs"); var webpack = require("webpack"); var nodeWatch = require("node-watch"); +var del = require("del"); var buildContent = require("./content"); @@ -29,14 +30,6 @@ var options = { templateDirs: templateDirs // Directories to look in for template }; -// ----------------------------------------------------------------------------- -// Delete everything -// ----------------------------------------------------------------------------- -function clean(outputPath, cb){ - var rimraf = require("rimraf"); - rimraf(outputPath, cb); -} - // ----------------------------------------------------------------------------- // run webpack to build entry points // ----------------------------------------------------------------------------- @@ -92,7 +85,7 @@ function write(inputPath, outputPath, fileName, content, options){ // ----------------------------------------------------------------------------- function build(cb){ console.log("Building files in: " + inputPath); - clean(outputPath, function(){ + del(outputPath, {force: true}).then(function(){ // Delete everything in the output path buildWebpackEntries(webpackConfigBuilder(stage), function(webpackConfig, webpackStats){ results = buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage, options); if(cb){ @@ -111,7 +104,10 @@ function watch(cb){ var page = buildContent(filePath, webpackConfig, webpackStats, stage, options); page.outputFilePath = write(inputPath, outputPath, path.basename(filePath), page.html, options); }); - if(cb){ cb(); } + // HACK delete the js files from the dev directory. The static js files mess up hot reload. + del(path.join(outputPath, "/*.js"), {force: true}).then(function(){ + if(cb){ cb(); } + }); }); } diff --git a/package.json b/package.json index e23ad0c..8f04e44 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": {}, + "dependencies": { + "del": "^2.2.0" + }, "devDependencies": {} } From b8efd7922ff8e3cbe679aa7d7b0a479c07c13b2c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 29 Apr 2016 17:53:23 -0600 Subject: [PATCH 145/452] Gets all available data from filename2date --- client/tools/build/content.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/tools/build/content.js b/client/tools/build/content.js index 82ea3a9..3e7a08d 100644 --- a/client/tools/build/content.js +++ b/client/tools/build/content.js @@ -35,11 +35,15 @@ module.exports = function(fullPath, webpackConfig, webpackStats, stage, options) }); } + var result = utils.filename2date(fullPath); + return { + title: metadata.title || result.title, + date: result.date, metadata: metadata, summary: summary, source: fullPath, - destination: metadata.permalink || utils.filename2date(fullPath), + destination: metadata.permalink || result.url, html: html }; From 11f15e6b8863a3b965e7d9adbfe76b8953a0fe21 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 30 Apr 2016 08:27:58 -0600 Subject: [PATCH 146/452] html build process refactor --- client/build.js | 2 +- client/html/about.html | 2 +- client/package.json | 2 + client/tools/build/content.js | 36 +++++++---- client/tools/build/file.js | 42 ++++++++++++ client/tools/build/index.js | 110 ++++++++++++++++++-------------- client/tools/build/templates.js | 19 ++---- client/webpack.hot.js | 2 +- 8 files changed, 140 insertions(+), 75 deletions(-) create mode 100644 client/tools/build/file.js diff --git a/client/build.js b/client/build.js index 1b08058..a4263e3 100644 --- a/client/build.js +++ b/client/build.js @@ -1,2 +1,2 @@ var build = require("./tools/build"); -build.build(); \ No newline at end of file +build.build(false); \ No newline at end of file diff --git a/client/html/about.html b/client/html/about.html index 05a6b3d..3824610 100644 --- a/client/html/about.html +++ b/client/html/about.html @@ -11,4 +11,4 @@ --- About Us --------------- -<%= metadata.tags %> \ No newline at end of file +<%= tags %> \ No newline at end of file diff --git a/client/package.json b/client/package.json index 26b734e..9fec7aa 100644 --- a/client/package.json +++ b/client/package.json @@ -65,6 +65,7 @@ "express": "^4.13.4", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.8.5", + "fs-extra": "^0.30.0", "html-minifier": "2.1.0", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", @@ -84,6 +85,7 @@ "karma-webpack": "1.7.0", "less": "2.6.1", "less-loader": "2.2.3", + "marked": "^0.3.5", "minimist": "1.2.0", "node-sass": "3.6.0", "node-watch": "^0.3.5", diff --git a/client/tools/build/content.js b/client/tools/build/content.js index 3e7a08d..418d09f 100644 --- a/client/tools/build/content.js +++ b/client/tools/build/content.js @@ -4,6 +4,7 @@ var fs = require("fs"); var frontMatter = require("front-matter"); var minify = require('html-minifier').minify; var truncate = require("html-truncate"); +var ejs = require("ejs"); var webpackUtils = require("./webpack_utils"); var utils = require("./utils"); @@ -16,15 +17,26 @@ var templates = require("./templates"); // ----------------------------------------------------------------------------- module.exports = function(fullPath, webpackConfig, webpackStats, stage, options){ var content = fs.readFileSync(fullPath, "utf8"); - var ext = path.extname(fullPath); var parsed = frontMatter(content); - var html = marked(parsed.body); var metadata = parsed.attributes; - var summary = _.includes(content, options.summaryMarker) ? content.split(options.summaryMarker)[0] : truncate(content, 1000, { keepImageTag: true }); + var data = templates.buildData(metadata, options.templateData); - summary = marked(summary); + // Allow ejs code in content + var html = ejs.compile(parsed.body, { + cache: false, + filename: fullPath + })(data); - html = templates.apply(content, fullPath, metadata, options.templateMap, options.templateData, options.templateDirs); + // Parse any markdown in the resulting html + var html = marked(html); + + // Generate summary of content + var summary = _.includes(html, options.summaryMarker) ? + html.split(options.summaryMarker)[0] : + truncate(html, options.truncateSummaryAt, { keepImageTag: true }); + + // Apply template + html = templates.apply(html, fullPath, metadata, options.templateMap, options.templateData, options.templateDirs); if(stage == "production"){ html = webpackUtils.apply(html, webpackStats, webpackConfig, options.entries, options.cssEntries, options.buildSuffix); @@ -38,13 +50,13 @@ module.exports = function(fullPath, webpackConfig, webpackStats, stage, options) var result = utils.filename2date(fullPath); return { - title: metadata.title || result.title, - date: result.date, - metadata: metadata, - summary: summary, - source: fullPath, - destination: metadata.permalink || result.url, - html: html + title : metadata.title || result.title, + date : result.date, + metadata : metadata, + summary : summary, + source : fullPath, + destination : metadata.permalink || result.url, + html : html }; }; diff --git a/client/tools/build/file.js b/client/tools/build/file.js new file mode 100644 index 0000000..6928583 --- /dev/null +++ b/client/tools/build/file.js @@ -0,0 +1,42 @@ +var path = require("path"); +var fs = require('fs-extra') + +// ----------------------------------------------------------------------------- +// write file +// ----------------------------------------------------------------------------- +function write(inputPath, outputPath, fileName, content, options){ + return makeOutputFilePath(inputPath, outputPath, fileName, options, function(out){ + fs.writeFile(out, content, function(err){ + if(err){ return console.log(err); } + }); + }); +} + +// ----------------------------------------------------------------------------- +// copy file +// ----------------------------------------------------------------------------- +function copy(inputPath, outputPath, fileName, options){ + return makeOutputFilePath(inputPath, outputPath, fileName, options, function(out){ + fs.copy(path.join(inputPath, fileName), out, function(err){ + if(err){ return console.log(err); } + }); + }); +} + +// ----------------------------------------------------------------------------- +// main build +// ----------------------------------------------------------------------------- +function makeOutputFilePath(inputPath, outputPath, fileName, options, cb){ + var relPath = inputPath.replace(options.rootInputPath, ""); // build relative path for output file + var dir = path.join(outputPath, relPath); + var out = path.join(dir, fileName); + fs.mkdirs(dir, {}, function(){ + cb(out); + }); + return out; +} + +module.exports = { + write : write, + copy : copy +}; \ No newline at end of file diff --git a/client/tools/build/index.js b/client/tools/build/index.js index ae71a94..8ca2787 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -5,6 +5,7 @@ var webpack = require("webpack"); var nodeWatch = require("node-watch"); var del = require("del"); +var file = require("./file"); var buildContent = require("./content"); // Settings @@ -21,28 +22,41 @@ var outputPath = stage == "production" ? settings.prodOutput : setting var ignoreFiles = [".DS_Store"]; var options = { - rootInputPath: inputPath, // Original input path - entries: settings.entries, // Webpack entry points - cssEntries: settings.cssEntries, // Webpack css entry points - buildSuffix: settings.buildSuffix, // Webpack build suffix. ie _bundle.js - templateData: {}, // Object that will be passed to every page as it is rendered - templateMap: {}, // Used to specify specific templates on a per file basis - templateDirs: templateDirs // Directories to look in for template + truncateSummaryAt : 1000, + buildExtensions : ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) + rootInputPath : inputPath, // Original input path + entries : settings.entries, // Webpack entry points + cssEntries : settings.cssEntries, // Webpack css entry points + buildSuffix : settings.buildSuffix, // Webpack build suffix. ie _bundle.js + templateData : {}, // Object that will be passed to every page as it is rendered + templateMap : {}, // Used to specify specific templates on a per file basis + templateDirs : templateDirs // Directories to look in for template }; // ----------------------------------------------------------------------------- // run webpack to build entry points // ----------------------------------------------------------------------------- -function buildWebpackEntries(webpackConfig, cb){ - var bundler = webpack(webpackConfig); - function bundle(err, stats){ - if (err){ - throw new util.PluginError("webpack", err); +function buildWebpackEntries(isHot){ + return new Promise(function(resolve, reject){ + var webpackConfig = webpackConfigBuilder(stage); + if(!isHot){ + var bundler = webpack(webpackConfig); + function bundle(err, stats){ + if(err){ + console.log("webpack error", err); + reject(err); + } + //console.log("webpack", stats.toString({colors: true})); + resolve({ + webpackConfig: webpackConfig, + webpackStats: stats.toJson() + }); + } + bundler.run(bundle); + } else { + resolve(webpackConfig, null); } - //console.log("[webpack]", stats.toString({colors: true})); - cb(webpackConfig, stats.toJson()); - } - bundler.run(bundle); + }); } // ----------------------------------------------------------------------------- @@ -59,38 +73,39 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage if(fs.statSync(fullInputPath).isDirectory()){ results = _.concat(results, buildContents(fullInputPath, outputPath, webpackConfig, webpackStats, stage, options)); } else { - var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); - page.outputFilePath = write(options.rootInputPath, outputPath, fileName, page.html, options); - results.push(page); + var ext = path.extname(fullInputPath); + if(_.includes(options.buildExtensions, ext)){ + var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); + page.outputFilePath = file.write(inputPath, outputPath, fileName, page.html, options); + results.push(page); + } else { + file.copy(inputPath, outputPath, fileName, options); + } } } }); return results; } -// ----------------------------------------------------------------------------- -// write file -// ----------------------------------------------------------------------------- -function write(inputPath, outputPath, fileName, content, options){ - var relPath = inputPath.replace(options.rootInputPath, ""); // build relative path for output file - var out = path.join(outputPath, relPath, fileName); - fs.writeFile(out, content, function(err){ - if(err){ return console.log(err); } - }); - return out; -} - // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- -function build(cb){ - console.log("Building files in: " + inputPath); - del(outputPath, {force: true}).then(function(){ // Delete everything in the output path - buildWebpackEntries(webpackConfigBuilder(stage), function(webpackConfig, webpackStats){ - results = buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage, options); - if(cb){ - cb(results, inputPath, outputPath, webpackConfig, webpackStats, stage, options); - } +function build(isHot){ + return new Promise(function(resolve, reject){ + console.log("Building files in: " + inputPath); + del(outputPath, {force: true}).then(function(){ // Delete everything in the output path + buildWebpackEntries(isHot).then(function(packResults){ + var pages = buildContents(inputPath, outputPath, packResults.webpackConfig, packResults.webpackStats, stage, options); + resolve({ + pages : pages, + inputPath : inputPath, + outputPath : outputPath, + webpackConfig : packResults.webpackConfig, + webpackStats : packResults.webpackStats, + stage : stage, + options : options + }); + }); }); }); }; @@ -98,15 +113,14 @@ function build(cb){ // ----------------------------------------------------------------------------- // watch // ----------------------------------------------------------------------------- -function watch(cb){ - build(function(results, inputPath, outputPath, webpackConfig, webpackStats, stage, options){ - nodeWatch(inputPath, function(filePath){ - var page = buildContent(filePath, webpackConfig, webpackStats, stage, options); - page.outputFilePath = write(inputPath, outputPath, path.basename(filePath), page.html, options); - }); - // HACK delete the js files from the dev directory. The static js files mess up hot reload. - del(path.join(outputPath, "/*.js"), {force: true}).then(function(){ - if(cb){ cb(); } +function watch(){ + return new Promise(function(resolve, reject){ + build(true).then(function(buildResults){ + nodeWatch(buildResults.inputPath, function(filePath){ + var page = buildContent(filePath, buildResults.webpackConfig, buildResults.webpackStats, buildResults.stage, buildResults.options); + page.outputFilePath = file.write(buildResults.inputPath, buildResults.outputPath, path.basename(filePath), page.html, buildResults.options); + }); + resolve(); }); }); } diff --git a/client/tools/build/templates.js b/client/tools/build/templates.js index 1ba753e..fc6a154 100644 --- a/client/tools/build/templates.js +++ b/client/tools/build/templates.js @@ -7,16 +7,6 @@ var ejs = require("ejs"); // Apply layouts to content // ----------------------------------------------------------------------------- function apply(content, fullPath, metadata, templateMap, templateData, templateDirs){ - var data = _.merge({ - metadata: metadata || {}, - "_": _ - }, templateData); - - // Allow ejs code in content - content = ejs.compile(content, { - cache: false, - filename: fullPath - })(data); // If the user has specified a layout in the front matter use that. // Then try the layout map and finally default to application.html @@ -28,7 +18,7 @@ function apply(content, fullPath, metadata, templateMap, templateData, templateD filename: result.item }); - data.content = content; + var data = buildData(metadata, templateData, { content: content}); return template(data); } @@ -68,7 +58,12 @@ function loadTemplate(file, templateDirs){ return result; } +function buildData(){ + return _.merge({ "_": _ }, ...arguments); +} + module.exports = { - apply: apply + apply: apply, + buildData: buildData }; diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 6b2d749..57b3525 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -41,4 +41,4 @@ function launch(){ }); } -build.watch(launch); +build.watch().then(launch); From b17cfa1bbd3b4af3acc3aa46cb4fd2f7221dee0e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 30 Apr 2016 08:36:44 -0600 Subject: [PATCH 147/452] Adds summary marker option --- client/tools/build/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 8ca2787..b51bf39 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -30,7 +30,8 @@ var options = { buildSuffix : settings.buildSuffix, // Webpack build suffix. ie _bundle.js templateData : {}, // Object that will be passed to every page as it is rendered templateMap : {}, // Used to specify specific templates on a per file basis - templateDirs : templateDirs // Directories to look in for template + templateDirs : templateDirs, // Directories to look in for template + summaryMarker : "" // Used to mark summary point when generating html summaries }; // ----------------------------------------------------------------------------- From f05447e8acaa41486089de5a2c850917c74c3a65 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 30 Apr 2016 08:36:57 -0600 Subject: [PATCH 148/452] cleanup loadTemplate function --- client/tools/build/templates.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/client/tools/build/templates.js b/client/tools/build/templates.js index fc6a154..f080570 100644 --- a/client/tools/build/templates.js +++ b/client/tools/build/templates.js @@ -13,11 +13,6 @@ function apply(content, fullPath, metadata, templateMap, templateData, templateD var layoutFile = metadata.layout || templateMap[fullPath] || "application.html"; var result = loadTemplate(layoutFile, templateDirs); - var template = ejs.compile(result.value, { - cache: false, - filename: result.item - }); - var data = buildData(metadata, templateData, { content: content}); return template(data); @@ -55,7 +50,10 @@ function loadTemplate(file, templateDirs){ throw "No template found matching " + file; } - return result; + return ejs.compile(result.value, { + cache: false, + filename: result.item + }); } function buildData(){ From a3898762ddc2e2bdf8aec58b057c99e4667a4aaa Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 30 Apr 2016 08:39:09 -0600 Subject: [PATCH 149/452] Fixes variable name --- client/tools/build/templates.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/tools/build/templates.js b/client/tools/build/templates.js index f080570..2e90082 100644 --- a/client/tools/build/templates.js +++ b/client/tools/build/templates.js @@ -12,7 +12,7 @@ function apply(content, fullPath, metadata, templateMap, templateData, templateD // Then try the layout map and finally default to application.html var layoutFile = metadata.layout || templateMap[fullPath] || "application.html"; - var result = loadTemplate(layoutFile, templateDirs); + var template = loadTemplate(layoutFile, templateDirs); var data = buildData(metadata, templateData, { content: content}); return template(data); From 4a79b276e8f542d92d654b4f3d63b5e096e7f9fe Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 30 Apr 2016 08:40:11 -0600 Subject: [PATCH 150/452] Exports loadTemplate function --- client/tools/build/templates.js | 1 + 1 file changed, 1 insertion(+) diff --git a/client/tools/build/templates.js b/client/tools/build/templates.js index 2e90082..87ddd90 100644 --- a/client/tools/build/templates.js +++ b/client/tools/build/templates.js @@ -62,6 +62,7 @@ function buildData(){ module.exports = { apply: apply, + loadTemplate: loadTemplate, buildData: buildData }; From 9ceb8d36b919bc25764414dc36dda4adccf1c65d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 May 2016 22:51:08 -0600 Subject: [PATCH 151/452] Respect permalink in metadata --- client/html/about.html | 2 +- client/tools/build/file.js | 4 ++-- client/tools/build/index.js | 12 +++++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/client/html/about.html b/client/html/about.html index 3824610..4afb96b 100644 --- a/client/html/about.html +++ b/client/html/about.html @@ -2,7 +2,7 @@ title: About author: Atomic Jolt layout: application -permalink: /about-us +permalink: /about-us/ categories: - About Us tags: diff --git a/client/tools/build/file.js b/client/tools/build/file.js index 6928583..c3aee3f 100644 --- a/client/tools/build/file.js +++ b/client/tools/build/file.js @@ -28,8 +28,8 @@ function copy(inputPath, outputPath, fileName, options){ // ----------------------------------------------------------------------------- function makeOutputFilePath(inputPath, outputPath, fileName, options, cb){ var relPath = inputPath.replace(options.rootInputPath, ""); // build relative path for output file - var dir = path.join(outputPath, relPath); - var out = path.join(dir, fileName); + var out = path.join(outputPath, relPath, fileName); + var dir = path.dirname(out); fs.mkdirs(dir, {}, function(){ cb(out); }); diff --git a/client/tools/build/index.js b/client/tools/build/index.js index b51bf39..470ea91 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -77,7 +77,17 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage var ext = path.extname(fullInputPath); if(_.includes(options.buildExtensions, ext)){ var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); - page.outputFilePath = file.write(inputPath, outputPath, fileName, page.html, options); + var outFile = fileName; + var outPath = outputPath; + if(page.destination && page.destination.length > 0){ + if(_.endsWith(page.destination, "/")){ + outPath = path.join(outPath, page.destination); + outFile = "index.html"; + } else { + outFile = page.destination; + } + } + page.outputFilePath = file.write(inputPath, outPath, outFile, page.html, options); results.push(page); } else { file.copy(inputPath, outputPath, fileName, options); From 82ef78f971f0b0aedd9219731068db59f08aa7ee Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 4 May 2016 22:55:30 -0600 Subject: [PATCH 152/452] Convert file extensions. --- client/html/{about.html => about.md} | 0 client/tools/build/index.js | 5 +++++ 2 files changed, 5 insertions(+) rename client/html/{about.html => about.md} (100%) diff --git a/client/html/about.html b/client/html/about.md similarity index 100% rename from client/html/about.html rename to client/html/about.md diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 470ea91..ff30ec2 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -87,6 +87,11 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage outFile = page.destination; } } + // Use .html for file extension + var ext = path.extname(outFile); + if(ext != ".html"){ + outFile = outFile.replace(ext, ".html"); + } page.outputFilePath = file.write(inputPath, outPath, outFile, page.html, options); results.push(page); } else { From 19e9bd964f14bdd194166e106e845a29783ce30e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 6 May 2016 16:42:34 -0600 Subject: [PATCH 153/452] Adds path to hmr --- client/config/webpack.config.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 1249551..bfb3c6e 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -11,6 +11,11 @@ module.exports = function(stage){ var development = stage == "development"; var test = stage == "test"; + // Public path indicates where the assets will be served from. In dev this will likely be localhost or a local domain. + // In production this could be a CDN. In developerment this will point to whatever public url is serving + // dev assets. + var publicPath = production ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput; + var excludeFromStats = [ /node_modules[\\\/]react(-router)?[\\\/]/ ]; @@ -56,7 +61,7 @@ module.exports = function(stage){ entries = _.reduce(entries, function(result, entry, key){ result[key] = [ 'eventsource-polyfill', - 'webpack-hot-middleware/client', + 'webpack-hot-middleware/client?path=' + publicPath + '__webpack_hmr', entry ]; return result; @@ -72,7 +77,7 @@ module.exports = function(stage){ new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"', '__DEV__': false}), new webpack.optimize.DedupePlugin(), new webpack.optimize.UglifyJsPlugin(), - new webpack.optimize.OccurenceOrderPlugin(), + new webpack.optimize.OccurrenceOrderPlugin(), new webpack.optimize.AggressiveMergingPlugin(), new ChunkManifestPlugin({ filename: 'webpack-common-manifest.json', @@ -112,7 +117,7 @@ module.exports = function(stage){ path: production ? settings.prodOutput : settings.devOutput, // Location where generated files will be output filename: production ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, chunkFilename: production ? '[id]-[chunkhash]' + settings.buildSuffix : '[id].js', - publicPath: production ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput, // Public path indicates where the assets will be served from. In dev this will likely be localhost or a local domain. In production this could be a CDN. + publicPath: publicPath, sourceMapFilename: 'debugging/[file].map', pathinfo: !production // http://webpack.github.io/docs/configuration.html#output-pathinfo }, From 93b72ef6ff06f107eec607d7fa5ee1865c667402 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 7 May 2016 14:39:00 -0600 Subject: [PATCH 154/452] Full reload when webpack hot reload fails. Add timeout --- client/config/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index bfb3c6e..a1293ca 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -61,7 +61,7 @@ module.exports = function(stage){ entries = _.reduce(entries, function(result, entry, key){ result[key] = [ 'eventsource-polyfill', - 'webpack-hot-middleware/client?path=' + publicPath + '__webpack_hmr', + 'webpack-hot-middleware/client?path=' + publicPath + '__webpack_hmr&timeout=20000&reload=true', entry ]; return result; From 3db228682bc7df63243ed7f2bd0b2095614eda06 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 19 May 2016 14:30:07 -0700 Subject: [PATCH 155/452] Adds basic express server --- client/package.json | 1 + client/server.js | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 client/server.js diff --git a/client/package.json b/client/package.json index 9fec7aa..4c1327a 100644 --- a/client/package.json +++ b/client/package.json @@ -10,6 +10,7 @@ "test": "./node_modules/karma/bin/karma start", "coveralls": "cat coverage/lcov.info | coveralls", "hot": "node webpack.hot.js", + "live": "node server.js", "build_dev": "node ./build.js", "build": "node ./build.js --release", "release": "node ./build.js --release && cd .. && s3_website push", diff --git a/client/server.js b/client/server.js new file mode 100644 index 0000000..cf01512 --- /dev/null +++ b/client/server.js @@ -0,0 +1,23 @@ +var release = false; +var express = require("express"); +var settings = require("./config/settings.js"); +var path = require("path"); +var app = express(); + + + +app.use(express.static(settings.prodOutput)); + +app.get("*", function response(req, res) { + res.sendFile(path.join(settings.prodOutput, req.url)); +}); + +app.listen(settings.hotPort, "localhost", function(err) { + if (err) { + console.log(err); + return; + } + console.log("Listening on: " + settings.hotPort); + console.log("Serving content from: " + settings.prodOutput); +}); + From bdcaf3c8e5b4ad61ce125d43e2f7bb3040e6fc6a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 19 May 2016 14:30:20 -0700 Subject: [PATCH 156/452] Updates build process --- client/tools/build/content.js | 77 ++++++++++++++--------------- client/tools/build/index.js | 23 +++++---- client/tools/build/production.js | 15 ++++++ client/tools/build/templates.js | 31 +++++++----- client/tools/build/utils.js | 5 +- client/tools/build/webpack_utils.js | 13 +++-- 6 files changed, 98 insertions(+), 66 deletions(-) create mode 100644 client/tools/build/production.js diff --git a/client/tools/build/content.js b/client/tools/build/content.js index 418d09f..fc8595d 100644 --- a/client/tools/build/content.js +++ b/client/tools/build/content.js @@ -2,61 +2,60 @@ var path = require("path"); var _ = require("lodash"); var fs = require("fs"); var frontMatter = require("front-matter"); -var minify = require('html-minifier').minify; var truncate = require("html-truncate"); var ejs = require("ejs"); -var webpackUtils = require("./webpack_utils"); -var utils = require("./utils"); -var marked = require("./markdown"); -var templates = require("./templates"); - +var utils = require("./utils"); +var marked = require("./markdown"); +var templates = require("./templates"); +var applyProduction = require("./production"); // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- module.exports = function(fullPath, webpackConfig, webpackStats, stage, options){ - var content = fs.readFileSync(fullPath, "utf8"); - var parsed = frontMatter(content); - var metadata = parsed.attributes; - var data = templates.buildData(metadata, options.templateData); - - // Allow ejs code in content - var html = ejs.compile(parsed.body, { - cache: false, - filename: fullPath - })(data); + var content = fs.readFileSync(fullPath, "utf8"); + var parsed = frontMatter(content); + var metadata = parsed.attributes; + var title = metadata.title; + var destination = metadata.permalink; + var data = _.merge({ + "_" : _, + title : title, + metadata : metadata, + url : destination + }, options.templateData); + + var html = parsed.body; // Parse any markdown in the resulting html - var html = marked(html); - - // Generate summary of content - var summary = _.includes(html, options.summaryMarker) ? - html.split(options.summaryMarker)[0] : - truncate(html, options.truncateSummaryAt, { keepImageTag: true }); - - // Apply template - html = templates.apply(html, fullPath, metadata, options.templateMap, options.templateData, options.templateDirs); - - if(stage == "production"){ - html = webpackUtils.apply(html, webpackStats, webpackConfig, options.entries, options.cssEntries, options.buildSuffix); - html = minify(html, { - removeComments: true, - collapseWhitespace: true, - minifyJS: true - }); + html = marked(html); + + try{ + // Allow ejs code in content + html = ejs.compile(html, { + cache: false, + filename: fullPath + })(data); + } catch(err){ + console.log("Unable to compile html from " + fullPath); + console.log(err); + console.log("Call stack"); + console.log(err.stack); } - var result = utils.filename2date(fullPath); + // Apply template + data.content = html; // Pass in generated html + html = templates.apply(data, fullPath, options.templateMap, options.templateDirs); + html = applyProduction(html, stage, webpackConfig, webpackStats, options); return { - title : metadata.title || result.title, - date : result.date, + title : title, metadata : metadata, - summary : summary, source : fullPath, - destination : metadata.permalink || result.url, - html : html + destination : destination, + html : html, + url : destination }; }; diff --git a/client/tools/build/index.js b/client/tools/build/index.js index ff30ec2..32d5d64 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -5,8 +5,11 @@ var webpack = require("webpack"); var nodeWatch = require("node-watch"); var del = require("del"); -var file = require("./file"); -var buildContent = require("./content"); +var file = require("./file"); +var buildContent = require("./content"); +var templates = require("./templates"); +var utils = require("./utils"); +var applyProduction = require("./production"); // Settings var webpackConfigBuilder = require("../../config/webpack.config"); @@ -30,8 +33,7 @@ var options = { buildSuffix : settings.buildSuffix, // Webpack build suffix. ie _bundle.js templateData : {}, // Object that will be passed to every page as it is rendered templateMap : {}, // Used to specify specific templates on a per file basis - templateDirs : templateDirs, // Directories to look in for template - summaryMarker : "" // Used to mark summary point when generating html summaries + templateDirs : templateDirs // Directories to look in for template }; // ----------------------------------------------------------------------------- @@ -79,6 +81,7 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); var outFile = fileName; var outPath = outputPath; + var inPath = inputPath; if(page.destination && page.destination.length > 0){ if(_.endsWith(page.destination, "/")){ outPath = path.join(outPath, page.destination); @@ -86,13 +89,9 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage } else { outFile = page.destination; } + inPath = ""; } - // Use .html for file extension - var ext = path.extname(outFile); - if(ext != ".html"){ - outFile = outFile.replace(ext, ".html"); - } - page.outputFilePath = file.write(inputPath, outPath, outFile, page.html, options); + page.outputFilePath = file.write(inPath, outPath, outFile, page.html, options); results.push(page); } else { file.copy(inputPath, outputPath, fileName, options); @@ -112,6 +111,7 @@ function build(isHot){ del(outputPath, {force: true}).then(function(){ // Delete everything in the output path buildWebpackEntries(isHot).then(function(packResults){ var pages = buildContents(inputPath, outputPath, packResults.webpackConfig, packResults.webpackStats, stage, options); + resolve({ pages : pages, inputPath : inputPath, @@ -132,7 +132,10 @@ function build(isHot){ function watch(){ return new Promise(function(resolve, reject){ build(true).then(function(buildResults){ + + // Watch content nodeWatch(buildResults.inputPath, function(filePath){ + // Build the page var page = buildContent(filePath, buildResults.webpackConfig, buildResults.webpackStats, buildResults.stage, buildResults.options); page.outputFilePath = file.write(buildResults.inputPath, buildResults.outputPath, path.basename(filePath), page.html, buildResults.options); }); diff --git a/client/tools/build/production.js b/client/tools/build/production.js new file mode 100644 index 0000000..cd6e2a0 --- /dev/null +++ b/client/tools/build/production.js @@ -0,0 +1,15 @@ +var minify = require('html-minifier').minify; +var webpackUtils = require("./webpack_utils"); + +module.exports = function(html, stage, webpackConfig, webpackStats, options){ + if(stage == "production"){ + html = webpackUtils.apply(html, webpackConfig, webpackStats, options.entries, options.cssEntries, options.buildSuffix); + return minify(html, { + removeComments: true, + collapseWhitespace: true, + minifyJS: true + }); + } else { + return html; + } +}; \ No newline at end of file diff --git a/client/tools/build/templates.js b/client/tools/build/templates.js index 87ddd90..7dcfced 100644 --- a/client/tools/build/templates.js +++ b/client/tools/build/templates.js @@ -3,19 +3,33 @@ var path = require("path"); var _ = require("lodash"); var ejs = require("ejs"); +var utils = require("./utils"); + // ----------------------------------------------------------------------------- // Apply layouts to content // ----------------------------------------------------------------------------- -function apply(content, fullPath, metadata, templateMap, templateData, templateDirs){ +function apply(data, fullPath, templateMap, templateDirs){ // If the user has specified a layout in the front matter use that. // Then try the layout map and finally default to application.html - var layoutFile = metadata.layout || templateMap[fullPath] || "application.html"; - + var layoutFile = data.metadata.layout || templateMap[fullPath] || "application.html"; var template = loadTemplate(layoutFile, templateDirs); - var data = buildData(metadata, templateData, { content: content}); - return template(data); + var html = ""; + + try{ + html = template(_.merge({ + cleanTag : utils.cleanTag, + "_" : _ + }, data)); + } catch(err){ + console.log(err); + console.log("Unable to build file: " + fullPath + " Data: " + data); + console.log("Stack Trace:"); + console.log(err.trace); + } + + return html; } function safeReadLayout(file){ @@ -56,13 +70,8 @@ function loadTemplate(file, templateDirs){ }); } -function buildData(){ - return _.merge({ "_": _ }, ...arguments); -} - module.exports = { apply: apply, - loadTemplate: loadTemplate, - buildData: buildData + loadTemplate: loadTemplate }; diff --git a/client/tools/build/utils.js b/client/tools/build/utils.js index e853cee..bdf05ee 100644 --- a/client/tools/build/utils.js +++ b/client/tools/build/utils.js @@ -18,14 +18,15 @@ var dateRegEx = /(\d{4})-(\d{1,2})-(\d{1,2})-(.*)/; // ----------------------------------------------------------------------------- function filename2date(filePath){ var result = {}; - var basename = path.basename(filePath, '.md'); + var ext = path.extname(filePath); + var basename = path.basename(filePath, ext); var match = dateRegEx.exec(basename); if(match) { var year = match[1]; var month = match[2]; var day = match[3]; var basename = match[4]; - result.date = moment(month + '-' + day + '-' + year, "MM-DD-YYYY"); + result.date = month + '-' + day + '-' + year, "MM-DD-YYYY"; result.url = '/' + year + '/' + month + '/' + day + '/' + basename + '.html'; if(!result.title){ result.title = basename.replace(/_/g, ' '); diff --git a/client/tools/build/webpack_utils.js b/client/tools/build/webpack_utils.js index 992fb58..04eba82 100644 --- a/client/tools/build/webpack_utils.js +++ b/client/tools/build/webpack_utils.js @@ -5,15 +5,20 @@ var path = require("path"); // Finds the has value for a given entry point in the provided webpack stats // ----------------------------------------------------------------------------- function getHashed(webpackStats, entryPoint, ext){ - return _.find(webpackStats.assetsByChunkName[entryPoint], function(hashEntry){ - return path.extname(hashEntry).toLowerCase() === '.' + ext; - }); + var found = webpackStats.assetsByChunkName[entryPoint]; + if(_.isArray(found)){ // If there is an array of matching values we have to find the one with the right file extension. + return _.find(found, function(hashEntry){ + return path.extname(hashEntry).toLowerCase() === '.' + ext; + }); + } else { + return found; + } } // ----------------------------------------------------------------------------- // Changes webpack paths as needed. // ----------------------------------------------------------------------------- -function apply(html, webpackStats, webpackConfig, entries, cssEntries, buildSuffix){ +function apply(html, webpackConfig, webpackStats, entries, cssEntries, buildSuffix){ var result = html; _.each(webpackConfig.entry, function(path, entry){ if(_.has(entries, entry)){ From f21e3d0e211ca5e441684f598418e31ce912da4c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 19 May 2016 14:30:49 -0700 Subject: [PATCH 157/452] Add 'live' to top level package for convenience --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 8f04e44..0cf6e60 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "build_dev": "cd ./client && npm run build_dev", "release": "cd ./client && npm run release", "hot": "cd ./client && npm run hot", + "live": "cd ./client && node server.js", "test": "cd ./client && npm run test", "coveralls": "cd ./client && npm run coveralls" }, From e47f31fb4728c97f04c97675badbb0f7bdce6d55 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 19 May 2016 14:43:29 -0700 Subject: [PATCH 158/452] Updated docs --- .env.example | 10 +++++----- README.md | 33 +++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/.env.example b/.env.example index 3cac8b6..5a58a02 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,11 @@ ASSETS_PORT=8080 -# Use a local domain. Change /etc/hosts and add sites.dev and rcsassets.sites.dev. -# Each entry will point to 127.0.0.1 -# ASSETS_URL=http://rcsassets.sites.dev:8080 - # Use localhost ASSETS_URL=http://localhost:8080 -# Use ngrok: (you will need to start ngrok) +# Use a local domain. +# Change /etc/hosts (on a mac) and add sites.dev and rcsassets.sites.dev. Each entry will need to point to 127.0.0.1 +# ASSETS_URL=http://rcsassets.sites.dev:8080 + +# Use ngrok: (you will need to start ngrok and point it at 8080 or a different port if you change it.) # ASSETS_URL=https://rcsassets.ngrok.io diff --git a/README.md b/README.md index a1aadd2..5794187 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,15 @@ +#React Client Starter App +----------------------- +There are many starter kits that will help you get started with React and Redux. This is the one created by, maintained by and used by [Atomic Jolt](http://www.atomicjolt.com). Atomic Jolt uses this as application as a starting place for our [Ruby on Rails React starter application](https://github.com/atomicjolt/react_starter_app) and our [Firebase React starter appliction](https://github.com/atomicjolt/react_firebase_starter_app). + + #Getting Started: ----------------------- -Assuming you have git and npm installed: +Make sure to install git and npm before you start then: 1. git clone https://github.com/atomicjolt/react_client_starter_app.git my_project_name -2. Rename .env.example to .env and change the values as desired. The default should be fine. +2. Rename .env.example to .env. This file contains the port the server will use. The default 8080 should be fine, but you can also use a local domain or ngrok if you wish. 3. npm install 4. Start server with: @@ -13,24 +18,27 @@ Assuming you have git and npm installed: then visit http://localhost:8080 -#Development: +# Using the React Client Starter App ----------------------- Source code lives in the client directory. Modify html and js files in that directory to build your application. + ## React.js ----------- React code can be found in client/js. We use Redux and the React-Router. + ## Html ----------- All html files live in client/html. The build process will properly process ejs in any html files as well as process markdown for files that end in .md. All front matter in .md files will be available to the ejs templates. See about.md for an example. + #Tests ----------- Karma and Jasmine are used for testing. To run tests run: `npm run test` - + #Check for updates ----------- @@ -43,7 +51,7 @@ Inside the client directory run: ----------------------- 1. Install the s3_website gem: - + `gem install s3_website` 2. Create s3_website.yml: @@ -90,7 +98,16 @@ Inside the client directory run: 4. Configure bucket as website: `s3_website cfg apply` - + + +#Production +----------------------- +If you want to see what your application will look like in production run + + `npm run live` + +This will serve files from the build/prod directory. + #Deploy: ----------------------- @@ -103,10 +120,10 @@ Inside the client directory run: Build a release without deploying: `npm run build` - + Build a release and deploy: - + `npm run release` From 400e2f1c90e3a04b7ab91419a306b1e2b296d7ba Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 25 May 2016 21:50:50 -0600 Subject: [PATCH 159/452] Fixes name in webpack loader. --- client/config/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index a1293ca..126c313 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -107,7 +107,7 @@ module.exports = function(stage){ { test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }, { test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }, { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' - { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=cd [name]-[hash].[ext]']} + { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']} ]; return { From 1cf8805c88b4e00e07dec4290c552dcaf9858aa8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 27 May 2016 09:27:17 -0600 Subject: [PATCH 160/452] Bind to 0.0.0.0 instead of localhost --- .env.example | 2 +- client/server.js | 2 +- client/webpack.hot.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.example b/.env.example index 5a58a02..6f39d2f 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ ASSETS_PORT=8080 # Use localhost -ASSETS_URL=http://localhost:8080 +ASSETS_URL=http://0.0.0.0:8080 # Use a local domain. # Change /etc/hosts (on a mac) and add sites.dev and rcsassets.sites.dev. Each entry will need to point to 127.0.0.1 diff --git a/client/server.js b/client/server.js index cf01512..7ccce24 100644 --- a/client/server.js +++ b/client/server.js @@ -12,7 +12,7 @@ app.get("*", function response(req, res) { res.sendFile(path.join(settings.prodOutput, req.url)); }); -app.listen(settings.hotPort, "localhost", function(err) { +app.listen(settings.hotPort, "0.0.0.0", function(err) { if (err) { console.log(err); return; diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 57b3525..5c1d37a 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -31,7 +31,7 @@ function launch(){ res.sendFile(path.join(settings.devOutput, req.url)); }); - app.listen(settings.hotPort, "localhost", function(err) { + app.listen(settings.hotPort, "0.0.0.0", function(err) { if (err) { console.log(err); return; From 9ce4ddd00fe78deb9aa9ed5416bd91542b766ca2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 27 May 2016 09:48:33 -0600 Subject: [PATCH 161/452] Added notes for ASSETS_URL --- .env.example | 17 ++++++++++++++++- client/config/settings.js | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 6f39d2f..8ee2270 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,22 @@ ASSETS_PORT=8080 + +# ASSETS_URL is used for the webpack server's public path and will set an absolute url +# when loading assets. Not setting a value means the assets will be loaded from the local +# server. This works fine in development and will also work if you attempt to access your +# development server from a remote device (such as a mobile phone) for testing. You can set +# a localhost value if desired however note that doing so will prevent the assets from loading +# properly when attempting to access the server from a remote device. +# ASSETS_URL is mainly in place for situations where the react client starter app is incorporated +# into another project such as Ruby on Rails where there will be multiple servers. In this situation +# the client application will likely be loaded via a link in a page served from the Rail (or other similar) +# server. Since the webpack server will be serving assets on a different port (or domain) we can't use +# the default root path since doing so will result in the scripts requesting assets from the Rails +# server instead of the webpack server. In this instance setting ASSETS_URL will tell webpack to +# build and serve assets from a specific url - the webpack server's url. + # Use localhost -ASSETS_URL=http://0.0.0.0:8080 +# ASSETS_URL=http://0.0.0.0:8080 # Use a local domain. # Change /etc/hosts (on a mac) and add sites.dev and rcsassets.sites.dev. Each entry will need to point to 127.0.0.1 diff --git a/client/config/settings.js b/client/config/settings.js index 912c94d..1a8422b 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -29,7 +29,7 @@ module.exports = { prodOutput: prodOutput, // Dev urls - devAssetsUrl: process.env.ASSETS_URL || 'http://localhost:' + hotPort, + devAssetsUrl: process.env.ASSETS_URL || '', hotPort: hotPort, From 827e8d7654917e1cf15bf1e3b97ed95ec27e6b54 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 27 May 2016 12:04:01 -0600 Subject: [PATCH 162/452] Removed default style require --- client/js/app.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index 1ae27a1..f5155ed 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -17,7 +17,6 @@ import jwt from './loaders/jwt'; import injectTapEventPlugin from "react-tap-event-plugin"; injectTapEventPlugin(); -require("../styles/styles.less"); class Root extends React.Component { render(){ From d36962d72349c253ba08c85c58f479b3f68782ff Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 27 May 2016 13:15:11 -0600 Subject: [PATCH 163/452] Updates react --- client/package.json | 4 ++-- package.json | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/client/package.json b/client/package.json index 4c1327a..7a0bd11 100644 --- a/client/package.json +++ b/client/package.json @@ -26,8 +26,8 @@ "front-matter": "^2.0.7", "immutable": "3.8.1", "lodash": "4.11.1", - "react": "15.0.1", - "react-dom": "^15.0.1", + "react": "15.1.0", + "react-dom": "15.1.0", "react-proxy-loader": "0.3.4", "react-redux": "4.4.5", "react-router": "2.3.0", diff --git a/package.json b/package.json index 0cf6e60..d34605a 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,6 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": { - "del": "^2.2.0" - }, + "dependencies": {}, "devDependencies": {} } From 113a05847428f35581e18d54531ce034f9bfc4a9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 27 May 2016 13:48:50 -0600 Subject: [PATCH 164/452] add del back to root --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d34605a..0cf6e60 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "author": "atomicjolt", "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", - "dependencies": {}, + "dependencies": { + "del": "^2.2.0" + }, "devDependencies": {} } From 7fe9465972810b6608f9a27f91bae07f79432930 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 3 Jun 2016 15:19:42 -0600 Subject: [PATCH 165/452] Updated package versions --- client/package.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/client/package.json b/client/package.json index 7a0bd11..1abea31 100644 --- a/client/package.json +++ b/client/package.json @@ -25,15 +25,15 @@ "babel-runtime": "^6.6.1", "front-matter": "^2.0.7", "immutable": "3.8.1", - "lodash": "4.11.1", + "lodash": "4.13.1", "react": "15.1.0", "react-dom": "15.1.0", "react-proxy-loader": "0.3.4", "react-redux": "4.4.5", - "react-router": "2.3.0", + "react-router": "2.4.1", "react-tap-event-plugin": "1.0.0", "redux": "3.5.2", - "superagent": "1.8.3", + "superagent": "2.0.0", "uuid": "2.0.2" }, "devDependencies": { @@ -52,11 +52,11 @@ "babel-preset-react": "^6.5.0", "babel-preset-react-hmre": "^1.1.1", "babel-preset-stage-0": "^6.5.0", - "chunk-manifest-webpack-plugin": "0.0.1", + "chunk-manifest-webpack-plugin": "0.1.0", "coveralls": "2.11.9", "css-loader": "0.23.1", "dotenv": "2.0.0", - "ecstatic": "1.4.0", + "ecstatic": "1.4.1", "ejs": "^2.4.1", "eslint": "^2.8.0", "eslint-plugin-babel": "^3.2.0", @@ -67,28 +67,28 @@ "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.8.5", "fs-extra": "^0.30.0", - "html-minifier": "2.1.0", + "html-minifier": "2.1.3", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", "istanbul": "0.4.3", "istanbul-instrumenter-loader": "0.2.0", "jasmine-core": "2.4.1", "karma": "0.13.22", - "karma-chrome-launcher": "0.2.3", - "karma-cli": "0.1.2", - "karma-coverage": "0.5.5", - "karma-firefox-launcher": "0.1.7", - "karma-jasmine": "0.3.8", + "karma-chrome-launcher": "1.0.1", + "karma-cli": "1.0.0", + "karma-coverage": "1.0.0", + "karma-firefox-launcher": "1.0.0", + "karma-jasmine": "1.0.2", "karma-jasmine-ajax": "0.1.13", "karma-phantomjs-launcher": "1.0.0", "karma-sourcemap-loader": "0.3.7", "karma-spec-reporter": "0.0.26", "karma-webpack": "1.7.0", - "less": "2.6.1", + "less": "2.7.1", "less-loader": "2.2.3", "marked": "^0.3.5", "minimist": "1.2.0", - "node-sass": "3.6.0", + "node-sass": "3.7.0", "node-watch": "^0.3.5", "npm-shrinkwrap": "200.5.1", "null-loader": "0.1.1", @@ -99,13 +99,13 @@ "react-hot-loader": "1.3.0", "react-transform-catch-errors": "^1.0.2", "redbox-react": "^1.2.3", - "redux-devtools": "3.2.0", + "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.0.11", "sass-loader": "3.2.0", "style-loader": "0.13.1", "url-loader": "0.5.7", - "webpack": "1.13.0", + "webpack": "1.13.1", "webpack-dev-middleware": "^1.6.1", "webpack-hot-middleware": "^2.10.0" } From 3fef9814bca25f2345c84919e941bc179e85c4d9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 3 Jun 2016 15:20:20 -0600 Subject: [PATCH 166/452] Make history more general --- client/js/history.js | 3 +++ client/js/routes.jsx | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 client/js/history.js diff --git a/client/js/history.js b/client/js/history.js new file mode 100644 index 0000000..abbb2d0 --- /dev/null +++ b/client/js/history.js @@ -0,0 +1,3 @@ +import { hashHistory } from 'react-router'; + +export default hashHistory; \ No newline at end of file diff --git a/client/js/routes.jsx b/client/js/routes.jsx index bd39507..de4cac6 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -4,10 +4,10 @@ import React from 'react'; // if you use jsx, you have import { Router, Route, IndexRoute } from 'react-router'; import Index from './components/layout/index'; import Home from './components/home'; -import { hashHistory } from 'react-router'; +import appHistory from './history'; export default ( - + From 165fe167b0af4fbabe10d9556167521ab11e4c5a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 3 Jun 2016 15:21:43 -0600 Subject: [PATCH 167/452] Add es6 promise polyfill --- client/js/app.jsx | 4 ++++ package.json | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index f5155ed..0c00f3e 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,6 +1,7 @@ "use strict"; import 'babel-polyfill'; +import es6Promise from 'es6-promise'; import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; @@ -10,6 +11,9 @@ import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; import jwt from './loaders/jwt'; +// Polyfill es6 promises for IE +es6Promise.polyfill(); + //Needed for onTouchTap //Can go away when react 1.0 release //Check this repo: diff --git a/package.json b/package.json index 0cf6e60..1342ccf 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { - "del": "^2.2.0" + "del": "^2.2.0", + "es6-promise": "^3.2.1" }, "devDependencies": {} } From 08adca7f51ac544446f111d2afee938ae6e9d002 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 3 Jun 2016 18:21:09 -0600 Subject: [PATCH 168/452] updated syntax --- client/js/actions/jwt.js | 2 +- client/js/loaders/jwt.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/js/actions/jwt.js b/client/js/actions/jwt.js index ebc3259..6d5438a 100644 --- a/client/js/actions/jwt.js +++ b/client/js/actions/jwt.js @@ -18,5 +18,5 @@ export function refreshJwt(userId){ type: Constants.REFRESH_JWT, method: Network.GET, url: `api/sessions/${userId}` - } + }; } \ No newline at end of file diff --git a/client/js/loaders/jwt.js b/client/js/loaders/jwt.js index 424f94c..0baf85b 100644 --- a/client/js/loaders/jwt.js +++ b/client/js/loaders/jwt.js @@ -4,9 +4,9 @@ import { refreshJwt } from "../actions/jwt"; export default function(dispatch, currentUserId){ - var refresh = 1000 * 60 * 20; // every 20 minutes - setInterval(function(){ - dispatch(refreshJwt(currentUserId)); - }, refresh); + const refresh = 1000 * 60 * 20; // every 20 minutes + setInterval(() => { + dispatch(refreshJwt(currentUserId)); + }, refresh); } \ No newline at end of file From 14dfaed71a54747c74e26e68ef5f0e47774283d7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Jun 2016 08:16:18 -0600 Subject: [PATCH 169/452] Extract method in API middleware --- client/js/middleware/api.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index bc9003c..16d71fd 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -2,12 +2,10 @@ import api from "../libs/api"; import { DONE } from "../constants/wrapper"; const API = store => next => action => { - var promise; - var state = store.getState(); - // send the api request - if(action.method){ - promise = api.execRequest(action.method, action.url, state.settings.get("apiUrl"), state.settings.get("jwt"), state.settings.get("csrfToken"), action.params, action.body); + function request(method, url, params, body){ + const state = store.getState(); + const promise = api.execRequest(method, url, state.settings.get("apiUrl"), state.settings.get("jwt"), state.settings.get("csrfToken"), params, body); if(promise){ promise.then((response, error) => { store.dispatch({ @@ -19,6 +17,10 @@ const API = store => next => action => { }); // Dispatch the new data }); } + }; + + if(action.method){ + request(action.method, action.url, action.params, action.body); } // call the next middleWare From f053e13e5999e13ecf4948c9b5375cdb9327b1fe Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Jun 2016 08:26:17 -0600 Subject: [PATCH 170/452] Moves dependency to correct package --- client/package.json | 1 + package.json | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/package.json b/client/package.json index 1abea31..01d1a9b 100644 --- a/client/package.json +++ b/client/package.json @@ -23,6 +23,7 @@ "babel": "6.5.2", "babel-polyfill": "^6.7.4", "babel-runtime": "^6.6.1", + "es6-promise": "^3.2.1", "front-matter": "^2.0.7", "immutable": "3.8.1", "lodash": "4.13.1", diff --git a/package.json b/package.json index 1342ccf..0cf6e60 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,7 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { - "del": "^2.2.0", - "es6-promise": "^3.2.1" + "del": "^2.2.0" }, "devDependencies": {} } From 05f2239db397901a2d9286c836db36690213057e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 7 Jun 2016 16:03:37 -0600 Subject: [PATCH 171/452] Adds build suffix to dev chunkfilename --- client/config/webpack.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 126c313..cb2b41e 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -114,9 +114,9 @@ module.exports = function(stage){ context: __dirname, entry: entries, output: { - path: production ? settings.prodOutput : settings.devOutput, // Location where generated files will be output + path: production ? settings.prodOutput : settings.devOutput, // Location where generated files will be output filename: production ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, - chunkFilename: production ? '[id]-[chunkhash]' + settings.buildSuffix : '[id].js', + chunkFilename: production ? '[id]-[chunkhash]' + settings.buildSuffix : '[id]' + settings.buildSuffix, publicPath: publicPath, sourceMapFilename: 'debugging/[file].map', pathinfo: !production // http://webpack.github.io/docs/configuration.html#output-pathinfo From 2016e78c32c81e8c98f6f8de225bdda1512bdc8a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 7 Jun 2016 20:06:22 -0600 Subject: [PATCH 172/452] Fixed formatting. --- client/specs_support/helper.js | 22 +++++++++++----------- client/specs_support/rapper.jsx | 4 ++-- client/specs_support/stub.jsx | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index d0e1bf1..b3748d2 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -5,7 +5,7 @@ import Immutable from 'immutable'; import configureStore from "../js/store/configure_store"; export default class Helper{ - + // Create a fake store for testing static mockStore(state) { return { @@ -20,11 +20,11 @@ export default class Helper{ // Create a real store that can be used for testing static makeStore(settings){ var initialSettings = _.assign({ - jwt: "jwt_token", - csrf: "csrf_token", - apiUrl: "http://www.example.com" - }, settings); - + jwt: "jwt_token", + csrf: "csrf_token", + apiUrl: "http://www.example.com" + }, settings); + return configureStore({ settings: Immutable.fromJS(initialSettings) }); @@ -46,11 +46,11 @@ export default class Helper{ jasmine.Ajax.stubRequest( RegExp('.*/api/accounts/') ).andReturn({ - "status": 200, - "contentType": "json", - "statusText": "OK", - "responseText": accounts_payload - }); + "status": 200, + "contentType": "json", + "statusText": "OK", + "responseText": accounts_payload + }); }); afterEach(function(){ diff --git a/client/specs_support/rapper.jsx b/client/specs_support/rapper.jsx index 366fcc6..63bfc41 100644 --- a/client/specs_support/rapper.jsx +++ b/client/specs_support/rapper.jsx @@ -6,7 +6,7 @@ import { connect } from 'react-redux'; export default class Rapper extends React.Component{ render(){ - if(this.props.child) return
    - return
    {this.props.children}
    + if(this.props.child) return
    ; + return
    {this.props.children}
    ; } } \ No newline at end of file diff --git a/client/specs_support/stub.jsx b/client/specs_support/stub.jsx index ea2ba9d..53f846f 100644 --- a/client/specs_support/stub.jsx +++ b/client/specs_support/stub.jsx @@ -1,10 +1,10 @@ "use strict"; -import React from 'react'; +import React from 'react'; export default class Stub extends React.Component{ render(){ - return
    {this.props.children}
    + return
    {this.props.children}
    ; } } \ No newline at end of file From 824418f037e9601562db2e5e66be42000ff1dc86 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 22 Jun 2016 10:27:01 -0600 Subject: [PATCH 173/452] Use fullUrl --- client/js/libs/api.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/client/js/libs/api.js b/client/js/libs/api.js index 2522912..6fd025b 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -3,7 +3,7 @@ import Request from "superagent"; import NetworkConstants from "../constants/network"; import _ from "lodash"; - + var _pendingRequests = {}; var _cache = {}; @@ -31,19 +31,19 @@ export default class Api{ switch (method){ case NetworkConstants.GET: - request = Request.get(url); + request = Request.get(fullUrl); break; case NetworkConstants.POST: - request = Request.post(url).send(body); + request = Request.post(fullUrl).send(body); break; case NetworkConstants.PUT: - request = Request.put(url).send(body); + request = Request.put(fullUrl).send(body); break; case NetworkConstants.DEL: - request = Request.del(url); + request = Request.del(fullUrl); break; } - + request.set('Accept', 'application/json') .timeout(NetworkConstants.TIMEOUT) .set('Authorization', 'Bearer ' + jwt) @@ -80,7 +80,7 @@ export default class Api{ wrapper.promise.then((result) => { Api._disposeRequest(url); }); - + return wrapper.promise; } From c6a50bfaaaea772db83ff5a5ea6002f21939bf2c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 22 Jun 2016 11:47:10 -0600 Subject: [PATCH 174/452] Separate JWT into it's own state. --- client/html/layouts/application.html | 3 ++- client/js/app.jsx | 8 +++----- client/js/middleware/api.js | 2 +- client/js/reducers/index.js | 10 ++++++---- client/js/reducers/jwt.js | 18 ++++++++++++++++++ client/js/reducers/settings.js | 20 +++----------------- client/js/store/configure_store.spec.js | 10 +++++----- 7 files changed, 38 insertions(+), 33 deletions(-) create mode 100644 client/js/reducers/jwt.js diff --git a/client/html/layouts/application.html b/client/html/layouts/application.html index b1d6d25..f19bc82 100644 --- a/client/html/layouts/application.html +++ b/client/html/layouts/application.html @@ -8,8 +8,9 @@ diff --git a/client/js/app.jsx b/client/js/app.jsx index 0c00f3e..1972744 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -5,7 +5,6 @@ import es6Promise from 'es6-promise'; import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; -import Immutable from 'immutable'; import routes from './routes'; import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; @@ -37,11 +36,10 @@ class Root extends React.Component { } } -const store = configureStore({settings: Immutable.fromJS(window.DEFAULT_SETTINGS)}); - -if (window.DEFAULT_SETTINGS.jwt){ +const store = configureStore({settings: window.DEFAULT_SETTINGS, jwt: window.DEFAULT_JWT}); +if (window.DEFAULT_JWT){ // Setup JWT refresh - jwt(store.dispatch, window.DEFAULT_SETTINGS.userId); + jwt(store.dispatch, window.DEFAULT_SETTINGS.user_id); } ReactDOM.render( diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index 16d71fd..b7723d6 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -5,7 +5,7 @@ const API = store => next => action => { function request(method, url, params, body){ const state = store.getState(); - const promise = api.execRequest(method, url, state.settings.get("apiUrl"), state.settings.get("jwt"), state.settings.get("csrfToken"), params, body); + const promise = api.execRequest(method, url, state.settings.apiUrl, state.jwt, state.settings.csrfToken, params, body); if(promise){ promise.then((response, error) => { store.dispatch({ diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index 58b16a7..d3d5658 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,10 +1,12 @@ -import { combineReducers } from 'redux'; -import settings from './settings'; -import application from './application'; -import messages from './messages'; +import { combineReducers } from 'redux'; +import settings from './settings'; +import application from './application'; +import messages from './messages'; +import jwt from './jwt'; const rootReducer = combineReducers({ settings, + jwt, application, messages }); diff --git a/client/js/reducers/jwt.js b/client/js/reducers/jwt.js new file mode 100644 index 0000000..68e152f --- /dev/null +++ b/client/js/reducers/jwt.js @@ -0,0 +1,18 @@ +import { Constants as JwtConstants } from "../actions/jwt"; + +const initialState = {}; + +export default (state = initialState, action) => { + + switch(action.type){ + + case JwtConstants.REFRESH_JWT: + return action.payload; + break; + + default: + return state; + + } + +}; \ No newline at end of file diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js index 07af3d0..beb72f8 100644 --- a/client/js/reducers/settings.js +++ b/client/js/reducers/settings.js @@ -1,19 +1,5 @@ -import Immutable from 'immutable'; -import { Constants as JwtConstants } from "../actions/jwt"; - -const initialState = Immutable.fromJS({}); +const initialState = {}; export default (state = initialState, action) => { - - switch(action.type){ - - case JwtConstants.REFRESH_JWT: - return state.set('jwt', action.payload); - break; - - default: - return state; - - } - -} \ No newline at end of file + return state; // Just return state. Don't let settings from the server mutate. +}; \ No newline at end of file diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js index 495cce9..6417155 100644 --- a/client/js/store/configure_store.spec.js +++ b/client/js/store/configure_store.spec.js @@ -5,14 +5,14 @@ describe('configure store', function() { it('setups up initial state', function() { var initialState = Immutable.fromJS({ - jwt: "jwt_token", - csrf: "csrf_token", - apiUrl: "http://www.example.com" + jwt: "jwt_token", + csrf: "csrf_token", + apiUrl: "http://www.example.com" }); var settings = { settings: initialState - } + }; var store = configureStore(settings); - expect(store.getState().settings.get("jwt")).toBe('jwt_token'); + expect(store.getState().settings.jwt).toBe('jwt_token'); }); }); \ No newline at end of file From 228901e5f7e85eca8e4760a866ccdc53e17d30d0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 23 Jun 2016 17:23:04 -0600 Subject: [PATCH 175/452] Remove immutable --- client/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/client/package.json b/client/package.json index 01d1a9b..23ec590 100644 --- a/client/package.json +++ b/client/package.json @@ -25,7 +25,6 @@ "babel-runtime": "^6.6.1", "es6-promise": "^3.2.1", "front-matter": "^2.0.7", - "immutable": "3.8.1", "lodash": "4.13.1", "react": "15.1.0", "react-dom": "15.1.0", From 7f919c4ed513f63c027fd2db69f77c9695b1d756 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 24 Jun 2016 17:33:03 -0600 Subject: [PATCH 176/452] Adds specs for jwt and settings reducers --- client/js/app.jsx | 9 ++++---- client/js/reducers/jwt.spec.js | 25 +++++++++++++++++++++ client/js/reducers/settings.js | 8 +++++-- client/js/reducers/settings.spec.js | 30 ++++++++++--------------- client/js/store/configure_store.js | 2 +- client/js/store/configure_store.spec.js | 19 ++++++++-------- 6 files changed, 59 insertions(+), 34 deletions(-) create mode 100644 client/js/reducers/jwt.spec.js diff --git a/client/js/app.jsx b/client/js/app.jsx index 1972744..b9b9851 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -9,6 +9,7 @@ import routes from './routes'; import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; import jwt from './loaders/jwt'; +import initialSettingsState from './reducers/settings'; // Polyfill es6 promises for IE es6Promise.polyfill(); @@ -36,10 +37,10 @@ class Root extends React.Component { } } -const store = configureStore({settings: window.DEFAULT_SETTINGS, jwt: window.DEFAULT_JWT}); -if (window.DEFAULT_JWT){ - // Setup JWT refresh - jwt(store.dispatch, window.DEFAULT_SETTINGS.user_id); +const settings = getInitialSettings(window.DEFAULT_SETTINGS); +const store = configureStore({settings, jwt: window.DEFAULT_JWT}); +if (window.DEFAULT_JWT){ // Setup JWT refresh + jwt(store.dispatch, settings.user_id); } ReactDOM.render( diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js new file mode 100644 index 0000000..b960eeb --- /dev/null +++ b/client/js/reducers/jwt.spec.js @@ -0,0 +1,25 @@ +import { Constants as JwtConstants } from "../actions/jwt"; +import jwt from "./jwt"; + +describe('jwt reducer', () => { + + describe("initial state", () => { + + it("has a jwt token", () => { + const initial = { jwtValue: 'asdf' }; + const initialState = initial; + const state = jwt(initialState, {}); + expect(state.toEqual(initial); + + const newJwt = { jwtValue: '1234' }; + const newState = jwt(state, { + type: JwtConstants.REFRESH_JWT, + payload: newJwt + }); + + expect(newState).toEqual(newJwt); + }); + + }); + +}); diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js index beb72f8..63add5c 100644 --- a/client/js/reducers/settings.js +++ b/client/js/reducers/settings.js @@ -1,5 +1,9 @@ -const initialState = {}; +import _ from "lodash"; -export default (state = initialState, action) => { +export default (state = {}, action) => { return state; // Just return state. Don't let settings from the server mutate. +}; + +export const getInitialSettings = (serverSettings) => { + return _.merge({}, serverSettings); // Add default settings that can be overriden by values in serverSettings }; \ No newline at end of file diff --git a/client/js/reducers/settings.spec.js b/client/js/reducers/settings.spec.js index bddcfa8..25d8e10 100644 --- a/client/js/reducers/settings.spec.js +++ b/client/js/reducers/settings.spec.js @@ -1,32 +1,26 @@ -import Immutable from 'immutable'; -import { Constants as JwtConstants } from "../actions/jwt"; -import settings from "./settings"; +import settings from "./settings"; +import { getInitialSettings } from "./settings"; describe('settings reducer', () => { describe("initial state", () => { - + it("returns empty state", () => { - const initialState = Immutable.fromJS({}); + const initialState = {}; const state = settings(initialState, {}); - expect(state.toJS()).toEqual({}); + expect(state).toEqual({}); }); - it("has a jwt token", () => { - const initial = {jwt: 'asdf'}; - const initialState = Immutable.fromJS(initial); - const state = settings(initialState, {}); - expect(state.toJS()).toEqual(initial); + }); - const newJwt = '1234'; - const newState = settings(state, { - type: JwtConstants.REFRESH_JWT, - payload: newJwt - }); + describe("getInitialSettings", () => { - expect(newState.toJS().jwt).toEqual(newJwt); + it("Returns the state provided by the server", () => { + const serverSettings = { foo: 1 }; + const settings = getInitialSettings(serverSettings); + expect(settings).toEqual(serverSettings); }); - + }); }); diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 1dd6a08..3d4cb42 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -26,7 +26,7 @@ export default function(initialState){ if (__DEV__ && module.hot) { module.hot.accept( - '../reducers', + '../reducers', () => store.replaceReducer(require('../reducers')) ); } diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js index 6417155..a9ef7fe 100644 --- a/client/js/store/configure_store.spec.js +++ b/client/js/store/configure_store.spec.js @@ -4,15 +4,16 @@ import Immutable from 'immutable'; describe('configure store', function() { it('setups up initial state', function() { - var initialState = Immutable.fromJS({ - jwt: "jwt_token", - csrf: "csrf_token", - apiUrl: "http://www.example.com" - }); - var settings = { - settings: initialState + const settings = { + csrf : "csrf_token", + apiUrl : "http://www.example.com" }; - var store = configureStore(settings); - expect(store.getState().settings.jwt).toBe('jwt_token'); + const initialState = { + jwt : "jwt_token", + settings : settings + }; + const store = configureStore(initialState); + expect(store.getState().settings).toBe(settings); + expect(store.getState().jwt).toBe('jwt_token'); }); }); \ No newline at end of file From 3afa401cc943a8c7cc9d7ddff0b908cc9e9ad75d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 30 Jun 2016 16:39:36 -0600 Subject: [PATCH 177/452] Fixed import --- client/js/app.jsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index b9b9851..f9bef66 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,15 +1,15 @@ "use strict"; import 'babel-polyfill'; -import es6Promise from 'es6-promise'; -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Provider } from 'react-redux'; -import routes from './routes'; -import DevTools from './dev/dev_tools'; -import configureStore from './store/configure_store'; -import jwt from './loaders/jwt'; -import initialSettingsState from './reducers/settings'; +import es6Promise from 'es6-promise'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import routes from './routes'; +import DevTools from './dev/dev_tools'; +import configureStore from './store/configure_store'; +import jwt from './loaders/jwt'; +import { initialSettingsState } from './reducers/settings'; // Polyfill es6 promises for IE es6Promise.polyfill(); From 2e7180486ae24324c0b78002d791fb1206e62803 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 30 Jun 2016 16:42:11 -0600 Subject: [PATCH 178/452] Fixes import --- client/js/app.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index f9bef66..2c06583 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -9,7 +9,7 @@ import routes from './routes'; import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; import jwt from './loaders/jwt'; -import { initialSettingsState } from './reducers/settings'; +import { getInitialSettings } from './reducers/settings'; // Polyfill es6 promises for IE es6Promise.polyfill(); From 9633e0bf18649ca858e4895b9875c2daa3bb4a9b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 1 Jul 2016 14:40:42 -0600 Subject: [PATCH 179/452] Changes initial settings so that it can take multiple settings objects --- client/js/reducers/settings.js | 4 ++-- client/js/reducers/settings.spec.js | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js index 63add5c..38dc1a2 100644 --- a/client/js/reducers/settings.js +++ b/client/js/reducers/settings.js @@ -4,6 +4,6 @@ export default (state = {}, action) => { return state; // Just return state. Don't let settings from the server mutate. }; -export const getInitialSettings = (serverSettings) => { - return _.merge({}, serverSettings); // Add default settings that can be overriden by values in serverSettings +export function getInitialSettings(){ + return _.merge({}, ...arguments); // Add default settings that can be overriden by values in serverSettings }; \ No newline at end of file diff --git a/client/js/reducers/settings.spec.js b/client/js/reducers/settings.spec.js index 25d8e10..2df6656 100644 --- a/client/js/reducers/settings.spec.js +++ b/client/js/reducers/settings.spec.js @@ -21,6 +21,14 @@ describe('settings reducer', () => { expect(settings).toEqual(serverSettings); }); + it("Returns combined state", () => { + const serverSettings1 = { foo: 1 }; + const serverSettings2 = { bar: 2 }; + const settings = getInitialSettings(serverSettings1, serverSettings2); + expect(settings.foo).toEqual(1); + expect(settings.bar).toEqual(2); + }); + }); }); From 5b7909db321c88f498ab0ad9ac6f86d862a146ce Mon Sep 17 00:00:00 2001 From: Olaf Luijks Date: Sun, 3 Jul 2016 22:29:18 +0200 Subject: [PATCH 180/452] Update jwt.spec.js Fixed typo. --- client/js/reducers/jwt.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js index b960eeb..93bad73 100644 --- a/client/js/reducers/jwt.spec.js +++ b/client/js/reducers/jwt.spec.js @@ -9,7 +9,7 @@ describe('jwt reducer', () => { const initial = { jwtValue: 'asdf' }; const initialState = initial; const state = jwt(initialState, {}); - expect(state.toEqual(initial); + expect(state).toEqual(initial); const newJwt = { jwtValue: '1234' }; const newState = jwt(state, { From fcbbc6b9f23d19b53a5e1a0a4175c3bbd68c1f5f Mon Sep 17 00:00:00 2001 From: Olaf Luijks Date: Sun, 3 Jul 2016 22:31:03 +0200 Subject: [PATCH 181/452] Revert "Update jwt.spec.js" --- client/js/reducers/jwt.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js index 93bad73..b960eeb 100644 --- a/client/js/reducers/jwt.spec.js +++ b/client/js/reducers/jwt.spec.js @@ -9,7 +9,7 @@ describe('jwt reducer', () => { const initial = { jwtValue: 'asdf' }; const initialState = initial; const state = jwt(initialState, {}); - expect(state).toEqual(initial); + expect(state.toEqual(initial); const newJwt = { jwtValue: '1234' }; const newState = jwt(state, { From 72eab167c540ab4c2997db6bf4957131021b671e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 5 Jul 2016 08:50:25 -0600 Subject: [PATCH 182/452] Added missing paren --- client/js/reducers/jwt.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js index b960eeb..93bad73 100644 --- a/client/js/reducers/jwt.spec.js +++ b/client/js/reducers/jwt.spec.js @@ -9,7 +9,7 @@ describe('jwt reducer', () => { const initial = { jwtValue: 'asdf' }; const initialState = initial; const state = jwt(initialState, {}); - expect(state.toEqual(initial); + expect(state).toEqual(initial); const newJwt = { jwtValue: '1234' }; const newState = jwt(state, { From d20281391380397fc90584b6039d639beab8d4c4 Mon Sep 17 00:00:00 2001 From: Olaf Luijks Date: Tue, 5 Jul 2016 21:12:31 +0200 Subject: [PATCH 183/452] Added some examples for browser history and removing the query key --- client/js/history.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/client/js/history.js b/client/js/history.js index abbb2d0..6bbb908 100644 --- a/client/js/history.js +++ b/client/js/history.js @@ -1,3 +1,14 @@ import { hashHistory } from 'react-router'; -export default hashHistory; \ No newline at end of file +// Uncomment these lines if you would like to remove +// the query key from your uri's when using hash history. + +// import { Router, useRouterHistory } from 'react-router'; +// import { createHashHistory } from 'history'; +// const appHistory = useRouterHistory(createHashHistory)({ queryKey: false }); + +// Uncomment this if you want to use browser history instead. +// import { browserHistory } from 'react-router'; +// export default browserHistory; + +export default hashHistory; From b0917b8841968f877a7b12fde5b96d46045805c6 Mon Sep 17 00:00:00 2001 From: Olaf Luijks Date: Tue, 5 Jul 2016 21:47:03 +0200 Subject: [PATCH 184/452] Added a basic 404 route --- client/js/routes.jsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/js/routes.jsx b/client/js/routes.jsx index de4cac6..f3ecc14 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -1,4 +1,4 @@ -"use strict"; +'use strict'; import React from 'react'; // if you use jsx, you have to have React imported import { Router, Route, IndexRoute } from 'react-router'; @@ -6,10 +6,19 @@ import Index from './components/layout/index'; import Home from './components/home'; import appHistory from './history'; +// @todo: replace this with a `real` component or template +const NotFound = () => ( +
    +

    Page Not Found

    +

    Sorry, but the page you were trying to view does not exist.

    +
    +); + export default ( - + + ); From 86c962558e1856d398e6bcaec97e7b1b396c84d4 Mon Sep 17 00:00:00 2001 From: David Owen Date: Wed, 6 Jul 2016 14:53:48 -0600 Subject: [PATCH 185/452] Style clean-ups --- client/js/components/common/messages.jsx | 3 ++- client/js/components/common/messages.spec.js | 9 +++++---- client/js/reducers/application.js | 2 +- client/js/reducers/messages.js | 5 +++-- client/js/reducers/messages.spec.js | 5 +++-- client/js/store/configure_store.spec.js | 7 ++++--- client/specs_support/helper.js | 3 ++- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/client/js/components/common/messages.jsx b/client/js/components/common/messages.jsx index b9fb40f..ae53ddb 100644 --- a/client/js/components/common/messages.jsx +++ b/client/js/components/common/messages.jsx @@ -2,9 +2,10 @@ import React from "react"; import { connect } from 'react-redux'; -import Message from "./message"; import Immutable from 'immutable'; +import Message from "./message"; + const select = (state) => { return { messages: state.messages diff --git a/client/js/components/common/messages.spec.js b/client/js/components/common/messages.spec.js index 0558134..b3860c3 100644 --- a/client/js/components/common/messages.spec.js +++ b/client/js/components/common/messages.spec.js @@ -1,16 +1,17 @@ +import Immutable from "immutable"; import React from "react"; import ReactDOM from "react-dom"; import TestUtils from "react/lib/ReactTestUtils"; + import Helper from "../../../specs_support/helper"; import Messages from "./messages"; -import Immutable from "immutable"; describe('messages', () => { describe('empty state', () => { it('renders nothing', () => { - const store = Helper.mockStore({ messages: Immutable.fromJS([]) }) + const store = Helper.mockStore({ messages: Immutable.fromJS([]) }); const result = TestUtils.renderIntoDocument(); expect(ReactDOM.findDOMNode(result)).toBe(null); }); @@ -19,11 +20,11 @@ describe('messages', () => { describe('messages exist', () => { it('renders a list of messages', () => { const message = "A test message"; - const store = Helper.mockStore({ messages: Immutable.fromJS([message]) }) + const store = Helper.mockStore({ messages: Immutable.fromJS([message]) }); const result = TestUtils.renderIntoDocument(); expect(ReactDOM.findDOMNode(result).textContent).toContain(message); }); }); -}); \ No newline at end of file +}); diff --git a/client/js/reducers/application.js b/client/js/reducers/application.js index bad1662..9ff283a 100644 --- a/client/js/reducers/application.js +++ b/client/js/reducers/application.js @@ -11,4 +11,4 @@ export default (state = initialState, action) => { default: return state; } -} \ No newline at end of file +}; diff --git a/client/js/reducers/messages.js b/client/js/reducers/messages.js index d9fc860..ee6e200 100644 --- a/client/js/reducers/messages.js +++ b/client/js/reducers/messages.js @@ -1,6 +1,7 @@ "use strict"; import Immutable from "immutable"; + import { Constants as MessageConstants } from "../actions/message"; import ErrorTypes from "../constants/error"; @@ -27,7 +28,7 @@ export default (state = initialState, action) => { break; case MessageConstants.REMOVE_MESSAGE: - return state.filter(message => message != action.payload.message); + return state.filter((message) => message != action.payload.message); break; case MessageConstants.CLEAR_MESSAGES: @@ -38,4 +39,4 @@ export default (state = initialState, action) => { return state; } -} \ No newline at end of file +}; diff --git a/client/js/reducers/messages.spec.js b/client/js/reducers/messages.spec.js index 034cc04..67e9fbc 100644 --- a/client/js/reducers/messages.spec.js +++ b/client/js/reducers/messages.spec.js @@ -2,6 +2,7 @@ import _ from "lodash"; import Immutable from "immutable"; + import { Constants as MessageConstants } from "../actions/message"; import ErrorTypes from "../constants/error"; import messages from "./messages"; @@ -71,7 +72,7 @@ describe("message reducer", () => { payload: { message: "Things are great" } - } + }; const state = messages(initialState, action); expect(_.includes(state.get(0),action.payload.message)).toBe(true); }); @@ -125,4 +126,4 @@ describe("message reducer", () => { }); -}); \ No newline at end of file +}); diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js index a9ef7fe..e024622 100644 --- a/client/js/store/configure_store.spec.js +++ b/client/js/store/configure_store.spec.js @@ -1,6 +1,7 @@ -import configureStore from "./configure_store"; import Immutable from 'immutable'; +import configureStore from "./configure_store"; + describe('configure store', function() { it('setups up initial state', function() { @@ -10,10 +11,10 @@ describe('configure store', function() { }; const initialState = { jwt : "jwt_token", - settings : settings + settings }; const store = configureStore(initialState); expect(store.getState().settings).toBe(settings); expect(store.getState().jwt).toBe('jwt_token'); }); -}); \ No newline at end of file +}); diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index b3748d2..df804dc 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -2,6 +2,7 @@ import _ from "lodash"; import Immutable from 'immutable'; + import configureStore from "../js/store/configure_store"; export default class Helper{ @@ -70,4 +71,4 @@ export default class Helper{ } -} \ No newline at end of file +} From e94887eef15eb5517017f8c7f1c3b7f9dc619660 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jul 2016 15:15:06 -0600 Subject: [PATCH 186/452] Removes unused components --- client/js/components/common/message.jsx | 15 --------- client/js/components/common/message.spec.js | 17 ----------- client/js/components/common/messages.jsx | 32 -------------------- client/js/components/common/messages.spec.js | 30 ------------------ 4 files changed, 94 deletions(-) delete mode 100644 client/js/components/common/message.jsx delete mode 100644 client/js/components/common/message.spec.js delete mode 100644 client/js/components/common/messages.jsx delete mode 100644 client/js/components/common/messages.spec.js diff --git a/client/js/components/common/message.jsx b/client/js/components/common/message.jsx deleted file mode 100644 index 36fce6a..0000000 --- a/client/js/components/common/message.jsx +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -import React from 'react'; - -export default class Message extends React.Component{ - - render() { - return ( -
  • - {this.props.children} -
  • - ); - } - -} diff --git a/client/js/components/common/message.spec.js b/client/js/components/common/message.spec.js deleted file mode 100644 index 26c1b50..0000000 --- a/client/js/components/common/message.spec.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import TestUtils from 'react/lib/ReactTestUtils'; -import Message from './message'; - -describe('message', () => { - - describe('messages exist', () => { - var message = "A test message"; - - it('renders a single message', () => { - var result = TestUtils.renderIntoDocument({message}); - expect(ReactDOM.findDOMNode(result).textContent).toContain(message); - }); - }); - -}); \ No newline at end of file diff --git a/client/js/components/common/messages.jsx b/client/js/components/common/messages.jsx deleted file mode 100644 index ae53ddb..0000000 --- a/client/js/components/common/messages.jsx +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -import React from "react"; -import { connect } from 'react-redux'; -import Immutable from 'immutable'; - -import Message from "./message"; - -const select = (state) => { - return { - messages: state.messages - }; -}; - -@connect(select, null, null, {withRef: true}) -export default class Messages extends React.Component{ - - render() { - - if(this.props.messages.size <= 0){ - return null; - } - - return ( -
      - {this.props.messages.map((message, i) => { - return {message}; - })} -
    - ); - } -} diff --git a/client/js/components/common/messages.spec.js b/client/js/components/common/messages.spec.js deleted file mode 100644 index b3860c3..0000000 --- a/client/js/components/common/messages.spec.js +++ /dev/null @@ -1,30 +0,0 @@ -import Immutable from "immutable"; -import React from "react"; -import ReactDOM from "react-dom"; -import TestUtils from "react/lib/ReactTestUtils"; - -import Helper from "../../../specs_support/helper"; -import Messages from "./messages"; - - -describe('messages', () => { - - describe('empty state', () => { - it('renders nothing', () => { - const store = Helper.mockStore({ messages: Immutable.fromJS([]) }); - const result = TestUtils.renderIntoDocument(); - expect(ReactDOM.findDOMNode(result)).toBe(null); - }); - }); - - describe('messages exist', () => { - it('renders a list of messages', () => { - const message = "A test message"; - const store = Helper.mockStore({ messages: Immutable.fromJS([message]) }); - const result = TestUtils.renderIntoDocument(); - expect(ReactDOM.findDOMNode(result).textContent).toContain(message); - }); - - }); - -}); From d859498f2cb968ecefb413663733804f62fe8a84 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jul 2016 15:15:25 -0600 Subject: [PATCH 187/452] Whitespace and semicolons --- client/js/components/layout/index.jsx | 4 ++-- client/js/constants/wrapper.js | 4 ++-- client/js/history.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/js/components/layout/index.jsx b/client/js/components/layout/index.jsx index 641c7d6..50b0e88 100644 --- a/client/js/components/layout/index.jsx +++ b/client/js/components/layout/index.jsx @@ -5,12 +5,12 @@ import { connect } from "react-redux"; @connect((state) => (state), null, null, {withRef: true}) class Index extends React.Component { - + constructor(){ super(); this.state = {}; } - + render(){ return
    {this.props.children} diff --git a/client/js/constants/wrapper.js b/client/js/constants/wrapper.js index a567365..2b9fb5a 100644 --- a/client/js/constants/wrapper.js +++ b/client/js/constants/wrapper.js @@ -8,13 +8,13 @@ export default function(actionTypes, asyncActionTypes){ var types = _.reduce(actionTypes, (result, key) => { result[key] = key; - return result + return result; }, {}); types = _.reduce(asyncActionTypes, (result, key) => { result[key] = key; result[`${key}${DONE}`] = `${key}${DONE}`; - return result + return result; }, types); types.DONE = DONE; diff --git a/client/js/history.js b/client/js/history.js index 6bbb908..2953d5f 100644 --- a/client/js/history.js +++ b/client/js/history.js @@ -1,6 +1,6 @@ import { hashHistory } from 'react-router'; -// Uncomment these lines if you would like to remove +// Uncomment these lines if you would like to remove // the query key from your uri's when using hash history. // import { Router, useRouterHistory } from 'react-router'; From e52989da2ac8c8d710069900c554cd0c83e25261 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jul 2016 16:21:43 -0600 Subject: [PATCH 188/452] Refactored not found --- client/js/components/common/not_found.jsx | 14 ++++++++++++++ client/js/components/common/not_found.spec.js | 11 +++++++++++ client/js/routes.jsx | 12 +++--------- 3 files changed, 28 insertions(+), 9 deletions(-) create mode 100644 client/js/components/common/not_found.jsx create mode 100644 client/js/components/common/not_found.spec.js diff --git a/client/js/components/common/not_found.jsx b/client/js/components/common/not_found.jsx new file mode 100644 index 0000000..dd147d5 --- /dev/null +++ b/client/js/components/common/not_found.jsx @@ -0,0 +1,14 @@ +"use strict"; + +import React from 'react'; + +export default (props) => { + + return ( +
    +

    Page Not Found

    +

    Sorry, but the page you were trying to view does not exist.

    +
    + ); + +}; \ No newline at end of file diff --git a/client/js/components/common/not_found.spec.js b/client/js/components/common/not_found.spec.js new file mode 100644 index 0000000..8edfb22 --- /dev/null +++ b/client/js/components/common/not_found.spec.js @@ -0,0 +1,11 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import TestUtils from 'react/lib/ReactTestUtils'; +import NotFound from './not_found'; + +describe('not found', () => { + it('renders a "not found" message', () => { + let result = TestUtils.renderIntoDocument(
    ); + expect(ReactDOM.findDOMNode(result).textContent).toContain("Page Not Found"); + }); +}); \ No newline at end of file diff --git a/client/js/routes.jsx b/client/js/routes.jsx index f3ecc14..46fefe9 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -2,17 +2,11 @@ import React from 'react'; // if you use jsx, you have to have React imported import { Router, Route, IndexRoute } from 'react-router'; + +import appHistory from './history'; import Index from './components/layout/index'; import Home from './components/home'; -import appHistory from './history'; - -// @todo: replace this with a `real` component or template -const NotFound = () => ( -
    -

    Page Not Found

    -

    Sorry, but the page you were trying to view does not exist.

    -
    -); +import NotFound from './components/common/not_found'; export default ( From d4e432f39e430b7910303e9aa204bb5a3bc3bfd9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jul 2016 16:27:29 -0600 Subject: [PATCH 189/452] Removes messages reducer and actions --- client/js/actions/message.js | 35 -------- client/js/reducers/index.js | 4 +- client/js/reducers/messages.js | 42 --------- client/js/reducers/messages.spec.js | 129 ---------------------------- 4 files changed, 1 insertion(+), 209 deletions(-) delete mode 100644 client/js/actions/message.js delete mode 100644 client/js/reducers/messages.js delete mode 100644 client/js/reducers/messages.spec.js diff --git a/client/js/actions/message.js b/client/js/actions/message.js deleted file mode 100644 index 24a17d6..0000000 --- a/client/js/actions/message.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -import wrapper from "../constants/wrapper"; - -// Local actions -const actions = []; - -// Actions that make an api request -const requests = [ - "ADD_MESSAGE", - "REMOVE_MESSAGE", - "CLEAR_MESSAGES" -]; - -export const Constants = wrapper(actions, requests); - -export function addMessage(message){ - return { - type: Constants.ADD_MESSAGE, - data: message - }; -} - -export function removeMessage(message){ - return { - type: Constants.REMOVE_MESSAGE, - data: message - }; -} - -export function clearMessages(){ - return { - type: Constants.CLEAR_MESSAGES - }; -} \ No newline at end of file diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index d3d5658..4cea288 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,14 +1,12 @@ import { combineReducers } from 'redux'; import settings from './settings'; import application from './application'; -import messages from './messages'; import jwt from './jwt'; const rootReducer = combineReducers({ settings, jwt, - application, - messages + application }); export default rootReducer; \ No newline at end of file diff --git a/client/js/reducers/messages.js b/client/js/reducers/messages.js deleted file mode 100644 index ee6e200..0000000 --- a/client/js/reducers/messages.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; - -import Immutable from "immutable"; - -import { Constants as MessageConstants } from "../actions/message"; -import ErrorTypes from "../constants/error"; - -const initialState = Immutable.fromJS([]); - -export default (state = initialState, action) => { - - switch(action.type){ - - case ErrorTypes.TIMEOUT: - return state.push(`Request timed out. Response was: ${action.payload.message}`); - break; - - case ErrorTypes.NOT_AUTHORIZED: - return state.push(`Request not authorized: ${action.payload.message}`); - break; - - case ErrorTypes.ERROR: - return state.push(`Request error: ${action.payload.message}`); - break; - - case MessageConstants.ADD_MESSAGE: - return state.push(action.payload.message); - break; - - case MessageConstants.REMOVE_MESSAGE: - return state.filter((message) => message != action.payload.message); - break; - - case MessageConstants.CLEAR_MESSAGES: - return initialState; - break; - - default: - return state; - - } -}; diff --git a/client/js/reducers/messages.spec.js b/client/js/reducers/messages.spec.js deleted file mode 100644 index 67e9fbc..0000000 --- a/client/js/reducers/messages.spec.js +++ /dev/null @@ -1,129 +0,0 @@ -"use strict"; - -import _ from "lodash"; -import Immutable from "immutable"; - -import { Constants as MessageConstants } from "../actions/message"; -import ErrorTypes from "../constants/error"; -import messages from "./messages"; - -describe("message reducer", () => { - - describe("initial state", () => { - - it("has no messages", () => { - const state = messages(undefined, {}); - expect(state.toJS()).toEqual([]); - }); - - }); - - describe("TIMEOUT", () => { - - it("adds a timeout message", () => { - const initialState = Immutable.fromJS([]); - const state = messages(initialState, { - type: ErrorTypes.TIMEOUT, - payload: { - message: "No response" - } - }); - expect(_.includes(state.get(0),"Request timed out")).toBe(true); - }); - - }); - - describe("NOT_AUTHORIZED", () => { - - it("Adds a not authorized error", () => { - const initialState = Immutable.fromJS([]); - const state = messages(initialState, { - type: ErrorTypes.NOT_AUTHORIZED, - payload: { - message: "Not authorized" - } - }); - expect(_.includes(state.get(0),"Request not authorized")).toBe(true); - }); - - }); - - describe("ERROR", () => { - - it("Adds an error", () => { - const initialState = Immutable.fromJS([]); - const state = messages(initialState, { - type: ErrorTypes.ERROR, - payload: { - message: "Error" - } - }); - expect(_.includes(state.get(0),"Request error")).toBe(true); - }); - - }); - - describe("ADD_MESSAGE", () => { - - it("Adds a message", () => { - const initialState = Immutable.fromJS([]); - const action = { - type: MessageConstants.ADD_MESSAGE, - payload: { - message: "Things are great" - } - }; - const state = messages(initialState, action); - expect(_.includes(state.get(0),action.payload.message)).toBe(true); - }); - - }); - - - describe("REMOVE_MESSAGE", () => { - - it("Removes message", () => { - const action = { - type: MessageConstants.ADD_MESSAGE, - payload: { - message: "Things are great" - } - }; - const removeAction = { - type: MessageConstants.REMOVE_MESSAGE, - payload: { - message: "Things are great" - } - }; - const initialState = Immutable.fromJS([action.payload.message]); - const state = messages(initialState, action); - expect(_.includes(state.get(0),action.payload.message)).toBe(true); - const newState = messages(state, removeAction); - expect(newState.toJS()).toEqual([]); - }); - - }); - - describe("CLEAR_MESSAGES", () => { - - it("Removes message", () => { - const action = { - type: MessageConstants.ADD_MESSAGE, - payload: { - message: "Things are great" - } - }; - const removeAction = { - type: MessageConstants.CLEAR_MESSAGES - }; - const initialState = Immutable.fromJS([action.payload.message]); - const state = messages(initialState, action); - expect(_.includes(state.get(0),action.payload.message)).toBe(true); - const newState = messages(state, removeAction); - expect(newState.toJS()).toEqual([]); - }); - - }); - - -}); From 6c2ea26263530fc7b1ca4af6557525309d8f685e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jul 2016 16:27:44 -0600 Subject: [PATCH 190/452] Don't use immutable. --- client/js/reducers/application.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/client/js/reducers/application.js b/client/js/reducers/application.js index 9ff283a..266a0a4 100644 --- a/client/js/reducers/application.js +++ b/client/js/reducers/application.js @@ -1,14 +1,12 @@ "use strict"; -import Immutable from 'immutable'; - -const initialState = Immutable.fromJS([]); +const initialState = {}; export default (state = initialState, action) => { - + switch(action.type){ default: return state; - } + } }; From 54747110f92cf4119065565330f248f83bae62a6 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Jul 2016 16:27:52 -0600 Subject: [PATCH 191/452] Adds missing spec --- client/js/reducers/application.spec.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 client/js/reducers/application.spec.js diff --git a/client/js/reducers/application.spec.js b/client/js/reducers/application.spec.js new file mode 100644 index 0000000..b9cf9ef --- /dev/null +++ b/client/js/reducers/application.spec.js @@ -0,0 +1,15 @@ +import application from "./application"; + +describe('application reducer', () => { + + describe("initial state", () => { + + it("returns empty state", () => { + const initialState = {}; + const state = application(initialState, {}); + expect(state).toEqual({}); + }); + + }); + +}); From 580ed8e2754b320098e4e0a74f98f938206cf364 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 7 Jul 2016 13:29:05 -0600 Subject: [PATCH 192/452] Adds optional headers to api.js --- client/js/libs/api.js | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/client/js/libs/api.js b/client/js/libs/api.js index 6fd025b..a619b1a 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -1,31 +1,32 @@ "use strict"; +import _ from "lodash"; import Request from "superagent"; + import NetworkConstants from "../constants/network"; -import _ from "lodash"; var _pendingRequests = {}; var _cache = {}; export default class Api{ - static get(url, apiUrl, jwt, csrf, params){ - return Api.execRequest(NetworkConstants.GET, url, apiUrl, jwt, csrf, params, null); + static get(url, apiUrl, jwt, csrf, params, headers){ + return Api.execRequest(NetworkConstants.GET, url, apiUrl, jwt, csrf, params, null, headers); } - static post(url, apiUrl, jwt, csrf, params, body){ - return Api.execRequest(NetworkConstants.POST, url, apiUrl, jwt, csrf, params, body); + static post(url, apiUrl, jwt, csrf, params, body, headers){ + return Api.execRequest(NetworkConstants.POST, url, apiUrl, jwt, csrf, params, body, headers); } - static put(url, apiUrl, jwt, csrf, params, body){ - return Api.execRequest(NetworkConstants.PUT, url, apiUrl, jwt, csrf, params, body); + static put(url, apiUrl, jwt, csrf, params, body, headers){ + return Api.execRequest(NetworkConstants.PUT, url, apiUrl, jwt, csrf, params, body, headers); } - static del(url, apiUrl, jwt, csrf, params){ - return Api.execRequest(NetworkConstants.DEL, url, apiUrl, jwt, csrf, params, null); + static del(url, apiUrl, jwt, csrf, params, headers){ + return Api.execRequest(NetworkConstants.DEL, url, apiUrl, jwt, csrf, params, null, headers); } - static execRequest(method, url, apiUrl, jwt, csrf, params, body){ + static execRequest(method, url, apiUrl, jwt, csrf, params, body, headers){ return Api._doRequest(Api._makeUrl(`${url}${Api.queryStringFrom(params)}`, apiUrl), (fullUrl) => { var request; @@ -48,10 +49,21 @@ export default class Api{ .timeout(NetworkConstants.TIMEOUT) .set('Authorization', 'Bearer ' + jwt) .set('X-CSRF-Token', csrf); + + if(!_.isUndefined(headers)){ + _.each(headers, (headerValue, headerKey) => { + request.set(headerKey, headerValue); + }); + } + return request; }, method); } + /** + * Returns a complete, absolute URL by conditionally appending `path` to + * `apiUrl`. If `path` already contains "http", it is returned as-is. + */ static _makeUrl(part, apiUrl){ if(part.indexOf("http") >= 0){ return part; @@ -193,5 +205,3 @@ export default class Api{ // return request; // } // } - - From 680eb163c79e688fb3b1c8f9a57523a977646c8a Mon Sep 17 00:00:00 2001 From: David Owen Date: Fri, 8 Jul 2016 08:18:20 -0600 Subject: [PATCH 193/452] Removed the last traces of Immutable --- client/js/store/configure_store.spec.js | 2 -- client/specs_support/helper.js | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js index e024622..94cc046 100644 --- a/client/js/store/configure_store.spec.js +++ b/client/js/store/configure_store.spec.js @@ -1,5 +1,3 @@ -import Immutable from 'immutable'; - import configureStore from "./configure_store"; describe('configure store', function() { diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index df804dc..c5cd938 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -1,7 +1,6 @@ "use strict"; import _ from "lodash"; -import Immutable from 'immutable'; import configureStore from "../js/store/configure_store"; @@ -27,7 +26,7 @@ export default class Helper{ }, settings); return configureStore({ - settings: Immutable.fromJS(initialSettings) + settings: initialSettings }); } From 6cb218cff44b9bbb318069529524798e3490e121 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 14 Jul 2016 16:58:13 -0600 Subject: [PATCH 194/452] Updated nam packages. --- client/package.json | 72 ++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/client/package.json b/client/package.json index 23ec590..0699f5f 100644 --- a/client/package.json +++ b/client/package.json @@ -21,66 +21,66 @@ "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { "babel": "6.5.2", - "babel-polyfill": "^6.7.4", - "babel-runtime": "^6.6.1", + "babel-polyfill": "^6.9.1", + "babel-runtime": "^6.9.2", "es6-promise": "^3.2.1", - "front-matter": "^2.0.7", "lodash": "4.13.1", - "react": "15.1.0", - "react-dom": "15.1.0", + "react": "15.2.1", + "react-dom": "15.2.1", "react-proxy-loader": "0.3.4", "react-redux": "4.4.5", - "react-router": "2.4.1", + "react-router": "2.5.2", "react-tap-event-plugin": "1.0.0", "redux": "3.5.2", - "superagent": "2.0.0", + "superagent": "2.1.0", "uuid": "2.0.2" }, "devDependencies": { "autoprefixer-loader": "3.2.0", - "babel-core": "^6.7.7", - "babel-eslint": "^6.0.4", + "babel-core": "^6.10.4", + "babel-eslint": "^6.1.2", "babel-loader": "^6.2.4", "babel-plugin-react-transform": "^2.0.2", - "babel-plugin-transform-class-properties": "^6.6.0", + "babel-plugin-transform-class-properties": "^6.10.2", "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-react-constant-elements": "^6.5.0", - "babel-plugin-transform-react-inline-elements": "^6.6.5", - "babel-plugin-transform-react-remove-prop-types": "^0.2.6", - "babel-plugin-transform-runtime": "^6.7.5", - "babel-preset-es2015": "^6.6.0", - "babel-preset-react": "^6.5.0", + "babel-plugin-transform-react-constant-elements": "^6.9.1", + "babel-plugin-transform-react-inline-elements": "^6.8.0", + "babel-plugin-transform-react-remove-prop-types": "^0.2.7", + "babel-plugin-transform-runtime": "^6.9.0", + "babel-preset-es2015": "^6.9.0", + "babel-preset-react": "^6.11.1", "babel-preset-react-hmre": "^1.1.1", "babel-preset-stage-0": "^6.5.0", "chunk-manifest-webpack-plugin": "0.1.0", - "coveralls": "2.11.9", + "coveralls": "2.11.11", "css-loader": "0.23.1", "dotenv": "2.0.0", "ecstatic": "1.4.1", - "ejs": "^2.4.1", - "eslint": "^2.8.0", - "eslint-plugin-babel": "^3.2.0", - "eslint-plugin-react": "^5.0.1", - "event-stream": "3.3.2", + "ejs": "^2.4.2", + "eslint": "^3.0.1", + "eslint-plugin-babel": "^3.3.0", + "eslint-plugin-react": "^5.2.2", + "event-stream": "3.3.3", "eventsource-polyfill": "^0.9.6", - "express": "^4.13.4", + "express": "^4.14.0", "extract-text-webpack-plugin": "1.0.1", - "file-loader": "0.8.5", + "file-loader": "0.9.0", + "front-matter": "^2.1.0", "fs-extra": "^0.30.0", - "html-minifier": "2.1.3", + "html-minifier": "3.0.1", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", - "istanbul": "0.4.3", + "istanbul": "0.4.4", "istanbul-instrumenter-loader": "0.2.0", "jasmine-core": "2.4.1", - "karma": "0.13.22", + "karma": "1.1.1", "karma-chrome-launcher": "1.0.1", - "karma-cli": "1.0.0", - "karma-coverage": "1.0.0", + "karma-cli": "1.0.1", + "karma-coverage": "1.1.0", "karma-firefox-launcher": "1.0.0", "karma-jasmine": "1.0.2", "karma-jasmine-ajax": "0.1.13", - "karma-phantomjs-launcher": "1.0.0", + "karma-phantomjs-launcher": "1.0.1", "karma-sourcemap-loader": "0.3.7", "karma-spec-reporter": "0.0.26", "karma-webpack": "1.7.0", @@ -88,25 +88,25 @@ "less-loader": "2.2.3", "marked": "^0.3.5", "minimist": "1.2.0", - "node-sass": "3.7.0", + "node-sass": "3.8.0", "node-watch": "^0.3.5", "npm-shrinkwrap": "200.5.1", "null-loader": "0.1.1", "path": "^0.12.7", "phantomjs-prebuilt": "^2.1.7", - "protractor": "3.3.0", - "psi": "2.0.3", + "protractor": "4.0.0", + "psi": "2.0.4", "react-hot-loader": "1.3.0", "react-transform-catch-errors": "^1.0.2", - "redbox-react": "^1.2.3", + "redbox-react": "^1.2.10", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.0.11", - "sass-loader": "3.2.0", + "sass-loader": "4.0.0", "style-loader": "0.13.1", "url-loader": "0.5.7", "webpack": "1.13.1", "webpack-dev-middleware": "^1.6.1", - "webpack-hot-middleware": "^2.10.0" + "webpack-hot-middleware": "^2.12.1" } } From 54404a4923f2b96abae31fb7715562c395d17a87 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 15 Jul 2016 15:44:07 -0600 Subject: [PATCH 195/452] Adds static direcctory for copying files into build without renamees --- README.md | 27 +++++++++++++++++++++++++++ client/config/settings.js | 2 ++ client/tools/build/index.js | 16 +++++++++++++--- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5794187..b7a474d 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,33 @@ React code can be found in client/js. We use Redux and the React-Router. All html files live in client/html. The build process will properly process ejs in any html files as well as process markdown for files that end in .md. All front matter in .md files will be available to the ejs templates. See about.md for an example. +## Assets +----------- +Any files added to the assets directory can be used by in code and assigned to a variable. This +allows for referring to assets using dynamically generated strings. The assets will be built according to +the rules specified in your webpack configuration. Typically, this means that in production the names will +be changed to include a SHA. + +First importing the assets: + `import assets from '../libs/assets';` + +Then assign the assest to a variable: + `const img = assets("./images/atomicjolt.jpg");` + +The value can then be used when rendering: + `render(){ + const img = assets("./images/atomicjolt.jpg"); + return
    + +
    ; + }` + + +## Static +----------- +Files added to the static directory will be copied directly into the build. These files will not be renamed. + + #Tests ----------- Karma and Jasmine are used for testing. To run tests run: diff --git a/client/config/settings.js b/client/config/settings.js index 1a8422b..9bb9fa7 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -35,6 +35,8 @@ module.exports = { buildSuffix: '_bundle.js', + staticDir: clientAppPath + 'static', + entries: { app: clientAppPath + 'js/app.jsx' }, diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 32d5d64..4fc9245 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -1,6 +1,6 @@ var path = require("path"); var _ = require("lodash"); -var fs = require("fs"); +var fs = require("fs-extra"); var webpack = require("webpack"); var nodeWatch = require("node-watch"); var del = require("del"); @@ -107,8 +107,18 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage // ----------------------------------------------------------------------------- function build(isHot){ return new Promise(function(resolve, reject){ - console.log("Building files in: " + inputPath); - del(outputPath, {force: true}).then(function(){ // Delete everything in the output path + + // Delete everything in the output path + del(outputPath, {force: true}).then(function(){ + + // Copy static files to build directory + if(settings.staticDir){ + console.log("Copying static files in " + settings.staticDir); + fs.copySync(settings.staticDir, outputPath); + } + + // Build files + console.log("Building files in: " + inputPath); buildWebpackEntries(isHot).then(function(packResults){ var pages = buildContents(inputPath, outputPath, packResults.webpackConfig, packResults.webpackStats, stage, options); From 3bfd684ec00477bb218a54733b65e1d7d4581023 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 15 Jul 2016 15:56:10 -0600 Subject: [PATCH 196/452] Adds check for dir --- client/tools/build/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 4fc9245..50cc63a 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -112,10 +112,14 @@ function build(isHot){ del(outputPath, {force: true}).then(function(){ // Copy static files to build directory - if(settings.staticDir){ + try { + var stats = fs.statSync(settings.staticDir); console.log("Copying static files in " + settings.staticDir); fs.copySync(settings.staticDir, outputPath); } + catch(err) { + // No static dir. Do nothing + } // Build files console.log("Building files in: " + inputPath); From 06fc1b1180c91d1ee948fbe8706e9fe22761ed7c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 8 Sep 2016 14:03:33 -0600 Subject: [PATCH 197/452] Removes react-inline-elements transform. It messes up IE --- client/config/webpack.config.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index cb2b41e..8507502 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -30,11 +30,10 @@ module.exports = function(stage){ ',presets[]=es2015' + // Include all plugins needed to handle es2015 syntax ',presets[]=stage-0'; // Enables experimental ES features. - if(stage == "development"){ + if(development){ presets = presets + ',presets[]=react-hmre'; // Adds react hot module reload } else if (production) { plugins = plugins + ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement - plugins = plugins + ',plugins[]=transform-react-inline-elements'; // Replaces the React.createElement function with a more optimized one for production plugins = plugins + ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code } From df463472c4242106f009aa7d564f283db2f4d49f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 15 Sep 2016 09:05:45 -0600 Subject: [PATCH 198/452] Remove immutable from test helper --- client/js/store/configure_store.spec.js | 2 -- client/specs_support/helper.js | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js index e024622..94cc046 100644 --- a/client/js/store/configure_store.spec.js +++ b/client/js/store/configure_store.spec.js @@ -1,5 +1,3 @@ -import Immutable from 'immutable'; - import configureStore from "./configure_store"; describe('configure store', function() { diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index df804dc..c5cd938 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -1,7 +1,6 @@ "use strict"; import _ from "lodash"; -import Immutable from 'immutable'; import configureStore from "../js/store/configure_store"; @@ -27,7 +26,7 @@ export default class Helper{ }, settings); return configureStore({ - settings: Immutable.fromJS(initialSettings) + settings: initialSettings }); } From 2d3fabc99058ecd9fcbfba3754774eab7db496db Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 6 Oct 2016 09:48:46 -0600 Subject: [PATCH 199/452] Use emptydir instead of del --- client/tools/build/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 50cc63a..8bc4171 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -3,7 +3,6 @@ var _ = require("lodash"); var fs = require("fs-extra"); var webpack = require("webpack"); var nodeWatch = require("node-watch"); -var del = require("del"); var file = require("./file"); var buildContent = require("./content"); @@ -109,7 +108,7 @@ function build(isHot){ return new Promise(function(resolve, reject){ // Delete everything in the output path - del(outputPath, {force: true}).then(function(){ + fs.emptydir(outputPath), function(){ // Copy static files to build directory try { From 5935b074b50bbcdacbcbc49c6fcaa1a3dd14b494 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 7 Oct 2016 11:44:46 -0600 Subject: [PATCH 200/452] updated node packages --- client/package.json | 58 ++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/client/package.json b/client/package.json index 0699f5f..9e114e1 100644 --- a/client/package.json +++ b/client/package.json @@ -23,22 +23,22 @@ "babel": "6.5.2", "babel-polyfill": "^6.9.1", "babel-runtime": "^6.9.2", - "es6-promise": "^3.2.1", - "lodash": "4.13.1", - "react": "15.2.1", - "react-dom": "15.2.1", + "es6-promise": "^4.0.5", + "lodash": "4.16.4", + "react": "15.3.2", + "react-dom": "15.3.2", "react-proxy-loader": "0.3.4", "react-redux": "4.4.5", - "react-router": "2.5.2", + "react-router": "2.8.1", "react-tap-event-plugin": "1.0.0", - "redux": "3.5.2", - "superagent": "2.1.0", - "uuid": "2.0.2" + "redux": "3.6.0", + "superagent": "2.3.0", + "uuid": "2.0.3" }, "devDependencies": { "autoprefixer-loader": "3.2.0", "babel-core": "^6.10.4", - "babel-eslint": "^6.1.2", + "babel-eslint": "^7.0.0", "babel-loader": "^6.2.4", "babel-plugin-react-transform": "^2.0.2", "babel-plugin-transform-class-properties": "^6.10.2", @@ -52,60 +52,60 @@ "babel-preset-react-hmre": "^1.1.1", "babel-preset-stage-0": "^6.5.0", "chunk-manifest-webpack-plugin": "0.1.0", - "coveralls": "2.11.11", - "css-loader": "0.23.1", + "coveralls": "2.11.14", + "css-loader": "0.25.0", "dotenv": "2.0.0", - "ecstatic": "1.4.1", + "ecstatic": "2.1.0", "ejs": "^2.4.2", "eslint": "^3.0.1", "eslint-plugin-babel": "^3.3.0", - "eslint-plugin-react": "^5.2.2", - "event-stream": "3.3.3", + "eslint-plugin-react": "^6.3.0", + "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.14.0", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.9.0", "front-matter": "^2.1.0", "fs-extra": "^0.30.0", - "html-minifier": "3.0.1", + "html-minifier": "3.1.0", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", - "istanbul": "0.4.4", - "istanbul-instrumenter-loader": "0.2.0", - "jasmine-core": "2.4.1", - "karma": "1.1.1", - "karma-chrome-launcher": "1.0.1", + "istanbul": "0.4.5", + "istanbul-instrumenter-loader": "1.0.0", + "jasmine-core": "2.5.2", + "karma": "1.3.0", + "karma-chrome-launcher": "2.0.0", "karma-cli": "1.0.1", - "karma-coverage": "1.1.0", + "karma-coverage": "1.1.1", "karma-firefox-launcher": "1.0.0", "karma-jasmine": "1.0.2", "karma-jasmine-ajax": "0.1.13", - "karma-phantomjs-launcher": "1.0.1", + "karma-phantomjs-launcher": "1.0.2", "karma-sourcemap-loader": "0.3.7", "karma-spec-reporter": "0.0.26", - "karma-webpack": "1.7.0", + "karma-webpack": "1.8.0", "less": "2.7.1", "less-loader": "2.2.3", "marked": "^0.3.5", "minimist": "1.2.0", - "node-sass": "3.8.0", - "node-watch": "^0.3.5", + "node-sass": "3.10.1", + "node-watch": "^0.4.0", "npm-shrinkwrap": "200.5.1", "null-loader": "0.1.1", "path": "^0.12.7", "phantomjs-prebuilt": "^2.1.7", - "protractor": "4.0.0", + "protractor": "4.0.9", "psi": "2.0.4", - "react-hot-loader": "1.3.0", + "react-hot-loader": "3.0.0-beta.5", "react-transform-catch-errors": "^1.0.2", "redbox-react": "^1.2.10", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.0.11", - "sass-loader": "4.0.0", + "sass-loader": "4.0.2", "style-loader": "0.13.1", "url-loader": "0.5.7", - "webpack": "1.13.1", + "webpack": "1.13.2", "webpack-dev-middleware": "^1.6.1", "webpack-hot-middleware": "^2.12.1" } From 6ea087aec035ca154ebd8aae445895b16db63858 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Oct 2016 19:09:04 -0600 Subject: [PATCH 201/452] Adds yarn lock file --- yarn.lock | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..72405fe --- /dev/null +++ b/yarn.lock @@ -0,0 +1,144 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +del@^2.2.0: + 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" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +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" + +inflight@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.5.tgz#db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +minimatch@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +object-assign@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +rimraf@^2.2.8: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + dependencies: + glob "^7.0.5" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + From 97c15a5b33b0777c0ebb931ee8bfe23a31cf098d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Oct 2016 19:17:28 -0600 Subject: [PATCH 202/452] Fix build script --- client/tools/build/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 8bc4171..580529f 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -108,7 +108,7 @@ function build(isHot){ return new Promise(function(resolve, reject){ // Delete everything in the output path - fs.emptydir(outputPath), function(){ + fs.emptydir(outputPath, function(){ // Copy static files to build directory try { From 48e314fee95a6cdaa3923cf1d2625cfcc7f07a46 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Oct 2016 19:17:40 -0600 Subject: [PATCH 203/452] Adds lock file to client dir --- client/yarn.lock | 7489 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 7489 insertions(+) create mode 100644 client/yarn.lock diff --git a/client/yarn.lock b/client/yarn.lock new file mode 100644 index 0000000..cd40d8a --- /dev/null +++ b/client/yarn.lock @@ -0,0 +1,7489 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 +"@types/jasmine@^2.2.31": + version "2.5.35" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.35.tgz#5566406dc8417d380d6c2f9562ec3c71ec28ef78" + +"@types/node@^6.0.35": + version "6.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.45.tgz#c4842a9d653d767831e4ff495b6008cc0d579966" + +"@types/q@^0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.30.tgz#fd7ee1af40f21cdd1f519268073b3432ec17d7a3" + +"@types/selenium-webdriver@~2.53.30": + version "2.53.33" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.33.tgz#64672bae3acedf9d9e6bcfa8bdb7c37497751c3d" + +abbrev@~1.0.9, abbrev@1, abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +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.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.1.4.tgz#d71c96f7d41d0feda2c38cd14e8a27c04158df4a" + dependencies: + mime-types "~2.0.4" + negotiator "0.4.9" + +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: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.1, acorn@4.X: + version "4.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1" + +adm-zip@^0.4.7, adm-zip@0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" + +adm-zip@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" + +after@0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" + +agent-base@2: + version "2.0.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" + dependencies: + extend "~3.0.0" + semver "~5.0.1" + +ajv-keywords@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.1.1.tgz#02550bc605a3e576041565628af972e06c549d50" + +ajv@^4.7.0: + version "4.7.7" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.7.7.tgz#4980d5f65ce90a2579532eec66429f320dea0321" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +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.0" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33" + +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.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.5.tgz#0dcaa5a081206866bc240a3b773a184ea3b88b64" + +ansi-regex@*, ansi-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" + +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@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + +ansi@^0.3.0, ansi@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + +ansicolors@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + +ansistyles@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +aproba@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + +archive-type@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-3.2.0.tgz#9cd9c006957ebe95fadad5bd6098942a813737f6" + dependencies: + file-type "^3.1.0" + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + +are-we-there-yet@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.0 || ^1.1.13" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +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-find@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-0.1.1.tgz#dc813845ad5a9afc35cb92b786c878d81b5b82ce" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-index@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" + dependencies: + debug "^2.2.0" + es6-symbol "^3.0.2" + +array-slice@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1, array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +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: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@^2.0.0, asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +asn1@0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + +assert-plus@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +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-some@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/async-some/-/async-some-1.0.2.tgz#4d8a81620d5958791b5b98f802d3207776e95509" + dependencies: + dezalgo "^1.0.2" + +async@^0.9.0, 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.4.0, async@^1.5.0, async@^1.5.2, async@~1.5.2, async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.0.1.tgz#b709cc0280a9c36f09f4536be823c838a9049e25" + dependencies: + lodash "^4.8.0" + +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +async@~1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.4.2.tgz#6c9edcb11ced4f0dd2f2d40db0d49a109c088aab" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" + +autoprefixer-loader@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/autoprefixer-loader/-/autoprefixer-loader-3.2.0.tgz#39a7b6646a8269865073d958c97f486152c2c84a" + dependencies: + autoprefixer "^6.0.2" + loader-utils "^0.2.11" + postcss "^5.0.4" + postcss-safe-parser "^1.0.1" + +autoprefixer@^6.0.2, autoprefixer@^6.3.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.5.0.tgz#910de0aa0f22af4c7d50367cbc9d4d412945162f" + dependencies: + browserslist "~1.4.0" + caniuse-db "^1.0.30000540" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.2" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + +babel-code-frame@^6.11.0, babel-code-frame@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^2.0.0" + +babel-core@^6.10.4, babel-core@^6.16.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.17.0.tgz#6c4576447df479e241e58c807e4bc7da4db7f425" + dependencies: + babel-code-frame "^6.16.0" + babel-generator "^6.17.0" + babel-helpers "^6.16.0" + babel-messages "^6.8.0" + babel-register "^6.16.0" + babel-runtime "^6.9.1" + babel-template "^6.16.0" + babel-traverse "^6.16.0" + babel-types "^6.16.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.4.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-exists "^1.0.0" + path-is-absolute "^1.0.0" + private "^0.1.6" + shebang-regex "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + +babel-eslint@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.0.0.tgz#54e51b4033f54ac81326ecea4c646a779935196d" + dependencies: + babel-traverse "^6.15.0" + babel-types "^6.15.0" + babylon "^6.11.2" + lodash.pickby "^4.6.0" + +babel-generator@^6.11.3, babel-generator@^6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.17.0.tgz#b894e3808beef7800f2550635bfe024b6226cf33" + dependencies: + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.16.0" + detect-indent "^3.0.1" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + +babel-helper-bindify-decorators@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.8.0.tgz#b34805a30b1433cc0042f7054f88a7133c144909" + dependencies: + babel-runtime "^6.0.0" + babel-traverse "^6.8.0" + babel-types "^6.8.0" + +babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.15.0.tgz#39e9ee143f797b642262e4646c681c32089ef1ab" + dependencies: + babel-helper-explode-assignable-expression "^6.8.0" + babel-runtime "^6.0.0" + babel-types "^6.15.0" + +babel-helper-builder-react-jsx@^6.8.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.9.0.tgz#a633978d669c4c9dcad716cc577ee3e0bb8ae723" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.9.0" + esutils "^2.0.0" + lodash "^4.2.0" + +babel-helper-call-delegate@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.8.0.tgz#9d283e7486779b6b0481864a11b371ea5c01fa64" + dependencies: + babel-helper-hoist-variables "^6.8.0" + babel-runtime "^6.0.0" + babel-traverse "^6.8.0" + babel-types "^6.8.0" + +babel-helper-define-map@^6.8.0, babel-helper-define-map@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.9.0.tgz#6629f9b2a7e58e18e8379a57d1e6fbb2969902fb" + dependencies: + babel-helper-function-name "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.9.0" + lodash "^4.2.0" + +babel-helper-explode-assignable-expression@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.8.0.tgz#9b3525e05b761c3b88919d730a28bad1967e6556" + dependencies: + babel-runtime "^6.0.0" + babel-traverse "^6.8.0" + babel-types "^6.8.0" + +babel-helper-explode-class@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.8.0.tgz#196a228cc69ea57308695e4ebd1a36cf3f8eca3d" + dependencies: + babel-helper-bindify-decorators "^6.8.0" + babel-runtime "^6.0.0" + babel-traverse "^6.8.0" + babel-types "^6.8.0" + +babel-helper-function-name@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.8.0.tgz#a0336ba14526a075cdf502fc52d3fe84b12f7a34" + dependencies: + babel-helper-get-function-arity "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + babel-traverse "^6.8.0" + babel-types "^6.8.0" + +babel-helper-get-function-arity@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.8.0.tgz#88276c24bd251cdf6f61b6f89f745f486ced92af" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-helper-hoist-variables@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.8.0.tgz#8b0766dc026ea9ea423bc2b34e665a4da7373aaf" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-helper-optimise-call-expression@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.8.0.tgz#4175628e9c89fc36174904f27070f29d38567f06" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-helper-regex@^6.8.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.9.0.tgz#c74265fde180ff9a16735fee05e63cadb9e0b057" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.9.0" + lodash "^4.2.0" + +babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2: + version "6.16.2" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.16.2.tgz#24315bde8326c60022dc053cce84cfe38d724b82" + dependencies: + babel-helper-function-name "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-traverse "^6.16.0" + babel-types "^6.16.0" + +babel-helper-replace-supers@^6.14.0, babel-helper-replace-supers@^6.8.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.16.0.tgz#21c97623cc7e430855753f252740122626a39e6b" + dependencies: + babel-helper-optimise-call-expression "^6.8.0" + babel-messages "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-traverse "^6.16.0" + babel-types "^6.16.0" + +babel-helpers@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3" + dependencies: + babel-runtime "^6.0.0" + babel-template "^6.16.0" + +babel-loader@^6.2.4: + version "6.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.5.tgz#576d548520689a5e6b70c65b85d76af1ffedd005" + dependencies: + loader-utils "^0.2.11" + mkdirp "^0.5.1" + object-assign "^4.0.1" + +babel-messages@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-check-es2015-constants@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-react-transform@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz#515bbfa996893981142d90b1f9b1635de2995109" + dependencies: + lodash "^4.6.1" + +babel-plugin-syntax-async-functions@^6.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-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.13.0.tgz#96fb2e9f177dca22824065de4392f2fe3486b765" + +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, babel-plugin-syntax-decorators@^6.13.0: + 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-do-expressions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +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.3.13, babel-plugin-syntax-flow@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.13.0.tgz#9af0cd396087bf7677053e1afa52f206c0416f17" + +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.13.0.tgz#e741ff3992c578310be45c571bcd90a2f9c5586e" + +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.3.13: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz#2b84b7d53dd744f94ff1fad7669406274b23f541" + +babel-plugin-transform-async-generator-functions@^6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54" + dependencies: + babel-helper-remap-async-to-generator "^6.16.2" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-async-to-generator@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" + dependencies: + babel-helper-remap-async-to-generator "^6.16.0" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-class-constructor-call@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.8.0.tgz#6e740bc80f16d295fa598d92518666020a906192" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-class-properties@^6.10.2, babel-plugin-transform-class-properties@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.16.0.tgz#969bca24d34e401d214f36b8af5c1346859bc904" + dependencies: + babel-helper-function-name "^6.8.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.9.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-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d" + dependencies: + babel-helper-define-map "^6.8.0" + babel-helper-explode-class "^6.8.0" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + babel-types "^6.13.0" + +babel-plugin-transform-do-expressions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.8.0.tgz#fda692af339835cc255bb7544efb8f7c1306c273" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-arrow-functions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-block-scoping@^6.14.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.15.0.tgz#5b443ca142be8d1db6a8c2ae42f51958b66b70f6" + dependencies: + babel-runtime "^6.9.0" + babel-template "^6.15.0" + babel-traverse "^6.15.0" + babel-types "^6.15.0" + lodash "^4.2.0" + +babel-plugin-transform-es2015-classes@^6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.14.0.tgz#87d5149ee91fb475922409f9af5b2ba5d1e39287" + dependencies: + babel-helper-define-map "^6.9.0" + babel-helper-function-name "^6.8.0" + babel-helper-optimise-call-expression "^6.8.0" + babel-helper-replace-supers "^6.14.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-template "^6.14.0" + babel-traverse "^6.14.0" + babel-types "^6.14.0" + +babel-plugin-transform-es2015-computed-properties@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870" + dependencies: + babel-helper-define-map "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-destructuring@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.16.0.tgz#050fe0866f5d53b36062ee10cdf5bfe64f929627" + dependencies: + babel-runtime "^6.9.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-plugin-transform-es2015-for-of@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.8.0.tgz#82eda139ba4270dda135c3ec1b1f2813fa62f23c" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-function-name@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719" + dependencies: + babel-helper-function-name "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.9.0" + +babel-plugin-transform-es2015-literals@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-modules-amd@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.8.0.tgz#25d954aa0bf04031fc46d2a8e6230bb1abbde4a3" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-modules-commonjs@^6.16.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.16.0.tgz#0a34b447bc88ad1a70988b6d199cca6d0b96c892" + dependencies: + babel-plugin-transform-strict-mode "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-types "^6.16.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.14.0.tgz#c519b5c73e32388e679c9b1edf41b2fc23dc3303" + dependencies: + babel-helper-hoist-variables "^6.8.0" + babel-runtime "^6.11.6" + babel-template "^6.14.0" + +babel-plugin-transform-es2015-modules-umd@^6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.12.0.tgz#5d73559eb49266775ed281c40be88a421bd371a3" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + +babel-plugin-transform-es2015-object-super@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5" + dependencies: + babel-helper-replace-supers "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-parameters@^6.16.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.17.0.tgz#e06d30cef897f46adb4734707bbe128a0d427d58" + dependencies: + babel-helper-call-delegate "^6.8.0" + babel-helper-get-function-arity "^6.8.0" + babel-runtime "^6.9.0" + babel-template "^6.16.0" + babel-traverse "^6.16.0" + babel-types "^6.16.0" + +babel-plugin-transform-es2015-shorthand-properties@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.8.0.tgz#f0a4c5fd471630acf333c2d99c3d677bf0952149" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-plugin-transform-es2015-spread@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-sticky-regex@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be" + dependencies: + babel-helper-regex "^6.8.0" + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-plugin-transform-es2015-template-literals@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.8.0.tgz#84c29eb1219372480955a020fef7a65c44f30533" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-es2015-unicode-regex@^6.3.13: + version "6.11.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c" + dependencies: + babel-helper-regex "^6.8.0" + babel-runtime "^6.0.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.8.0" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-export-extensions@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz#fa80ff655b636549431bfd38f6b817bd82e47f5b" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-flow-strip-types@^6.3.13: + version "6.14.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.14.0.tgz#35ceb03f8770934044bab1a76f7e4ee0aa9220f9" + dependencies: + babel-plugin-syntax-flow "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-function-bind@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.8.0.tgz#e7f334ce69f50d28fe850a822eaaab9fa4f4d821" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-object-rest-spread@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.16.0.tgz#db441d56fffc1999052fdebe2e2f25ebd28e36a9" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-react-constant-elements@^6.9.1: + version "6.9.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.9.1.tgz#125b86d96cb322e2139b607fd749ad5fbb17f005" + dependencies: + babel-runtime "^6.9.1" + +babel-plugin-transform-react-display-name@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-react-inline-elements@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.8.0.tgz#fc2d8fec1f2f87e5c4961ac367610039f325bbe6" + dependencies: + babel-runtime "^6.0.0" + +babel-plugin-transform-react-jsx-self@^6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.11.0.tgz#605c9450c1429f97a930f7e1dfe3f0d9d0dbd0f4" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.9.0" + +babel-plugin-transform-react-jsx-source@^6.3.13: + version "6.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.9.0.tgz#af684a05c2067a86e0957d4f343295ccf5dccf00" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.9.0" + +babel-plugin-transform-react-jsx@^6.3.13: + version "6.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.8.0.tgz#94759942f70af18c617189aa7f3593f1644a71ab" + dependencies: + babel-helper-builder-react-jsx "^6.8.0" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.0.0" + +babel-plugin-transform-react-remove-prop-types@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.9.tgz#6920f2675dcd9a41433d1d9d19ea28944baf2916" + +babel-plugin-transform-regenerator@^6.16.0: + version "6.16.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59" + dependencies: + babel-runtime "^6.9.0" + babel-types "^6.16.0" + private "~0.1.5" + +babel-plugin-transform-runtime@^6.5.0, babel-plugin-transform-runtime@^6.9.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" + dependencies: + babel-runtime "^6.9.0" + +babel-plugin-transform-strict-mode@^6.8.0: + version "6.11.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.11.3.tgz#183741325126bc7ec9cf4c0fc257d3e7ca5afd40" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.8.0" + +babel-polyfill@^6.9.1: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.16.0.tgz#2d45021df87e26a374b6d4d1a9c65964d17f2422" + dependencies: + babel-runtime "^6.9.1" + core-js "^2.4.0" + regenerator-runtime "^0.9.5" + +babel-preset-es2015@^6.9.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.16.0.tgz#59acecd1efbebaf48f89404840f2fe78c4d2ad5c" + dependencies: + babel-plugin-check-es2015-constants "^6.3.13" + babel-plugin-transform-es2015-arrow-functions "^6.3.13" + babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" + babel-plugin-transform-es2015-block-scoping "^6.14.0" + babel-plugin-transform-es2015-classes "^6.14.0" + babel-plugin-transform-es2015-computed-properties "^6.3.13" + babel-plugin-transform-es2015-destructuring "^6.16.0" + babel-plugin-transform-es2015-duplicate-keys "^6.6.0" + babel-plugin-transform-es2015-for-of "^6.6.0" + babel-plugin-transform-es2015-function-name "^6.9.0" + babel-plugin-transform-es2015-literals "^6.3.13" + babel-plugin-transform-es2015-modules-amd "^6.8.0" + babel-plugin-transform-es2015-modules-commonjs "^6.16.0" + babel-plugin-transform-es2015-modules-systemjs "^6.14.0" + babel-plugin-transform-es2015-modules-umd "^6.12.0" + babel-plugin-transform-es2015-object-super "^6.3.13" + babel-plugin-transform-es2015-parameters "^6.16.0" + babel-plugin-transform-es2015-shorthand-properties "^6.3.13" + babel-plugin-transform-es2015-spread "^6.3.13" + babel-plugin-transform-es2015-sticky-regex "^6.3.13" + babel-plugin-transform-es2015-template-literals "^6.6.0" + babel-plugin-transform-es2015-typeof-symbol "^6.6.0" + babel-plugin-transform-es2015-unicode-regex "^6.3.13" + babel-plugin-transform-regenerator "^6.16.0" + +babel-preset-react-hmre@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/babel-preset-react-hmre/-/babel-preset-react-hmre-1.1.1.tgz#d216e60cb5b8d4c873e19ed0f54eaff1437bc492" + dependencies: + babel-plugin-react-transform "^2.0.2" + react-transform-catch-errors "^1.0.2" + react-transform-hmr "^1.0.3" + redbox-react "^1.2.2" + +babel-preset-react@^6.11.1: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316" + dependencies: + babel-plugin-syntax-flow "^6.3.13" + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-flow-strip-types "^6.3.13" + babel-plugin-transform-react-display-name "^6.3.13" + babel-plugin-transform-react-jsx "^6.3.13" + babel-plugin-transform-react-jsx-self "^6.11.0" + babel-plugin-transform-react-jsx-source "^6.3.13" + +babel-preset-stage-0@^6.5.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.16.0.tgz#f5a263c420532fd57491f1a7315b3036e428f823" + dependencies: + babel-plugin-transform-do-expressions "^6.3.13" + babel-plugin-transform-function-bind "^6.3.13" + babel-preset-stage-1 "^6.16.0" + +babel-preset-stage-1@^6.16.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz#9d31fbbdae7b17c549fd3ac93e3cf6902695e479" + dependencies: + babel-plugin-transform-class-constructor-call "^6.3.13" + babel-plugin-transform-export-extensions "^6.3.13" + babel-preset-stage-2 "^6.16.0" + +babel-preset-stage-2@^6.16.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.17.0.tgz#dc4f84582781353cef36c41247eae5e36c4cae0d" + dependencies: + babel-plugin-transform-class-properties "^6.16.0" + babel-plugin-transform-decorators "^6.13.0" + babel-preset-stage-3 "^6.17.0" + +babel-preset-stage-3@^6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.3.13" + babel-plugin-transform-async-generator-functions "^6.17.0" + babel-plugin-transform-async-to-generator "^6.16.0" + babel-plugin-transform-exponentiation-operator "^6.3.13" + babel-plugin-transform-object-rest-spread "^6.16.0" + +babel-register@^6.16.0: + version "6.16.3" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.16.3.tgz#7b0c0ca7bfdeb9188ba4c27e5fcb7599a497c624" + dependencies: + babel-core "^6.16.0" + babel-runtime "^6.11.6" + core-js "^2.4.0" + home-or-tmp "^1.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + path-exists "^1.0.0" + source-map-support "^0.4.2" + +babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.3.13, babel-runtime@^6.9.0, babel-runtime@^6.9.1, babel-runtime@^6.9.2: + version "6.11.6" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.9.5" + +babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.7.0, babel-template@^6.8.0, babel-template@^6.9.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" + dependencies: + babel-runtime "^6.9.0" + babel-traverse "^6.16.0" + babel-types "^6.16.0" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.14.0, babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.8.0, babel-traverse@^6.9.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.16.0.tgz#fba85ae1fd4d107de9ce003149cc57f53bef0c4f" + dependencies: + babel-code-frame "^6.16.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.16.0" + babylon "^6.11.0" + debug "^2.2.0" + globals "^8.3.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.8.0, babel-types@^6.9.0: + version "6.16.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.16.0.tgz#71cca1dbe5337766225c5c193071e8ebcbcffcfe" + dependencies: + babel-runtime "^6.9.1" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babel@6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" + +babylon@^6.11.0, babylon@^6.11.2, babylon@^6.8.1: + version "6.11.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.11.4.tgz#75e1f52187efa0cde5a541a7f7fdda38f6eb5bd2" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +balanced-match@^0.4.1, 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@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + +base64-arraybuffer@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154" + +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + +base64-url@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.2.tgz#4b08113b49d23889f306be64372762d31412f7a8" + +Base64@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" + +base64id@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" + +base64url@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-0.0.6.tgz#9597b36b330db1c42477322ea87ea8027499b82b" + +base64url@~1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-1.0.6.tgz#d64d375d68a7c640d912e2358d170dca5bb54681" + dependencies: + concat-stream "~1.4.7" + meow "~2.0.0" + +bcrypt-pbkdf@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + dependencies: + tweetnacl "^0.14.3" + +beeper@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.0.tgz#9ee6fc1ce7f54feaace7ce73588b056037866a2c" + +benchmark@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-1.0.0.tgz#2f1e2fa4c359f11122aa183082218e957e390c73" + +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.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +binary-extensions@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d" + +bl@^1.0.0, bl@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" + dependencies: + readable-stream "~2.0.5" + +bl@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e" + dependencies: + readable-stream "~2.0.5" + +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + +block-stream@*, block-stream@0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^2.9.30: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + +bluebird@^3.3.0: + version "3.4.6" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f" + +body-parser@^1.12.4: + version "1.15.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67" + dependencies: + bytes "2.4.0" + content-type "~1.0.2" + debug "~2.2.0" + depd "~1.1.0" + http-errors "~1.5.0" + iconv-lite "0.4.13" + on-finished "~2.3.0" + qs "6.2.0" + raw-body "~2.1.7" + type-is "~1.6.13" + +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" + +boxen@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.3.1.tgz#a7d898243ae622f7abb6bb604d740a76c6a5461b" + dependencies: + chalk "^1.1.1" + filled-array "^1.0.0" + object-assign "^4.0.1" + repeating "^2.0.0" + string-width "^1.0.1" + widest-line "^1.0.0" + +brace-expansion@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^0.1.2: + version "0.1.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" + dependencies: + expand-range "^0.1.0" + +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" + +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" + +browserslist@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.4.0.tgz#9cfdcf5384d9158f5b70da2aa00b30e8ff019049" + dependencies: + caniuse-db "^1.0.30000539" + +buffer-crc32@~0.2.3: + version "0.2.5" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.5.tgz#db003ac2671e62ebd6ece78ea2c2e1b405736e91" + +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-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +buffer-to-vinyl@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz#00f15faee3ab7a1dda2cde6d9121bffdd07b2262" + dependencies: + file-type "^3.1.0" + readable-stream "^2.0.2" + uuid "^2.0.1" + vinyl "^1.0.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: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtins@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" + +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +camel-case@^3.0.0: + 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-1.0.0.tgz#bd1a11bf9b31a1ce493493a930de1a0baf4ad7ec" + dependencies: + camelcase "^1.0.1" + map-obj "^1.0.0" + +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.1, camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + 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" + +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + +caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000540: + version "1.0.30000553" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000553.tgz#e7e908f43b788e6ac78fc161fedc4626d6a39f24" + +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" + +cardinal@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.5.0.tgz#00d5f661dbd4aabfdf7d41ce48a5a59bca35a291" + dependencies: + ansicolors "~0.2.1" + redeyed "~0.5.0" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caw@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/caw/-/caw-1.2.0.tgz#ffb226fe7efc547288dc62ee3e97073c212d1034" + dependencies: + get-proxy "^1.0.1" + is-obj "^1.0.0" + object-assign "^3.0.0" + tunnel-agent "^0.4.0" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +change-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.0.tgz#6c9c8e35f8790870a82b6b0745be8c3cbef9b081" + dependencies: + camel-case "^3.0.0" + constant-case "^2.0.0" + dot-case "^2.1.0" + header-case "^1.0.0" + is-lower-case "^1.1.0" + is-upper-case "^1.1.0" + lower-case "^1.1.1" + lower-case-first "^1.0.0" + no-case "^2.2.0" + param-case "^2.1.0" + pascal-case "^2.0.0" + path-case "^2.1.0" + sentence-case "^2.1.0" + snake-case "^2.1.0" + swap-case "^1.1.0" + title-case "^2.1.0" + upper-case "^1.1.1" + upper-case-first "^1.1.0" + +char-spinner@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" + +chmodr@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" + +chokidar@^1.0.0, chokidar@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.0.tgz#90c32ad4802901d7713de532dc284e96a63ad058" + 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" + +chownr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +chunk-manifest-webpack-plugin@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-0.1.0.tgz#6138488fc21ddab4ccfb7c1c11d51bb80a943186" + dependencies: + webpack-core "^0.4.8" + +circular-json@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + +clap@^1.0.9: + version "1.1.1" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.1.tgz#a8a93e0bfb7581ac199c4f001a5525a724ce696d" + dependencies: + chalk "^1.1.3" + +clean-css@3.4.x: + version "3.4.20" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.20.tgz#c0d8963b5448e030f0bcd3ddd0dac4dfe3dea501" + dependencies: + commander "2.8.x" + source-map "0.4.x" + +cli-color@~0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" + dependencies: + es5-ext "0.8.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.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +cmd-shim@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + dependencies: + graceful-fs "^4.1.2" + mkdirp "~0.5.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +co@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" + +coa@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb" + dependencies: + number-is-nan "^1.0.0" + +color-convert@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.5.0.tgz#7a2b4efb4488df85bca6443cb038b7100fbe7de1" + +color-name@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + +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.3" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.3.tgz#4bad1d0d52499dd00dbd6f0868442467e49394e6" + 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.1.0, colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +colors@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + +columnify@~1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + dependencies: + strip-ansi "^3.0.0" + wcwidth "^1.0.0" + +combine-lists@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" + dependencies: + lodash "^4.5.0" + +combined-stream@^1.0.5, combined-stream@~1.0.1, 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.8.1, commander@^2.9.0, commander@2.9.x: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commander@~2.8.1, 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" + +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.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +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.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +concat-stream@~1.4.7: + version "1.4.10" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.4.10.tgz#acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36" + dependencies: + inherits "~2.0.1" + readable-stream "~1.1.9" + typedarray "~0.0.5" + +concat-stream@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +config-chain@~1.1.10: + version "1.1.11" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +configstore@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" + dependencies: + dot-prop "^3.0.0" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + object-assign "^4.0.1" + os-tmpdir "^1.0.0" + osenv "^0.1.0" + uuid "^2.0.1" + write-file-atomic "^1.1.2" + xdg-basedir "^2.0.0" + +connect@^3.3.5: + version "3.5.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198" + dependencies: + debug "~2.2.0" + finalhandler "0.5.0" + parseurl "~1.3.1" + utils-merge "1.0.0" + +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" + +constant-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" + dependencies: + snake-case "^2.1.0" + upper-case "^1.1.1" + +constants-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" + +content-disposition@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" + +content-type@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" + +convert-source-map@^1.1.0, convert-source-map@1.X: + version "1.3.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + +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.0" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.2.0, core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +coveralls@2.11.14: + version "2.11.14" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.14.tgz#645a05ac72aa4f2ee811c667390d4ad36f0c2e26" + dependencies: + js-yaml "3.6.1" + lcov-parse "0.0.10" + log-driver "1.2.5" + minimist "1.2.0" + request "2.75.0" + +create-error-class@^3.0.1: + 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" + +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" + +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" + +crypto-browserify@~3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.2.8.tgz#b9b11dbe6d9651dd882a01e6cc467df718ecf189" + dependencies: + pbkdf2-compat "2.0.1" + ripemd160 "0.2.0" + sha.js "2.2.6" + +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-loader@0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.25.0.tgz#c3febc8ce28f4c83576b6b13707f47f90c390223" + dependencies: + babel-code-frame "^6.11.0" + css-selector-tokenizer "^0.6.0" + cssnano ">=2.6.1 <4" + loader-utils "~0.2.2" + lodash.camelcase "^3.0.1" + object-assign "^4.0.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.0.0" + postcss-modules-local-by-default "^1.0.1" + postcss-modules-scope "^1.0.0" + postcss-modules-values "^1.1.0" + source-list-map "^0.1.4" + +css-selector-tokenizer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css@2.X: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" + dependencies: + inherits "^2.0.1" + source-map "^0.1.38" + source-map-resolve "^0.3.0" + urix "^0.1.0" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +"cssnano@>=2.6.1 <4": + version "3.7.7" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.7.7.tgz#27fac611380c6a49d6f722c0537e5a988a785010" + 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.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.2.1.tgz#51fbb5347e50e81e6ed51668a48490ae6fe2afe2" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +ctype@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + +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" + +custom-event@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.0.tgz#2e4628be19dc4b214b5c02630c5971e811618062" + +d@^0.1.1, d@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" + dependencies: + es5-ext "~0.10.2" + +dashdash@^1.12.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" + 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" + +dateformat@^1.0.11, dateformat@^1.0.6: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +debug@^2.1.1, debug@^2.2.0, debug@~2.2.0, debug@2, 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@0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + +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" + +decompress-tar@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-3.1.0.tgz#217c789f9b94450efaadc5c5e537978fc333c466" + dependencies: + is-tar "^1.0.0" + object-assign "^2.0.0" + strip-dirs "^1.0.0" + tar-stream "^1.1.1" + through2 "^0.6.1" + vinyl "^0.4.3" + +decompress-tarbz2@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz#8b23935681355f9f189d87256a0f8bdd96d9666d" + dependencies: + is-bzip2 "^1.0.0" + object-assign "^2.0.0" + seek-bzip "^1.0.3" + strip-dirs "^1.0.0" + tar-stream "^1.1.1" + through2 "^0.6.1" + vinyl "^0.4.3" + +decompress-targz@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-3.1.0.tgz#b2c13df98166268991b715d6447f642e9696f5a0" + dependencies: + is-gzip "^1.0.0" + object-assign "^2.0.0" + strip-dirs "^1.0.0" + tar-stream "^1.1.1" + through2 "^0.6.1" + vinyl "^0.4.3" + +decompress-unzip@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-3.4.0.tgz#61475b4152066bbe3fee12f9d629d15fe6478eeb" + dependencies: + is-zip "^1.0.0" + read-all-stream "^3.0.0" + stat-mode "^0.2.0" + strip-dirs "^1.0.0" + through2 "^2.0.0" + vinyl "^1.0.0" + yauzl "^2.2.1" + +decompress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-3.0.0.tgz#af1dd50d06e3bfc432461d37de11b38c0d991bed" + dependencies: + buffer-to-vinyl "^1.0.0" + concat-stream "^1.4.6" + decompress-tar "^3.0.0" + decompress-tarbz2 "^3.0.0" + decompress-targz "^3.0.0" + decompress-unzip "^3.0.0" + stream-combiner2 "^1.1.1" + vinyl-assign "^1.0.1" + vinyl-fs "^2.2.0" + +deep-equal@^1.0.0: + 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.1" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +del@^2.0.2, del@^2.2.0: + 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.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + repeating "^1.1.0" + +detect-newline@2.X: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + +dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + dependencies: + asap "^2.0.0" + wrappy "1" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + +difflib@~0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + dependencies: + heap ">= 0.2.0" + +doctrine@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.4.0.tgz#e2db32defa752407b935b381e89f3740e469e599" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +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.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +dot-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.0.tgz#4b43dd0d7403c34cb645424add397e80bfe85ca6" + dependencies: + no-case "^2.2.0" + +dot-prop@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-2.4.0.tgz#848e28f7f1d50740c6747ab3cb07670462b6f89c" + dependencies: + is-obj "^1.0.0" + +dot-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + dependencies: + is-obj "^1.0.0" + +dotenv@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" + +download@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac" + dependencies: + caw "^1.0.1" + concat-stream "^1.4.7" + each-async "^1.0.0" + filenamify "^1.0.1" + got "^5.0.0" + gulp-decompress "^1.2.0" + gulp-rename "^1.2.0" + is-url "^1.2.0" + object-assign "^4.0.1" + read-all-stream "^3.0.0" + readable-stream "^2.0.2" + stream-combiner2 "^1.1.1" + vinyl "^1.0.0" + vinyl-fs "^2.2.0" + ware "^1.2.0" + +dreamopt@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" + dependencies: + wordwrap ">=0.0.2" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +duplexer2@^0.1.4, duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexify@^3.2.0: + version "3.4.5" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.4.5.tgz#0e7e287a775af753bf57e6e7b7f21f183f6c3a53" + dependencies: + end-of-stream "1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-async@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473" + dependencies: + onetime "^1.0.0" + set-immediate-shim "^1.0.0" + +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.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.7.tgz#3137e976a1d6232517e2513e04e32f79bcbdf126" + dependencies: + base64-url "^1.2.1" + +ecstatic@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-2.1.0.tgz#477a4a6b25cecb112f697dbd2c7fa354154ea6be" + dependencies: + he "^0.5.0" + mime "^1.2.11" + minimist "^1.1.0" + url-join "^1.0.0" + +editor@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.4.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.2.tgz#21444ba09386f0c65b6eafb96a3d51bcb3be80d1" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +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: + version "1.1.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" + dependencies: + once "~1.3.0" + +end-of-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" + dependencies: + once "~1.3.0" + +engine.io-client@1.6.9: + version "1.6.9" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.6.9.tgz#1d6ad48048a5083c95096943b29d36efdb212401" + dependencies: + component-emitter "1.1.2" + component-inherit "0.0.3" + debug "2.2.0" + engine.io-parser "1.2.4" + has-cors "1.1.0" + indexof "0.0.1" + parsejson "0.0.1" + parseqs "0.0.2" + parseuri "0.0.4" + ws "1.0.1" + xmlhttprequest-ssl "1.5.1" + yeast "0.1.2" + +engine.io-parser@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.2.4.tgz#e0897b0bf14e792d4cd2a5950553919c56948c42" + dependencies: + after "0.8.1" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.2" + blob "0.0.4" + has-binary "0.1.6" + utf8 "2.1.0" + +engine.io@1.6.10: + version "1.6.10" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.6.10.tgz#f87d84e1bd21d1a2ec7f8deef0c62054acdfb27a" + dependencies: + accepts "1.1.4" + base64id "0.1.0" + debug "2.2.0" + engine.io-parser "1.2.4" + ws "1.0.1" + +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" + +errno@^0.1.1, errno@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + 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" + +error@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/error/-/error-4.4.0.tgz#bf69ff251fb4a279c19adccdaa6b61e90d9bf12a" + dependencies: + camelize "^1.0.0" + string-template "~0.2.0" + xtend "~4.0.0" + +es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: + version "0.10.12" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" + dependencies: + es6-iterator "2" + es6-symbol "~3.1" + +es5-ext@0.8.x: + version "0.8.2" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" + +es6-iterator@2: + version "2.0.0" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" + dependencies: + d "^0.1.1" + es5-ext "^0.10.7" + es6-symbol "3" + +es6-map@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-set "~0.1.3" + es6-symbol "~3.1.0" + event-emitter "~0.3.4" + +es6-promise@^4.0.5, es6-promise@~4.0.3: + version "4.0.5" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" + +es6-set@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + es6-iterator "2" + es6-symbol "3" + event-emitter "~0.3.4" + +es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@~3.1.0, es6-symbol@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" + dependencies: + d "~0.1.1" + es5-ext "~0.10.11" + +es6-weak-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" + dependencies: + d "^0.1.1" + es5-ext "^0.10.8" + es6-iterator "2" + es6-symbol "3" + +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.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-plugin-babel@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-3.3.0.tgz#2f494aedcf6f4aa4e75b9155980837bc1fbde193" + +eslint-plugin-react@^6.3.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.4.1.tgz#7d1aade747db15892f71eee1fea4addf97bcfa2b" + dependencies: + doctrine "^1.2.2" + jsx-ast-utils "^1.3.1" + +eslint@^3.0.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.7.1.tgz#7faa84599e0fea422f04bc32db49054051a3f11a" + dependencies: + chalk "^1.1.3" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^1.2.2" + escope "^3.6.0" + espree "^3.3.1" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + glob "^7.0.3" + globals "^9.2.0" + ignore "^3.1.5" + 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.1" + path-is-inside "^1.0.1" + pluralize "^1.2.1" + progress "^1.1.8" + require-uncached "^1.0.2" + shelljs "^0.6.0" + strip-bom "^3.0.0" + strip-json-comments "~1.0.1" + table "^3.7.8" + text-table "~0.2.0" + user-home "^2.0.0" + +espree@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c" + dependencies: + acorn "^4.0.1" + acorn-jsx "^3.0.0" + +esprima-fb@~12001.1.0-dev-harmony-fb: + version "12001.1.0-dev-harmony-fb" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-12001.1.0-dev-harmony-fb.tgz#d84400384ba95ce2678c617ad24a7f40808da915" + +esprima@^2.6.0, esprima@^2.7.1, esprima@2.7.x: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esrecurse@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + dependencies: + estraverse "~4.1.0" + object-assign "^4.0.1" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estraverse@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" + +event-emitter@~0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" + dependencies: + d "~0.1.1" + es5-ext "~0.10.7" + +event-stream@3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource-polyfill@^0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz#10e0d187f111b167f28fdab918843ce7d818f13c" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-braces@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" + dependencies: + array-slice "^0.2.3" + array-unique "^0.2.1" + braces "^0.1.2" + +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@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" + dependencies: + is-number "^0.1.1" + repeat-string "^0.2.2" + +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.14.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" + dependencies: + accepts "~1.3.3" + array-flatten "1.1.1" + content-disposition "0.5.1" + content-type "~1.0.2" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "~2.2.0" + depd "~1.1.0" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.7.0" + finalhandler "0.5.0" + fresh "0.3.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.1" + path-to-regexp "0.1.7" + proxy-addr "~1.1.2" + qs "6.2.0" + range-parser "~1.2.0" + send "0.14.1" + serve-static "~1.11.1" + type-is "~1.6.13" + utils-merge "1.0.0" + vary "~1.1.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0, extend@~3.0.0, extend@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + +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@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c" + dependencies: + async "^1.5.0" + loader-utils "^0.2.3" + webpack-sources "^0.1.0" + +extract-zip@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4" + dependencies: + concat-stream "1.5.0" + debug "0.7.4" + mkdirp "0.5.0" + yauzl "2.4.1" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fancy-log@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.2.0.tgz#d5a51b53e9ab22ca07d558f2b67ae55fdb5fcbd8" + dependencies: + chalk "^1.1.1" + time-stamp "^1.0.0" + +fast-levenshtein@~2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +fbjs@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.2.1.tgz#622061630a43e11f845017b9044aaa648ed3f731" + dependencies: + core-js "^1.0.0" + promise "^7.0.3" + whatwg-fetch "^0.9.0" + +fbjs@^0.8.4: + version "0.8.5" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.5.tgz#f69ba8a876096cb1b9bffe4d7c1e71c19d39d008" + dependencies: + core-js "^1.0.0" + immutable "^3.7.6" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + 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" + +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.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42" + dependencies: + loader-utils "~0.2.5" + +file-type@^3.1.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.8.0.tgz#bcadf6a8f624ebe4a10e5ad26727b6b93f16d78d" + +filename-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + +filename-reserved-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" + +filenamify@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" + dependencies: + filename-reserved-regex "^1.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + +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" + +filled-array@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" + +finalhandler@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" + dependencies: + debug "~2.2.0" + escape-html "~1.0.3" + on-finished "~2.3.0" + statuses "~1.3.0" + unpipe "~1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +first-chunk-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" + +flat-cache@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.1.tgz#6c837d6225a7de5659323740b36d5361f71691ff" + dependencies: + circular-json "^0.3.0" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flatten@^1.0.2, flatten@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +for-in@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" + +for-own@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + dependencies: + for-in "^0.1.5" + +forever-agent@~0.6.0, 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-rc1, form-data@~1.0.0-rc3, form-data@~1.0.0-rc4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" + dependencies: + async "^2.0.1" + combined-stream "^1.0.5" + mime-types "^2.1.11" + +form-data@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.11" + +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" + +formidable@^1.0.17: + version "1.0.17" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + +forwarded@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" + +fresh@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" + +from@~0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" + +front-matter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.0.tgz#0bdff42cbad2b35c07ac7085811789759f9858c0" + dependencies: + js-yaml "^3.4.6" + +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + dependencies: + null-check "^1.0.0" + +fs-extra@^0.30.0, fs-extra@~0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-vacuum@~1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.9.tgz#4f90193ab8ea02890995bcd4e804659a5d366b2d" + dependencies: + graceful-fs "^4.1.2" + path-is-inside "^1.0.1" + rimraf "^2.5.2" + +fs-write-stream-atomic@~1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.8.tgz#e49aaddf288f87d46ff9e882f216a13abc40778b" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +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.0.14" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.29" + +fstream-ignore@^1.0.0, 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-npm@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fstream-npm/-/fstream-npm-1.1.1.tgz#6b9175db6239a83d8209e232426c494dbb29690c" + dependencies: + fstream-ignore "^1.0.0" + inherits "2" + +fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +gapitoken@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/gapitoken/-/gapitoken-0.1.5.tgz#3577fcfb5426be3a7b8ebada92671229d8cc81ce" + dependencies: + jws "~3.0.0" + request "^2.54.0" + +gauge@~1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + dependencies: + ansi "^0.3.0" + has-unicode "^2.0.0" + lodash.pad "^4.1.0" + lodash.padend "^4.1.0" + lodash.padstart "^4.1.0" + +gauge@~2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-color "^0.1.7" + 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" + +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-proxy@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-1.1.0.tgz#894854491bc591b0f147d7ae570f5c678b7256eb" + dependencies: + rc "^1.1.2" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +getpass@^0.1.1: + version "0.1.6" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + dependencies: + assert-plus "^1.0.0" + +github-url-from-git@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/github-url-from-git/-/github-url-from-git-1.4.0.tgz#285e6b520819001bde128674704379e4ff03e0de" + +github-url-from-username-repo@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/github-url-from-username-repo/-/github-url-from-username-repo-1.0.2.tgz#7dd79330d2abe69c10c2cef79714c97215791dfa" + +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-parent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.0.0.tgz#c7bdeb5260732196c740de9274c08814056014bb" + dependencies: + is-glob "^3.0.0" + +glob-stream@^5.3.2: + version "5.3.5" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" + dependencies: + extend "^3.0.0" + glob "^5.0.3" + glob-parent "^3.0.0" + micromatch "^2.3.7" + ordered-read-streams "^0.3.0" + through2 "^0.6.0" + to-absolute-glob "^0.1.1" + unique-stream "^2.0.2" + +glob@^5.0.15, glob@^5.0.3: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^6.0.0: + 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.0.6: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.0.3, glob@~7.0.6: + 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" + +global@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^8.3.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" + +globals@^9.2.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.12.0.tgz#992ce90828c3a55fa8f16fada177adb64664cf9d" + +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" + +globule@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.0.0.tgz#f22aebaacce02be492453e979c3ae9b6983f1c6c" + dependencies: + glob "~7.0.3" + lodash "~4.9.0" + minimatch "~3.0.0" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +google-auth-library@~0.9.7: + version "0.9.8" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.9.8.tgz#667acb8cc2242d8da83f7d308d76ac434ef53679" + dependencies: + async "~1.4.2" + gtoken "^1.1.0" + jws "~3.0.0" + lodash.noop "~3.0.0" + request "~2.60.0" + string-template "~0.2.0" + +google-p12-pem@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.0.tgz#fb2523bf84ff74676e84c72b4def50961e617d1c" + dependencies: + node-forge "^0.6.33" + +googleapis@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-7.1.0.tgz#1ca0c0c4ae90a68c5f3807609416c423a1f12c44" + dependencies: + async "~1.5.2" + gapitoken "~0.1.5" + google-auth-library "~0.9.7" + request "~2.72.0" + string-template "~1.0.0" + url "^0.11.0" + +got@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-5.6.0.tgz#bb1d7ee163b78082bbc8eb836f3f395004ea6fbf" + dependencies: + create-error-class "^3.0.1" + duplexer2 "^0.1.4" + is-plain-obj "^1.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + node-status-codes "^1.0.0" + object-assign "^4.0.1" + parse-json "^2.1.0" + pinkie-promise "^2.0.0" + read-all-stream "^3.0.0" + readable-stream "^2.0.5" + timed-out "^2.0.0" + unzip-response "^1.0.0" + url-parse-lax "^1.0.0" + +graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@~4.1.6, graceful-fs@4.X: + version "4.1.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +gtoken@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.1.tgz#90153a547c2fc1cd24a4d3d2ab3b5aba0a26897a" + dependencies: + google-p12-pem "^0.1.0" + jws "^3.0.0" + mime "^1.2.11" + request "^2.72.0" + +gulp-decompress@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gulp-decompress/-/gulp-decompress-1.2.0.tgz#8eeb65a5e015f8ed8532cafe28454960626f0dc7" + dependencies: + archive-type "^3.0.0" + decompress "^3.0.0" + gulp-util "^3.0.1" + readable-stream "^2.0.2" + +gulp-rename@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" + +gulp-sourcemaps@^1.5.2: + version "1.7.1" + resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.7.1.tgz#2a6aa5fb2d6315f56cdb750d9a90257d752e2fc2" + dependencies: + acorn "4.X" + convert-source-map "1.X" + css "2.X" + detect-newline "2.X" + graceful-fs "4.X" + source-map "0.X" + strip-bom "2.X" + through2 "2.X" + vinyl "1.X" + +gulp-util@^3.0.1: + version "3.0.7" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^1.0.11" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +handlebars@^4.0.1: + version "4.0.5" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.5.tgz#92c6ed6bb164110c50d4d8d0fbddc70806c6f8e7" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-validator@^1.6.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-1.8.0.tgz#d83842b0eb4c435960aeb108a067a3aa94c0eeb2" + dependencies: + bluebird "^2.9.30" + chalk "^1.0.0" + commander "^2.8.1" + is-my-json-valid "^2.12.0" + +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" + +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.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10" + dependencies: + isarray "0.0.1" + +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-color@^0.1.7, has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +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.0, 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" + +he@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/he/-/he-0.5.0.tgz#2c05ffaef90b68e860f3fd2b54ef580989277ee2" + +he@1.1.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.0.tgz#29319d49beec13a9b1f3c4f9b2a6dde4859bb2a7" + +header-case@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.0.tgz#d9e335909505d56051ec16a0106821889e910781" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.3" + +"heap@>= 0.2.0": + version "0.2.6" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" + +history@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/history/-/history-2.1.2.tgz#4aa2de897a0e4867e4539843be6ecdb2986bfdec" + dependencies: + deep-equal "^1.0.0" + invariant "^2.0.0" + query-string "^3.0.0" + warning "^2.0.0" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoist-non-react-statics@^1.0.3, 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" + +home-or-tmp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985" + dependencies: + os-tmpdir "^1.0.1" + user-home "^1.1.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.1.5, hosted-git-info@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + +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-entities@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" + +html-minifier@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.1.0.tgz#e0b35d7a1fff89ae989e2fa51c572bc0d1f2d1f6" + dependencies: + change-case "3.0.x" + clean-css "3.4.x" + commander "2.9.x" + he "1.1.x" + ncname "1.0.x" + relateurl "0.2.x" + uglify-js "2.7.x" + +html-truncate@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.1.tgz#90a546b9429bec7aeb5d57a53547c317fbd6f5f3" + +http-browserify@^1.3.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" + dependencies: + Base64 "~0.2.0" + inherits "~2.0.1" + +http-errors@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.0.tgz#b1cb3d8260fd8e2386cad3189045943372d48211" + dependencies: + inherits "2.0.1" + setprototypeof "1.0.1" + statuses ">= 1.3.0 < 2" + +http-proxy@^1.13.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.15.1.tgz#91a6088172e79bc0e821d5eb04ce702f32446393" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-signature@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.11.0.tgz#1796cf67a001ad5cd6849dca0991485f09089fe6" + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + +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" + +https-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.0.tgz#b3ffdfe734b2a3d4a9efd58e8654c91fce86eafd" + +https-proxy-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" + dependencies: + agent-base "2" + debug "2" + extend "3" + +humanize-url@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/humanize-url/-/humanize-url-1.0.1.tgz#f4ab99e0d288174ca4e1e50407c55fbae464efff" + dependencies: + normalize-url "^1.0.0" + strip-url-auth "^1.0.0" + +iconv-lite@~0.4.13, iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +icss-replace-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +ignore@^3.1.5: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" + +image-size@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.0.tgz#be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651" + +immutable@^3.7.6: + version "3.8.1" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" + +imports-loader@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.6.5.tgz#ae74653031d59e37b3c2fb2544ac61aeae3530a6" + dependencies: + loader-utils "0.2.x" + source-map "0.1.x" + +imurmurhash@*, 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@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-1.2.2.tgz#db99bcc583eb6abbb1e48dcbb1999a986041cb6b" + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + repeating "^1.1.0" + +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, inflight@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.5.tgz#db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@2: + 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.4, ini@~1.3.0, ini@~1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +init-package-json@~1.9.4: + version "1.9.4" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.4.tgz#b4053d0b40f0cf842a41966937cb3dc0f534e856" + dependencies: + glob "^6.0.0" + npm-package-arg "^4.0.0" + promzard "^0.3.0" + read "~1.0.1" + read-package-json "1 || 2" + semver "2.x || 3.x || 4 || 5" + validate-npm-package-license "^3.0.1" + validate-npm-package-name "^2.0.1" + +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" + +invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54" + 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" + +ipaddr.js@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" + +is-absolute-url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.0.0.tgz#9c4b20b0e5c0cbef9a479a367ede6f991679f359" + +is-absolute@^0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.1.7.tgz#847491119fccb5fb436217cc737f7faad50f603f" + dependencies: + is-relative "^0.1.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-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: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + +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-bzip2@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.0.0.tgz#a9b92c1ae2d7a975ad307be0722049c7e4ea2f13" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.0.0.tgz#e433c222db9d77844084d72db1eff047845985c1" + dependencies: + is-extglob "^2.0.0" + +is-gzip@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" + +is-lower-case@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" + dependencies: + lower-case "^1.1.0" + +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.0, is-my-json-valid@^2.12.4: + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-natural-number@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-2.1.1.tgz#7d4c5728377ef386c3e194a9911bf57c6dc335e7" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-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.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-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-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-relative@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-stream@^1.0.0, is-stream@^1.0.1: + 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.0.1" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.0.1.tgz#f93ab3bf1d6bbca30e9753cd3485b1300eebc013" + dependencies: + html-comment-regex "^1.1.0" + +is-tar@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-upper-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" + dependencies: + upper-case "^1.1.0" + +is-url@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-valid-glob@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" + +is-zip@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-zip/-/is-zip-1.0.0.tgz#47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325" + +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" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isbinaryfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.1.tgz#6e99573675372e841a0520c036b41513d783e79e" + +isexe@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.1, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-instrumenter-loader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.0.0.tgz#ed87446a3a72af342e00521e81b189eb9763d781" + dependencies: + istanbul-lib-instrument "^1.1.3" + loader-utils "^0.2.16" + object-assign "^4.1.0" + +istanbul-lib-coverage@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2" + +istanbul-lib-instrument@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.1.3.tgz#66d5353d1f592b9e34d1cf9acda9c3f1ab509696" + dependencies: + babel-generator "^6.11.3" + babel-template "^6.9.0" + babel-traverse "^6.9.0" + babel-types "^6.10.2" + babylon "^6.8.1" + istanbul-lib-coverage "^1.0.0" + +istanbul@^0.4.0, istanbul@0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jasmine-ajax@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.2.0.tgz#0a1600b7d3c503a3904f80679b867985a84e4756" + +jasmine-core@~2.5.2, jasmine-core@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" + +jasmine@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.2.tgz#6283cef7085c095cc25d651e954df004f7e3e421" + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.5.2" + +jasminewd2@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-0.0.10.tgz#94f48ae2bc946cad643035467b4bb7ea9c1075ef" + +jju@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-base64@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" + +js-tokens@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.3.tgz#14e56eb68c8f1a92c43d59f5014ec29dc20f2ae1" + +js-tokens@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" + +js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@~3.6.1, js-yaml@3.6.1, js-yaml@3.x: + version "3.6.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + +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-diff@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.3.1.tgz#6dbc3ae2d25e075a7fd71bcd9874458666fb681b" + dependencies: + cli-color "~0.1.6" + difflib "~0.2.1" + dreamopt "~0.6.0" + +json-parse-helpfulerror@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc" + dependencies: + jju "^1.1.0" + +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.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.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.2.6.tgz#f6efc93c06a04de9aec53053df2559bb19e2038b" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + +json5@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.0.tgz#9b20715b026cbe3778fd769edccd822d8332a5b2" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" + +jsprim@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + dependencies: + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +jsx-ast-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.1.tgz#14313c5c50da5b0c47020af5d1560c17e781a05a" + dependencies: + object-assign "^4.1.0" + +jwa@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.3.tgz#fa9f2f005ff0c630e7c41526a31f37f79733cd6d" + dependencies: + base64url "~1.0.4" + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "^1.0.0" + +jwa@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.0.2.tgz#fd79609f1e772e299dce8ddb76d00659dd83511f" + dependencies: + base64url "~0.0.4" + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "^1.0.0" + +jws@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.3.tgz#b88f1b4581a2c5ee8813c06b3fdf90ea9b5c7e6c" + dependencies: + base64url "~1.0.4" + jwa "^1.1.2" + +jws@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.0.0.tgz#da5f267897dd4e9cf8137979db33fc54a3c05418" + dependencies: + base64url "~1.0.4" + jwa "~1.0.0" + +karma-chrome-launcher@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz#c2790c5a32b15577d0fff5a4d5a2703b3b439c25" + dependencies: + fs-access "^1.0.0" + which "^1.2.1" + +karma-cli@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960" + dependencies: + resolve "^1.1.6" + +karma-coverage@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6" + dependencies: + dateformat "^1.0.6" + istanbul "^0.4.0" + lodash "^3.8.0" + minimatch "^3.0.0" + source-map "^0.5.1" + +karma-firefox-launcher@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.0.tgz#e08af3ce42e39860c2952ea7b7eaa64d63508bdc" + +karma-jasmine-ajax@0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz#78bb92d896fe32a25a180098c47722e1d9605bfc" + dependencies: + jasmine-ajax "^3.0.0" + +karma-jasmine@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.0.2.tgz#c0b3ab327bf207db60e17fa27db37cfdef5d8e6c" + +karma-phantomjs-launcher@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.2.tgz#19e1041498fd75563ed86730a22c1fe579fa8fb1" + dependencies: + lodash "^4.0.1" + phantomjs-prebuilt "^2.1.7" + +karma-sourcemap-loader@0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" + dependencies: + graceful-fs "^4.1.2" + +karma-spec-reporter@0.0.26: + version "0.0.26" + resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.26.tgz#bf5561377dce1b63cf2c975c1af3e35f199e2265" + dependencies: + colors "~0.6.0" + +karma-webpack@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-1.8.0.tgz#340c7999eb3745b47becab47d0d304dac2c55257" + dependencies: + async "~0.9.0" + loader-utils "^0.2.5" + lodash "^3.8.0" + source-map "^0.1.41" + webpack-dev-middleware "^1.0.11" + +karma@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-1.3.0.tgz#b2b94e8f499fadd0069d54f9aef4a4d48ec5cc1f" + dependencies: + bluebird "^3.3.0" + body-parser "^1.12.4" + chokidar "^1.4.1" + colors "^1.1.0" + combine-lists "^1.0.0" + connect "^3.3.5" + core-js "^2.2.0" + di "^0.0.1" + dom-serialize "^2.2.0" + expand-braces "^0.1.1" + glob "^7.0.3" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^3.8.0" + log4js "^0.6.31" + mime "^1.3.4" + minimatch "^3.0.0" + optimist "^0.6.1" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.3.3" + socket.io "1.4.7" + source-map "^0.5.3" + tmp "0.0.28" + useragent "^2.1.9" + +kew@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" + +kind-of@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" + dependencies: + is-buffer "^1.0.2" + +klaw@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.0.tgz#8857bfbc1d824badf13d3d0241d8bbe46fb12f73" + +latest-version@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" + dependencies: + package-json "^2.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + dependencies: + readable-stream "^2.0.5" + +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" + +lcov-parse@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + +less-loader@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-2.2.3.tgz#b6d8f8139c8493df09d992a93a00734b08f84528" + dependencies: + loader-utils "^0.2.5" + +less@2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/less/-/less-2.7.1.tgz#6cbfea22b3b830304e9a5fb371d54fa480c9d7cf" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.2.11" + mkdirp "^0.5.0" + promise "^7.1.1" + source-map "^0.5.3" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^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" + +loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5, loader-utils@~0.2.6, loader-utils@0.2.x: + version "0.2.16" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +lockfile@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.2.tgz#97e1990174f696cbe0a3acd58a43b84aa30c7c83" + +lodash-es@^4.2.1: + version "4.16.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.16.4.tgz#4dc3e2cf33a8c343028aa7f7e06d1c9697042599" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._createcompounder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" + dependencies: + lodash.deburr "^3.0.0" + lodash.words "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.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@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" + dependencies: + lodash._createcompounder "^3.0.0" + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.debounce@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-3.1.1.tgz#812211c378a94cc29d5aa4e3346cf0bfce3a7df5" + dependencies: + lodash._getnative "^3.0.0" + +lodash.debounce@^4.0.4: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + +lodash.deburr@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" + dependencies: + lodash._root "^3.0.0" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.indexof@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isequal@^4.0.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.4.0.tgz#6295768e98e14dc15ce8d362ef6340db82852031" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.noop@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c" + +lodash.pad@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + +lodash.padend@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + +lodash.padstart@^4.1.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + +lodash.pickby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.words@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" + dependencies: + lodash._root "^3.0.0" + +lodash@^3.8.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0, lodash@4.16.4: + version "4.16.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127" + +lodash@~4.9.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.9.0.tgz#4c20d742f03ce85dc700e0dd7ab9bcab85e6fc14" + +log-driver@1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" + +log4js@^0.6.31: + version "0.6.38" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" + dependencies: + readable-stream "~1.0.2" + semver "~4.3.3" + +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: + version "1.2.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.2.0.tgz#69a65aad3de542cf4ee0f4fe74e8e33c709ccb0f" + dependencies: + js-tokens "^1.0.1" + +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-first@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" + dependencies: + lower-case "^1.1.2" + +lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb" + +lowercase-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lru-cache@^4.0.1, lru-cache@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.1.tgz#1343955edaf2e37d9b9e7ee7241e27c4b9fb72be" + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +lru-cache@2.2.x: + version "2.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +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" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +marked@^0.3.5, marked@~0.3.0: + version "0.3.6" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + +math-expression-evaluator@^1.2.14: + version "1.2.14" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz#39511771ed9602405fba9affff17eb4d2a3843ab" + dependencies: + lodash.indexof "^4.0.5" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +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.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.3.0, meow@^3.5.0, 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" + +meow@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-2.0.0.tgz#8f530a8ecf5d40d3f4b4df93c3472900fba2a8f1" + dependencies: + camelcase-keys "^1.0.0" + indent-string "^1.1.0" + minimist "^1.1.0" + object-assign "^1.0.0" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.0.tgz#9cfd156fef35421e2b5403ce11dc6eb1962b026e" + dependencies: + readable-stream "^2.0.1" + +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, micromatch@^2.3.7: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" + +mime-db@~1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" + +mime-types@^2.1.10, mime-types@^2.1.11, mime-types@~2.1.11, mime-types@~2.1.2, mime-types@~2.1.7: + version "2.1.12" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" + dependencies: + mime-db "~1.24.0" + +mime-types@~2.0.4: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6" + dependencies: + mime-db "~1.12.0" + +mime@^1.2.11, mime@^1.3.4, mime@1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + +mime@1.2.x: + version "1.2.11" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.0, minimatch@~3.0.3, "minimatch@2 || 3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, 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" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1, mkdirp@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +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" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +msee@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/msee/-/msee-0.1.2.tgz#f2d1e20ef94b8cd45243f2d5c817e97143f0286d" + dependencies: + cardinal "^0.5.0" + chalk "~0.4.0" + marked "~0.3.0" + nopt "~2.1.1" + xtend "~2.1.1" + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +mute-stream@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" + +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.3.0, nan@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +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.4.9: + version "0.4.9" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +no-case@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.0.tgz#ca2825ccb76b18e6f79d573dcfbf1eace33dd164" + dependencies: + lower-case "^1.1.1" + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-forge@^0.6.33: + version "0.6.43" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.43.tgz#70c40ca7ed9f0f4aa35b424507ca9e45246bfe09" + +node-gyp@^3.3.1, node-gyp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" + 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" + osenv "0" + path-array "^1.0.0" + request "2" + rimraf "2" + semver "2.x || 3.x || 4 || 5" + tar "^2.0.0" + which "1" + +node-libs-browser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.6.0.tgz#244806d44d319e048bc8607b5cc4eaf9a29d2e3c" + dependencies: + assert "^1.1.1" + browserify-zlib "~0.1.4" + buffer "^4.9.0" + console-browserify "^1.1.0" + constants-browserify "0.0.1" + crypto-browserify "~3.2.6" + domain-browser "^1.1.1" + events "^1.0.0" + http-browserify "^1.3.2" + https-browserify "0.0.0" + os-browserify "~0.1.2" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "~0.2.0" + readable-stream "^1.1.13" + stream-browserify "^1.0.0" + string_decoder "~0.10.25" + timers-browserify "^1.0.1" + tty-browserify "0.0.0" + url "~0.10.1" + util "~0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.6.29: + version "0.6.30" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.30.tgz#64d3073a6f573003717ccfe30c89023297babba1" + dependencies: + mkdirp "~0.5.0" + nopt "~3.0.1" + npmlog "4.x" + rc "~1.1.0" + request "2.x" + rimraf "~2.5.0" + semver "~5.3.0" + tar "~2.2.0" + tar-pack "~3.1.0" + +node-sass@3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.10.1.tgz#c535b2e1a5439240591e06d7308cb663820d616c" + 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" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.3.2" + node-gyp "^3.3.1" + npmlog "^4.0.0" + request "^2.61.0" + sass-graph "^2.1.1" + +node-status-codes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" + +node-uuid@~1.4.0, node-uuid@~1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + +node-watch@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.4.1.tgz#d0947d54a995f91135db4056b68722c6d7c322ad" + +nopt@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.1.2.tgz#6cccd977b80132a07731d6e8ce58c2c8303cf9af" + dependencies: + abbrev "1" + +nopt@~3.0.1, nopt@~3.0.6, "nopt@2 || 3", nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +normalize-git-url@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" + +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + +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.0.0, normalize-url@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.6.1.tgz#a9f254fa065bbc2934461c0c09423815976155a2" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-cache-filename@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" + +npm-install-checks@~1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-1.0.7.tgz#6d91aeda0ac96801f1ed7aadee116a6c0a086a57" + dependencies: + npmlog "0.1 || 1 || 2" + semver "^2.3.0 || 3.x || 4 || 5" + +"npm-package-arg@^3.0.0 || ^4.0.0", npm-package-arg@^4.0.0, npm-package-arg@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.2.0.tgz#809bc61cabf54bd5ff94f6165c89ba8ee88c115c" + dependencies: + hosted-git-info "^2.1.5" + semver "^5.1.0" + +npm-package-arg@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.1.1.tgz#86d9dca985b4c5e5d59772dfd5de6919998a495a" + dependencies: + hosted-git-info "^2.1.4" + semver "4 || 5" + +npm-registry-client@~7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.2.1.tgz#c792266b088cc313f8525e7e35248626c723db75" + dependencies: + concat-stream "^1.5.2" + graceful-fs "^4.1.6" + normalize-package-data "~1.0.1 || ^2.0.0" + npm-package-arg "^3.0.0 || ^4.0.0" + once "^1.3.3" + request "^2.74.0" + retry "^0.10.0" + semver "2 >=2.2.1 || 3.x || 4 || 5" + slide "^1.1.3" + optionalDependencies: + npmlog "~2.0.0 || ~3.1.0" + +npm-shrinkwrap@200.5.1: + version "200.5.1" + resolved "https://registry.yarnpkg.com/npm-shrinkwrap/-/npm-shrinkwrap-200.5.1.tgz#ba56d46b653ec9bb13e60658e12c6571bbd296e4" + dependencies: + array-find "^0.1.1" + error "^4.2.0" + json-diff "^0.3.1" + minimist "^1.1.0" + msee "^0.1.1" + npm "^2.1.10" + read-json "1.0.3" + rimraf "^2.2.8" + run-parallel "^1.0.0" + run-series "^1.0.2" + safe-json-parse "^2.0.0" + semver "^4.0.3" + sorted-object "^1.0.0" + string-template "^0.2.0" + +npm-user-validate@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b" + +npm@^2.1.10: + version "2.15.11" + resolved "https://registry.yarnpkg.com/npm/-/npm-2.15.11.tgz#350588fba9cd8d384cf9a6e8dc0fef0f94992b7c" + dependencies: + abbrev "~1.0.9" + ansi "~0.3.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + archy "~1.0.0" + async-some "~1.0.2" + block-stream "0.0.9" + char-spinner "~1.0.1" + chmodr "~1.0.2" + chownr "~1.0.1" + cmd-shim "~2.0.2" + columnify "~1.5.4" + config-chain "~1.1.10" + dezalgo "~1.0.3" + editor "~1.0.0" + fs-vacuum "~1.2.9" + fs-write-stream-atomic "~1.0.8" + fstream "~1.0.10" + fstream-npm "~1.1.1" + github-url-from-git "~1.4.0" + github-url-from-username-repo "~1.0.2" + glob "~7.0.6" + graceful-fs "~4.1.6" + hosted-git-info "~2.1.5" + inflight "~1.0.4" + inherits "~2.0.3" + ini "~1.3.4" + init-package-json "~1.9.4" + lockfile "~1.0.1" + lru-cache "~4.0.1" + minimatch "~3.0.3" + mkdirp "~0.5.1" + node-gyp "~3.4.0" + nopt "~3.0.6" + normalize-git-url "~3.0.2" + normalize-package-data "~2.3.5" + npm-cache-filename "~1.0.2" + npm-install-checks "~1.0.7" + npm-package-arg "~4.1.0" + npm-registry-client "~7.2.1" + npm-user-validate "~0.1.5" + npmlog "~2.0.4" + once "~1.4.0" + opener "~1.4.1" + osenv "~0.1.3" + path-is-inside "~1.0.0" + read "~1.0.7" + read-installed "~4.0.3" + read-package-json "~2.0.4" + readable-stream "~2.1.5" + realize-package-specifier "~3.0.1" + request "~2.74.0" + retry "~0.10.0" + rimraf "~2.5.4" + semver "~5.1.0" + sha "~2.0.1" + slide "~1.1.6" + sorted-object "~2.0.0" + spdx-license-ids "~1.2.2" + strip-ansi "~3.0.1" + tar "~2.2.1" + text-table "~0.2.0" + uid-number "0.0.6" + umask "~1.1.0" + validate-npm-package-license "~3.0.1" + validate-npm-package-name "~2.2.2" + which "~1.2.11" + wrappy "~1.0.2" + write-file-atomic "~1.1.4" + +npmlog@^4.0.0, npmlog@4.x: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.6.0" + set-blocking "~2.0.0" + +"npmlog@~2.0.0 || ~3.1.0", "npmlog@0 || 1 || 2 || 3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.6.0" + set-blocking "~2.0.0" + +npmlog@~2.0.4, "npmlog@0.1 || 1 || 2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + +null-loader@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-0.1.1.tgz#17be9abfcd3ff0e1512f6fc4afcb1f5039378fae" + +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" + +oauth-sign@~0.8.0, oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-1.0.0.tgz#e65dc8766d3b47b4b8307465c8311da030b070a6" + +object-assign@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + +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@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + +object.omit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.0.tgz#868597333d54e60662940bb458605dd6ae12fe94" + dependencies: + for-own "^0.1.3" + 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" + +once@^1.3.0, once@^1.3.3, once@~1.4.0, once@1.x: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0, once@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +opener@~1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.2.tgz#b32582080042af8680c389a499175b4c54fff523" + +optimist@^0.6.1, 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: + 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" + +ordered-read-streams@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" + dependencies: + is-stream "^1.0.1" + readable-stream "^2.0.1" + +os-browserify@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, 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.1.0, osenv@~0.1.3, osenv@0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +package-json@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" + dependencies: + got "^5.0.0" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +param-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a" + dependencies: + no-case "^2.2.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.1.0, parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-key@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/parse-key/-/parse-key-0.2.1.tgz#7bcf76595536e36075664be4d687e4bdd910208f" + +parsejson@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.1.tgz#9b10c6c0d825ab589e685153826de0a3ba278bcc" + dependencies: + better-assert "~1.0.0" + +parseqs@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.2.tgz#9dfe70b2cddac388bde4f35b1f240fa58adbe6c7" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.4.tgz#806582a39887e1ea18dd5e2fe0e01902268e9350" + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" + +pascal-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.0.tgz#39c248bde5a8dc02d5160696bdb01e044d016ee1" + dependencies: + camel-case "^3.0.0" + upper-case-first "^1.1.0" + +path-array@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" + dependencies: + array-index "^1.0.0" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.0.tgz#5ac491de642936e5dfe0e18d16c461b8be8cf073" + dependencies: + no-case "^2.2.0" + +path-exists@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" + +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-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1, path-is-inside@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +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@^0.12.7: + version "0.12.7" + resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + dependencies: + process "^0.11.1" + util "^0.10.3" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +pbkdf2-compat@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + +phantomjs-prebuilt@^2.1.7: + version "2.1.13" + resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.13.tgz#66556ad9e965d893ca5a7dc9e763df7e8697f76d" + dependencies: + es6-promise "~4.0.3" + extract-zip "~1.5.0" + fs-extra "~0.30.0" + hasha "~2.2.0" + kew "~0.7.0" + progress "~1.1.8" + request "~2.74.0" + request-progress "~2.0.1" + which "~1.2.10" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pluralize@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" + +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.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.1.tgz#dc5421b6ae6f779ef6bfd47352b94abe59d0316b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.4.1.tgz#45dce4d4e33b7d967b97a4d937f270ea98d2fe7a" + 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.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.1.tgz#5fae3f1a71df3e19cffb37309d1a7dba56c4589c" + 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.1" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.1.tgz#5d021f021a6ed6cec7310d4603794a75ddd53232" + dependencies: + flatten "1.0.2" + 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.1" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.1.tgz#ff59b5dec6d586ce2cea183138f55c5876fa9cdc" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.0.10" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.0.10.tgz#54b360be804e7e69a5c7222635247b92a3569e9b" + dependencies: + postcss "^5.0.4" + 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.3" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.3.tgz#09d228148c942fa8126679de9ff7738b54919fe3" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.1.3" + +postcss-minify-params@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.0.5.tgz#82d602643b8616a61fb3634d7ede0289836d67f9" + 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.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.0.5.tgz#4e1f966fb49c95266804016ba9a3c6645bb601e0" + dependencies: + alphanum-sort "^1.0.2" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" + dependencies: + postcss "^5.0.4" + +postcss-modules-local-by-default@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-scope@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" + dependencies: + css-selector-tokenizer "^0.6.0" + postcss "^5.0.4" + +postcss-modules-values@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" + dependencies: + icss-replace-symbols "^1.0.2" + postcss "^5.0.14" + +postcss-normalize-charset@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.0.tgz#2fbd30e12248c442981d31ea2484d46fd0628970" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.7.tgz#6bd90d0a4bc5a1df22c26ea65c53257dc3829f4e" + 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.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.2.tgz#be8b511741fab2dac8e614a2302e9d10267b0771" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.3.0.tgz#a697b52953ed6825ffea404e26a4f105d8b8d569" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.0.tgz#8f739b938289ef2e48936d7101783e4741ca9bbb" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.3.tgz#fc193e435a973c10f9801c74700a830f79643343" + dependencies: + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-safe-parser@^1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-1.0.7.tgz#43bd0c8c84d5f7d8474de825c699e4dabcac72a8" + dependencies: + postcss "^5.0.18" + +postcss-selector-parser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.1.tgz#fdbf696103b12b0a64060e5610507f410491f7c8" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.5" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.5.tgz#46fc0363f01bab6a36a9abb01c229fcc45363094" + 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.1.3, postcss-value-parser@^3.2.3: + 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.1.1" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.1.1.tgz#ea3fbe656c9738aa8729e2ee96ec2a46089b720f" + dependencies: + 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.18, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.2: + version "5.2.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.4.tgz#8eb4bee3e5c4e091585b116df32d8db24a535f21" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.1.2" + +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, prepend-http@^1.0.1, prepend-http@^1.0.3: + 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" + +pretty-bytes@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + dependencies: + number-is-nan "^1.0.0" + +private@^0.1.6, private@~0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0, process@^0.11.1, process@~0.11.0: + version "0.11.9" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +progress@^1.1.8, progress@~1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" + +promise@^7.0.3, promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + +protractor@4.0.9: + version "4.0.9" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.9.tgz#152f72e3729b2576226e370dc308699cccfa77ba" + dependencies: + "@types/jasmine" "^2.2.31" + "@types/node" "^6.0.35" + "@types/q" "^0.0.30" + "@types/selenium-webdriver" "~2.53.30" + adm-zip "0.4.7" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.5.2" + jasminewd2 "0.0.10" + optimist "~0.6.0" + q "1.4.1" + saucelabs "~1.3.0" + selenium-webdriver "2.53.3" + source-map-support "~0.4.0" + webdriver-manager "^10.2.2" + +proxy-addr@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" + dependencies: + forwarded "~0.1.0" + ipaddr.js "1.1.1" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +psi@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/psi/-/psi-2.0.4.tgz#79312479fb84df386bc2fca6a27d7282fc9c77f7" + dependencies: + chalk "^1.1.1" + download "^4.4.1" + googleapis "^7.1.0" + humanize-url "^1.0.1" + lodash "^4.5.1" + meow "^3.5.0" + object-assign "^4.0.1" + pify "^2.3.0" + pinkie-promise "^2.0.0" + prepend-http "^1.0.3" + pretty-bytes "^3.0.1" + repeating "^2.0.0" + sort-on "^1.2.2" + update-notifier "^0.6.0" + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +q@^1.1.2, q@^1.4.1, q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + +qjobs@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" + +qs@^6.1.0, qs@~6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" + +qs@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" + +qs@~6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.1.0.tgz#ec1d1626b24278d99f0fdf4549e524e24eceeb26" + +qs@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" + +query-string@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-3.0.3.tgz#ae2e14b4d05071d4e9b9eb4873c35b0dcd42e638" + dependencies: + strict-uri-encode "^1.0.0" + +query-string@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822" + 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.5" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +range-parser@^1.0.3, range-parser@^1.2.0, 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.1.7: + version "2.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.13" + unpipe "1.0.0" + +rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~1.0.4" + +react-deep-force-update@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" + +react-deep-force-update@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" + +react-dock@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/react-dock/-/react-dock-0.2.3.tgz#a25461564f3cf64ab5b7098e7546036066a9c0e2" + dependencies: + lodash.debounce "^3.1.1" + object-assign "^4.0.1" + +"react-dom@^0.14.0 || ^15.0.0", react-dom@15.3.2: + version "15.3.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f" + +react-hot-loader@3.0.0-beta.5: + version "3.0.0-beta.5" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.5.tgz#d7f97d15ef50a5433f17ba5d19c6ee1a7242170e" + dependencies: + babel-template "^6.7.0" + global "^4.3.0" + react-deep-force-update "^2.0.1" + react-proxy "^3.0.0-alpha.0" + redbox-react "^1.2.5" + source-map "^0.4.4" + +react-json-tree@^0.6.6: + version "0.6.8" + resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.6.8.tgz#e844f431f759c94c55783556300844fb3b35e623" + dependencies: + babel-plugin-transform-runtime "^6.5.0" + babel-runtime "^6.3.13" + react-mixin "^1.7.0" + react-pure-render "^1.0.2" + +react-mixin@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/react-mixin/-/react-mixin-1.7.0.tgz#38c22c3eb02064f08f2c25878a60dac3e956f44c" + dependencies: + object-assign "^2.0.0" + smart-mixin "^1.2.0" + +react-proxy-loader@0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/react-proxy-loader/-/react-proxy-loader-0.3.4.tgz#49dfeafa49d6637b0c7428ba7c0d39abb08094ca" + dependencies: + loader-utils "~0.2.6" + +react-proxy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" + dependencies: + lodash "^4.6.1" + react-deep-force-update "^1.0.0" + +react-proxy@^3.0.0-alpha.0: + version "3.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" + dependencies: + lodash "^4.6.1" + +react-pure-render@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" + +react-redux@^4.0.0, react-redux@4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.5.tgz#f509a2981be2252d10c629ef7c559347a4aec457" + dependencies: + hoist-non-react-statics "^1.0.3" + invariant "^2.0.0" + lodash "^4.2.0" + loose-envify "^1.1.0" + +react-router@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-2.8.1.tgz#73e9491f6ceb316d0f779829081863e378ee4ed7" + dependencies: + history "^2.1.2" + hoist-non-react-statics "^1.2.0" + invariant "^2.2.1" + loose-envify "^1.2.0" + warning "^3.0.0" + +react-tap-event-plugin@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/react-tap-event-plugin/-/react-tap-event-plugin-1.0.0.tgz#7a248505a9e9abecc352b2dab313d17685c51adf" + dependencies: + fbjs "^0.2.1" + +react-transform-catch-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz#1b4d4a76e97271896fc16fe3086c793ec88a9eeb" + +react-transform-hmr@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + dependencies: + global "^4.3.0" + react-proxy "^1.1.7" + +react@15.3.2: + version "15.3.2" + resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e" + dependencies: + fbjs "^0.8.4" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +read-all-stream@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" + dependencies: + pinkie-promise "^2.0.0" + readable-stream "^2.0.0" + +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +read-json@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/read-json/-/read-json-1.0.3.tgz#872e3a23abeee86210c8a2021e7976e43aa9a4d1" + dependencies: + try-call "0.0.2" + +read-package-json@^2.0.0, read-package-json@~2.0.4, "read-package-json@1 || 2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.4.tgz#61ed1b2256ea438d8008895090be84b8e799c853" + dependencies: + glob "^6.0.0" + json-parse-helpfulerror "^1.0.2" + normalize-package-data "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read@~1.0.1, read@~1.0.7, read@1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + dependencies: + mute-stream "~0.0.4" + +readable-stream@^1.0.27-1, readable-stream@^1.1.13, readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@~2.1.4, readable-stream@~2.1.5, "readable-stream@1 || 2": + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.2: + 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@~2.0.0, readable-stream@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +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" + +realize-package-specifier@~3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/realize-package-specifier/-/realize-package-specifier-3.0.3.tgz#d0def882952b8de3f67eba5e91199661271f41f4" + dependencies: + dezalgo "^1.0.1" + npm-package-arg "^4.1.1" + +redbox-react@^1.2.10, redbox-react@^1.2.2, redbox-react@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.1.tgz#02ea395f93442ac43e5363004d50a9cd1327ce41" + dependencies: + error-stack-parser "^1.3.6" + object-assign "^4.0.1" + react-dom "^0.14.0 || ^15.0.0" + +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" + +redeyed@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-0.5.0.tgz#7ab000e60ee3875ac115d29edb32c1403c6c25d1" + dependencies: + esprima-fb "~12001.1.0-dev-harmony-fb" + +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.1" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.1.tgz#fa02e126e695824263cab91d3a5b0fdc1dd27a9a" + dependencies: + balanced-match "~0.1.0" + +redux-devtools-dock-monitor@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/redux-devtools-dock-monitor/-/redux-devtools-dock-monitor-1.1.1.tgz#6ef4ff5a7c42f5d7fa39c34859a8f4eb4dee9947" + dependencies: + babel-runtime "^6.2.0" + parse-key "^0.2.1" + react-dock "^0.2.1" + react-pure-render "^1.0.2" + +redux-devtools-instrument@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.3.2.tgz#47c0e5df5daf22bf2fbc267e779b150159c87b9c" + dependencies: + lodash "^4.2.0" + symbol-observable "^0.2.4" + +redux-devtools-log-monitor@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.0.11.tgz#3dd841eed8bdb1733f7cb826557e92c982c5ede8" + dependencies: + lodash.debounce "^4.0.4" + react-json-tree "^0.6.6" + react-pure-render "^1.0.2" + redux-devtools-themes "^1.0.0" + +redux-devtools-themes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redux-devtools-themes/-/redux-devtools-themes-1.0.0.tgz#c482dce3c5373976045f40134907d9dcb3ae3d5d" + dependencies: + base16 "^1.0.0" + +redux-devtools@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.3.1.tgz#e2ed0b5335310935a25bbc73c60c09e522182850" + dependencies: + lodash "^4.2.0" + react-redux "^4.0.0" + redux "^3.5.2" + redux-devtools-instrument "^1.0.1" + +redux@^3.5.2, redux@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.2" + +regenerate@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.1.tgz#0300203a5d2fdcf89116dce84275d011f5903f33" + +regenerator-runtime@^0.9.5: + version "0.9.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz#403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +regexpu-core@^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" + +registry-auth-token@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.0.1.tgz#c3ee5ec585bce29f88bf41629a3944c71ed53e25" + dependencies: + rc "^1.1.6" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +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" + +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@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" + +repeat-string@^1.5.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.5.4.tgz#64ec0c91e0f4b475f90d5b643651e3e6e5b6c2d5" + +repeating@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" + dependencies: + is-finite "^1.0.0" + +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.54.0, request@^2.61.0, request@^2.69.0, request@^2.72.0, request@^2.74.0, request@2, request@2.75.0, request@2.x: + version "2.75.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.0.0" + 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" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.2.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + +request@~2.60.0: + version "2.60.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.60.0.tgz#498820957fcdded1d37749069610c85f61a29f2d" + dependencies: + aws-sign2 "~0.5.0" + bl "~1.0.0" + caseless "~0.11.0" + combined-stream "~1.0.1" + extend "~3.0.0" + forever-agent "~0.6.0" + form-data "~1.0.0-rc1" + har-validator "^1.6.1" + hawk "~3.1.0" + http-signature "~0.11.0" + isstream "~0.1.1" + json-stringify-safe "~5.0.0" + mime-types "~2.1.2" + node-uuid "~1.4.0" + oauth-sign "~0.8.0" + qs "~4.0.0" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + tunnel-agent "~0.4.0" + +request@~2.72.0: + version "2.72.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~1.0.0-rc3" + 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" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.1.0" + stringstream "~0.0.4" + tough-cookie "~2.2.0" + tunnel-agent "~0.4.1" + +request@~2.74.0: + version "2.74.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~1.0.0-rc4" + 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" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.2.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +require-uncached@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.2.tgz#67dad3b733089e77030124678a459589faf6a7ec" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve-url@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@^1.1.6, resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +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@^0.10.0, retry@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.0.tgz#649e15ca408422d98318161935e7f7d652d435dd" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@~2.5.0, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + 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" + +run-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +run-parallel@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039" + +run-series@^1.0.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.4.tgz#89a73ddc5e75c9ef8ab6320c0a1600d6a41179b9" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +safe-json-parse@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-2.0.0.tgz#6da43f2e4a864335773b1d2df0db2c1962a0beec" + +sass-graph@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + yargs "^4.7.1" + +sass-loader@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.0.2.tgz#a616eb770366543e64f547c8630f39c4da75f15d" + dependencies: + async "^2.0.1" + loader-utils "^0.2.15" + object-assign "^4.1.0" + +saucelabs@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee" + dependencies: + https-proxy-agent "^1.0.0" + +sax@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + +sax@0.6.x: + version "0.6.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" + +seek-bzip@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + dependencies: + commander "~2.8.1" + +selenium-webdriver@2.53.3: + version "2.53.3" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085" + dependencies: + adm-zip "0.4.4" + rimraf "^2.2.8" + tmp "0.0.24" + ws "^1.0.1" + xml2js "0.4.4" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@~5.3.0, "semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5": + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +semver@^4.0.3, semver@~4.3.3: + version "4.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + +semver@~5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" + +semver@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" + +send@0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" + dependencies: + debug "~2.2.0" + depd "~1.1.0" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.7.0" + fresh "0.3.0" + http-errors "~1.5.0" + mime "1.3.4" + ms "0.7.1" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.0" + +sentence-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.0.tgz#d592fbed457fd1a59e3af0ee17e99f6fd70d7efd" + dependencies: + no-case "^2.2.0" + upper-case-first "^1.1.2" + +serve-static@~1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.1" + send "0.14.1" + +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.0, 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" + +setprototypeof@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.1.tgz#52009b27888c4dc48f591949c0a8275834c1ca7e" + +sha.js@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" + +sha@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" + dependencies: + graceful-fs "^4.1.2" + readable-stream "^2.0.2" + +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.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" + +signal-exit@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +smart-mixin@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/smart-mixin/-/smart-mixin-1.2.1.tgz#11a2b3e4628dfee16ac9cb51edd301be21be1452" + +snake-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + dependencies: + no-case "^2.2.0" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +socket.io-adapter@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.4.0.tgz#fb9f82ab1aa65290bf72c3657955b930a991a24f" + dependencies: + debug "2.2.0" + socket.io-parser "2.2.2" + +socket.io-client@1.4.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.4.6.tgz#49b0ba537efd15b8297c84016e642e1c7c752c3d" + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "1.2.0" + debug "2.2.0" + engine.io-client "1.6.9" + has-binary "0.1.7" + indexof "0.0.1" + object-component "0.0.3" + parseuri "0.0.4" + socket.io-parser "2.2.6" + to-array "0.1.4" + +socket.io-parser@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.2.tgz#3d7af6b64497e956b7d9fe775f999716027f9417" + dependencies: + benchmark "1.0.0" + component-emitter "1.1.2" + debug "0.7.4" + isarray "0.0.1" + json3 "3.2.6" + +socket.io-parser@2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.6.tgz#38dfd61df50dcf8ab1d9e2091322bf902ba28b99" + dependencies: + benchmark "1.0.0" + component-emitter "1.1.2" + debug "2.2.0" + isarray "0.0.1" + json3 "3.3.2" + +socket.io@1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.4.7.tgz#92b7f7cb88c5797d4daee279fe8075dbe6d3fa1c" + dependencies: + debug "2.2.0" + engine.io "1.6.10" + has-binary "0.1.7" + socket.io-adapter "0.4.0" + socket.io-client "1.4.6" + socket.io-parser "2.2.6" + +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" + +sort-on@^1.2.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sort-on/-/sort-on-1.3.0.tgz#0dfd5b364b23df7f2acd86985daeb889e1a7c840" + dependencies: + arrify "^1.0.0" + dot-prop "^2.0.0" + +sorted-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-1.0.0.tgz#5d1f4f9c1fb2cd48965967304e212eb44cfb6d05" + +sorted-object@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" + +source-list-map@^0.1.4, source-list-map@~0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.6.tgz#e1e6f94f0b40c4d28dcf8f5b8766e0e45636877f" + +source-map-resolve@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" + dependencies: + atob "~1.1.0" + resolve-url "~0.2.1" + source-map-url "~0.3.0" + urix "~0.1.0" + +source-map-support@^0.4.2, source-map-support@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.3.tgz#693c8383d4389a4569486987c219744dfc601685" + dependencies: + source-map "^0.5.3" + +source-map-url@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" + +source-map@^0.1.38, source-map@^0.1.41, source-map@~0.1.38, 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.4, source-map@~0.4.1, source-map@0.4.x: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3, source-map@0.X: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2, spdx-license-ids@~1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +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.10.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stackframe@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" + +stat-mode@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" + +"statuses@>= 1.3.0 < 2", statuses@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.0.tgz#8e55758cb20e7682c1f4fce8dcab30bf01d1e07a" + +stream-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193" + dependencies: + inherits "~2.0.1" + readable-stream "^1.0.27-1" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +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_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-template@^0.2.0, string-template@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + +string-template@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96" + +string-width@^1.0.1: + 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" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1, 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@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + +strip-bom-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" + dependencies: + first-chunk-stream "^1.0.0" + strip-bom "^2.0.0" + +strip-bom@^2.0.0, strip-bom@2.X: + 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-dirs@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0" + dependencies: + chalk "^1.0.0" + get-stdin "^4.0.1" + is-absolute "^0.1.5" + is-natural-number "^2.0.0" + minimist "^1.1.0" + sum-up "^1.0.1" + +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-json-comments@~1.0.1, strip-json-comments@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +strip-outer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.0.tgz#aac0ba60d2e90c5d4f275fd8869fd9a2d310ffb8" + dependencies: + escape-string-regexp "^1.0.2" + +strip-url-auth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" + +style-loader@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.1.tgz#468280efbc0473023cd3a6cd56e33b5a1d7fc3a9" + dependencies: + loader-utils "^0.2.7" + +sum-up@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e" + dependencies: + chalk "^1.0.0" + +superagent@2.3.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.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +svgo@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.1.tgz#287320fed972cb097e72c2bb1685f96fe08f8034" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.2.1" + js-yaml "~3.6.1" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +swap-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" + dependencies: + lower-case "^1.1.1" + upper-case "^1.1.1" + +symbol-observable@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + +symbol-observable@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.3.tgz#0fdb005e84f346a899d492beba23068b32d1525a" + +table@^3.7.8: + version "3.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-3.8.0.tgz#252166c7f3286684a9d561b0f3a8929caf3a997b" + 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 "^1.0.1" + +tapable@^0.1.8, tapable@~0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + +tar-pack@~3.1.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.1.4.tgz#bc8cf9a22f5832739f12f3910dac1eb97b49708c" + 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-stream@^1.1.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.2.tgz#fbc6c6e83c1a19d4cb48c7d96171fc248effc7bf" + dependencies: + bl "^1.0.0" + end-of-stream "^1.0.0" + readable-stream "^2.0.0" + xtend "^4.0.0" + +tar@^2.0.0, tar@~2.2.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" + +through@^2.3.6, through@~2.3, through@~2.3.1, through@2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +through2-filter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^0.6.0, through2@^0.6.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@^2.0.0, through2@~2.0.0, through2@2.X: + version "2.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" + dependencies: + readable-stream "~2.0.0" + xtend "~4.0.0" + +time-stamp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" + +timed-out@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + +title-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.0.tgz#c68ccb4232079ded64f94b91b4941ade91391979" + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + +tmp@0.0.24: + version "0.0.24" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" + +tmp@0.0.28: + version "0.0.28" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" + dependencies: + os-tmpdir "~1.0.1" + +to-absolute-glob@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" + dependencies: + extend-shallow "^2.0.1" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + +to-fast-properties@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + +tough-cookie@>=0.12.0, tough-cookie@~2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd" + +tough-cookie@~2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + dependencies: + escape-string-regexp "^1.0.2" + +try-call@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/try-call/-/try-call-0.0.2.tgz#6e7dd18ddda109be795027b248d520e41a5d5145" + +tryit@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.2.tgz#c196b0073e6b1c595d93c9c830855b7acc32a453" + +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.4.0, tunnel-agent@~0.4.0, 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.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" + +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.13: + version "1.6.13" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.13.tgz#6e83ba7bc30cd33a7bb0b7fb00737a2085bf9d08" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.11" + +typedarray@~0.0.5: + 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.10" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.10.tgz#917559ddcce07cbc09ece7d80495e4c268f4ef9f" + +uglify-js@^2.6, uglify-js@2.7.x: + version "2.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.3.tgz#39b3a7329b89f5ec507e344c6e22568698ef4868" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-js@~2.6.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf" + 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, 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" + +umask@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + +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.0" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.0.tgz#33d9679f65022f48988a03fd24e7dcaf8f109eca" + 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-stream@^2.0.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" + dependencies: + json-stable-stringify "^1.0.0" + through2-filter "^2.0.0" + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unzip-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.1.tgz#4a73959f2989470fa503791cefb54e1dbbc68412" + +update-notifier@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.6.3.tgz#776dec8daa13e962a341e8a1d98354306b67ae08" + dependencies: + boxen "^0.3.1" + chalk "^1.0.0" + configstore "^2.0.0" + is-npm "^1.0.0" + latest-version "^2.0.0" + semver-diff "^2.0.0" + +upper-case-first@^1.1.0, upper-case-first@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + dependencies: + upper-case "^1.1.1" + +upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +urix@^0.1.0, urix@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-join@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" + +url-loader@0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.7.tgz#67e8779759f8000da74994906680c943a9b0925d" + dependencies: + loader-utils "0.2.x" + mime "1.2.x" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^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" + +url@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +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" + +useragent@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.9.tgz#4dba2bc4dad1875777ab15de3ff8098b475000b7" + dependencies: + lru-cache "2.2.x" + +utf8@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.0.tgz#0cfec5c8052d44a23e3aaa908104e8075f95dfd5" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util-extend@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" + +util@^0.10.3, 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" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +uuid@^2.0.1, uuid@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +vali-date@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" + +validate-npm-package-license@^3.0.1, 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" + +validate-npm-package-name@^2.0.1, validate-npm-package-name@~2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-2.2.2.tgz#f65695b22f7324442019a3c7fa39a6e7fd299085" + dependencies: + builtins "0.0.7" + +vary@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vinyl-assign@^1.0.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/vinyl-assign/-/vinyl-assign-1.2.1.tgz#4d198891b5515911d771a8cd9c5480a46a074a45" + dependencies: + object-assign "^4.0.1" + readable-stream "^2.0.0" + +vinyl-fs@^2.2.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.3.tgz#3d97e562ebfdd4b66921dea70626b84bde9d2d07" + dependencies: + duplexify "^3.2.0" + glob-stream "^5.3.2" + graceful-fs "^4.0.0" + gulp-sourcemaps "^1.5.2" + is-valid-glob "^0.3.0" + lazystream "^1.0.0" + lodash.isequal "^4.0.0" + merge-stream "^1.0.0" + mkdirp "^0.5.0" + object-assign "^4.0.0" + readable-stream "^2.0.4" + strip-bom "^2.0.0" + strip-bom-stream "^1.0.0" + through2 "^2.0.0" + through2-filter "^2.0.0" + vali-date "^1.0.0" + vinyl "^1.0.0" + +vinyl@^0.4.3: + version "0.4.6" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" + dependencies: + clone "^0.2.0" + clone-stats "^0.0.1" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vinyl@^1.0.0, vinyl@1.X: + 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.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + +ware@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4" + dependencies: + wrap-fn "^0.1.0" + +warning@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-2.1.0.tgz#21220d9c63afc77a8c92111e011af705ce0c6901" + dependencies: + loose-envify "^1.0.0" + +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" + +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + dependencies: + defaults "^1.0.3" + +webdriver-manager@^10.2.2: + version "10.2.3" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.2.3.tgz#b79f57afb26363712bd7bc082759110c27052bf7" + dependencies: + adm-zip "^0.4.7" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.69.0" + rimraf "^2.5.2" + +webpack-core@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.4.8.tgz#07fc55aba81d17dba8cae5a43d6bd69236f8b5f8" + dependencies: + source-map "~0.1.38" + +webpack-core@~0.6.0: + version "0.6.8" + resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.8.tgz#edf9135de00a6a3c26dd0f14b208af0aa4af8d0a" + dependencies: + source-list-map "~0.1.0" + source-map "~0.4.1" + +webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.6.1: + version "1.8.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.8.4.tgz#e8765c9122887ce9e3abd4cc9c3eb31b61e0948d" + dependencies: + memory-fs "~0.3.0" + mime "^1.3.4" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + +webpack-hot-middleware@^2.12.1: + version "2.13.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.13.0.tgz#aee39c058ff130a5916e2c5a762513241c87064f" + dependencies: + ansi-html "0.0.5" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + +webpack-sources@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.2.tgz#057a3f3255f8ba561b901d9150589aa103a57e65" + dependencies: + source-list-map "~0.1.0" + source-map "~0.5.3" + +webpack@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.2.tgz#f11a96f458eb752970a86abe746c0704fabafaf3" + 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.6.0" + optimist "~0.6.0" + supports-color "^3.1.0" + tapable "~0.1.8" + uglify-js "~2.6.0" + watchpack "^0.2.1" + webpack-core "~0.6.0" + +whatwg-fetch@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" + +whatwg-fetch@>=0.10.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e" + +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@^1.1.1, which@^1.2.1, which@^1.2.9, which@~1.2.10, which@~1.2.11, which@1: + version "1.2.11" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.11.tgz#c8b2eeea6b8c1659fa7c1dd4fdaabe9533dc5e8b" + dependencies: + isexe "^1.1.1" + +wide-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + dependencies: + string-width "^1.0.1" + +widest-line@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + dependencies: + string-width "^1.0.1" + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@^1.0.0, wordwrap@>=0.0.2, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wrap-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.0.0.tgz#7d30f8f873f9a5bbc3a64dabc8d177e071ae426f" + dependencies: + string-width "^1.0.1" + +wrap-fn@^0.1.0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845" + dependencies: + co "3.1.0" + +wrappy@~1.0.2, wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab" + dependencies: + graceful-fs "^4.1.2" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b" + dependencies: + graceful-fs "^4.1.2" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +ws@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +xdg-basedir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" + dependencies: + os-homedir "^1.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" + +xml2js@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d" + dependencies: + sax "0.6.x" + xmlbuilder ">=1.0.0" + +xmlbuilder@>=1.0.0: + version "8.2.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + +xmlhttprequest-ssl@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67" + +xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + dependencies: + object-keys "~0.4.0" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" + +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@^4.7.1: + 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@~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.2.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.6.0.tgz#40894d4587bb125500d05df45471cd5e114a76f9" + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.0.1" + +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" + From 2f5ef37aeffe7fd6d3f8f7d0d7a908221727e872 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 12 Oct 2016 09:31:57 -0600 Subject: [PATCH 204/452] Adds jasmine as dependency --- client/package.json | 1 + client/yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/client/package.json b/client/package.json index 9e114e1..b8621c1 100644 --- a/client/package.json +++ b/client/package.json @@ -72,6 +72,7 @@ "imports-loader": "0.6.5", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "1.0.0", + "jasmine": "^2.5.2", "jasmine-core": "2.5.2", "karma": "1.3.0", "karma-chrome-launcher": "2.0.0", diff --git a/client/yarn.lock b/client/yarn.lock index cd40d8a..34acf84 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -102,7 +102,7 @@ ansi-html@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.5.tgz#0dcaa5a081206866bc240a3b773a184ea3b88b64" -ansi-regex@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" @@ -3427,7 +3427,7 @@ imports-loader@0.6.5: loader-utils "0.2.x" source-map "0.1.x" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3819,7 +3819,7 @@ jasmine-core@~2.5.2, jasmine-core@2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" -jasmine@2.5.2: +jasmine@^2.5.2, jasmine@2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.2.tgz#6283cef7085c095cc25d651e954df004f7e3e421" dependencies: From 385996bdc22154f9da562be25d817827c84fe889 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 18 Oct 2016 18:23:34 -0600 Subject: [PATCH 205/452] Updated packages --- client/package.json | 2 +- client/yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/package.json b/client/package.json index b8621c1..e9491ee 100644 --- a/client/package.json +++ b/client/package.json @@ -97,7 +97,7 @@ "phantomjs-prebuilt": "^2.1.7", "protractor": "4.0.9", "psi": "2.0.4", - "react-hot-loader": "3.0.0-beta.5", + "react-hot-loader": "3.0.0-beta.6", "react-transform-catch-errors": "^1.0.2", "redbox-react": "^1.2.10", "redux-devtools": "3.3.1", diff --git a/client/yarn.lock b/client/yarn.lock index 34acf84..b1fbc09 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -5650,9 +5650,9 @@ react-dock@^0.2.1: version "15.3.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f" -react-hot-loader@3.0.0-beta.5: - version "3.0.0-beta.5" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.5.tgz#d7f97d15ef50a5433f17ba5d19c6ee1a7242170e" +react-hot-loader@3.0.0-beta.6: + version "3.0.0-beta.6" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4" dependencies: babel-template "^6.7.0" global "^4.3.0" From 4589a4796098b33915d05e6cd1480415108280c1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 19 Oct 2016 10:47:59 -0600 Subject: [PATCH 206/452] Remove bootstrap css --- client/styles/_defines.scss | 59 ------------------------------------- client/styles/styles.less | 2 -- client/styles/styles.scss | 2 -- 3 files changed, 63 deletions(-) diff --git a/client/styles/_defines.scss b/client/styles/_defines.scss index d39b4f8..a85705e 100644 --- a/client/styles/_defines.scss +++ b/client/styles/_defines.scss @@ -1,61 +1,2 @@ -$icon-font-path: '../fonts/bootstrap'; -$fa-font-path: '../fonts'; - $white: #fff; $black: #000; - -// Flat UI -$clouds_light: #ecf0f5; -$clouds: #ECF0F1; -$silver: #BDC3C7; -$transparent_clouds: rgba(236, 240, 241, 0.2); - -$asbestos: #7F8C8D; -$concrete: #95A5A6; - -$midnight_blue: #2C3E50; -$wet_asphalt: #34495E; - -$peter_river: #3498DB; -$belize_hole: #2980B9; - -$sun_flower: #F1C40F; -$transparent_sun_flower: rgba(241, 196, 15, 0.5); -$orange: #F39C12; - -$carrot: #E67E22; -$pumpkin: #D35400; - -$alizarin: #e74c3c; -$pomegranate: #c0392b; - -$turquoise: #1ABC9C; -$green_sea: #16A085; - -$emerald: #2ecc71; -$nephritis: #27ae60; - -$amethyst: #9b59b6; -$wisteria: #8e44ad; - -$text_color: $midnight_blue; -$background_color: $white; - -$navbar_inverse_bg: $midnight_blue; -$navbar_inverse_link_active_bg: $midnight_blue; - -$width: 960px; -$label_width: 122px; -$border_color: $silver; -$border_radius: 5px; -$message_width: 86%; -$font_family: "Lucida Grande",Tahoma,Arial,Verdana,sans-serif; -$font_size_error: 18px; - - -$btn_color: $white; -$input_border: $silver; -$border_color: $silver; - -$btn_background_color: $midnight_blue; -$btn_background_color_highlight: $wet_asphalt; diff --git a/client/styles/styles.less b/client/styles/styles.less index aed6564..e69de29 100644 --- a/client/styles/styles.less +++ b/client/styles/styles.less @@ -1,2 +0,0 @@ -// styles.less can be -// @import "../node_modules/bootstrap/less/bootstrap"; \ No newline at end of file diff --git a/client/styles/styles.scss b/client/styles/styles.scss index 3398875..de9807e 100644 --- a/client/styles/styles.scss +++ b/client/styles/styles.scss @@ -1,3 +1 @@ @import '_defines'; -//@import '../../node_modules/font-awesome/scss/font-awesome'; -//@import '../../node_modules/bootstrap-sass/assets/stylesheets/bootstrap'; \ No newline at end of file From e12119f07e3b61b049770d252c91763c6b8d23c7 Mon Sep 17 00:00:00 2001 From: David Spencer Date: Fri, 21 Oct 2016 15:07:26 -0600 Subject: [PATCH 207/452] Remove old react-hot-loader things Remove react-hmre because hot loader 3 replaces it, and remove react-transform because react hot loader 3 replaces that as well --- client/config/webpack.config.js | 2 +- client/package.json | 3 --- client/yarn.lock | 39 +-------------------------------- 3 files changed, 2 insertions(+), 42 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 8507502..b82ec71 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -31,7 +31,7 @@ module.exports = function(stage){ ',presets[]=stage-0'; // Enables experimental ES features. if(development){ - presets = presets + ',presets[]=react-hmre'; // Adds react hot module reload + plugins = plugins + ',plugins[]=react-hot-loader/babel'; } else if (production) { plugins = plugins + ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement plugins = plugins + ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code diff --git a/client/package.json b/client/package.json index e9491ee..74d52ad 100644 --- a/client/package.json +++ b/client/package.json @@ -40,7 +40,6 @@ "babel-core": "^6.10.4", "babel-eslint": "^7.0.0", "babel-loader": "^6.2.4", - "babel-plugin-react-transform": "^2.0.2", "babel-plugin-transform-class-properties": "^6.10.2", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.9.1", @@ -49,7 +48,6 @@ "babel-plugin-transform-runtime": "^6.9.0", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.11.1", - "babel-preset-react-hmre": "^1.1.1", "babel-preset-stage-0": "^6.5.0", "chunk-manifest-webpack-plugin": "0.1.0", "coveralls": "2.11.14", @@ -98,7 +96,6 @@ "protractor": "4.0.9", "psi": "2.0.4", "react-hot-loader": "3.0.0-beta.6", - "react-transform-catch-errors": "^1.0.2", "redbox-react": "^1.2.10", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", diff --git a/client/yarn.lock b/client/yarn.lock index b1fbc09..32eeaaf 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -531,12 +531,6 @@ babel-plugin-check-es2015-constants@^6.3.13: dependencies: babel-runtime "^6.0.0" -babel-plugin-react-transform@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-2.0.2.tgz#515bbfa996893981142d90b1f9b1635de2995109" - dependencies: - lodash "^4.6.1" - babel-plugin-syntax-async-functions@^6.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" @@ -954,15 +948,6 @@ babel-preset-es2015@^6.9.0: babel-plugin-transform-es2015-unicode-regex "^6.3.13" babel-plugin-transform-regenerator "^6.16.0" -babel-preset-react-hmre@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-hmre/-/babel-preset-react-hmre-1.1.1.tgz#d216e60cb5b8d4c873e19ed0f54eaff1437bc492" - dependencies: - babel-plugin-react-transform "^2.0.2" - react-transform-catch-errors "^1.0.2" - react-transform-hmr "^1.0.3" - redbox-react "^1.2.2" - babel-preset-react@^6.11.1: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316" @@ -5631,10 +5616,6 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.0: minimist "^1.2.0" strip-json-comments "~1.0.4" -react-deep-force-update@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.0.1.tgz#f911b5be1d2a6fe387507dd6e9a767aa2924b4c7" - react-deep-force-update@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" @@ -5683,13 +5664,6 @@ react-proxy-loader@0.3.4: dependencies: loader-utils "~0.2.6" -react-proxy@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" - dependencies: - lodash "^4.6.1" - react-deep-force-update "^1.0.0" - react-proxy@^3.0.0-alpha.0: version "3.0.0-alpha.1" resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" @@ -5725,17 +5699,6 @@ react-tap-event-plugin@1.0.0: dependencies: fbjs "^0.2.1" -react-transform-catch-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz#1b4d4a76e97271896fc16fe3086c793ec88a9eeb" - -react-transform-hmr@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" - dependencies: - global "^4.3.0" - react-proxy "^1.1.7" - react@15.3.2: version "15.3.2" resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e" @@ -5875,7 +5838,7 @@ realize-package-specifier@~3.0.1: dezalgo "^1.0.1" npm-package-arg "^4.1.1" -redbox-react@^1.2.10, redbox-react@^1.2.2, redbox-react@^1.2.5: +redbox-react@^1.2.10, redbox-react@^1.2.5: version "1.3.1" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.1.tgz#02ea395f93442ac43e5363004d50a9cd1327ce41" dependencies: From 1596f20e223b9c474f049d20328b123b26a3623d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 24 Oct 2016 15:02:29 -0600 Subject: [PATCH 208/452] Updates node version and del package --- .nvmrc | 2 +- package.json | 2 +- yarn.lock | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.nvmrc b/.nvmrc index a620310..6a1fccf 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -5.10.1 \ No newline at end of file +6.9.0 \ No newline at end of file diff --git a/package.json b/package.json index 0cf6e60..346a2d1 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "license": "MIT", "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { - "del": "^2.2.0" + "del": "^2.2.2" }, "devDependencies": {} } diff --git a/yarn.lock b/yarn.lock index 72405fe..dcd92f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,7 +29,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -del@^2.2.0: +del@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" dependencies: From b4b584ba82898994b2443f247597f246d6b552ab Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 24 Oct 2016 17:40:32 -0600 Subject: [PATCH 209/452] Fixes error handling in middleware --- client/js/middleware/api.js | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index b7723d6..90253bb 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -7,15 +7,24 @@ const API = store => next => action => { const state = store.getState(); const promise = api.execRequest(method, url, state.settings.apiUrl, state.jwt, state.settings.csrfToken, params, body); if(promise){ - promise.then((response, error) => { - store.dispatch({ - type: action.type + DONE, - payload: response.body, - original: action, - response, - error - }); // Dispatch the new data - }); + promise.then( + (response) => { + store.dispatch({ + type: action.type + DONE, + payload: response.body, + original: action, + response + }); // Dispatch the new data + }, + (error) => { + store.dispatch({ + type: action.type + DONE, + payload: {}, + original: action, + error + }); // Dispatch the new error + } + ); } }; From d6b5213efdadbb17a125f9390c57b54184b8793c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 25 Oct 2016 17:13:52 -0600 Subject: [PATCH 210/452] Fix asset path in spec --- client/js/libs/assets.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/libs/assets.spec.js b/client/js/libs/assets.spec.js index cc7d099..8819716 100644 --- a/client/js/libs/assets.spec.js +++ b/client/js/libs/assets.spec.js @@ -14,7 +14,7 @@ describe('assets', () => { expect(svg).toBe('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0zOTIgNDc3LjcgMjE0IDQ3LjMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTM5MiA0NzcuNyAyMTQgNDcuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6I0ZDQ0MwRjt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMTcuNCw0OTEuNWM1LjEtMC4xLDkuMiwzLjksOS4zLDlzLTMuOSw5LjEtOS4xLDkuMmMtNS4yLDAuMS05LjItMy44LTkuMy05DQoJCUMtMjI2LjYsNDk1LjQtMjIyLjgsNDkxLjYtMjE3LjQsNDkxLjV6IE0tMjExLjgsNTAwLjZjMC0xLjItMC4zLTIuMy0xLTMuM2MtMi4yLTMuNS02LjktMy42LTktMC4xYy0xLjQsMi4yLTEuMiw1LjMsMC4zLDcuMw0KCQljMS44LDIuNSw1LjMsMi44LDcuNiwwLjhDLTIxMi41LDUwNC0yMTEuOSw1MDIuNC0yMTEuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI0Ni4zLDUwNC40bDIuNCwxLjljMC4xLDAuMSwwLjEsMC4zLDAsMC40Yy0yLjMsMi41LTYuMiwzLjktMTAsMi41Yy0zLjktMS40LTYuNC01LjEtNi4yLTkuMQ0KCQljMC4yLTMuOCwzLjItNy4yLDcuMi04LjNjMy4yLTAuOCw3LjEsMC40LDguNywyLjdjMC4xLDAuMSwwLDAuMy0wLjEsMC4zbC0yLjQsMS45Yy0wLjEsMC4xLTAuMywwLjEtMC40LTAuMQ0KCQljLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4zYy0yLjYtMi44LTUuOC0xLjktNy42LDAuMmMtMi4zLDIuNi0yLDYuNywwLjcsOC45YzIuMSwxLjcsNC44LDEuNSw2LjgtMC40YzAuMi0wLjIsMC40LTAuNCwwLjctMC42DQoJCUMtMjQ2LjUsNTA0LjMtMjQ2LjQsNTA0LjMtMjQ2LjMsNTA0LjR6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMDQuOSw0OTEuOGgzYzAuMiwwLDAuMywwLjEsMC4zLDAuM3YxNGMwLDAuMiwwLjEsMC4zLDAuMywwLjNoNy40YzAuMiwwLDAuMywwLjEsMC4zLDAuM3YyLjMNCgkJYzAsMC4yLTAuMSwwLjMtMC4zLDAuM0gtMjA1Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjN2LTE2LjlDLTIwNS4zLDQ5Mi0yMDUuMSw0OTEuOC0yMDQuOSw0OTEuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI4NS41LDUwOS42aC0zLjRjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtMTcuNmMwLTAuMSwwLjEtMC4yLDAuMi0wLjFjMywzLjEsNS45LDYuMSw4LjgsOS4xDQoJCWMwLDAuMSwwLjEsMC4xLDAuMiwwYzIuOS0zLDUuOC02LDguNy05LjFjMC4xLTAuMSwwLjIsMCwwLjIsMC4xdjE3LjZjMCwwLjEtMC4xLDAuMS0wLjEsMC4xaC0zLjNjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtOS4yDQoJCWMtMC4yLTAuMS0wLjItMC4xLTAuMy0wLjFjLTEuNywxLjctMy40LDMuNC01LjEsNS4yYzAsMC0wLjEsMC0wLjIsMGMtMS43LTEuNy0zLjQtMy41LTUuMS01LjNjLTAuMS0wLjEtMC4yLDAtMC4yLDAuMXY5LjQNCgkJQy0yODUuNCw1MDkuNS0yODUuNCw1MDkuNi0yODUuNSw1MDkuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMwMS4zLDQ5MS41YzUuMS0wLjEsOS4yLDMuOSw5LjMsOXMtMy45LDkuMS05LjEsOS4yYy01LjIsMC4xLTkuMi0zLjgtOS4zLTkuMQ0KCQlDLTMxMC41LDQ5NS40LTMwNi43LDQ5MS42LTMwMS4zLDQ5MS41eiBNLTMwNi44LDUwMC42YzAuMSwwLjYsMC4xLDEuMywwLjMsMS45YzAuNiwyLDEuOCwzLjQsMy44LDRjMiwwLjUsMy43LDAsNS4yLTEuNQ0KCQljMi4xLTIuMiwyLjItNS44LDAuMy04LjJjLTEuMy0xLjYtMy0yLjQtNS4yLTJDLTMwNSw0OTUuMy0zMDYuNyw0OTcuNi0zMDYuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMzMi44LDQ5MS40YzIuOCw1LjksNS42LDExLjcsOC40LDE3LjVjMC4xLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjcsMC0xLjMsMC0yLDBjLTAuNSwwLTEuMiwwLjItMS41LTAuMQ0KCQljLTAuNC0wLjItMC41LTAuOS0wLjctMS40Yy0wLjMtMC43LTAuNi0xLjQtMC45LTJjLTAuMS0wLjItMC4zLTAuMy0wLjUtMC4zYy0xLjksMC0zLjcsMC01LjYsMGMtMC4zLDAtMC41LDAuMS0wLjYsMC40DQoJCWMtMC40LDEtMC44LDEuOS0xLjIsMi45Yy0wLjEsMC4zLTAuNSwwLjUtMC44LDAuNWMtMSwwLTIsMC0zLDBjLTAuMSwwLTAuMi0wLjEtMC4xLTAuMmMyLjgtNS45LDUuNi0xMS42LDguNC0xNy41DQoJCUMtMzMzLDQ5MS4zLTMzMi44LDQ5MS4zLTMzMi44LDQ5MS40eiBNLTMzMyw0OTguNGwtMS43LDMuOGMwLDAuMSwwLDAuMiwwLjEsMC4yaDMuM2MwLjEsMCwwLjItMC4xLDAuMS0wLjJsLTEuNi0zLjgNCgkJQy0zMzIuOCw0OTguMy0zMzMsNDk4LjMtMzMzLDQ5OC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzI1LjEsNDk0LjZ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41YzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtNC41DQoJCWMtMC4xLDAtMC4yLDAuMS0wLjIsMC4ydjE0LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTVjMC0wLjEtMC4xLTAuMi0wLjItMC4yaC00LjUNCgkJQy0zMjUsNDk0LjgtMzI1LjEsNDk0LjctMzI1LjEsNDk0LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMzMsNDkxLjdoMy4yYzAuMSwwLDAuMywwLjEsMC4zLDAuM2MwLDAuMSwwLDAuMiwwLDAuMmMwLDQuOSwwLDEwLjMsMCwxNS4zYzAsMy44LTIuNSw3LTYuMSw3LjkNCgkJYy0wLjYsMC4yLTEuMywwLjItMiwwLjNjLTAuMiwwLTAuMy0wLjEtMC4zLTAuM3YtMi42YzAtMC4xLDAuMS0wLjMsMC4yLTAuM2MwLjMsMCwwLjYsMCwwLjktMC4xYzEuOC0wLjQsMy4yLTIsMy40LTQNCgkJYzAtMC40LDAuMS0wLjksMC4xLTEuM2MwLTQuOCwwLTEwLDAtMTQuOHYtMC40Qy0yMzMuMyw0OTEuOS0yMzMuMiw0OTEuNy0yMzMsNDkxLjd6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjYuNiw0OTEuOGgzLjJjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjE3LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTINCgkJQy0yNjYuOCw0OTEuOS0yNjYuOCw0OTEuOC0yNjYuNiw0OTEuOHoiLz4NCgk8Zz4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xODkuNCw0OTQuOGgtNC41Yy0wLjEsMC0wLjItMC4xLTAuMi0wLjJ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41DQoJCQljMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC00LjVjLTAuMSwwLTAuMiwwLjEtMC4yLDAuMnYxNC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtMy4yYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJWNDk1DQoJCQlDLTE4OS4xLDQ5NC45LTE4OS4yLDQ5NC44LTE4OS40LDQ5NC44eiIvPg0KCTwvZz4NCjwvZz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzYyLDQ4NS44bC04LjctN2MtMC4xLTAuMS0wLjItMC4xLTAuMywwbC0xOC4zLDI2LjVjLTAuMSwwLjEsMCwwLjIsMCwwLjJsMTUsMTZjMCwwLjEsMC4xLDAuMSwwLjIsMC4xDQoJbDE5LjItNS4xYzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtNy4zLTMwLjRDLTM2MS45LDQ4NS45LTM2Miw0ODUuOS0zNjIsNDg1Ljh6IE0tMzc5LjcsNTEyLjVsMTEuMi0xNmMwLjEtMC4xLDAuMy0wLjEsMC40LDAuMQ0KCWwyLjcsMTIuOWMwLDAuMSwwLDAuMi0wLjEsMC4ybC0xMy4zLDMuN2MtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMC41LTAuNUMtMzc5LjgsNTEyLjctMzc5LjgsNTEyLjYtMzc5LjcsNTEyLjV6IE0tMzY3LjMsNDkxDQoJTC0zNjcuMyw0OTFsLTEuNy03LjdjMC0wLjIsMC4yLTAuMywwLjMtMC4ybDQuMywzLjRjMC4xLDAuMSwwLjEsMC4yLDAsMC4zTC0zNjcuMyw0OTFMLTM2Ny4zLDQ5MXogTS0zNzEuMSw0ODMuM2wyLjIsMTANCgljMCwwLjEsMCwwLjEsMCwwLjJsLTEyLjIsMTcuNGMtMC4xLDAuMS0wLjIsMC4xLTAuMywwbC01LjEtNS41Yy0wLjEtMC4xLTAuMS0wLjIsMC0wLjJsMTUuMi0yMg0KCUMtMzcxLjQsNDgzLjEtMzcxLjEsNDgzLjEtMzcxLjEsNDgzLjN6IE0tMzc3LjIsNTE1bDEzLjktMy45YzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtMy41LTE3YzAtMC4xLDAtMC4xLDAtMC4ybDMuMS00LjQNCgljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjFsNi4yLDI1LjVjMCwwLjEsMCwwLjItMC4xLDAuMmwtMTYuMSw0LjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTMuOC00Qy0zNzcuNCw1MTUuMi0zNzcuNCw1MTUtMzc3LjIsNTE1eiINCgkvPg0KPC9zdmc+DQo='); const big = assets('./images/atomicjolt.png'); - expect(big).toBe('/_karma_webpack_//atomicjolt-92b4dadbb4b4c6bc62bcd225dbefa9d3.png'); + expect(big).toBe('/_karma_webpack_/atomicjolt-92b4dadbb4b4c6bc62bcd225dbefa9d3.png'); }); From b5e8854a73ddd9a23332590b0ed69a438ac03ae9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 25 Oct 2016 17:14:15 -0600 Subject: [PATCH 211/452] Fix loading a new jwt --- client/js/reducers/jwt.js | 2 +- client/js/reducers/jwt.spec.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/js/reducers/jwt.js b/client/js/reducers/jwt.js index 68e152f..9720ecc 100644 --- a/client/js/reducers/jwt.js +++ b/client/js/reducers/jwt.js @@ -7,7 +7,7 @@ export default (state = initialState, action) => { switch(action.type){ case JwtConstants.REFRESH_JWT: - return action.payload; + return action.payload.jwt; break; default: diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js index 93bad73..179a6b0 100644 --- a/client/js/reducers/jwt.spec.js +++ b/client/js/reducers/jwt.spec.js @@ -6,18 +6,18 @@ describe('jwt reducer', () => { describe("initial state", () => { it("has a jwt token", () => { - const initial = { jwtValue: 'asdf' }; + const initial = { jwt: 'asdf' }; const initialState = initial; const state = jwt(initialState, {}); expect(state).toEqual(initial); - const newJwt = { jwtValue: '1234' }; + const newJwt = { jwt: '1234' }; const newState = jwt(state, { type: JwtConstants.REFRESH_JWT, payload: newJwt }); - expect(newState).toEqual(newJwt); + expect(newState).toEqual(newJwt.jwt); }); }); From 66e08f7d7930594ff68213254c145d7d8bab259c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 25 Oct 2016 17:53:49 -0600 Subject: [PATCH 212/452] Fixes jwt reducer --- client/js/reducers/jwt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/reducers/jwt.js b/client/js/reducers/jwt.js index 9720ecc..57a1583 100644 --- a/client/js/reducers/jwt.js +++ b/client/js/reducers/jwt.js @@ -6,7 +6,7 @@ export default (state = initialState, action) => { switch(action.type){ - case JwtConstants.REFRESH_JWT: + case JwtConstants.REFRESH_JWT_DONE: return action.payload.jwt; break; From 71e3c294006dfc19eca32eb85c302d4448a798c0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 25 Oct 2016 17:54:25 -0600 Subject: [PATCH 213/452] Change default user id from settings. --- client/js/app.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/app.jsx b/client/js/app.jsx index 2c06583..a81b587 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -40,7 +40,7 @@ class Root extends React.Component { const settings = getInitialSettings(window.DEFAULT_SETTINGS); const store = configureStore({settings, jwt: window.DEFAULT_JWT}); if (window.DEFAULT_JWT){ // Setup JWT refresh - jwt(store.dispatch, settings.user_id); + jwt(store.dispatch, settings.userId); } ReactDOM.render( From 5fdbf9240c4e96ca7a7f7784d2b472fca1a22b7f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 26 Oct 2016 12:33:36 -0600 Subject: [PATCH 214/452] Fixes failing jwt spec --- client/js/reducers/jwt.spec.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js index 179a6b0..4428bbf 100644 --- a/client/js/reducers/jwt.spec.js +++ b/client/js/reducers/jwt.spec.js @@ -9,11 +9,20 @@ describe('jwt reducer', () => { const initial = { jwt: 'asdf' }; const initialState = initial; const state = jwt(initialState, {}); - expect(state).toEqual(initial); + expect(state.jwt).toEqual(initial.jwt); + + }); + + }); + + describe("jwt update", () => { + + it("has a jwt token", () => { + const state = jwt({ jwt: 'asdf' }, {}); const newJwt = { jwt: '1234' }; const newState = jwt(state, { - type: JwtConstants.REFRESH_JWT, + type: JwtConstants.REFRESH_JWT_DONE, payload: newJwt }); From d7029cdb9ef623780f8abe8e37e09274144d0ca0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 26 Oct 2016 12:57:53 -0600 Subject: [PATCH 215/452] Fixes spec helper method --- client/specs_support/helper.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index c5cd938..19790d1 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -19,15 +19,14 @@ export default class Helper{ // Create a real store that can be used for testing static makeStore(settings){ - var initialSettings = _.assign({ - jwt: "jwt_token", - csrf: "csrf_token", - apiUrl: "http://www.example.com" - }, settings); - - return configureStore({ - settings: initialSettings - }); + const initialState = { + jwt : "fake_jwt_token", + settings : _.assign({ + csrf : "csrf_token", + apiUrl : "http://www.example.com" + }, settings) + }; + return configureStore(initialState); } static stubAjax(){ From c7587bb13f995c2965f73d0d4b964d9136fa0a71 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 27 Oct 2016 11:46:50 -0600 Subject: [PATCH 216/452] Cleans out unused code --- client/js/components/layout/index.jsx | 8 ++------ client/specs_support/rapper.jsx | 12 ------------ 2 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 client/specs_support/rapper.jsx diff --git a/client/js/components/layout/index.jsx b/client/js/components/layout/index.jsx index 50b0e88..ae0e500 100644 --- a/client/js/components/layout/index.jsx +++ b/client/js/components/layout/index.jsx @@ -1,10 +1,8 @@ "use strict"; import React from "react"; -import { connect } from "react-redux"; -@connect((state) => (state), null, null, {withRef: true}) -class Index extends React.Component { +export default class Index extends React.Component { constructor(){ super(); @@ -17,6 +15,4 @@ class Index extends React.Component {
    ; } -} - -export default Index; \ No newline at end of file +} \ No newline at end of file diff --git a/client/specs_support/rapper.jsx b/client/specs_support/rapper.jsx deleted file mode 100644 index 63bfc41..0000000 --- a/client/specs_support/rapper.jsx +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; - -import React from 'react'; -import { connect } from 'react-redux'; - -export default class Rapper extends React.Component{ - - render(){ - if(this.props.child) return
    ; - return
    {this.props.children}
    ; - } -} \ No newline at end of file From 117c23a93beb4a71b3c389d645b584f800765ab0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 27 Oct 2016 17:29:13 -0600 Subject: [PATCH 217/452] Move from s3_website gem to s3-website node package --- .s3-website.json | 5 ++++ README.md | 54 +++++++++++----------------------------- client/package.json | 3 ++- package.json | 1 + s3_website.yml.example | 56 ------------------------------------------ 5 files changed, 22 insertions(+), 97 deletions(-) create mode 100644 .s3-website.json delete mode 100644 s3_website.yml.example diff --git a/.s3-website.json b/.s3-website.json new file mode 100644 index 0000000..0c89473 --- /dev/null +++ b/.s3-website.json @@ -0,0 +1,5 @@ +{ + "uploadDir" : "build/prod", + "upload-dir" : "build/prod", + "domain" : "reactclientstarterapp.com" +} diff --git a/README.md b/README.md index b7a474d..2f6e2e5 100644 --- a/README.md +++ b/README.md @@ -74,58 +74,32 @@ Inside the client directory run: `npm-check-updates` -#Setup Deploy: +#Deploy to S3: ----------------------- - 1. Install the s3_website gem: + 1. Setup credentials. If you've already setup your Amazon credentials in ~/.aws/credentials you will be able to do something similar to the + following where atomiclti is one of the AWS profiles found in ~/.aws/credentials: - `gem install s3_website` + export AWS_DEFAULT_PROFILE=atomiclti + export AWS_PROFILE=atomiclti - 2. Create s3_website.yml: + You can also use a .env file. See the [s3-website](https://github.com/klaemo/s3-website) documentation for more options. - `s3_website cfg create` + 2. Install the s3-website node package globally: - 3. Setup and AWS user: + `npm install -g s3-website` - 1. Login to your AWS console - 2. Find Identity & Access Management (IAM) - 3. Click 'Users' - 4. Click 'Create New Users' - 5. Save the user's credentials - 6. Click on the user - 7. Click the permissions tab. - 8. Under 'Inline Policies' create a new custom policy and paste in the policy below. Be sure to change the domains: + 3. Edit configuration. - For more details see the [s3_website gem instructions](https://github.com/laurilehmijoki/s3_website). + Open up .s3-website.json and set the desired bucket name - ###IAM Policy: - ```json + 4. Configure the bucket as a website - { - "Statement": [ - { - "Action": [ - "s3:ListBucket" - ], - "Effect": "Allow", - "Resource": "arn:aws:s3:::www.reactclientstarterapp.com" - }, - { - "Action": "s3:*", - "Effect": "Allow", - "Resource": [ - "arn:aws:s3:::www.reactclientstarterapp.com", - "arn:aws:s3:::www.reactclientstarterapp.com/*" - ] - } - ] - } - ``` + `npm run create` - 4. Configure bucket as website: - - `s3_website cfg apply` + 5. Deploy. + `npm run release` #Production ----------------------- diff --git a/client/package.json b/client/package.json index 74d52ad..14a9ad7 100644 --- a/client/package.json +++ b/client/package.json @@ -13,7 +13,8 @@ "live": "node server.js", "build_dev": "node ./build.js", "build": "node ./build.js --release", - "release": "node ./build.js --release && cd .. && s3_website push", + "create": "node ./build.js --release && cd .. && s3-website create", + "release": "node ./build.js --release && cd .. && s3-website deploy", "lint": "eslint js" }, "author": "atomicjolt, jbasdf", diff --git a/package.json b/package.json index 346a2d1..914c987 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "postinstall": "cd ./client && npm install", "build": "cd ./client && npm run build", "build_dev": "cd ./client && npm run build_dev", + "create": "cd ./client && npm run create", "release": "cd ./client && npm run release", "hot": "cd ./client && npm run hot", "live": "cd ./client && node server.js", diff --git a/s3_website.yml.example b/s3_website.yml.example deleted file mode 100644 index adb330f..0000000 --- a/s3_website.yml.example +++ /dev/null @@ -1,56 +0,0 @@ -s3_id: -s3_secret: -s3_bucket: - -# Below are examples of all the available configurations. -# See README for more detailed info on each of them. - -site: build/prod - -# max_age: -# "assets/*": 6000 -# "*": 300 - -# gzip: -# - .html -# - .css -# - .md -# gzip_zopfli: true - -# See http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region for valid endpoints -# s3_endpoint: ap-northeast-1 - -# ignore_on_server: that_folder_of_stuff_i_dont_keep_locally - -# exclude_from_upload: -# - those_folders_of_stuff -# - i_wouldnt_want_to_upload - -# s3_reduced_redundancy: true - -# cloudfront_distribution_id: your-dist-id - -# cloudfront_distribution_config: -# default_cache_behavior: -# min_TTL: <%= 60 * 60 * 24 %> -# aliases: -# quantity: 1 -# items: -# CNAME: your.website.com - -# cloudfront_invalidate_root: true - -# concurrency_level: 5 - -# redirects: -# index.php: / -# about.php: about.html -# music-files/promo.mp4: http://www.youtube.com/watch?v=dQw4w9WgXcQ - -# routing_rules: -# - condition: -# key_prefix_equals: blog/some_path -# redirect: -# host_name: blog.example.com -# replace_key_prefix_with: some_new_path/ -# http_redirect_code: 301 From 7340e1e85ad056f43fe311d5753aa575c21c77b2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 28 Oct 2016 16:25:09 -0600 Subject: [PATCH 218/452] Update packages --- client/package.json | 8 +- client/yarn.lock | 184 +++++++++++++++++++++++++------------------- package.json | 2 +- 3 files changed, 109 insertions(+), 85 deletions(-) diff --git a/client/package.json b/client/package.json index 14a9ad7..a608759 100644 --- a/client/package.json +++ b/client/package.json @@ -30,7 +30,7 @@ "react-dom": "15.3.2", "react-proxy-loader": "0.3.4", "react-redux": "4.4.5", - "react-router": "2.8.1", + "react-router": "3.0.0", "react-tap-event-plugin": "1.0.0", "redux": "3.6.0", "superagent": "2.3.0", @@ -94,17 +94,17 @@ "null-loader": "0.1.1", "path": "^0.12.7", "phantomjs-prebuilt": "^2.1.7", - "protractor": "4.0.9", + "protractor": "4.0.10", "psi": "2.0.4", "react-hot-loader": "3.0.0-beta.6", "redbox-react": "^1.2.10", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", - "redux-devtools-log-monitor": "1.0.11", + "redux-devtools-log-monitor": "1.1.1", "sass-loader": "4.0.2", "style-loader": "0.13.1", "url-loader": "0.5.7", - "webpack": "1.13.2", + "webpack": "1.13.3", "webpack-dev-middleware": "^1.6.1", "webpack-hot-middleware": "^2.12.1" } diff --git a/client/yarn.lock b/client/yarn.lock index 32eeaaf..67611b1 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1,18 +1,18 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 -"@types/jasmine@^2.2.31": - version "2.5.35" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.35.tgz#5566406dc8417d380d6c2f9562ec3c71ec28ef78" +"@types/jasmine@^2.5.36": + version "2.5.36" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.36.tgz#6d804b79a57e9380d766a2680e9362c17d9556d2" -"@types/node@^6.0.35": - version "6.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.45.tgz#c4842a9d653d767831e4ff495b6008cc0d579966" +"@types/node@^6.0.46": + version "6.0.46" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.46.tgz#8d9e48572831f05b11cc4c793754d43437219d62" -"@types/q@^0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.30.tgz#fd7ee1af40f21cdd1f519268073b3432ec17d7a3" +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" -"@types/selenium-webdriver@~2.53.30": +"@types/selenium-webdriver@~2.53.31": version "2.53.33" resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.33.tgz#64672bae3acedf9d9e6bcfa8bdb7c37497751c3d" @@ -86,6 +86,10 @@ align-text@^0.1.1, align-text@^0.1.3: longest "^1.0.1" repeat-string "^1.5.2" +almost-equal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd" + 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" @@ -898,7 +902,7 @@ babel-plugin-transform-regenerator@^6.16.0: babel-types "^6.16.0" private "~0.1.5" -babel-plugin-transform-runtime@^6.5.0, babel-plugin-transform-runtime@^6.9.0: +babel-plugin-transform-runtime@^6.7.5, babel-plugin-transform-runtime@^6.9.0: version "6.15.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" dependencies: @@ -1007,13 +1011,20 @@ babel-register@^6.16.0: path-exists "^1.0.0" source-map-support "^0.4.2" -babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.3.13, babel-runtime@^6.9.0, babel-runtime@^6.9.1, babel-runtime@^6.9.2: +babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1, babel-runtime@^6.9.2: version "6.11.6" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" dependencies: core-js "^2.4.0" regenerator-runtime "^0.9.5" +babel-runtime@^6.6.1: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.9.5" + babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.7.0, babel-template@^6.8.0, babel-template@^6.9.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" @@ -1522,6 +1533,13 @@ color-name@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" +color-space@^1.14.3: + version "1.14.6" + resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.14.6.tgz#a52fd4f083073d3cb335c3b4dc35d5fd59347f25" + dependencies: + husl ">=5.0" + mumath "^3.0.0" + color-string@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" @@ -1956,10 +1974,6 @@ decompress@^3.0.0: vinyl-assign "^1.0.1" vinyl-fs "^2.2.0" -deep-equal@^1.0.0: - 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.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" @@ -3268,14 +3282,14 @@ header-case@^1.0.0: version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" -history@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/history/-/history-2.1.2.tgz#4aa2de897a0e4867e4539843be6ecdb2986bfdec" +history@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/history/-/history-3.2.1.tgz#71c7497f4e6090363d19a6713bb52a1bfcdd99aa" dependencies: - deep-equal "^1.0.0" - invariant "^2.0.0" - query-string "^3.0.0" - warning "^2.0.0" + invariant "^2.2.1" + loose-envify "^1.2.0" + query-string "^4.2.2" + warning "^3.0.0" hoek@2.x.x: version "2.16.3" @@ -3377,6 +3391,10 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" +husl@>=5.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/husl/-/husl-6.0.1.tgz#c6a9f2edea1fc24c00ccb565903bccf37cf3cc58" + iconv-lite@~0.4.13, iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -4205,6 +4223,10 @@ lodash.clonedeep@^4.3.2: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + lodash.debounce@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-3.1.1.tgz#812211c378a94cc29d5aa4e3346cf0bfce3a7df5" @@ -4227,6 +4249,10 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + lodash.indexof@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c" @@ -4544,6 +4570,12 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" +mumath@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.1.tgz#264b3d610d7a0a4e574ff282424b5427be0b0c96" + dependencies: + almost-equal "^1.1.0" + mute-stream@~0.0.4: version "0.0.6" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" @@ -5481,14 +5513,14 @@ proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -protractor@4.0.9: - version "4.0.9" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.9.tgz#152f72e3729b2576226e370dc308699cccfa77ba" +protractor@4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.10.tgz#12a3cd542c0f44d784f3b43368bc37ea5fb0e350" dependencies: - "@types/jasmine" "^2.2.31" - "@types/node" "^6.0.35" - "@types/q" "^0.0.30" - "@types/selenium-webdriver" "~2.53.30" + "@types/jasmine" "^2.5.36" + "@types/node" "^6.0.46" + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "~2.53.31" adm-zip "0.4.7" chalk "^1.1.3" glob "^7.0.3" @@ -5499,7 +5531,7 @@ protractor@4.0.9: saucelabs "~1.3.0" selenium-webdriver "2.53.3" source-map-support "~0.4.0" - webdriver-manager "^10.2.2" + webdriver-manager "^10.2.6" proxy-addr@~1.1.2: version "1.1.2" @@ -5543,6 +5575,10 @@ punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" +pure-color@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.2.0.tgz#702d2f2819dd545b1fde5116fca5f0c2dad2d18d" + q@^1.1.2, q@^1.4.1, q@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" @@ -5567,13 +5603,7 @@ qs@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" -query-string@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-3.0.3.tgz#ae2e14b4d05071d4e9b9eb4873c35b0dcd42e638" - dependencies: - strict-uri-encode "^1.0.0" - -query-string@^4.1.0: +query-string@^4.1.0, query-string@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822" dependencies: @@ -5616,6 +5646,16 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.0: minimist "^1.2.0" strip-json-comments "~1.0.4" +react-base16-styling@^0.4.1: + version "0.4.6" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.4.6.tgz#ac23cb19b278974d965003b88f06a038d790bc80" + dependencies: + base16 "^1.0.0" + color-space "^1.14.3" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-deep-force-update@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" @@ -5642,22 +5682,15 @@ react-hot-loader@3.0.0-beta.6: redbox-react "^1.2.5" source-map "^0.4.4" -react-json-tree@^0.6.6: - version "0.6.8" - resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.6.8.tgz#e844f431f759c94c55783556300844fb3b35e623" +react-json-tree@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.0.tgz#92d5c223fc7718614a906591cd916127ce2b6033" dependencies: - babel-plugin-transform-runtime "^6.5.0" - babel-runtime "^6.3.13" - react-mixin "^1.7.0" + babel-plugin-transform-runtime "^6.7.5" + babel-runtime "^6.6.1" + react-base16-styling "^0.4.1" react-pure-render "^1.0.2" -react-mixin@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/react-mixin/-/react-mixin-1.7.0.tgz#38c22c3eb02064f08f2c25878a60dac3e956f44c" - dependencies: - object-assign "^2.0.0" - smart-mixin "^1.2.0" - react-proxy-loader@0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/react-proxy-loader/-/react-proxy-loader-0.3.4.tgz#49dfeafa49d6637b0c7428ba7c0d39abb08094ca" @@ -5683,11 +5716,11 @@ react-redux@^4.0.0, react-redux@4.4.5: lodash "^4.2.0" loose-envify "^1.1.0" -react-router@2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-2.8.1.tgz#73e9491f6ceb316d0f779829081863e378ee4ed7" +react-router@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff" dependencies: - history "^2.1.2" + history "^3.0.0" hoist-non-react-statics "^1.2.0" invariant "^2.2.1" loose-envify "^1.2.0" @@ -5889,12 +5922,12 @@ redux-devtools-instrument@^1.0.1: lodash "^4.2.0" symbol-observable "^0.2.4" -redux-devtools-log-monitor@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.0.11.tgz#3dd841eed8bdb1733f7cb826557e92c982c5ede8" +redux-devtools-log-monitor@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.1.1.tgz#6d6c731e239934e4306765c256d9e1c1efd72e3c" dependencies: lodash.debounce "^4.0.4" - react-json-tree "^0.6.6" + react-json-tree "^0.10.0" react-pure-render "^1.0.2" redux-devtools-themes "^1.0.0" @@ -6247,7 +6280,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@~5.3.0, "semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5": +"semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0, "semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5": version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -6344,10 +6377,6 @@ slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" -smart-mixin@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/smart-mixin/-/smart-mixin-1.2.1.tgz#11a2b3e4628dfee16ac9cb51edd301be21be1452" - snake-case@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" @@ -6900,9 +6929,9 @@ uglify-js@^2.6, uglify-js@2.7.x: uglify-to-browserify "~1.0.0" yargs "~3.10.0" -uglify-js@~2.6.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf" +uglify-js@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.4.tgz#a295a0de12b6a650c031c40deb0dc40b14568bd2" dependencies: async "~0.2.6" source-map "~0.5.1" @@ -7151,12 +7180,6 @@ ware@^1.2.0: dependencies: wrap-fn "^0.1.0" -warning@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-2.1.0.tgz#21220d9c63afc77a8c92111e011af705ce0c6901" - dependencies: - loose-envify "^1.0.0" - warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" @@ -7177,9 +7200,9 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -webdriver-manager@^10.2.2: - version "10.2.3" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.2.3.tgz#b79f57afb26363712bd7bc082759110c27052bf7" +webdriver-manager@^10.2.6: + version "10.2.6" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.2.6.tgz#6c02625fbaa97d1f6105edc7f22cdcf5caee038c" dependencies: adm-zip "^0.4.7" chalk "^1.1.1" @@ -7190,6 +7213,7 @@ webdriver-manager@^10.2.2: q "^1.4.1" request "^2.69.0" rimraf "^2.5.2" + semver "^5.3.0" webpack-core@^0.4.8: version "0.4.8" @@ -7229,9 +7253,9 @@ webpack-sources@^0.1.0: source-list-map "~0.1.0" source-map "~0.5.3" -webpack@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.2.tgz#f11a96f458eb752970a86abe746c0704fabafaf3" +webpack@1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.3.tgz#e79c46fe5a37c5ca70084ba0894c595cdcb42815" dependencies: acorn "^3.0.0" async "^1.3.0" @@ -7245,7 +7269,7 @@ webpack@1.13.2: optimist "~0.6.0" supports-color "^3.1.0" tapable "~0.1.8" - uglify-js "~2.6.0" + uglify-js "~2.7.3" watchpack "^0.2.1" webpack-core "~0.6.0" diff --git a/package.json b/package.json index 914c987..ea0f2b5 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.2", "description": "Client only React Starter App.", "engines": { - "node": "5.10.1" + "node": "6.9.1" }, "scripts": { "postinstall": "cd ./client && npm install", From df7823a4c08ea1521fc48cc4b3c1ddfe1777aabb Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 1 Nov 2016 12:46:04 -0600 Subject: [PATCH 219/452] updates node version --- .nvmrc | 2 +- client/.nvmrc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nvmrc b/.nvmrc index 6a1fccf..b81ba51 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -6.9.0 \ No newline at end of file +6.9.1 \ No newline at end of file diff --git a/client/.nvmrc b/client/.nvmrc index a620310..b81ba51 100644 --- a/client/.nvmrc +++ b/client/.nvmrc @@ -1 +1 @@ -5.10.1 \ No newline at end of file +6.9.1 \ No newline at end of file From 3c7429a16e8a7dbca26803d6d66926ba9ef35c12 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 2 Nov 2016 17:08:44 -0400 Subject: [PATCH 220/452] Update api specs. Adds ability to send null jwt and csrf --- client/js/constants/network.js | 2 +- client/js/libs/api.js | 10 +-- client/js/libs/api.spec.js | 114 +++++++++++++++++++++++++++++---- client/js/middleware/api.js | 6 +- client/specs_support/helper.js | 27 +++++--- 5 files changed, 129 insertions(+), 30 deletions(-) diff --git a/client/js/constants/network.js b/client/js/constants/network.js index 2f3c9ae..331046a 100644 --- a/client/js/constants/network.js +++ b/client/js/constants/network.js @@ -3,7 +3,7 @@ export default { GET : 'get', POST : 'post', PUT : 'put', - DEL : 'del', + DEL : 'delete', TIMEOUT : 20000, diff --git a/client/js/libs/api.js b/client/js/libs/api.js index a619b1a..c59fa03 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -45,12 +45,12 @@ export default class Api{ break; } - request.set('Accept', 'application/json') - .timeout(NetworkConstants.TIMEOUT) - .set('Authorization', 'Bearer ' + jwt) - .set('X-CSRF-Token', csrf); + request.set('Accept', 'application/json').timeout(NetworkConstants.TIMEOUT); - if(!_.isUndefined(headers)){ + if(!_.isNil(jwt)){ request.set('Authorization', `Bearer ${jwt}`); } + if(!_.isNil(csrf)){ request.set('X-CSRF-Token', csrf); } + + if(!_.isNil(headers)){ _.each(headers, (headerValue, headerKey) => { request.set(headerKey, headerValue); }); diff --git a/client/js/libs/api.spec.js b/client/js/libs/api.spec.js index f6bd2b1..66b0153 100644 --- a/client/js/libs/api.spec.js +++ b/client/js/libs/api.spec.js @@ -1,21 +1,111 @@ import api from "./api"; import Network from "../constants/network"; -import Helper from '../../specs_support/helper'; +import Helper from "../../specs_support/helper"; -describe('api', function() { +describe("api", function() { - var jwt; - var apiUrl; - var csrf; - var params; - var body + const jwt = "jwt_token"; + const apiUrl = "http://www.example.com"; + const csrf = "csrf_value"; + const params = {}; + const body = {}; + const headers = {}; Helper.stubAjax(); - - it('calls Get', () => { - var url = "http://www.example.com"; - var promise = api.get(url); - + + it("calls Get", () => { + const url = "/api/test/1"; + api.get(url, apiUrl, jwt, csrf, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + expect(result.text).toEqual(Helper.testPayload()); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(`${apiUrl}${url}`); + expect(request.method.toLowerCase()).toEqual(Network.GET); + expect(request.requestHeaders["Accept"]).toEqual("application/json"); + expect(request.requestHeaders["Authorization"]).toEqual(`Bearer ${jwt}`); + expect(request.requestHeaders["X-CSRF-Token"]).toEqual(csrf); + }); + + it("calls Get without a jwt", () => { + const url = "/api/test/2"; + api.get(url, apiUrl, null, csrf, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(`${apiUrl}${url}`); + expect(request.requestHeaders["Authorization"]).toBeUndefined(); + expect(request.requestHeaders["X-CSRF-Token"]).toEqual(csrf); + }); + + it("calls Get without a csrf", () => { + const url = "/api/test/3"; + api.get(url, apiUrl, jwt, null, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(`${apiUrl}${url}`); + expect(request.requestHeaders["Authorization"]).toEqual(`Bearer ${jwt}`); + expect(request.requestHeaders["X-CSRF-Token"]).toBeUndefined(); + }); + + it("calls Get with a full url", () => { + const url = "http://www.example.com/api/test/full"; + api.get(url, apiUrl, jwt, null, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(url); + }); + + it("calls Post", () => { + const url = "/api/test"; + api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + }); + + it("calls Post with a full url", () => { + const url = "http://www.example.com/api/test/full"; + api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(url); + expect(request.method.toLowerCase()).toEqual(Network.POST); + }); + + it("calls Put", () => { + const url = "/api/test/4"; + api.put(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { + expect(result.statusCode).toBe(200); + const request = result.req; + expect(request.method.toLowerCase()).toEqual(Network.PUT); + }); + }); + + it("calls Delete", () => { + const url = "/api/test/5"; + api.del(url, apiUrl, jwt, csrf, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(`${apiUrl}${url}`); + expect(request.method.toLowerCase()).toEqual(Network.DEL); + }); + + it("calls execRequest directly", () => { + const url = "/api/test/6"; + api.execRequest(Network.GET, url, apiUrl, null, null).then((result) => { + expect(result.statusCode).toBe(200); + expect(result.text).toEqual(Helper.testPayload()); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(`${apiUrl}${url}`); + expect(request.method.toLowerCase()).toEqual(Network.GET); + expect(request.requestHeaders["Accept"]).toEqual("application/json"); + expect(request.requestHeaders["Authorization"]).toBeUndefined(); + expect(request.requestHeaders["X-CSRF-Token"]).toBeUndefined(); }); }); \ No newline at end of file diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index 90253bb..5296c5d 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -3,9 +3,9 @@ import { DONE } from "../constants/wrapper"; const API = store => next => action => { - function request(method, url, params, body){ + function request(method, url, params, body, headers){ const state = store.getState(); - const promise = api.execRequest(method, url, state.settings.apiUrl, state.jwt, state.settings.csrfToken, params, body); + const promise = api.execRequest(method, url, state.settings.apiUrl, state.jwt, state.settings.csrfToken, params, body, headers); if(promise){ promise.then( (response) => { @@ -29,7 +29,7 @@ const API = store => next => action => { }; if(action.method){ - request(action.method, action.url, action.params, action.body); + request(action.method, action.url, action.params, action.body, action.headers); } // call the next middleWare diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index 19790d1..0df234b 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -29,27 +29,36 @@ export default class Helper{ return configureStore(initialState); } + static testPayload(){ + return JSON.stringify([{ + "id":1, + "name":"Starter App" + }]); + } + static stubAjax(){ beforeEach(function(){ jasmine.Ajax.install(); - // Stub request to load problems - var accounts_payload = JSON.stringify([{ - "id":1, - "name":"Starter App", - "domain":"bfcoderServer.ngrok.io", - "code":"bfcoderServer" - }]); + jasmine.Ajax.stubRequest( + RegExp('.*/api/test') + ).andReturn({ + "status": 200, + "contentType": "json", + "statusText": "OK", + "responseText": Helper.testPayload() + }); jasmine.Ajax.stubRequest( - RegExp('.*/api/accounts/') + RegExp('.*/api/test/.+') ).andReturn({ "status": 200, "contentType": "json", "statusText": "OK", - "responseText": accounts_payload + "responseText": Helper.testPayload() }); + }); afterEach(function(){ From a9f8bd7dd87b9b65c528e804340429d1815124b9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 2 Nov 2016 23:17:03 -0400 Subject: [PATCH 221/452] Clean up packages --- client/package.json | 21 --------------------- package.json | 30 ++++++++++++++---------------- 2 files changed, 14 insertions(+), 37 deletions(-) diff --git a/client/package.json b/client/package.json index a608759..0ce1a60 100644 --- a/client/package.json +++ b/client/package.json @@ -1,25 +1,4 @@ { - "name": "react_client_starter_app", - "version": "0.0.4", - "description": "Client only React Starter App.", - "repository": { - "type": "git", - "url": "https://github.com/atomicjolt/react_client_starter_app" - }, - "scripts": { - "test": "./node_modules/karma/bin/karma start", - "coveralls": "cat coverage/lcov.info | coveralls", - "hot": "node webpack.hot.js", - "live": "node server.js", - "build_dev": "node ./build.js", - "build": "node ./build.js --release", - "create": "node ./build.js --release && cd .. && s3-website create", - "release": "node ./build.js --release && cd .. && s3-website deploy", - "lint": "eslint js" - }, - "author": "atomicjolt, jbasdf", - "license": "MIT", - "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { "babel": "6.5.2", "babel-polyfill": "^6.9.1", diff --git a/package.json b/package.json index ea0f2b5..c802e36 100644 --- a/package.json +++ b/package.json @@ -1,20 +1,21 @@ { "name": "react_client_starter_app", - "version": "0.0.2", - "description": "Client only React Starter App.", - "engines": { - "node": "6.9.1" - }, + "version": "0.1.0", + "description": "Client only React Starter App", + "author": "atomicjolt", + "license": "MIT", + "homepage": "https://github.com/atomicjolt/react_client_starter_app", "scripts": { - "postinstall": "cd ./client && npm install", - "build": "cd ./client && npm run build", - "build_dev": "cd ./client && npm run build_dev", - "create": "cd ./client && npm run create", - "release": "cd ./client && npm run release", - "hot": "cd ./client && npm run hot", + "postinstall": "cd ./client && yarn", + "test": "cd ./client && ./node_modules/karma/bin/karma start", + "coveralls": "cd ./client && cat coverage/lcov.info | coveralls", + "hot": "cd ./client && node webpack.hot.js", "live": "cd ./client && node server.js", - "test": "cd ./client && npm run test", - "coveralls": "cd ./client && npm run coveralls" + "build_dev": "cd ./client && node ./build.js", + "build": "cd ./client && node ./build.js --release", + "create": "cd ./client && node ./build.js --release && cd .. && s3-website create", + "release": "cd ./client && node ./build.js --release && cd .. && s3-website deploy", + "lint": "cd ./client && eslint js" }, "repository": { "type": "git", @@ -23,9 +24,6 @@ "keywords": [ "react" ], - "author": "atomicjolt", - "license": "MIT", - "homepage": "https://github.com/atomicjolt/react_client_starter_app", "dependencies": { "del": "^2.2.2" }, From 0d6b8b4784926cb3ca7898b72abeda4971b19a94 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 3 Nov 2016 00:45:28 -0400 Subject: [PATCH 222/452] Allow for publicPath for CDN distribution --- client/config/settings.js | 14 ++++++++++++-- client/config/webpack.config.js | 2 +- client/html/index.html | 2 +- client/tools/build/webpack_utils.js | 8 ++++++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 9bb9fa7..bf4c08e 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -1,5 +1,6 @@ -var info = require('../package.json'); -var path = require('path'); +var info = require('../../package.json'); +var deployConfig = require('../../.s3-website.json'); +var path = require('path'); var clientAppPath = path.join(__dirname, '../'); @@ -9,6 +10,14 @@ var prodRelativeOutput = '/'; var devOutput = path.join(__dirname, '../../build/dev', devRelativeOutput); var prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); +//const prodAssetsUrl = ''; // Set this to the url where the assets will be deployed. + // If you want the paths to be relative to the deploy then leave this + // value as an empty string. This value could also be a CDN or + // it could be the ssl version of your S3 bucket ie: + // https://s3.amazonaws.com/' + deployConfig.domain; + +const prodAssetsUrl = 'https://s3.amazonaws.com/' + deployConfig.domain; + // There is a warning if the .env file is missing // This is fine in a production setting, where settings // are loaded from the env and not from a file @@ -30,6 +39,7 @@ module.exports = { // Dev urls devAssetsUrl: process.env.ASSETS_URL || '', + prodAssetsUrl: prodAssetsUrl, hotPort: hotPort, diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index b82ec71..bbf1294 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -14,7 +14,7 @@ module.exports = function(stage){ // Public path indicates where the assets will be served from. In dev this will likely be localhost or a local domain. // In production this could be a CDN. In developerment this will point to whatever public url is serving // dev assets. - var publicPath = production ? settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput; + var publicPath = production ? settings.prodAssetsUrl + settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput; var excludeFromStats = [ /node_modules[\\\/]react(-router)?[\\\/]/ diff --git a/client/html/index.html b/client/html/index.html index 5179e63..f6b80d8 100644 --- a/client/html/index.html +++ b/client/html/index.html @@ -1,2 +1,2 @@
    - \ No newline at end of file + \ No newline at end of file diff --git a/client/tools/build/webpack_utils.js b/client/tools/build/webpack_utils.js index 04eba82..32dff8b 100644 --- a/client/tools/build/webpack_utils.js +++ b/client/tools/build/webpack_utils.js @@ -22,9 +22,13 @@ function apply(html, webpackConfig, webpackStats, entries, cssEntries, buildSuff var result = html; _.each(webpackConfig.entry, function(path, entry){ if(_.has(entries, entry)){ - result = result.replace(entry + buildSuffix, getHashed(webpackStats, entry, 'js')); + var newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'js'); + result = result.replace(entry + buildSuffix, newPath); } else if(_.has(cssEntries, entry)){ - result = result.replace(entry + '.css', getHashed(webpackStats, entry, 'css')); + var newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'css'); + result = result.replace(entry + '.css', newPath); + } else { + console.log("Error, could not find entry: " + entry); } }); return result; From 782d5f8fc08d0b777d00a5f57f15dab90a1257d5 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 3 Nov 2016 00:45:35 -0400 Subject: [PATCH 223/452] Updates readme --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2f6e2e5..7316f58 100644 --- a/README.md +++ b/README.md @@ -77,11 +77,12 @@ Inside the client directory run: #Deploy to S3: ----------------------- - 1. Setup credentials. If you've already setup your Amazon credentials in ~/.aws/credentials you will be able to do something similar to the - following where atomiclti is one of the AWS profiles found in ~/.aws/credentials: + 1. Setup credentials. If you've already setup your Amazon credentials in ~/.aws/credentials + you will be able to do something similar to the following where "myprofile" is one of + the AWS profiles found in ~/.aws/credentials: - export AWS_DEFAULT_PROFILE=atomiclti - export AWS_PROFILE=atomiclti + export AWS_DEFAULT_PROFILE=myprofile + export AWS_PROFILE=myprofile You can also use a .env file. See the [s3-website](https://github.com/klaemo/s3-website) documentation for more options. From a744e303deb45f7d3e216cbff84d3610ccbbcb00 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 5 Nov 2016 00:55:15 -0400 Subject: [PATCH 224/452] Updated packages --- client/package.json | 48 ++--- client/yarn.lock | 507 +++++++++++++++++++++++++++----------------- 2 files changed, 339 insertions(+), 216 deletions(-) diff --git a/client/package.json b/client/package.json index 0ce1a60..5ccecc9 100644 --- a/client/package.json +++ b/client/package.json @@ -1,10 +1,10 @@ { "dependencies": { "babel": "6.5.2", - "babel-polyfill": "^6.9.1", - "babel-runtime": "^6.9.2", + "babel-polyfill": "^6.16.0", + "babel-runtime": "^6.18.0", "es6-promise": "^4.0.5", - "lodash": "4.16.4", + "lodash": "4.16.6", "react": "15.3.2", "react-dom": "15.3.2", "react-proxy-loader": "0.3.4", @@ -17,34 +17,34 @@ }, "devDependencies": { "autoprefixer-loader": "3.2.0", - "babel-core": "^6.10.4", - "babel-eslint": "^7.0.0", - "babel-loader": "^6.2.4", - "babel-plugin-transform-class-properties": "^6.10.2", + "babel-core": "^6.18.2", + "babel-eslint": "^7.1.0", + "babel-loader": "^6.2.7", + "babel-plugin-transform-class-properties": "^6.18.0", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.9.1", "babel-plugin-transform-react-inline-elements": "^6.8.0", - "babel-plugin-transform-react-remove-prop-types": "^0.2.7", - "babel-plugin-transform-runtime": "^6.9.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-react": "^6.11.1", - "babel-preset-stage-0": "^6.5.0", + "babel-plugin-transform-react-remove-prop-types": "^0.2.10", + "babel-plugin-transform-runtime": "^6.15.0", + "babel-preset-es2015": "^6.18.0", + "babel-preset-react": "^6.16.0", + "babel-preset-stage-0": "^6.16.0", "chunk-manifest-webpack-plugin": "0.1.0", "coveralls": "2.11.14", "css-loader": "0.25.0", "dotenv": "2.0.0", "ecstatic": "2.1.0", - "ejs": "^2.4.2", - "eslint": "^3.0.1", + "ejs": "^2.5.2", + "eslint": "^3.9.1", "eslint-plugin-babel": "^3.3.0", - "eslint-plugin-react": "^6.3.0", + "eslint-plugin-react": "^6.5.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.14.0", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.9.0", "front-matter": "^2.1.0", - "fs-extra": "^0.30.0", + "fs-extra": "^1.0.0", "html-minifier": "3.1.0", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", @@ -65,18 +65,18 @@ "karma-webpack": "1.8.0", "less": "2.7.1", "less-loader": "2.2.3", - "marked": "^0.3.5", + "marked": "^0.3.6", "minimist": "1.2.0", - "node-sass": "3.10.1", - "node-watch": "^0.4.0", - "npm-shrinkwrap": "200.5.1", + "node-sass": "3.11.1", + "node-watch": "^0.4.1", + "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", "path": "^0.12.7", - "phantomjs-prebuilt": "^2.1.7", + "phantomjs-prebuilt": "^2.1.13", "protractor": "4.0.10", "psi": "2.0.4", "react-hot-loader": "3.0.0-beta.6", - "redbox-react": "^1.2.10", + "redbox-react": "^1.3.2", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.1.1", @@ -84,7 +84,7 @@ "style-loader": "0.13.1", "url-loader": "0.5.7", "webpack": "1.13.3", - "webpack-dev-middleware": "^1.6.1", - "webpack-hot-middleware": "^2.12.1" + "webpack-dev-middleware": "^1.8.4", + "webpack-hot-middleware": "^2.13.1" } } diff --git a/client/yarn.lock b/client/yarn.lock index 67611b1..33d23d2 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -34,7 +34,7 @@ accepts@1.1.4: mime-types "~2.0.4" negotiator "0.4.9" -acorn-jsx@^3.0.0: +acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" dependencies: @@ -102,11 +102,11 @@ 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.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.5.tgz#0dcaa5a081206866bc240a3b773a184ea3b88b64" +ansi-html@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" -ansi-regex@^2.0.0: +ansi-regex@*, ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" @@ -190,6 +190,10 @@ array-find@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/array-find/-/array-find-0.1.1.tgz#dc813845ad5a9afc35cb92b786c878d81b5b82ce" +array-flatten@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.0.tgz#26a692c83881fc68dac3ec5d1f0c1b49bf2304d9" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -341,42 +345,40 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0: esutils "^2.0.2" js-tokens "^2.0.0" -babel-core@^6.10.4, babel-core@^6.16.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.17.0.tgz#6c4576447df479e241e58c807e4bc7da4db7f425" +babel-core@^6.18.0, babel-core@^6.18.2: + version "6.18.2" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.2.tgz#d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b" dependencies: babel-code-frame "^6.16.0" - babel-generator "^6.17.0" + babel-generator "^6.18.0" babel-helpers "^6.16.0" babel-messages "^6.8.0" - babel-register "^6.16.0" + babel-register "^6.18.0" babel-runtime "^6.9.1" babel-template "^6.16.0" - babel-traverse "^6.16.0" - babel-types "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" babylon "^6.11.0" convert-source-map "^1.1.0" debug "^2.1.1" - json5 "^0.4.0" + json5 "^0.5.0" lodash "^4.2.0" minimatch "^3.0.2" - path-exists "^1.0.0" path-is-absolute "^1.0.0" private "^0.1.6" - shebang-regex "^1.0.0" slash "^1.0.0" source-map "^0.5.0" -babel-eslint@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.0.0.tgz#54e51b4033f54ac81326ecea4c646a779935196d" +babel-eslint@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.0.tgz#d506a5174ba224e25a2d17e128e2ba8987139ddc" dependencies: babel-traverse "^6.15.0" babel-types "^6.15.0" babylon "^6.11.2" lodash.pickby "^4.6.0" -babel-generator@^6.11.3, babel-generator@^6.17.0: +babel-generator@^6.11.3: version "6.17.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.17.0.tgz#b894e3808beef7800f2550635bfe024b6226cf33" dependencies: @@ -388,6 +390,18 @@ babel-generator@^6.11.3, babel-generator@^6.17.0: lodash "^4.2.0" source-map "^0.5.0" +babel-generator@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.18.0.tgz#e4f104cb3063996d9850556a45aae4a022060a07" + dependencies: + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.18.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + babel-helper-bindify-decorators@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.8.0.tgz#b34805a30b1433cc0042f7054f88a7133c144909" @@ -413,16 +427,25 @@ babel-helper-builder-react-jsx@^6.8.0: esutils "^2.0.0" lodash "^4.2.0" -babel-helper-call-delegate@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.8.0.tgz#9d283e7486779b6b0481864a11b371ea5c01fa64" +babel-helper-call-delegate@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd" dependencies: - babel-helper-hoist-variables "^6.8.0" + babel-helper-hoist-variables "^6.18.0" babel-runtime "^6.0.0" - babel-traverse "^6.8.0" - babel-types "^6.8.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" -babel-helper-define-map@^6.8.0, babel-helper-define-map@^6.9.0: +babel-helper-define-map@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2" + dependencies: + babel-helper-function-name "^6.18.0" + babel-runtime "^6.9.0" + babel-types "^6.18.0" + lodash "^4.2.0" + +babel-helper-define-map@^6.8.0: version "6.9.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.9.0.tgz#6629f9b2a7e58e18e8379a57d1e6fbb2969902fb" dependencies: @@ -448,6 +471,16 @@ babel-helper-explode-class@^6.8.0: babel-traverse "^6.8.0" babel-types "^6.8.0" +babel-helper-function-name@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" + dependencies: + babel-helper-get-function-arity "^6.18.0" + babel-runtime "^6.0.0" + babel-template "^6.8.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babel-helper-function-name@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.8.0.tgz#a0336ba14526a075cdf502fc52d3fe84b12f7a34" @@ -458,6 +491,13 @@ babel-helper-function-name@^6.8.0: babel-traverse "^6.8.0" babel-types "^6.8.0" +babel-helper-get-function-arity@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" + babel-helper-get-function-arity@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.8.0.tgz#88276c24bd251cdf6f61b6f89f745f486ced92af" @@ -465,12 +505,19 @@ babel-helper-get-function-arity@^6.8.0: babel-runtime "^6.0.0" babel-types "^6.8.0" -babel-helper-hoist-variables@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.8.0.tgz#8b0766dc026ea9ea423bc2b34e665a4da7373aaf" +babel-helper-hoist-variables@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a" dependencies: babel-runtime "^6.0.0" - babel-types "^6.8.0" + babel-types "^6.18.0" + +babel-helper-optimise-call-expression@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f" + dependencies: + babel-runtime "^6.0.0" + babel-types "^6.18.0" babel-helper-optimise-call-expression@^6.8.0: version "6.8.0" @@ -497,7 +544,18 @@ babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-gener babel-traverse "^6.16.0" babel-types "^6.16.0" -babel-helper-replace-supers@^6.14.0, babel-helper-replace-supers@^6.8.0: +babel-helper-replace-supers@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e" + dependencies: + babel-helper-optimise-call-expression "^6.18.0" + babel-messages "^6.8.0" + babel-runtime "^6.0.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + +babel-helper-replace-supers@^6.8.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.16.0.tgz#21c97623cc7e430855753f252740122626a39e6b" dependencies: @@ -515,10 +573,11 @@ babel-helpers@^6.16.0: babel-runtime "^6.0.0" babel-template "^6.16.0" -babel-loader@^6.2.4: - version "6.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.5.tgz#576d548520689a5e6b70c65b85d76af1ffedd005" +babel-loader@^6.2.7: + version "6.2.7" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.7.tgz#16fdbf64328030dc5a606827d389c8b92a2a8032" dependencies: + find-cache-dir "^0.1.1" loader-utils "^0.2.11" mkdirp "^0.5.1" object-assign "^4.0.1" @@ -611,7 +670,7 @@ babel-plugin-transform-class-constructor-call@^6.3.13: babel-runtime "^6.0.0" babel-template "^6.8.0" -babel-plugin-transform-class-properties@^6.10.2, babel-plugin-transform-class-properties@^6.16.0: +babel-plugin-transform-class-properties@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.16.0.tgz#969bca24d34e401d214f36b8af5c1346859bc904" dependencies: @@ -619,6 +678,14 @@ babel-plugin-transform-class-properties@^6.10.2, babel-plugin-transform-class-pr babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.9.1" +babel-plugin-transform-class-properties@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.18.0.tgz#bc1266a39d4c8726e0bd7b15c56235177e6ede57" + dependencies: + babel-helper-function-name "^6.18.0" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.9.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" @@ -657,29 +724,29 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: dependencies: babel-runtime "^6.0.0" -babel-plugin-transform-es2015-block-scoping@^6.14.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.15.0.tgz#5b443ca142be8d1db6a8c2ae42f51958b66b70f6" +babel-plugin-transform-es2015-block-scoping@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz#3bfdcfec318d46df22525cdea88f1978813653af" dependencies: babel-runtime "^6.9.0" babel-template "^6.15.0" - babel-traverse "^6.15.0" - babel-types "^6.15.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" lodash "^4.2.0" -babel-plugin-transform-es2015-classes@^6.14.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.14.0.tgz#87d5149ee91fb475922409f9af5b2ba5d1e39287" +babel-plugin-transform-es2015-classes@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9" dependencies: - babel-helper-define-map "^6.9.0" - babel-helper-function-name "^6.8.0" - babel-helper-optimise-call-expression "^6.8.0" - babel-helper-replace-supers "^6.14.0" + babel-helper-define-map "^6.18.0" + babel-helper-function-name "^6.18.0" + babel-helper-optimise-call-expression "^6.18.0" + babel-helper-replace-supers "^6.18.0" babel-messages "^6.8.0" babel-runtime "^6.9.0" babel-template "^6.14.0" - babel-traverse "^6.14.0" - babel-types "^6.14.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" babel-plugin-transform-es2015-computed-properties@^6.3.13: version "6.8.0" @@ -689,9 +756,9 @@ babel-plugin-transform-es2015-computed-properties@^6.3.13: babel-runtime "^6.0.0" babel-template "^6.8.0" -babel-plugin-transform-es2015-destructuring@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.16.0.tgz#050fe0866f5d53b36062ee10cdf5bfe64f929627" +babel-plugin-transform-es2015-destructuring@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.18.0.tgz#a08fb89415ab82058649558bedb7bf8dafa76ba5" dependencies: babel-runtime "^6.9.0" @@ -702,9 +769,9 @@ babel-plugin-transform-es2015-duplicate-keys@^6.6.0: babel-runtime "^6.0.0" babel-types "^6.8.0" -babel-plugin-transform-es2015-for-of@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.8.0.tgz#82eda139ba4270dda135c3ec1b1f2813fa62f23c" +babel-plugin-transform-es2015-for-of@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70" dependencies: babel-runtime "^6.0.0" @@ -722,36 +789,36 @@ babel-plugin-transform-es2015-literals@^6.3.13: dependencies: babel-runtime "^6.0.0" -babel-plugin-transform-es2015-modules-amd@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.8.0.tgz#25d954aa0bf04031fc46d2a8e6230bb1abbde4a3" +babel-plugin-transform-es2015-modules-amd@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40" dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.8.0" + babel-plugin-transform-es2015-modules-commonjs "^6.18.0" babel-runtime "^6.0.0" babel-template "^6.8.0" -babel-plugin-transform-es2015-modules-commonjs@^6.16.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.16.0.tgz#0a34b447bc88ad1a70988b6d199cca6d0b96c892" +babel-plugin-transform-es2015-modules-commonjs@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc" dependencies: - babel-plugin-transform-strict-mode "^6.8.0" + babel-plugin-transform-strict-mode "^6.18.0" babel-runtime "^6.0.0" babel-template "^6.16.0" - babel-types "^6.16.0" + babel-types "^6.18.0" -babel-plugin-transform-es2015-modules-systemjs@^6.14.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.14.0.tgz#c519b5c73e32388e679c9b1edf41b2fc23dc3303" +babel-plugin-transform-es2015-modules-systemjs@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.18.0.tgz#f09294707163edae4d3b3e8bfacecd01d920b7ad" dependencies: - babel-helper-hoist-variables "^6.8.0" + babel-helper-hoist-variables "^6.18.0" babel-runtime "^6.11.6" babel-template "^6.14.0" -babel-plugin-transform-es2015-modules-umd@^6.12.0: - version "6.12.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.12.0.tgz#5d73559eb49266775ed281c40be88a421bd371a3" +babel-plugin-transform-es2015-modules-umd@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.8.0" + babel-plugin-transform-es2015-modules-amd "^6.18.0" babel-runtime "^6.0.0" babel-template "^6.8.0" @@ -762,23 +829,23 @@ babel-plugin-transform-es2015-object-super@^6.3.13: babel-helper-replace-supers "^6.8.0" babel-runtime "^6.0.0" -babel-plugin-transform-es2015-parameters@^6.16.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.17.0.tgz#e06d30cef897f46adb4734707bbe128a0d427d58" +babel-plugin-transform-es2015-parameters@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz#9b2cfe238c549f1635ba27fc1daa858be70608b1" dependencies: - babel-helper-call-delegate "^6.8.0" - babel-helper-get-function-arity "^6.8.0" + babel-helper-call-delegate "^6.18.0" + babel-helper-get-function-arity "^6.18.0" babel-runtime "^6.9.0" babel-template "^6.16.0" - babel-traverse "^6.16.0" - babel-types "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" -babel-plugin-transform-es2015-shorthand-properties@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.8.0.tgz#f0a4c5fd471630acf333c2d99c3d677bf0952149" +babel-plugin-transform-es2015-shorthand-properties@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43" dependencies: babel-runtime "^6.0.0" - babel-types "^6.8.0" + babel-types "^6.18.0" babel-plugin-transform-es2015-spread@^6.3.13: version "6.8.0" @@ -800,9 +867,9 @@ babel-plugin-transform-es2015-template-literals@^6.6.0: dependencies: babel-runtime "^6.0.0" -babel-plugin-transform-es2015-typeof-symbol@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.8.0.tgz#84c29eb1219372480955a020fef7a65c44f30533" +babel-plugin-transform-es2015-typeof-symbol@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798" dependencies: babel-runtime "^6.0.0" @@ -890,9 +957,9 @@ babel-plugin-transform-react-jsx@^6.3.13: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.0.0" -babel-plugin-transform-react-remove-prop-types@^0.2.7: - version "0.2.9" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.9.tgz#6920f2675dcd9a41433d1d9d19ea28944baf2916" +babel-plugin-transform-react-remove-prop-types@^0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.10.tgz#eefd083057cccb0f9a85cb15f3a64227daf64609" babel-plugin-transform-regenerator@^6.16.0: version "6.16.1" @@ -902,20 +969,20 @@ babel-plugin-transform-regenerator@^6.16.0: babel-types "^6.16.0" private "~0.1.5" -babel-plugin-transform-runtime@^6.7.5, babel-plugin-transform-runtime@^6.9.0: +babel-plugin-transform-runtime@^6.15.0, babel-plugin-transform-runtime@^6.7.5: version "6.15.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" dependencies: babel-runtime "^6.9.0" -babel-plugin-transform-strict-mode@^6.8.0: - version "6.11.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.11.3.tgz#183741325126bc7ec9cf4c0fc257d3e7ca5afd40" +babel-plugin-transform-strict-mode@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d" dependencies: babel-runtime "^6.0.0" - babel-types "^6.8.0" + babel-types "^6.18.0" -babel-polyfill@^6.9.1: +babel-polyfill@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.16.0.tgz#2d45021df87e26a374b6d4d1a9c65964d17f2422" dependencies: @@ -923,36 +990,36 @@ babel-polyfill@^6.9.1: core-js "^2.4.0" regenerator-runtime "^0.9.5" -babel-preset-es2015@^6.9.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.16.0.tgz#59acecd1efbebaf48f89404840f2fe78c4d2ad5c" +babel-preset-es2015@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312" dependencies: babel-plugin-check-es2015-constants "^6.3.13" babel-plugin-transform-es2015-arrow-functions "^6.3.13" babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" - babel-plugin-transform-es2015-block-scoping "^6.14.0" - babel-plugin-transform-es2015-classes "^6.14.0" + babel-plugin-transform-es2015-block-scoping "^6.18.0" + babel-plugin-transform-es2015-classes "^6.18.0" babel-plugin-transform-es2015-computed-properties "^6.3.13" - babel-plugin-transform-es2015-destructuring "^6.16.0" + babel-plugin-transform-es2015-destructuring "^6.18.0" babel-plugin-transform-es2015-duplicate-keys "^6.6.0" - babel-plugin-transform-es2015-for-of "^6.6.0" + babel-plugin-transform-es2015-for-of "^6.18.0" babel-plugin-transform-es2015-function-name "^6.9.0" babel-plugin-transform-es2015-literals "^6.3.13" - babel-plugin-transform-es2015-modules-amd "^6.8.0" - babel-plugin-transform-es2015-modules-commonjs "^6.16.0" - babel-plugin-transform-es2015-modules-systemjs "^6.14.0" - babel-plugin-transform-es2015-modules-umd "^6.12.0" + babel-plugin-transform-es2015-modules-amd "^6.18.0" + babel-plugin-transform-es2015-modules-commonjs "^6.18.0" + babel-plugin-transform-es2015-modules-systemjs "^6.18.0" + babel-plugin-transform-es2015-modules-umd "^6.18.0" babel-plugin-transform-es2015-object-super "^6.3.13" - babel-plugin-transform-es2015-parameters "^6.16.0" - babel-plugin-transform-es2015-shorthand-properties "^6.3.13" + babel-plugin-transform-es2015-parameters "^6.18.0" + babel-plugin-transform-es2015-shorthand-properties "^6.18.0" babel-plugin-transform-es2015-spread "^6.3.13" babel-plugin-transform-es2015-sticky-regex "^6.3.13" babel-plugin-transform-es2015-template-literals "^6.6.0" - babel-plugin-transform-es2015-typeof-symbol "^6.6.0" + babel-plugin-transform-es2015-typeof-symbol "^6.18.0" babel-plugin-transform-es2015-unicode-regex "^6.3.13" babel-plugin-transform-regenerator "^6.16.0" -babel-preset-react@^6.11.1: +babel-preset-react@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316" dependencies: @@ -964,7 +1031,7 @@ babel-preset-react@^6.11.1: babel-plugin-transform-react-jsx-self "^6.11.0" babel-plugin-transform-react-jsx-source "^6.3.13" -babel-preset-stage-0@^6.5.0: +babel-preset-stage-0@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.16.0.tgz#f5a263c420532fd57491f1a7315b3036e428f823" dependencies: @@ -998,27 +1065,26 @@ babel-preset-stage-3@^6.17.0: babel-plugin-transform-exponentiation-operator "^6.3.13" babel-plugin-transform-object-rest-spread "^6.16.0" -babel-register@^6.16.0: - version "6.16.3" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.16.3.tgz#7b0c0ca7bfdeb9188ba4c27e5fcb7599a497c624" +babel-register@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68" dependencies: - babel-core "^6.16.0" + babel-core "^6.18.0" babel-runtime "^6.11.6" core-js "^2.4.0" - home-or-tmp "^1.0.0" + home-or-tmp "^2.0.0" lodash "^4.2.0" mkdirp "^0.5.1" - path-exists "^1.0.0" source-map-support "^0.4.2" -babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1, babel-runtime@^6.9.2: +babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1: version "6.11.6" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" dependencies: core-js "^2.4.0" regenerator-runtime "^0.9.5" -babel-runtime@^6.6.1: +babel-runtime@^6.18.0, babel-runtime@^6.6.1: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078" dependencies: @@ -1035,7 +1101,7 @@ babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-te babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.14.0, babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.8.0, babel-traverse@^6.9.0: +babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.8.0, babel-traverse@^6.9.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.16.0.tgz#fba85ae1fd4d107de9ce003149cc57f53bef0c4f" dependencies: @@ -1049,7 +1115,21 @@ babel-traverse@^6.14.0, babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.8.0, babel-types@^6.9.0: +babel-traverse@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.18.0.tgz#5aeaa980baed2a07c8c47329cd90c3b90c80f05e" + dependencies: + babel-code-frame "^6.16.0" + babel-messages "^6.8.0" + babel-runtime "^6.9.0" + babel-types "^6.18.0" + babylon "^6.11.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.8.0, babel-types@^6.9.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.16.0.tgz#71cca1dbe5337766225c5c193071e8ebcbcffcfe" dependencies: @@ -1058,6 +1138,15 @@ babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.14.0, babel-types@^6.15 lodash "^4.2.0" to-fast-properties "^1.0.1" +babel-types@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.18.0.tgz#1f7d5a73474c59eb9151b2417bbff4e4fce7c3f8" + dependencies: + babel-runtime "^6.9.1" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + babel@6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" @@ -1601,6 +1690,10 @@ commander@~2.8.1, commander@2.8.x: 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" @@ -2028,6 +2121,12 @@ detect-indent@^3.0.1: minimist "^1.1.0" repeating "^1.1.0" +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-newline@2.X: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -2182,7 +2281,7 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -ejs@^2.4.2: +ejs@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.2.tgz#21444ba09386f0c65b6eafb96a3d51bcb3be80d1" @@ -2380,17 +2479,18 @@ eslint-plugin-babel@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-3.3.0.tgz#2f494aedcf6f4aa4e75b9155980837bc1fbde193" -eslint-plugin-react@^6.3.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.4.1.tgz#7d1aade747db15892f71eee1fea4addf97bcfa2b" +eslint-plugin-react@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.5.0.tgz#93f894b6469974304609e59c8983a6a3dc81738c" dependencies: doctrine "^1.2.2" - jsx-ast-utils "^1.3.1" + jsx-ast-utils "^1.3.3" -eslint@^3.0.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.7.1.tgz#7faa84599e0fea422f04bc32db49054051a3f11a" +eslint@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.9.1.tgz#5a8597706fc6048bc6061ac754d4a211d28f4f5b" dependencies: + babel-code-frame "^6.16.0" chalk "^1.1.3" concat-stream "^1.4.6" debug "^2.1.1" @@ -2413,12 +2513,12 @@ eslint@^3.0.1: lodash "^4.0.0" mkdirp "^0.5.0" natural-compare "^1.4.0" - optionator "^0.8.1" + 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.6.0" + shelljs "^0.7.5" strip-bom "^3.0.0" strip-json-comments "~1.0.1" table "^3.7.8" @@ -2706,6 +2806,14 @@ finalhandler@0.5.0: statuses "~1.3.0" unpipe "~1.0.0" +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -2796,7 +2904,15 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra@^0.30.0, fs-extra@~0.30.0: +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@~0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" dependencies: @@ -3022,7 +3138,7 @@ globals@^8.3.0: version "8.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" -globals@^9.2.0: +globals@^9.0.0, globals@^9.2.0: version "9.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.12.0.tgz#992ce90828c3a55fa8f16fada177adb64664cf9d" @@ -3299,12 +3415,12 @@ hoist-non-react-statics@^1.0.3, 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" -home-or-tmp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985" +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" - user-home "^1.1.1" hosted-git-info@^2.1.4, hosted-git-info@^2.1.5, hosted-git-info@~2.1.5: version "2.1.5" @@ -3430,7 +3546,7 @@ imports-loader@0.6.5: loader-utils "0.2.x" source-map "0.1.x" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3514,6 +3630,10 @@ 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.0.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54" @@ -3911,10 +4031,6 @@ json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" -json5@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" - json5@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.0.tgz#9b20715b026cbe3778fd769edccd822d8332a5b2" @@ -3941,10 +4057,11 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.1.tgz#14313c5c50da5b0c47020af5d1560c17e781a05a" +jsx-ast-utils@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.3.tgz#ccfdbe0320ba03f7a1fc4e67ceaf7e2cc0169721" dependencies: + acorn-jsx "^3.0.1" object-assign "^4.1.0" jwa@^1.1.2: @@ -4332,7 +4449,7 @@ lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0, lodash@4.16.4: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0: version "4.16.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127" @@ -4340,6 +4457,10 @@ lodash@~4.9.0: version "4.9.0" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.9.0.tgz#4c20d742f03ce85dc700e0dd7ab9bcab85e6fc14" +lodash@4.16.6: + version "4.16.6" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" + log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" @@ -4405,7 +4526,7 @@ map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" -marked@^0.3.5, marked@~0.3.0: +marked@^0.3.6, marked@~0.3.0: version "0.3.6" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" @@ -4684,9 +4805,9 @@ node-pre-gyp@^0.6.29: tar "~2.2.0" tar-pack "~3.1.0" -node-sass@3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.10.1.tgz#c535b2e1a5439240591e06d7308cb663820d616c" +node-sass@3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.11.1.tgz#0b25699663cc9d616e8c6fb874e7d9b25e5a8e20" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -4713,7 +4834,7 @@ node-uuid@~1.4.0, node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" -node-watch@^0.4.0: +node-watch@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.4.1.tgz#d0947d54a995f91135db4056b68722c6d7c322ad" @@ -4800,19 +4921,20 @@ npm-registry-client@~7.2.1: optionalDependencies: npmlog "~2.0.0 || ~3.1.0" -npm-shrinkwrap@200.5.1: - version "200.5.1" - resolved "https://registry.yarnpkg.com/npm-shrinkwrap/-/npm-shrinkwrap-200.5.1.tgz#ba56d46b653ec9bb13e60658e12c6571bbd296e4" +npm-shrinkwrap@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npm-shrinkwrap/-/npm-shrinkwrap-6.0.2.tgz#0a4e269bcc64fdb1741a2c46c2b0457a0072d437" dependencies: array-find "^0.1.1" + array-flatten "^2.1.0" error "^4.2.0" + graceful-fs "^4.1.2" json-diff "^0.3.1" minimist "^1.1.0" msee "^0.1.1" - npm "^2.1.10" - read-json "1.0.3" + npm "^2.15.10" rimraf "^2.2.8" - run-parallel "^1.0.0" + run-parallel "^1.1.6" run-series "^1.0.2" safe-json-parse "^2.0.0" semver "^4.0.3" @@ -4823,7 +4945,7 @@ npm-user-validate@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b" -npm@^2.1.10: +npm@^2.15.10: version "2.15.11" resolved "https://registry.yarnpkg.com/npm/-/npm-2.15.11.tgz#350588fba9cd8d384cf9a6e8dc0fef0f94992b7c" dependencies: @@ -5007,7 +5129,7 @@ optimist@^0.6.1, optimist@~0.6.0: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1: +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: @@ -5137,10 +5259,6 @@ path-case@^2.1.0: dependencies: no-case "^2.2.0" -path-exists@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -5188,7 +5306,7 @@ pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" -phantomjs-prebuilt@^2.1.7: +phantomjs-prebuilt@^2.1.13, phantomjs-prebuilt@^2.1.7: version "2.1.13" resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.13.tgz#66556ad9e965d893ca5a7dc9e763df7e8697f76d" dependencies: @@ -5216,6 +5334,12 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -5760,12 +5884,6 @@ read-installed@~4.0.3: optionalDependencies: graceful-fs "^4.1.2" -read-json@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/read-json/-/read-json-1.0.3.tgz#872e3a23abeee86210c8a2021e7976e43aa9a4d1" - dependencies: - try-call "0.0.2" - read-package-json@^2.0.0, read-package-json@~2.0.4, "read-package-json@1 || 2": version "2.0.4" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.4.tgz#61ed1b2256ea438d8008895090be84b8e799c853" @@ -5871,7 +5989,13 @@ realize-package-specifier@~3.0.1: dezalgo "^1.0.1" npm-package-arg "^4.1.1" -redbox-react@^1.2.10, redbox-react@^1.2.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" + +redbox-react@^1.2.5: version "1.3.1" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.1.tgz#02ea395f93442ac43e5363004d50a9cd1327ce41" dependencies: @@ -5879,6 +6003,13 @@ redbox-react@^1.2.10, redbox-react@^1.2.5: object-assign "^4.0.1" react-dom "^0.14.0 || ^15.0.0" +redbox-react@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.2.tgz#bc12ca4f88705d29aaace7a12183d3ec14dd33f1" + dependencies: + error-stack-parser "^1.3.6" + object-assign "^4.0.1" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -6212,7 +6343,7 @@ run-async@^0.1.0: dependencies: once "^1.3.0" -run-parallel@^1.0.0: +run-parallel@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039" @@ -6353,13 +6484,13 @@ sha@~2.0.1: graceful-fs "^4.1.2" readable-stream "^2.0.2" -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.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" +shelljs@^0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" signal-exit@^3.0.0: version "3.0.1" @@ -6879,10 +7010,6 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" -try-call@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/try-call/-/try-call-0.0.2.tgz#6e7dd18ddda109be795027b248d520e41a5d5145" - tryit@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.2.tgz#c196b0073e6b1c595d93c9c830855b7acc32a453" @@ -7039,10 +7166,6 @@ url@~0.10.1: punycode "1.3.2" querystring "0.2.0" -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - user-home@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" @@ -7228,7 +7351,7 @@ webpack-core@~0.6.0: source-list-map "~0.1.0" source-map "~0.4.1" -webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.6.1: +webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.8.4: version "1.8.4" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.8.4.tgz#e8765c9122887ce9e3abd4cc9c3eb31b61e0948d" dependencies: @@ -7237,11 +7360,11 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.6.1: path-is-absolute "^1.0.0" range-parser "^1.0.3" -webpack-hot-middleware@^2.12.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.13.0.tgz#aee39c058ff130a5916e2c5a762513241c87064f" +webpack-hot-middleware@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.13.1.tgz#104350e044be58ba3b7ef1c39513d69562841975" dependencies: - ansi-html "0.0.5" + ansi-html "0.0.6" html-entities "^1.2.0" querystring "^0.2.0" strip-ansi "^3.0.0" From 8ebd7a3d9ef88558fc6a9be74b478aa4ede822b0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 6 Nov 2016 12:40:46 -0700 Subject: [PATCH 225/452] Remove unneeded package: --- client/package.json | 1 - client/yarn.lock | 15 ++++----------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/client/package.json b/client/package.json index 5ccecc9..a13d4a4 100644 --- a/client/package.json +++ b/client/package.json @@ -71,7 +71,6 @@ "node-watch": "^0.4.1", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", - "path": "^0.12.7", "phantomjs-prebuilt": "^2.1.13", "protractor": "4.0.10", "psi": "2.0.4", diff --git a/client/yarn.lock b/client/yarn.lock index 33d23d2..fb4d76f 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -106,7 +106,7 @@ ansi-html@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" -ansi-regex@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" @@ -3546,7 +3546,7 @@ imports-loader@0.6.5: loader-utils "0.2.x" source-map "0.1.x" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5285,13 +5285,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path@^0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" - dependencies: - process "^0.11.1" - util "^0.10.3" - pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -5609,7 +5602,7 @@ process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" -process@^0.11.0, process@^0.11.1, process@~0.11.0: +process@^0.11.0, process@~0.11.0: version "0.11.9" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" @@ -7190,7 +7183,7 @@ util-extend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" -util@^0.10.3, util@~0.10.3, util@0.10.3: +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: From 917a36a6dcf5490d171f0ed9504c1e8f8f703684 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 17 Nov 2016 16:21:38 -0700 Subject: [PATCH 226/452] Fixes promise failure in api layer --- client/js/libs/api.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/js/libs/api.js b/client/js/libs/api.js index c59fa03..671a8ca 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -91,7 +91,9 @@ export default class Api{ // Dispose of the request when the call is complete wrapper.promise.then((result) => { Api._disposeRequest(url); - }); + }, ()=>{ + Api._disposeRequest(url); + } ); return wrapper.promise; } From c98433d12f7902932be1256f39c9ad7834be7f85 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 21 Nov 2016 17:19:02 -0700 Subject: [PATCH 227/452] Don't use existing request unless GET --- client/js/libs/api.js | 14 ++++++++------ client/js/libs/api.spec.js | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/client/js/libs/api.js b/client/js/libs/api.js index 671a8ca..5e221c5 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -99,16 +99,18 @@ export default class Api{ } static _wrapRequest(url, requestMethod, requestType){ - if (requestType === NetworkConstants.POST) { + if (requestType === NetworkConstants.GET){ + if (!_pendingRequests[url]){ + _pendingRequests[url] = { + request: requestMethod(url) + }; + } + return _pendingRequests[url]; + } else { return { request: requestMethod(url) }; - } else if (!_pendingRequests[url]) { - _pendingRequests[url] = { - request: requestMethod(url) - }; } - return _pendingRequests[url]; } static _disposeRequest(url){ diff --git a/client/js/libs/api.spec.js b/client/js/libs/api.spec.js index 66b0153..5d201a7 100644 --- a/client/js/libs/api.spec.js +++ b/client/js/libs/api.spec.js @@ -108,4 +108,39 @@ describe("api", function() { expect(request.requestHeaders["X-CSRF-Token"]).toBeUndefined(); }); -}); \ No newline at end of file + describe("Pending Requests", () => { + + const url = "http://www.example.com"; + const requestMethod = () => {}; + + it("Reuses an existing GET request", () => { + const requestType = Network.GET; + const request1 = api._wrapRequest(url, requestMethod, requestType); + const request2 = api._wrapRequest(url, requestMethod, requestType); + expect(request1).toBe(request2); + }); + + it("Does not reuse Posts requests", () => { + const requestType = Network.POST; + const request1 = api._wrapRequest(url, requestMethod, requestType); + const request2 = api._wrapRequest(url, requestMethod, requestType); + expect(request1).not.toBe(request2); + }); + + it("Does not reuse Put requests", () => { + const requestType = Network.PUT; + const request1 = api._wrapRequest(url, requestMethod, requestType); + const request2 = api._wrapRequest(url, requestMethod, requestType); + expect(request1).not.toBe(request2); + }); + + it("Does not reuse Del requests", () => { + const requestType = Network.DELETE; + const request1 = api._wrapRequest(url, requestMethod, requestType); + const request2 = api._wrapRequest(url, requestMethod, requestType); + expect(request1).not.toBe(request2); + }); + + }); + +}); From ce115b04e8cf53e2a4230cf6d9804af593c225b7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 23 Nov 2016 14:20:22 -0700 Subject: [PATCH 228/452] Updates default s3-website config --- .s3-website.json | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/.s3-website.json b/.s3-website.json index 0c89473..2cf5d2b 100644 --- a/.s3-website.json +++ b/.s3-website.json @@ -1,5 +1,22 @@ { - "uploadDir" : "build/prod", - "upload-dir" : "build/prod", - "domain" : "reactclientstarterapp.com" -} + "index": "index.html", + "region": "us-east-1", + "uploadDir": "build/prod", + "prefix": "", + "corsConfiguration": [ + { + "AllowedMethods": [ + "POST", "PUT", "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "AllowedHeaders": [ + "*" + ], + "MaxAgeSeconds": 0 + } + ], + "enableCloudfront": true, + "domain": "reactclientstarterapp.com" +} \ No newline at end of file From bb208e07b3ee7c1cf3e9f7be143c174aa0a2d1d6 Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Tue, 6 Dec 2016 10:51:05 -0700 Subject: [PATCH 229/452] Lint the hero of time (#6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * A lint to the past * Adds travis maybe * forgot a file * That one file that travis needs * Adds Mark, Mark Down * Aint nothin but a hound dog * No you’re a new line --- .eslintrc | 58 -------- .eslintrc.yml | 28 ++++ .hound.yml | 7 + .travis.yml | 30 +++++ README.md | 2 +- ci_karma | 6 + client/ci.karma.conf.js | 15 +++ client/js/actions/jwt.js | 16 +-- client/js/app.jsx | 38 +++--- client/js/components/common/not_found.jsx | 18 +-- client/js/components/common/not_found.spec.js | 11 -- .../js/components/common/not_found.spec.jsx | 11 ++ client/js/components/home.jsx | 25 ++-- client/js/components/layout/index.jsx | 22 +-- client/js/components/layout/index.spec.js | 22 --- client/js/components/layout/index.spec.jsx | 23 ++++ client/js/constants/error.js | 8 +- client/js/constants/network.js | 15 +-- client/js/constants/wrapper.js | 8 +- client/js/dev/dev_tools.jsx | 10 +- client/js/libs/api.js | 127 +++++++++--------- client/js/libs/api.spec.js | 104 +++++++------- client/js/libs/assets.js | 2 +- client/js/libs/assets.spec.js | 20 +-- client/js/loaders/jwt.js | 10 +- client/js/middleware/api.js | 41 +++--- client/js/middleware/api.spec.js | 35 ++--- client/js/reducers/application.js | 7 +- client/js/reducers/application.spec.js | 10 +- client/js/reducers/index.js | 12 +- client/js/reducers/jwt.js | 9 +- client/js/reducers/jwt.spec.js | 21 +-- client/js/reducers/settings.js | 16 ++- client/js/reducers/settings.spec.js | 29 ++-- client/js/store/configure_store.spec.js | 15 +-- 35 files changed, 403 insertions(+), 428 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.yml create mode 100644 .hound.yml create mode 100644 .travis.yml create mode 100755 ci_karma create mode 100644 client/ci.karma.conf.js delete mode 100644 client/js/components/common/not_found.spec.js create mode 100644 client/js/components/common/not_found.spec.jsx delete mode 100644 client/js/components/layout/index.spec.js create mode 100644 client/js/components/layout/index.spec.jsx diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index a730098..0000000 --- a/.eslintrc +++ /dev/null @@ -1,58 +0,0 @@ -{ - "parser": "babel-eslint", - "rules": { - "babel/generator-star-spacing": 1, - "babel/new-cap": 1, - "babel/object-shorthand": 1, - "babel/arrow-parens": 1, - "babel/no-await-in-loop": 1, - "react/jsx-uses-react": 2, - "react/jsx-uses-vars": 2, - "react/react-in-jsx-scope": 2, - "indent": [ - 2, - 2, - {"SwitchCase": 1} - ], - "quotes": 0, - "linebreak-style": [ - 2, - "unix" - ], - "semi": [ - 2, - "always" - ], - "global-strict": [0, "never"], - "strict": [ - 0, - "global" - ], - "no-underscore-dangle": 0, - "no-multi-spaces": [ - 2, - { "exceptions": { - "ImportDeclaration": true, - "AssignmentPattern": true, - "VariableDeclarator": true, - "JSXAttribute": true - } - } - ], - "comma-dangle": 0, - "camelcase": 0 - }, - "env": { - "es6": true, - "browser": true, - "node": true - }, - "ecmaFeatures": { - "jsx": true, - "modules": true - }, - "plugins": [ - "babel", - "react" - ] -} diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..0655d8d --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,28 @@ +--- +ecmaFeatures: + jsx: true + modules: true +env: + browser: true + es6: true +extends: airbnb +parser: babel-eslint +plugins: + - react + - jsx-a11y + - import +globals: + describe: false + beforeEach: false + afterEach: false + it: false + expect: false + xit: false + spyOn: false + jasmine: false + module: false +rules: + linebreak-style: + - error + - unix + import/no-unresolved: 0 diff --git a/.hound.yml b/.hound.yml new file mode 100644 index 0000000..b2f9c05 --- /dev/null +++ b/.hound.yml @@ -0,0 +1,7 @@ +# reference: https://houndci.com/configuration + +fail_on_violations: true + +eslint: + enabled: true + config_file: .eslintrc.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..5c4c5d7 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,30 @@ +sudo: required +dist: trusty + +cache: + directories: + - client/node_modules + +branches: + only: + - master + - staging + - stable + +before_install: + - cp .env.example .env + - cp client/ci.karma.conf.js client/karma.conf.js + - nvm install 6.9.1 + - nvm use 6.9.1 + - npm install -g yarn + +install: + - yarn + +before_script: + - export CHROME_BIN=chromium-browser + - "export DISPLAY=:99.0" + - "sh -e /etc/init.d/xvfb start" + +script: + - ./ci_karma diff --git a/README.md b/README.md index 7316f58..5bb38b2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#React Client Starter App +#React Client Starter App [![Build Status](https://travis-ci.org/atomicjolt/react_client_starter_app.svg?branch=master)](https://travis-ci.org/atomicjolt/react_client_starter_app) ----------------------- There are many starter kits that will help you get started with React and Redux. This is the one created by, maintained by and used by [Atomic Jolt](http://www.atomicjolt.com). Atomic Jolt uses this as application as a starting place for our [Ruby on Rails React starter application](https://github.com/atomicjolt/react_starter_app) and our [Firebase React starter appliction](https://github.com/atomicjolt/react_firebase_starter_app). diff --git a/ci_karma b/ci_karma new file mode 100755 index 0000000..8cbdf56 --- /dev/null +++ b/ci_karma @@ -0,0 +1,6 @@ +#!/bin/bash + +# Exit if any subcommand fails +set -e + +yarn test diff --git a/client/ci.karma.conf.js b/client/ci.karma.conf.js new file mode 100644 index 0000000..359b09f --- /dev/null +++ b/client/ci.karma.conf.js @@ -0,0 +1,15 @@ +const karmaConfig = require('./config/karma'); + +module.exports = (config) => { + const testConfig = karmaConfig(); + testConfig.singleRun = true; + testConfig.autoWatch = false; + testConfig.customLaunchers = { + Chrome_travis_ci: { + base: 'Chrome', + flags: ['--no-sandbox'], + }, + }; + testConfig.browsers = ['Chrome_travis_ci']; + config.set(testConfig); +}; diff --git a/client/js/actions/jwt.js b/client/js/actions/jwt.js index 6d5438a..0814a78 100644 --- a/client/js/actions/jwt.js +++ b/client/js/actions/jwt.js @@ -1,22 +1,20 @@ -"use strict"; - -import wrapper from "../constants/wrapper"; -import Network from "../constants/network"; +import wrapper from '../constants/wrapper'; +import Network from '../constants/network'; // Local actions const actions = []; // Actions that make an api request const requests = [ - "REFRESH_JWT" + 'REFRESH_JWT', ]; export const Constants = wrapper(actions, requests); -export function refreshJwt(userId){ +export function refreshJwt(userId) { return { - type: Constants.REFRESH_JWT, + type: Constants.REFRESH_JWT, method: Network.GET, - url: `api/sessions/${userId}` + url: `api/sessions/${userId}`, }; -} \ No newline at end of file +} diff --git a/client/js/app.jsx b/client/js/app.jsx index a81b587..9235d49 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,29 +1,27 @@ -"use strict"; - import 'babel-polyfill'; -import es6Promise from 'es6-promise'; -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Provider } from 'react-redux'; -import routes from './routes'; -import DevTools from './dev/dev_tools'; -import configureStore from './store/configure_store'; -import jwt from './loaders/jwt'; -import { getInitialSettings } from './reducers/settings'; +import es6Promise from 'es6-promise'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import routes from './routes'; +import DevTools from './dev/dev_tools'; +import configureStore from './store/configure_store'; +import jwt from './loaders/jwt'; +import { getInitialSettings } from './reducers/settings'; // Polyfill es6 promises for IE es6Promise.polyfill(); -//Needed for onTouchTap -//Can go away when react 1.0 release -//Check this repo: -//https://github.com/zilverline/react-tap-event-plugin +// Needed for onTouchTap +// Can go away when react 1.0 release +// Check this repo: +// https://github.com/zilverline/react-tap-event-plugin import injectTapEventPlugin from "react-tap-event-plugin"; injectTapEventPlugin(); class Root extends React.Component { - render(){ + render() { const devTools = __DEV__ ? : null; const { store } = this.props; return ( @@ -38,12 +36,12 @@ class Root extends React.Component { } const settings = getInitialSettings(window.DEFAULT_SETTINGS); -const store = configureStore({settings, jwt: window.DEFAULT_JWT}); -if (window.DEFAULT_JWT){ // Setup JWT refresh +const store = configureStore({ settings, jwt: window.DEFAULT_JWT }); +if (window.DEFAULT_JWT) { // Setup JWT refresh jwt(store.dispatch, settings.userId); } ReactDOM.render( , - document.getElementById("main-app") -); \ No newline at end of file + document.getElementById('main-app'), +); diff --git a/client/js/components/common/not_found.jsx b/client/js/components/common/not_found.jsx index dd147d5..37d2b33 100644 --- a/client/js/components/common/not_found.jsx +++ b/client/js/components/common/not_found.jsx @@ -1,14 +1,8 @@ -"use strict"; - import React from 'react'; -export default (props) => { - - return ( -
    -

    Page Not Found

    -

    Sorry, but the page you were trying to view does not exist.

    -
    - ); - -}; \ No newline at end of file +export default () => ( +
    +

    Page Not Found

    +

    Sorry, but the page you were trying to view does not exist.

    +
    +); diff --git a/client/js/components/common/not_found.spec.js b/client/js/components/common/not_found.spec.js deleted file mode 100644 index 8edfb22..0000000 --- a/client/js/components/common/not_found.spec.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import TestUtils from 'react/lib/ReactTestUtils'; -import NotFound from './not_found'; - -describe('not found', () => { - it('renders a "not found" message', () => { - let result = TestUtils.renderIntoDocument(
    ); - expect(ReactDOM.findDOMNode(result).textContent).toContain("Page Not Found"); - }); -}); \ No newline at end of file diff --git a/client/js/components/common/not_found.spec.jsx b/client/js/components/common/not_found.spec.jsx new file mode 100644 index 0000000..d2cc15a --- /dev/null +++ b/client/js/components/common/not_found.spec.jsx @@ -0,0 +1,11 @@ +import React from 'react'; +import TestUtils from 'react/lib/ReactTestUtils'; +import NotFound from './not_found'; + +describe('not found', () => { + it('renders a "not found" message', () => { + const result = TestUtils.renderIntoDocument(
    ); + const heading = TestUtils.findRenderedDOMComponentWithTag(result, 'h1'); + expect(heading.textContent).toContain('Page Not Found'); + }); +}); diff --git a/client/js/components/home.jsx b/client/js/components/home.jsx index 80f4038..2885b4e 100644 --- a/client/js/components/home.jsx +++ b/client/js/components/home.jsx @@ -1,19 +1,12 @@ -"use strict"; +import React from 'react'; +import assets from '../libs/assets'; -import React from 'react'; -import assets from '../libs/assets'; - -class Home extends React.Component { - - render(){ - - const img = assets("./images/atomicjolt.jpg"); - - return
    - -
    ; - } +export default function Home() { + const img = assets('./images/atomicjolt.jpg'); + return ( +
    + Atomic Jolt Logo +
    + ); } - -export { Home as default }; \ No newline at end of file diff --git a/client/js/components/layout/index.jsx b/client/js/components/layout/index.jsx index ae0e500..56a9b0d 100644 --- a/client/js/components/layout/index.jsx +++ b/client/js/components/layout/index.jsx @@ -1,18 +1,22 @@ -"use strict"; - -import React from "react"; +import React from 'react'; export default class Index extends React.Component { - constructor(){ + static propTypes = { + children: React.PropTypes.node, + }; + + constructor() { super(); this.state = {}; } - render(){ - return
    - {this.props.children} -
    ; + render() { + return ( +
    + {this.props.children} +
    + ); } -} \ No newline at end of file +} diff --git a/client/js/components/layout/index.spec.js b/client/js/components/layout/index.spec.js deleted file mode 100644 index afaf74c..0000000 --- a/client/js/components/layout/index.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -import React from 'react'; -import ReactDOM from 'react-dom'; -import TestUtils from 'react/lib/ReactTestUtils'; -import { Provider } from 'react-redux' -import Helper from '../../../specs_support/helper'; -import Index from './index'; - -describe('index', function() { - var result; - var props; - - beforeEach(()=>{ - props = {}; - result = TestUtils.renderIntoDocument(); - }); - - it('renders the index', function() { - expect(ReactDOM.findDOMNode(result)).toBeDefined(); - }); -}); \ No newline at end of file diff --git a/client/js/components/layout/index.spec.jsx b/client/js/components/layout/index.spec.jsx new file mode 100644 index 0000000..16fcaec --- /dev/null +++ b/client/js/components/layout/index.spec.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import TestUtils from 'react/lib/ReactTestUtils'; +import { Provider } from 'react-redux'; +import Helper from '../../../specs_support/helper'; +import Index from './index'; + +describe('index', () => { + let result; + let props; + + beforeEach(() => { + props = {}; + result = TestUtils.renderIntoDocument( + + + , + ); + }); + + it('renders the index', () => { + expect(result).toBeDefined(); + }); +}); diff --git a/client/js/constants/error.js b/client/js/constants/error.js index 4358eb1..b82ca32 100644 --- a/client/js/constants/error.js +++ b/client/js/constants/error.js @@ -1,7 +1,5 @@ export default { - - TIMEOUT : "NETWORK_TIMEOUT", - ERROR : "NETWORK_ERROR", - NOT_AUTHORIZED : "NETWORK_NOT_AUTHORIZED" - + TIMEOUT: 'NETWORK_TIMEOUT', + ERROR: 'NETWORK_ERROR', + NOT_AUTHORIZED: 'NETWORK_NOT_AUTHORIZED', }; \ No newline at end of file diff --git a/client/js/constants/network.js b/client/js/constants/network.js index 331046a..e9a2855 100644 --- a/client/js/constants/network.js +++ b/client/js/constants/network.js @@ -1,10 +1,7 @@ export default { - - GET : 'get', - POST : 'post', - PUT : 'put', - DEL : 'delete', - - TIMEOUT : 20000, - -}; \ No newline at end of file + GET: 'get', + POST: 'post', + PUT: 'put', + DEL: 'delete', + TIMEOUT: 20000, +}; diff --git a/client/js/constants/wrapper.js b/client/js/constants/wrapper.js index 2b9fb5a..392e0cb 100644 --- a/client/js/constants/wrapper.js +++ b/client/js/constants/wrapper.js @@ -1,8 +1,6 @@ -"use strict"; +import _ from 'lodash'; -import _ from "lodash"; - -export const DONE = "_DONE"; +export const DONE = '_DONE'; export default function(actionTypes, asyncActionTypes){ @@ -20,4 +18,4 @@ export default function(actionTypes, asyncActionTypes){ types.DONE = DONE; return types; -} \ No newline at end of file +} diff --git a/client/js/dev/dev_tools.jsx b/client/js/dev/dev_tools.jsx index 04a2157..812c0ad 100644 --- a/client/js/dev/dev_tools.jsx +++ b/client/js/dev/dev_tools.jsx @@ -4,9 +4,11 @@ import LogMonitor from 'redux-devtools-log-monitor'; import DockMonitor from 'redux-devtools-dock-monitor'; export default createDevTools( - + - + , ); diff --git a/client/js/libs/api.js b/client/js/libs/api.js index 5e221c5..d9f4208 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -1,36 +1,33 @@ -"use strict"; +import _ from 'lodash'; +import Request from 'superagent'; -import _ from "lodash"; -import Request from "superagent"; +import NetworkConstants from '../constants/network'; -import NetworkConstants from "../constants/network"; +const pendingRequests = {}; -var _pendingRequests = {}; -var _cache = {}; +export default class Api { -export default class Api{ - - static get(url, apiUrl, jwt, csrf, params, headers){ + static get(url, apiUrl, jwt, csrf, params, headers) { return Api.execRequest(NetworkConstants.GET, url, apiUrl, jwt, csrf, params, null, headers); } - static post(url, apiUrl, jwt, csrf, params, body, headers){ + static post(url, apiUrl, jwt, csrf, params, body, headers) { return Api.execRequest(NetworkConstants.POST, url, apiUrl, jwt, csrf, params, body, headers); } - static put(url, apiUrl, jwt, csrf, params, body, headers){ + static put(url, apiUrl, jwt, csrf, params, body, headers) { return Api.execRequest(NetworkConstants.PUT, url, apiUrl, jwt, csrf, params, body, headers); } - static del(url, apiUrl, jwt, csrf, params, headers){ + static del(url, apiUrl, jwt, csrf, params, headers) { return Api.execRequest(NetworkConstants.DEL, url, apiUrl, jwt, csrf, params, null, headers); } - static execRequest(method, url, apiUrl, jwt, csrf, params, body, headers){ - return Api._doRequest(Api._makeUrl(`${url}${Api.queryStringFrom(params)}`, apiUrl), (fullUrl) => { - var request; + static execRequest(method, url, apiUrl, jwt, csrf, params, body, headers) { + return Api.doRequest(Api.makeUrl(`${url}${Api.queryStringFrom(params)}`, apiUrl), (fullUrl) => { + let request; - switch (method){ + switch (method) { case NetworkConstants.GET: request = Request.get(fullUrl); break; @@ -43,14 +40,16 @@ export default class Api{ case NetworkConstants.DEL: request = Request.del(fullUrl); break; + default: + break; } request.set('Accept', 'application/json').timeout(NetworkConstants.TIMEOUT); - if(!_.isNil(jwt)){ request.set('Authorization', `Bearer ${jwt}`); } - if(!_.isNil(csrf)){ request.set('X-CSRF-Token', csrf); } + if (!_.isNil(jwt)) { request.set('Authorization', `Bearer ${jwt}`); } + if (!_.isNil(csrf)) { request.set('X-CSRF-Token', csrf); } - if(!_.isNil(headers)){ + if (!_.isNil(headers)) { _.each(headers, (headerValue, headerKey) => { request.set(headerKey, headerValue); }); @@ -64,60 +63,59 @@ export default class Api{ * Returns a complete, absolute URL by conditionally appending `path` to * `apiUrl`. If `path` already contains "http", it is returned as-is. */ - static _makeUrl(part, apiUrl){ - if(part.indexOf("http") >= 0){ + static makeUrl(part, apiUrl) { + if (part.indexOf('http') >= 0) { return part; - } else { - var slash = _.last(apiUrl.split("")) == "/" ? "" :"/"; - if(part[0] == "/"){ - part = part.slice(1); - } - return apiUrl + slash + part; } - } - static _doRequest(url, requestMethod, requestType){ + const slash = _.last(apiUrl.split('')) === '/' ? '' : '/'; + let newPart = part; + if (part[0] === '/') { + newPart = part.slice(1); + } + return apiUrl + slash + newPart; + } + static doRequest(url, requestMethod, requestType) { // Prevent duplicate requests - var wrapper = Api._wrapRequest(url, requestMethod, requestType); - if(wrapper.promise){ + const wrapper = Api.wrapRequest(url, requestMethod, requestType); + if (wrapper.promise) { // Existing request was found. Return promise from request return wrapper.promise; } // No request was found. Generate a promise, add it to the wrapper and return the promise. - wrapper.promise = Api._promisify(wrapper.request, url); + wrapper.promise = Api.promisify(wrapper.request, url); // Dispose of the request when the call is complete - wrapper.promise.then((result) => { - Api._disposeRequest(url); - }, ()=>{ - Api._disposeRequest(url); - } ); + wrapper.promise.then(() => { + Api.disposeRequest(url); + }, () => { + Api.disposeRequest(url); + }); return wrapper.promise; } - static _wrapRequest(url, requestMethod, requestType){ - if (requestType === NetworkConstants.GET){ - if (!_pendingRequests[url]){ - _pendingRequests[url] = { - request: requestMethod(url) + static wrapRequest(url, requestMethod, requestType) { + if (requestType === NetworkConstants.GET) { + if (!pendingRequests[url]) { + pendingRequests[url] = { + request: requestMethod(url), }; } - return _pendingRequests[url]; - } else { - return { - request: requestMethod(url) - }; + return pendingRequests[url]; } + return { + request: requestMethod(url), + }; } - static _disposeRequest(url){ - delete _pendingRequests[url]; + static disposeRequest(url) { + delete pendingRequests[url]; } - static _promisify(request) { + static promisify(request) { return new Promise((resolve, reject) => { request.end((error, res) => { if (error) { @@ -129,37 +127,32 @@ export default class Api{ }); } - static queryStringFrom(params){ - var query = _.chain(params) + static queryStringFrom(params) { + const query = _.chain(params) .map((val, key) => { - if(val){ + if (val) { if (_.isArray(val)) { - return _.map(val, (subVal) => { return `${key}[]=${subVal}`; }).join(`&`); - } else { - return `${key}=${val}`; + return _.map(val, subVal => `${key}[]=${subVal}`).join('&'); } - } else { - return ""; + return `${key}=${val}`; } + return ''; }) .compact() .value(); - if(query.length > 0){ - return `?${query.join("&")}`; - } else { - return ""; + if (query.length > 0) { + return `?${query.join('&')}`; } - + return ''; } - } // function *doCacheRequest(url, key, requestMethod, requestType){ // var promise; -// var fullUrl = Api._makeUrl(url); +// var fullUrl = Api.makeUrl(url); // if (_cache[fullUrl]) { // setTimeout(() => { @@ -177,10 +170,10 @@ export default class Api{ // if(wrapper.promise){ // yield wrapper.promise; // } else { -// promise = Api._promisify(wrapper.request); +// promise = Api.promisify(wrapper.request); // wrapper.promise = promise; // promise.then((result) => { -// Api._disposeRequest(url); +// Api.disposeRequest(url); // dispatchResponse(key)(null, result); // _cache[fullUrl] = result; // _cache[fullUrl].isCached = true; diff --git a/client/js/libs/api.spec.js b/client/js/libs/api.spec.js index 5d201a7..7785e1a 100644 --- a/client/js/libs/api.spec.js +++ b/client/js/libs/api.spec.js @@ -1,20 +1,19 @@ -import api from "./api"; -import Network from "../constants/network"; -import Helper from "../../specs_support/helper"; - -describe("api", function() { - - const jwt = "jwt_token"; - const apiUrl = "http://www.example.com"; - const csrf = "csrf_value"; +import api from './api'; +import Network from '../constants/network'; +import Helper from '../../specs_support/helper'; + +describe('api', () => { + const jwt = 'jwt_token'; + const apiUrl = 'http://www.example.com'; + const csrf = 'csrf_value'; const params = {}; const body = {}; const headers = {}; Helper.stubAjax(); - it("calls Get", () => { - const url = "/api/test/1"; + it('calls Get', () => { + const url = '/api/test/1'; api.get(url, apiUrl, jwt, csrf, params, headers).then((result) => { expect(result.statusCode).toBe(200); expect(result.text).toEqual(Helper.testPayload()); @@ -22,35 +21,35 @@ describe("api", function() { const request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toEqual(`${apiUrl}${url}`); expect(request.method.toLowerCase()).toEqual(Network.GET); - expect(request.requestHeaders["Accept"]).toEqual("application/json"); - expect(request.requestHeaders["Authorization"]).toEqual(`Bearer ${jwt}`); - expect(request.requestHeaders["X-CSRF-Token"]).toEqual(csrf); + expect(request.requestHeaders.Accept).toEqual('application/json'); + expect(request.requestHeaders.Authorization).toEqual(`Bearer ${jwt}`); + expect(request.requestHeaders['X-CSRF-Token']).toEqual(csrf); }); - it("calls Get without a jwt", () => { - const url = "/api/test/2"; + it('calls Get without a jwt', () => { + const url = '/api/test/2'; api.get(url, apiUrl, null, csrf, params, headers).then((result) => { expect(result.statusCode).toBe(200); }); const request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.requestHeaders["Authorization"]).toBeUndefined(); - expect(request.requestHeaders["X-CSRF-Token"]).toEqual(csrf); + expect(request.requestHeaders.Authorization).toBeUndefined(); + expect(request.requestHeaders['X-CSRF-Token']).toEqual(csrf); }); - it("calls Get without a csrf", () => { - const url = "/api/test/3"; + it('calls Get without a csrf', () => { + const url = '/api/test/3'; api.get(url, apiUrl, jwt, null, params, headers).then((result) => { expect(result.statusCode).toBe(200); }); const request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.requestHeaders["Authorization"]).toEqual(`Bearer ${jwt}`); - expect(request.requestHeaders["X-CSRF-Token"]).toBeUndefined(); + expect(request.requestHeaders.Authorization).toEqual(`Bearer ${jwt}`); + expect(request.requestHeaders['X-CSRF-Token']).toBeUndefined(); }); - it("calls Get with a full url", () => { - const url = "http://www.example.com/api/test/full"; + it('calls Get with a full url', () => { + const url = 'http://www.example.com/api/test/full'; api.get(url, apiUrl, jwt, null, params, headers).then((result) => { expect(result.statusCode).toBe(200); }); @@ -58,15 +57,15 @@ describe("api", function() { expect(request.url).toEqual(url); }); - it("calls Post", () => { - const url = "/api/test"; + it('calls Post', () => { + const url = '/api/test'; api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { expect(result.statusCode).toBe(200); }); }); - it("calls Post with a full url", () => { - const url = "http://www.example.com/api/test/full"; + it('calls Post with a full url', () => { + const url = 'http://www.example.com/api/test/full'; api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { expect(result.statusCode).toBe(200); }); @@ -75,8 +74,8 @@ describe("api", function() { expect(request.method.toLowerCase()).toEqual(Network.POST); }); - it("calls Put", () => { - const url = "/api/test/4"; + it('calls Put', () => { + const url = '/api/test/4'; api.put(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { expect(result.statusCode).toBe(200); const request = result.req; @@ -84,8 +83,8 @@ describe("api", function() { }); }); - it("calls Delete", () => { - const url = "/api/test/5"; + it('calls Delete', () => { + const url = '/api/test/5'; api.del(url, apiUrl, jwt, csrf, params, headers).then((result) => { expect(result.statusCode).toBe(200); }); @@ -94,8 +93,8 @@ describe("api", function() { expect(request.method.toLowerCase()).toEqual(Network.DEL); }); - it("calls execRequest directly", () => { - const url = "/api/test/6"; + it('calls execRequest directly', () => { + const url = '/api/test/6'; api.execRequest(Network.GET, url, apiUrl, null, null).then((result) => { expect(result.statusCode).toBe(200); expect(result.text).toEqual(Helper.testPayload()); @@ -103,44 +102,41 @@ describe("api", function() { const request = jasmine.Ajax.requests.mostRecent(); expect(request.url).toEqual(`${apiUrl}${url}`); expect(request.method.toLowerCase()).toEqual(Network.GET); - expect(request.requestHeaders["Accept"]).toEqual("application/json"); - expect(request.requestHeaders["Authorization"]).toBeUndefined(); - expect(request.requestHeaders["X-CSRF-Token"]).toBeUndefined(); + expect(request.requestHeaders.Accept).toEqual('application/json'); + expect(request.requestHeaders.Authorization).toBeUndefined(); + expect(request.requestHeaders['X-CSRF-Token']).toBeUndefined(); }); - describe("Pending Requests", () => { - - const url = "http://www.example.com"; + describe('Pending Requests', () => { + const url = 'http://www.example.com'; const requestMethod = () => {}; - it("Reuses an existing GET request", () => { + it('Reuses an existing GET request', () => { const requestType = Network.GET; - const request1 = api._wrapRequest(url, requestMethod, requestType); - const request2 = api._wrapRequest(url, requestMethod, requestType); + const request1 = api.wrapRequest(url, requestMethod, requestType); + const request2 = api.wrapRequest(url, requestMethod, requestType); expect(request1).toBe(request2); }); - it("Does not reuse Posts requests", () => { + it('Does not reuse Posts requests', () => { const requestType = Network.POST; - const request1 = api._wrapRequest(url, requestMethod, requestType); - const request2 = api._wrapRequest(url, requestMethod, requestType); + const request1 = api.wrapRequest(url, requestMethod, requestType); + const request2 = api.wrapRequest(url, requestMethod, requestType); expect(request1).not.toBe(request2); }); - it("Does not reuse Put requests", () => { + it('Does not reuse Put requests', () => { const requestType = Network.PUT; - const request1 = api._wrapRequest(url, requestMethod, requestType); - const request2 = api._wrapRequest(url, requestMethod, requestType); + const request1 = api.wrapRequest(url, requestMethod, requestType); + const request2 = api.wrapRequest(url, requestMethod, requestType); expect(request1).not.toBe(request2); }); - it("Does not reuse Del requests", () => { + it('Does not reuse Del requests', () => { const requestType = Network.DELETE; - const request1 = api._wrapRequest(url, requestMethod, requestType); - const request2 = api._wrapRequest(url, requestMethod, requestType); + const request1 = api.wrapRequest(url, requestMethod, requestType); + const request2 = api.wrapRequest(url, requestMethod, requestType); expect(request1).not.toBe(request2); }); - }); - }); diff --git a/client/js/libs/assets.js b/client/js/libs/assets.js index 771b7b4..17d1ec0 100644 --- a/client/js/libs/assets.js +++ b/client/js/libs/assets.js @@ -1,3 +1,3 @@ // See http://webpack.github.io/docs/context.html#dynamic-requires -export default require.context("../../assets", true, /^\.\//); +export default require.context('../../assets', true, /^\.\//); diff --git a/client/js/libs/assets.spec.js b/client/js/libs/assets.spec.js index 8819716..748bb36 100644 --- a/client/js/libs/assets.spec.js +++ b/client/js/libs/assets.spec.js @@ -1,12 +1,9 @@ -import assets from "./assets"; -import _ from "lodash"; +import _ from 'lodash'; +import assets from './assets'; describe('assets', () => { - - describe('default functionality', ()=> { - + describe('default functionality', () => { it('Provides the url for an asset', () => { - const jpg = assets('./images/atomicjolt.jpg'); expect(jpg).toBe('data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhBMDlGMEVGQjBEODExRTU4Q0Y4RTJCOTU4QTNFMzM2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhBMDlGMEYwQjBEODExRTU4Q0Y4RTJCOTU4QTNFMzM2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OEEwOUYwRURCMEQ4MTFFNThDRjhFMkI5NThBM0UzMzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OEEwOUYwRUVCMEQ4MTFFNThDRjhFMkI5NThBM0UzMzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYF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'); @@ -15,17 +12,12 @@ describe('assets', () => { const big = assets('./images/atomicjolt.png'); expect(big).toBe('/_karma_webpack_/atomicjolt-92b4dadbb4b4c6bc62bcd225dbefa9d3.png'); - }); - }); - describe('context', ()=> { - - it('gets the context object', ()=> { + describe('context', () => { + it('gets the context object', () => { expect(_.includes(assets.keys(), './images/atomicjolt.jpg')).toBe(true); }); - }); - -}); \ No newline at end of file +}); diff --git a/client/js/loaders/jwt.js b/client/js/loaders/jwt.js index 0baf85b..32a4c67 100644 --- a/client/js/loaders/jwt.js +++ b/client/js/loaders/jwt.js @@ -1,12 +1,8 @@ -"use strict"; - -import { refreshJwt } from "../actions/jwt"; - -export default function(dispatch, currentUserId){ +import { refreshJwt } from '../actions/jwt'; +export default function (dispatch, currentUserId) { const refresh = 1000 * 60 * 20; // every 20 minutes setInterval(() => { dispatch(refreshJwt(currentUserId)); }, refresh); - -} \ No newline at end of file +} diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index 5296c5d..e35d596 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -1,40 +1,47 @@ -import api from "../libs/api"; -import { DONE } from "../constants/wrapper"; +import api from '../libs/api'; +import { DONE } from '../constants/wrapper'; -const API = store => next => action => { - - function request(method, url, params, body, headers){ +const API = store => next => (action) => { + function request(method, url, params, body, headers) { const state = store.getState(); - const promise = api.execRequest(method, url, state.settings.apiUrl, state.jwt, state.settings.csrfToken, params, body, headers); - if(promise){ + const promise = api.execRequest( + method, + url, + state.settings.apiUrl, + state.jwt, + state.settings.csrfToken, + params, + body, + headers); + + if (promise) { promise.then( (response) => { store.dispatch({ - type: action.type + DONE, - payload: response.body, + type: action.type + DONE, + payload: response.body, original: action, - response + response, }); // Dispatch the new data }, (error) => { store.dispatch({ - type: action.type + DONE, - payload: {}, + type: action.type + DONE, + payload: {}, original: action, - error + error, }); // Dispatch the new error - } + }, ); } - }; + } - if(action.method){ + if (action.method) { request(action.method, action.url, action.params, action.body, action.headers); } // call the next middleWare next(action); - }; export { API as default }; diff --git a/client/js/middleware/api.spec.js b/client/js/middleware/api.spec.js index ccfdb54..03b7577 100644 --- a/client/js/middleware/api.spec.js +++ b/client/js/middleware/api.spec.js @@ -1,28 +1,32 @@ -import api from "./api"; -import Network from "../constants/network"; -import Helper from '../../specs_support/helper'; - -describe('api middleware', function() { +import api from './api'; +import Network from '../constants/network'; +import Helper from '../../specs_support/helper'; +describe('api middleware', () => { Helper.stubAjax(); - + it('implements Redux middleware interface', () => { const store = { getState: () => {} }; const middleware = api(store); const nextHandler = () => {}; const actionHandler = middleware(nextHandler); - expect(api.length).toBe(1); // api middleware takes one arg - expect(typeof middleware).toBe("function"); // api middleware must return a function to handle next - expect(middleware.length).toBe(1); // next handler returned by api middleware must take one argument - expect(typeof actionHandler).toBe("function"); // next handler must return a function to handle action - expect(actionHandler.length).toBe(1); // action handler must take one argument + // api middleware takes one arg + expect(api.length).toBe(1); + // api middleware must return a function to handle next + expect(typeof middleware).toBe('function'); + // next handler returned by api middleware must take one argument + expect(middleware.length).toBe(1); + // next handler must return a function to handle action + expect(typeof actionHandler).toBe('function'); + // action handler must take one argument + expect(actionHandler.length).toBe(1); }); it('passes action on to next middleware', () => { const store = { getState: () => {} }; const action = { - type: "TEST" + type: 'TEST', }; const nextHandler = api(store); const next = (actionPassed) => { @@ -34,14 +38,13 @@ describe('api middleware', function() { it('calls the api library', () => { const action = { - type: "TEST", + type: 'TEST', method: Network.GET, - url: "http://www.example.com/api/stuff.json" + url: 'http://www.example.com/api/stuff.json', }; const middleware = api(Helper.makeStore()); const nextHandler = () => {}; const actionHandler = middleware(nextHandler); actionHandler(action); }); - -}); \ No newline at end of file +}); diff --git a/client/js/reducers/application.js b/client/js/reducers/application.js index 266a0a4..86f1f09 100644 --- a/client/js/reducers/application.js +++ b/client/js/reducers/application.js @@ -1,10 +1,7 @@ -"use strict"; - -const initialState = {}; +const initialState = {}; export default (state = initialState, action) => { - - switch(action.type){ + switch (action.type) { default: return state; diff --git a/client/js/reducers/application.spec.js b/client/js/reducers/application.spec.js index b9cf9ef..9f28a33 100644 --- a/client/js/reducers/application.spec.js +++ b/client/js/reducers/application.spec.js @@ -1,15 +1,11 @@ -import application from "./application"; +import application from './application'; describe('application reducer', () => { - - describe("initial state", () => { - - it("returns empty state", () => { + describe('initial state', () => { + it('returns empty state', () => { const initialState = {}; const state = application(initialState, {}); expect(state).toEqual({}); }); - }); - }); diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index 4cea288..cfac3a5 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,12 +1,12 @@ -import { combineReducers } from 'redux'; -import settings from './settings'; -import application from './application'; -import jwt from './jwt'; +import { combineReducers } from 'redux'; +import settings from './settings'; +import application from './application'; +import jwt from './jwt'; const rootReducer = combineReducers({ settings, jwt, - application + application, }); -export default rootReducer; \ No newline at end of file +export default rootReducer; diff --git a/client/js/reducers/jwt.js b/client/js/reducers/jwt.js index 57a1583..8d52f31 100644 --- a/client/js/reducers/jwt.js +++ b/client/js/reducers/jwt.js @@ -1,18 +1,15 @@ -import { Constants as JwtConstants } from "../actions/jwt"; +import { Constants as JwtConstants } from '../actions/jwt'; const initialState = {}; export default (state = initialState, action) => { - - switch(action.type){ + switch (action.type) { case JwtConstants.REFRESH_JWT_DONE: return action.payload.jwt; - break; default: return state; } - -}; \ No newline at end of file +}; diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js index 4428bbf..b1b1776 100644 --- a/client/js/reducers/jwt.spec.js +++ b/client/js/reducers/jwt.spec.js @@ -1,34 +1,27 @@ -import { Constants as JwtConstants } from "../actions/jwt"; -import jwt from "./jwt"; +import { Constants as JwtConstants } from '../actions/jwt'; +import jwt from './jwt'; describe('jwt reducer', () => { - - describe("initial state", () => { - - it("has a jwt token", () => { + describe('initial state', () => { + it('has a jwt token', () => { const initial = { jwt: 'asdf' }; const initialState = initial; const state = jwt(initialState, {}); expect(state.jwt).toEqual(initial.jwt); - }); - }); - describe("jwt update", () => { - - it("has a jwt token", () => { + describe('jwt update', () => { + it('has a jwt token', () => { const state = jwt({ jwt: 'asdf' }, {}); const newJwt = { jwt: '1234' }; const newState = jwt(state, { type: JwtConstants.REFRESH_JWT_DONE, - payload: newJwt + payload: newJwt, }); expect(newState).toEqual(newJwt.jwt); }); - }); - }); diff --git a/client/js/reducers/settings.js b/client/js/reducers/settings.js index 38dc1a2..e9e5259 100644 --- a/client/js/reducers/settings.js +++ b/client/js/reducers/settings.js @@ -1,9 +1,11 @@ -import _ from "lodash"; +import _ from 'lodash'; -export default (state = {}, action) => { - return state; // Just return state. Don't let settings from the server mutate. -}; +// Just return state. Don't let settings from the server mutate. +export default (state = {}) => state; -export function getInitialSettings(){ - return _.merge({}, ...arguments); // Add default settings that can be overriden by values in serverSettings -}; \ No newline at end of file +export function getInitialSettings(...args) { + // Add default settings that can be overridden by values in serverSettings + let settings = {}; + _.forEach(args, arg => (settings = { ...settings, ...arg })); + return settings; +} diff --git a/client/js/reducers/settings.spec.js b/client/js/reducers/settings.spec.js index 2df6656..d925a8e 100644 --- a/client/js/reducers/settings.spec.js +++ b/client/js/reducers/settings.spec.js @@ -1,34 +1,27 @@ -import settings from "./settings"; -import { getInitialSettings } from "./settings"; +import settings, { getInitialSettings } from './settings'; describe('settings reducer', () => { - - describe("initial state", () => { - - it("returns empty state", () => { + describe('initial state', () => { + it('returns empty state', () => { const initialState = {}; const state = settings(initialState, {}); expect(state).toEqual({}); }); - }); - describe("getInitialSettings", () => { - - it("Returns the state provided by the server", () => { + describe('getInitialSettings', () => { + it('Returns the state provided by the server', () => { const serverSettings = { foo: 1 }; - const settings = getInitialSettings(serverSettings); - expect(settings).toEqual(serverSettings); + const newSettings = getInitialSettings(serverSettings); + expect(newSettings).toEqual(serverSettings); }); - it("Returns combined state", () => { + it('Returns combined state', () => { const serverSettings1 = { foo: 1 }; const serverSettings2 = { bar: 2 }; - const settings = getInitialSettings(serverSettings1, serverSettings2); - expect(settings.foo).toEqual(1); - expect(settings.bar).toEqual(2); + const newSettings = getInitialSettings(serverSettings1, serverSettings2); + expect(newSettings.foo).toEqual(1); + expect(newSettings.bar).toEqual(2); }); - }); - }); diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js index 94cc046..c2bf3ec 100644 --- a/client/js/store/configure_store.spec.js +++ b/client/js/store/configure_store.spec.js @@ -1,15 +1,14 @@ -import configureStore from "./configure_store"; +import configureStore from './configure_store'; -describe('configure store', function() { - - it('setups up initial state', function() { +describe('configure store', () => { + it('setups up initial state', () => { const settings = { - csrf : "csrf_token", - apiUrl : "http://www.example.com" + csrf: 'csrf_token', + apiUrl: 'http://www.example.com', }; const initialState = { - jwt : "jwt_token", - settings + jwt: 'jwt_token', + settings, }; const store = configureStore(initialState); expect(store.getState().settings).toBe(settings); From 567d1a068726bff4bfa3f3b45a8da4a9db67a2a5 Mon Sep 17 00:00:00 2001 From: Meikul Date: Tue, 6 Dec 2016 13:56:40 -0700 Subject: [PATCH 230/452] updating linter packages (#7) --- client/package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/package.json b/client/package.json index a13d4a4..66cd481 100644 --- a/client/package.json +++ b/client/package.json @@ -36,8 +36,11 @@ "ecstatic": "2.1.0", "ejs": "^2.5.2", "eslint": "^3.9.1", + "eslint-config-airbnb": "^13.0.0", "eslint-plugin-babel": "^3.3.0", + "eslint-plugin-import": "^2.2.0", "eslint-plugin-react": "^6.5.0", + "eslint-plugin-jsx-a11y": "2.2.3", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.14.0", From 08db62ce06c320c26b1afad94ca043ca84b150e3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 6 Dec 2016 15:56:31 -0700 Subject: [PATCH 231/452] Update node packages --- client/package.json | 52 ++--- client/yarn.lock | 543 ++++++++++++++++++++++++-------------------- 2 files changed, 324 insertions(+), 271 deletions(-) diff --git a/client/package.json b/client/package.json index 66cd481..b7369f5 100644 --- a/client/package.json +++ b/client/package.json @@ -4,55 +4,55 @@ "babel-polyfill": "^6.16.0", "babel-runtime": "^6.18.0", "es6-promise": "^4.0.5", - "lodash": "4.16.6", - "react": "15.3.2", - "react-dom": "15.3.2", + "lodash": "4.17.2", + "react": "15.4.1", + "react-dom": "15.4.1", "react-proxy-loader": "0.3.4", - "react-redux": "4.4.5", + "react-redux": "4.4.6", "react-router": "3.0.0", - "react-tap-event-plugin": "1.0.0", + "react-tap-event-plugin": "2.0.1", "redux": "3.6.0", - "superagent": "2.3.0", - "uuid": "2.0.3" + "superagent": "3.1.0", + "uuid": "3.0.1" }, "devDependencies": { "autoprefixer-loader": "3.2.0", "babel-core": "^6.18.2", - "babel-eslint": "^7.1.0", - "babel-loader": "^6.2.7", - "babel-plugin-transform-class-properties": "^6.18.0", + "babel-eslint": "^7.1.1", + "babel-loader": "^6.2.8", + "babel-plugin-transform-class-properties": "^6.19.0", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.9.1", "babel-plugin-transform-react-inline-elements": "^6.8.0", - "babel-plugin-transform-react-remove-prop-types": "^0.2.10", + "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-plugin-transform-runtime": "^6.15.0", "babel-preset-es2015": "^6.18.0", "babel-preset-react": "^6.16.0", "babel-preset-stage-0": "^6.16.0", "chunk-manifest-webpack-plugin": "0.1.0", - "coveralls": "2.11.14", - "css-loader": "0.25.0", + "coveralls": "2.11.15", + "css-loader": "0.26.1", "dotenv": "2.0.0", "ecstatic": "2.1.0", - "ejs": "^2.5.2", - "eslint": "^3.9.1", + "ejs": "^2.5.5", + "eslint": "^3.11.1", "eslint-config-airbnb": "^13.0.0", - "eslint-plugin-babel": "^3.3.0", + "eslint-plugin-babel": "^4.0.0", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-react": "^6.5.0", - "eslint-plugin-jsx-a11y": "2.2.3", + "eslint-plugin-jsx-a11y": "3.0.1", + "eslint-plugin-react": "^6.8.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.14.0", "extract-text-webpack-plugin": "1.0.1", "file-loader": "0.9.0", - "front-matter": "^2.1.0", + "front-matter": "^2.1.1", "fs-extra": "^1.0.0", - "html-minifier": "3.1.0", + "html-minifier": "3.2.3", "html-truncate": "^1.2.1", "imports-loader": "0.6.5", "istanbul": "0.4.5", - "istanbul-instrumenter-loader": "1.0.0", + "istanbul-instrumenter-loader": "1.1.0", "jasmine": "^2.5.2", "jasmine-core": "2.5.2", "karma": "1.3.0", @@ -70,15 +70,15 @@ "less-loader": "2.2.3", "marked": "^0.3.6", "minimist": "1.2.0", - "node-sass": "3.11.1", + "node-sass": "3.13.0", "node-watch": "^0.4.1", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", "phantomjs-prebuilt": "^2.1.13", - "protractor": "4.0.10", + "protractor": "4.0.11", "psi": "2.0.4", - "react-hot-loader": "3.0.0-beta.6", - "redbox-react": "^1.3.2", + "react-hot-loader": "^3.0.0-beta.6", + "redbox-react": "^1.3.3", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.1.1", @@ -87,6 +87,6 @@ "url-loader": "0.5.7", "webpack": "1.13.3", "webpack-dev-middleware": "^1.8.4", - "webpack-hot-middleware": "^2.13.1" + "webpack-hot-middleware": "^2.13.2" } } diff --git a/client/yarn.lock b/client/yarn.lock index fb4d76f..3135238 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -279,7 +279,7 @@ async@^0.9.0, 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.4.0, async@^1.5.0, async@^1.5.2, async@~1.5.2, async@1.x: +async@^1.3.0, async@^1.4.0, async@^1.5.0, async@~1.5.2, async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -369,13 +369,14 @@ babel-core@^6.18.0, babel-core@^6.18.2: slash "^1.0.0" source-map "^0.5.0" -babel-eslint@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.0.tgz#d506a5174ba224e25a2d17e128e2ba8987139ddc" +babel-eslint@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2" dependencies: + babel-code-frame "^6.16.0" babel-traverse "^6.15.0" babel-types "^6.15.0" - babylon "^6.11.2" + babylon "^6.13.0" lodash.pickby "^4.6.0" babel-generator@^6.11.3: @@ -573,9 +574,9 @@ babel-helpers@^6.16.0: babel-runtime "^6.0.0" babel-template "^6.16.0" -babel-loader@^6.2.7: - version "6.2.7" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.7.tgz#16fdbf64328030dc5a606827d389c8b92a2a8032" +babel-loader@^6.2.8: + version "6.2.8" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.8.tgz#30d7183aef60afc140b36443676b7acb4c12ac9c" dependencies: find-cache-dir "^0.1.1" loader-utils "^0.2.11" @@ -678,13 +679,14 @@ babel-plugin-transform-class-properties@^6.16.0: babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.9.1" -babel-plugin-transform-class-properties@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.18.0.tgz#bc1266a39d4c8726e0bd7b15c56235177e6ede57" +babel-plugin-transform-class-properties@^6.19.0: + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz#1274b349abaadc835164e2004f4a2444a2788d5f" dependencies: babel-helper-function-name "^6.18.0" babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.9.1" + babel-template "^6.15.0" babel-plugin-transform-decorators-legacy@^1.3.4: version "1.3.4" @@ -957,9 +959,9 @@ babel-plugin-transform-react-jsx@^6.3.13: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.0.0" -babel-plugin-transform-react-remove-prop-types@^0.2.10: - version "0.2.10" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.10.tgz#eefd083057cccb0f9a85cb15f3a64227daf64609" +babel-plugin-transform-react-remove-prop-types@^0.2.11: + version "0.2.11" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.11.tgz#05eb7cc4670d6506d801680576589c7abcd51b00" babel-plugin-transform-regenerator@^6.16.0: version "6.16.1" @@ -1151,10 +1153,14 @@ babel@6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" -babylon@^6.11.0, babylon@^6.11.2, babylon@^6.8.1: +babylon@^6.11.0, babylon@^6.8.1: version "6.11.4" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.11.4.tgz#75e1f52187efa0cde5a541a7f7fdda38f6eb5bd2" +babylon@^6.13.0: + version "6.14.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" + backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -1354,7 +1360,7 @@ buffer@^4.9.0: ieee754 "^1.1.4" isarray "^1.0.0" -builtin-modules@^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" @@ -1380,7 +1386,7 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" -camel-case@^3.0.0: +camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" dependencies: @@ -1470,29 +1476,6 @@ chalk@~0.4.0: has-color "~0.1.0" strip-ansi "~0.1.0" -change-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.0.tgz#6c9c8e35f8790870a82b6b0745be8c3cbef9b081" - dependencies: - camel-case "^3.0.0" - constant-case "^2.0.0" - dot-case "^2.1.0" - header-case "^1.0.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - no-case "^2.2.0" - param-case "^2.1.0" - pascal-case "^2.0.0" - path-case "^2.1.0" - sentence-case "^2.1.0" - snake-case "^2.1.0" - swap-case "^1.1.0" - title-case "^2.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" @@ -1782,17 +1765,14 @@ 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" -constant-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" - dependencies: - snake-case "^2.1.0" - upper-case "^1.1.1" - constants-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" +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.1: version "0.5.1" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" @@ -1829,9 +1809,9 @@ 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" -coveralls@2.11.14: - version "2.11.14" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.14.tgz#645a05ac72aa4f2ee811c667390d4ad36f0c2e26" +coveralls@2.11.15: + version "2.11.15" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" @@ -1870,15 +1850,15 @@ 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-loader@0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.25.0.tgz#c3febc8ce28f4c83576b6b13707f47f90c390223" +css-loader@0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.1.tgz#2ba7f20131b93597496b3e9bb500785a49cd29ea" dependencies: babel-code-frame "^6.11.0" - css-selector-tokenizer "^0.6.0" + css-selector-tokenizer "^0.7.0" cssnano ">=2.6.1 <4" loader-utils "~0.2.2" - lodash.camelcase "^3.0.1" + lodash.camelcase "^4.3.0" object-assign "^4.0.1" postcss "^5.0.6" postcss-modules-extract-imports "^1.0.0" @@ -1895,6 +1875,14 @@ css-selector-tokenizer@^0.6.0: fastparse "^1.1.1" regexpu-core "^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@2.X: version "2.2.1" resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" @@ -1972,6 +1960,10 @@ d@^0.1.1, d@~0.1.1: dependencies: es5-ext "~0.10.2" +damerau-levenshtein@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2" + dashdash@^1.12.0: version "1.14.0" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" @@ -2155,6 +2147,13 @@ doctrine@^1.2.2: esutils "^2.0.2" isarray "^1.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" + dom-serialize@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" @@ -2172,12 +2171,6 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -dot-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.0.tgz#4b43dd0d7403c34cb645424add397e80bfe85ca6" - dependencies: - no-case "^2.2.0" - dot-prop@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-2.4.0.tgz#848e28f7f1d50740c6747ab3cb07670462b6f89c" @@ -2281,9 +2274,9 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -ejs@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.2.tgz#21444ba09386f0c65b6eafb96a3d51bcb3be80d1" +ejs@^2.5.5: + version "2.5.5" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77" emojis-list@^2.0.0: version "2.1.0" @@ -2475,20 +2468,68 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-plugin-babel@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-3.3.0.tgz#2f494aedcf6f4aa4e75b9155980837bc1fbde193" +eslint-config-airbnb-base@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz#f17d4e52992c1d45d1b7713efbcd5ecd0e7e0506" -eslint-plugin-react@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.5.0.tgz#93f894b6469974304609e59c8983a6a3dc81738c" +eslint-config-airbnb@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-13.0.0.tgz#688d15d3c276c0c753ae538c92a44397d76ae46e" + dependencies: + eslint-config-airbnb-base "^10.0.0" + +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + +eslint-module-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" + dependencies: + debug "2.2.0" + pkg-dir "^1.0.0" + +eslint-plugin-babel@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.0.0.tgz#a92114e2c493ac3034b030d7ecf96e174a76ef3f" + +eslint-plugin-import@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + pkg-up "^1.0.0" + +eslint-plugin-jsx-a11y@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.1.tgz#38f22742a5752a8e72db693d7cd86e13a357da25" + dependencies: + damerau-levenshtein "^1.0.0" + jsx-ast-utils "^1.0.0" + object-assign "^4.0.1" + +eslint-plugin-react@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.8.0.tgz#741ab5438a094532e5ce1bbb935d6832356f492d" dependencies: doctrine "^1.2.2" - jsx-ast-utils "^1.3.3" + jsx-ast-utils "^1.3.4" -eslint@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.9.1.tgz#5a8597706fc6048bc6061ac754d4a211d28f4f5b" +eslint@^3.11.1: + version "3.11.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.11.1.tgz#408be581041385cba947cd8d1cd2227782b55dbf" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -2502,7 +2543,7 @@ eslint@^3.9.1: file-entry-cache "^2.0.0" glob "^7.0.3" globals "^9.2.0" - ignore "^3.1.5" + ignore "^3.2.0" imurmurhash "^0.1.4" inquirer "^0.12.0" is-my-json-valid "^2.10.0" @@ -2716,13 +2757,16 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" -fbjs@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.2.1.tgz#622061630a43e11f845017b9044aaa648ed3f731" +fbjs@^0.8.1, fbjs@^0.8.6: + version "0.8.6" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.6.tgz#7eb67d6986b2d5007a9b6e92e0e7cb6f75cad290" dependencies: core-js "^1.0.0" - promise "^7.0.3" - whatwg-fetch "^0.9.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + ua-parser-js "^0.7.9" fbjs@^0.8.4: version "0.8.5" @@ -2852,6 +2896,14 @@ forever-agent@~0.6.0, forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" +form-data@^2.1.1, form-data@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + form-data@~1.0.0-rc1, form-data@~1.0.0-rc3, form-data@~1.0.0-rc4: version "1.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" @@ -2868,14 +2920,6 @@ form-data@~2.0.0: combined-stream "^1.0.5" mime-types "^2.1.11" -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" - formidable@^1.0.17: version "1.0.17" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" @@ -2892,9 +2936,9 @@ from@~0: version "0.1.3" resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" -front-matter@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.0.tgz#0bdff42cbad2b35c07ac7085811789759f9858c0" +front-matter@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.1.tgz#f7071f549798d7cabe9f3f3c011316d7322bf41b" dependencies: js-yaml "^3.4.6" @@ -3085,6 +3129,13 @@ glob-stream@^5.3.2: to-absolute-glob "^0.1.1" unique-stream "^2.0.2" +glob@^3.2.11: + version "3.2.11" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + glob@^5.0.15, glob@^5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -3387,13 +3438,6 @@ he@1.1.x: version "1.1.0" resolved "https://registry.yarnpkg.com/he/-/he-1.1.0.tgz#29319d49beec13a9b1f3c4f9b2a6dde4859bb2a7" -header-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.0.tgz#d9e335909505d56051ec16a0106821889e910781" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.3" - "heap@>= 0.2.0": version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" @@ -3434,15 +3478,16 @@ html-entities@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" -html-minifier@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.1.0.tgz#e0b35d7a1fff89ae989e2fa51c572bc0d1f2d1f6" +html-minifier@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.2.3.tgz#d2ff536e24d95726c332493d8f77d84dbed85372" dependencies: - change-case "3.0.x" + camel-case "3.0.x" clean-css "3.4.x" commander "2.9.x" he "1.1.x" ncname "1.0.x" + param-case "2.1.x" relateurl "0.2.x" uglify-js "2.7.x" @@ -3527,7 +3572,7 @@ iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -ignore@^3.1.5: +ignore@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" @@ -3732,12 +3777,6 @@ is-gzip@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" -is-lower-case@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" - dependencies: - lower-case "^1.1.0" - is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.0, is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" @@ -3837,12 +3876,6 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-upper-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" - dependencies: - upper-case "^1.1.0" - is-url@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" @@ -3892,9 +3925,9 @@ isstream@~0.1.1, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-instrumenter-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.0.0.tgz#ed87446a3a72af342e00521e81b189eb9763d781" +istanbul-instrumenter-loader@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.1.0.tgz#0384c08d8d7c9cb5cbb3282467d758087f9c059d" dependencies: istanbul-lib-instrument "^1.1.3" loader-utils "^0.2.16" @@ -3938,11 +3971,15 @@ jasmine-ajax@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.2.0.tgz#0a1600b7d3c503a3904f80679b867985a84e4756" +jasmine-core@~2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.4.1.tgz#6f83ab3a0f16951722ce07d206c773d57cc838be" + jasmine-core@~2.5.2, jasmine-core@2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" -jasmine@^2.5.2, jasmine@2.5.2: +jasmine@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.2.tgz#6283cef7085c095cc25d651e954df004f7e3e421" dependencies: @@ -3950,6 +3987,14 @@ jasmine@^2.5.2, jasmine@2.5.2: glob "^7.0.6" jasmine-core "~2.5.2" +jasmine@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.4.1.tgz#9016dda453213d27ac6d43dc4ea97315a189085e" + dependencies: + exit "^0.1.2" + glob "^3.2.11" + jasmine-core "~2.4.0" + jasminewd2@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-0.0.10.tgz#94f48ae2bc946cad643035467b4bb7ea9c1075ef" @@ -4057,9 +4102,9 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.3.tgz#ccfdbe0320ba03f7a1fc4e67ceaf7e2cc0169721" +jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.4.tgz#0257ed1cc4b1e65b39d7d9940f9fb4f20f7ba0a9" dependencies: acorn-jsx "^3.0.1" object-assign "^4.1.0" @@ -4295,13 +4340,6 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" -lodash._createcompounder@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" - dependencies: - lodash.deburr "^3.0.0" - lodash.words "^3.0.0" - lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -4330,16 +4368,18 @@ 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@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-3.0.1.tgz#932c8b87f8a4377897c67197533282f97aeac298" - dependencies: - lodash._createcompounder "^3.0.0" +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.curry@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" @@ -4354,12 +4394,6 @@ lodash.debounce@^4.0.4: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" -lodash.deburr@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-3.2.0.tgz#6da8f54334a366a7cf4c4c76ef8d80aa1b365ed5" - dependencies: - lodash._root "^3.0.0" - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -4439,12 +4473,6 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" -lodash.words@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.words/-/lodash.words-3.2.0.tgz#4e2a8649bc08745b17c695b1a3ce8fee596623b3" - dependencies: - lodash._root "^3.0.0" - lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -4457,9 +4485,9 @@ lodash@~4.9.0: version "4.9.0" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.9.0.tgz#4c20d742f03ce85dc700e0dd7ab9bcab85e6fc14" -lodash@4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" +lodash@4.17.2: + version "4.17.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" log-driver@1.2.5: version "1.2.5" @@ -4489,13 +4517,7 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lower-case-first@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" - dependencies: - lower-case "^1.1.2" - -lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: +lower-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb" @@ -4510,6 +4532,10 @@ lru-cache@^4.0.1, lru-cache@~4.0.1: pseudomap "^1.0.1" yallist "^2.0.0" +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" @@ -4615,12 +4641,22 @@ mime-db@~1.24.0: version "1.24.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" -mime-types@^2.1.10, mime-types@^2.1.11, mime-types@~2.1.11, mime-types@~2.1.2, mime-types@~2.1.7: +mime-db@~1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" + +mime-types@^2.1.11, mime-types@~2.1.11, mime-types@~2.1.2, mime-types@~2.1.7: version "2.1.12" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" dependencies: mime-db "~1.24.0" +mime-types@^2.1.12: + version "2.1.13" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" + dependencies: + mime-db "~1.25.0" + mime-types@~2.0.4: version "2.0.14" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6" @@ -4641,12 +4677,19 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@~3.0.0, minimatch@~3.0.3, "minimatch@2 || 3": +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.0, minimatch@~3.0.3, "minimatch@2 || 3": version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" +minimatch@0.3: + version "0.3.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -4805,9 +4848,9 @@ node-pre-gyp@^0.6.29: tar "~2.2.0" tar-pack "~3.1.0" -node-sass@3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.11.1.tgz#0b25699663cc9d616e8c6fb874e7d9b25e5a8e20" +node-sass@3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.0.tgz#d08b95bdebf40941571bd2c16a9334b980f8924f" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5189,7 +5232,7 @@ pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" -param-case@^2.1.0: +param-case@2.1.x: version "2.1.0" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a" dependencies: @@ -5236,13 +5279,6 @@ parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" -pascal-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.0.tgz#39c248bde5a8dc02d5160696bdb01e044d016ee1" - dependencies: - camel-case "^3.0.0" - upper-case-first "^1.1.0" - path-array@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" @@ -5253,12 +5289,6 @@ path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" -path-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.0.tgz#5ac491de642936e5dfe0e18d16c461b8be8cf073" - dependencies: - no-case "^2.2.0" - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -5333,6 +5363,12 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" +pkg-up@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" + dependencies: + find-up "^1.0.0" + pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -5614,7 +5650,7 @@ progress@^1.1.8, progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" -promise@^7.0.3, promise@^7.1.1: +promise@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" dependencies: @@ -5630,9 +5666,9 @@ proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -protractor@4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.10.tgz#12a3cd542c0f44d784f3b43368bc37ea5fb0e350" +protractor@4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.11.tgz#fc4bf8d75deec8516b600f87ea5b95ecf537d059" dependencies: "@types/jasmine" "^2.5.36" "@types/node" "^6.0.46" @@ -5641,14 +5677,14 @@ protractor@4.0.10: adm-zip "0.4.7" chalk "^1.1.3" glob "^7.0.3" - jasmine "2.5.2" + jasmine "2.4.1" jasminewd2 "0.0.10" optimist "~0.6.0" q "1.4.1" saucelabs "~1.3.0" selenium-webdriver "2.53.3" source-map-support "~0.4.0" - webdriver-manager "^10.2.6" + webdriver-manager "^10.2.8" proxy-addr@~1.1.2: version "1.1.2" @@ -5716,6 +5752,10 @@ qs@~6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.1.0.tgz#ec1d1626b24278d99f0fdf4549e524e24eceeb26" +qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + qs@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" @@ -5784,11 +5824,19 @@ react-dock@^0.2.1: lodash.debounce "^3.1.1" object-assign "^4.0.1" -"react-dom@^0.14.0 || ^15.0.0", react-dom@15.3.2: +"react-dom@^0.14.0 || ^15.0.0": version "15.3.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f" -react-hot-loader@3.0.0-beta.6: +react-dom@15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.1.tgz#d54c913261aaedb17adc20410d029dcc18a1344a" + dependencies: + fbjs "^0.8.1" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +react-hot-loader@^3.0.0-beta.6: version "3.0.0-beta.6" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4" dependencies: @@ -5824,7 +5872,7 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" -react-redux@^4.0.0, react-redux@4.4.5: +react-redux@^4.0.0: version "4.4.5" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.5.tgz#f509a2981be2252d10c629ef7c559347a4aec457" dependencies: @@ -5833,6 +5881,15 @@ react-redux@^4.0.0, react-redux@4.4.5: lodash "^4.2.0" loose-envify "^1.1.0" +react-redux@4.4.6: + version "4.4.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209" + dependencies: + hoist-non-react-statics "^1.0.3" + invariant "^2.0.0" + lodash "^4.2.0" + loose-envify "^1.1.0" + react-router@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff" @@ -5843,15 +5900,15 @@ react-router@3.0.0: loose-envify "^1.2.0" warning "^3.0.0" -react-tap-event-plugin@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/react-tap-event-plugin/-/react-tap-event-plugin-1.0.0.tgz#7a248505a9e9abecc352b2dab313d17685c51adf" +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.2.1" + fbjs "^0.8.6" -react@15.3.2: - version "15.3.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e" +react@15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react/-/react-15.4.1.tgz#498e918602677a3983cd0fd206dfe700389a0dd6" dependencies: fbjs "^0.8.4" loose-envify "^1.1.0" @@ -5996,9 +6053,9 @@ redbox-react@^1.2.5: object-assign "^4.0.1" react-dom "^0.14.0 || ^15.0.0" -redbox-react@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.2.tgz#bc12ca4f88705d29aaace7a12183d3ec14dd33f1" +redbox-react@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.3.tgz#63ec9c2cb9c620c46e2b9f8543b4898f1b787e41" dependencies: error-stack-parser "^1.3.6" object-assign "^4.0.1" @@ -6170,7 +6227,7 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@^2.54.0, request@^2.61.0, request@^2.69.0, request@^2.72.0, request@^2.74.0, request@2, request@2.75.0, request@2.x: +request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@2, request@2.75.0, request@2.x: version "2.75.0" resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" dependencies: @@ -6196,6 +6253,31 @@ request@^2.54.0, request@^2.61.0, request@^2.69.0, request@^2.72.0, request@^2.7 tough-cookie "~2.3.0" tunnel-agent "~0.4.1" +request@^2.78.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" + request@~2.60.0: version "2.60.0" resolved "https://registry.yarnpkg.com/request/-/request-2.60.0.tgz#498820957fcdded1d37749069610c85f61a29f2d" @@ -6438,13 +6520,6 @@ send@0.14.1: range-parser "~1.2.0" statuses "~1.3.0" -sentence-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.0.tgz#d592fbed457fd1a59e3af0ee17e99f6fd70d7efd" - dependencies: - no-case "^2.2.0" - upper-case-first "^1.1.2" - serve-static@~1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" @@ -6485,6 +6560,10 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + signal-exit@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" @@ -6501,12 +6580,6 @@ slide@^1.1.3, slide@^1.1.5, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" - dependencies: - no-case "^2.2.0" - sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -6810,15 +6883,15 @@ sum-up@^1.0.1: dependencies: chalk "^1.0.0" -superagent@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-2.3.0.tgz#703529a0714e57e123959ddefbce193b2e50d115" +superagent@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.1.0.tgz#e05a03b630cd7b0a0e17c26543977fd4a35c3296" dependencies: component-emitter "^1.2.0" cookiejar "^2.0.6" debug "^2.2.0" extend "^3.0.0" - form-data "1.0.0-rc4" + form-data "^2.1.1" formidable "^1.0.17" methods "^1.1.1" mime "^1.3.4" @@ -6847,13 +6920,6 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -swap-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" - dependencies: - lower-case "^1.1.1" - upper-case "^1.1.1" - symbol-observable@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" @@ -6954,13 +7020,6 @@ timers-browserify@^1.0.1: dependencies: process "~0.11.0" -title-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.0.tgz#c68ccb4232079ded64f94b91b4941ade91391979" - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - tmp@0.0.24: version "0.0.24" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" @@ -7114,13 +7173,7 @@ update-notifier@^0.6.0: latest-version "^2.0.0" semver-diff "^2.0.0" -upper-case-first@^1.1.0, upper-case-first@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" - dependencies: - upper-case "^1.1.1" - -upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: +upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" @@ -7193,10 +7246,14 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@^2.0.1, uuid@2.0.3: +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.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" @@ -7316,9 +7373,9 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -webdriver-manager@^10.2.6: - version "10.2.6" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.2.6.tgz#6c02625fbaa97d1f6105edc7f22cdcf5caee038c" +webdriver-manager@^10.2.8: + version "10.2.10" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.2.10.tgz#e81d869375dd9395e1a88d7342bbc759b8d654f3" dependencies: adm-zip "^0.4.7" chalk "^1.1.1" @@ -7327,7 +7384,7 @@ webdriver-manager@^10.2.6: ini "^1.3.4" minimist "^1.2.0" q "^1.4.1" - request "^2.69.0" + request "^2.78.0" rimraf "^2.5.2" semver "^5.3.0" @@ -7353,9 +7410,9 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.8.4: path-is-absolute "^1.0.0" range-parser "^1.0.3" -webpack-hot-middleware@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.13.1.tgz#104350e044be58ba3b7ef1c39513d69562841975" +webpack-hot-middleware@^2.13.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.13.2.tgz#6500b15e6d4f1a9590f8df708183f4d2ac2c3e9e" dependencies: ansi-html "0.0.6" html-entities "^1.2.0" @@ -7389,10 +7446,6 @@ webpack@1.13.3: watchpack "^0.2.1" webpack-core "~0.6.0" -whatwg-fetch@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" - whatwg-fetch@>=0.10.0: version "1.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e" From d5039872c063f8b930a926fb4b81f7757bacd1e0 Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Wed, 7 Dec 2016 14:07:12 -0700 Subject: [PATCH 232/452] adds the postnatal to make travis work, and allows jsx tests (#8) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * adds the postnatal to make travis work, and allows jsx tests * Set jsx ally * The new react doesn’t have TestUtils bundled in * Adds code coverage to the README * Automatically runs covert test with specs, and adds script to update coverage * An environment token for you * YAR!n * THE THINGYS! * this is a test of the emergency broadcast system, please stand by * Adds TestUtils to the yarn lock too --- .travis.yml | 3 +- README.md | 2 +- ci_karma | 6 -- client/config/karma.js | 68 ++++++------------- .../js/components/common/not_found.spec.jsx | 5 +- client/js/components/layout/index.spec.jsx | 2 +- client/package.json | 8 ++- client/specs_support/utils.js | 17 +++-- client/webpack.tests.js | 6 +- client/yarn.lock | 12 ++-- package.json | 2 +- 11 files changed, 55 insertions(+), 76 deletions(-) delete mode 100755 ci_karma diff --git a/.travis.yml b/.travis.yml index 5c4c5d7..bc26d5b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,4 +27,5 @@ before_script: - "sh -e /etc/init.d/xvfb start" script: - - ./ci_karma + - yarn test + - yarn coverage diff --git a/README.md b/README.md index 5bb38b2..30e7430 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#React Client Starter App [![Build Status](https://travis-ci.org/atomicjolt/react_client_starter_app.svg?branch=master)](https://travis-ci.org/atomicjolt/react_client_starter_app) +#React Client Starter App [![Build Status](https://travis-ci.org/atomicjolt/react_client_starter_app.svg?branch=master)](https://travis-ci.org/atomicjolt/react_client_starter_app) [![Coverage Status](https://coveralls.io/repos/github/atomicjolt/react_client_starter_app/badge.svg?branch=coveralls)](https://coveralls.io/github/atomicjolt/react_client_starter_app?branch=coveralls) ----------------------- There are many starter kits that will help you get started with React and Redux. This is the one created by, maintained by and used by [Atomic Jolt](http://www.atomicjolt.com). Atomic Jolt uses this as application as a starting place for our [Ruby on Rails React starter application](https://github.com/atomicjolt/react_starter_app) and our [Firebase React starter appliction](https://github.com/atomicjolt/react_firebase_starter_app). diff --git a/ci_karma b/ci_karma deleted file mode 100755 index 8cbdf56..0000000 --- a/ci_karma +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -# Exit if any subcommand fails -set -e - -yarn test diff --git a/client/config/karma.js b/client/config/karma.js index 9060395..5807cb7 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -1,21 +1,9 @@ // karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html var webpack = require('webpack'); -var webpackConfig = require('./webpack.config')("test"); +const webpackConfig = require('./webpack.config')('test'); -module.exports = function(){ - - function isCoverage(argument) { - return argument === '--coverage'; - } - - // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' - var reporters = ['spec']; - - if(process.argv.some(isCoverage)){ - reporters.push('coverage'); - } - - var testConfig = { +module.exports = () => { + const testConfig = { // If browser does not capture in given timeout [ms], kill it captureTimeout: 60000, @@ -32,14 +20,17 @@ module.exports = function(){ files: [ './specs_support/mocks/*.js', './specs_support/spec_helper.js', - //'./js/**/*.spec.js' // Use webpack to build each test individually. If changed here, match the change in preprocessors - './webpack.tests.js' // More performant but tests cannot be run individually + // Use webpack to build each test individually. If changed here, change in preprocessors + // './js/**/*.spec.js' + './webpack.tests.js', // More performant but tests cannot be run individually ], // Transpile tests with the karma-webpack plugin preprocessors: { - //'./js/**/*.spec.js': ['webpack', 'sourcemap'] // Use webpack to build each test individually. If changed here, match the change in files - './webpack.tests.js': ['webpack', 'sourcemap'], // More performant but tests cannot be run individually + // Use webpack to build each test individually. If changed here, match the change in files + // './js/**/*.spec.js': ['webpack', 'sourcemap'] + './webpack.tests.js': ['webpack', 'sourcemap', 'coverage'], // More performant but tests cannot be run individually + // './js/**/*.js*': 'coverage', }, // Run the tests using any of the following browsers @@ -61,7 +52,8 @@ module.exports = function(){ // Use jasmine as the test framework frameworks: ['jasmine-ajax', 'jasmine'], - reporters: reporters, + // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage', 'spec' + reporters: ['dots', 'coverage'], // karma-webpack configuration. Load and transpile js and jsx files. // Use istanbul-transformer post loader to generate code coverage report. @@ -69,38 +61,22 @@ module.exports = function(){ devtool: 'eval', plugins: webpackConfig.plugins, module: webpackConfig.module, - resolve: webpackConfig.resolve + resolve: webpackConfig.resolve, }, // Reduce the noise to the console webpackMiddleware: { noInfo: true, stats: { - colors: true - } - } + colors: true, + }, + }, + coverageReporter: { + type: 'lcovonly', + dir: '../coverage/', + file: 'coverage.info', + }, }; - - - // Generate code coverage report if --coverage is specified - if(process.argv.some(isCoverage)) { - // Generate a code coverage report using `lcov` format. Result will be output to coverage/lcov.info - // run using `npm coveralls` - testConfig['webpack']['module']['postLoaders'] = [{ - test: /\.jsx?$/, - exclude: /(test|node_modules)\//, - loader: 'istanbul-instrumenter' - }]; - - testConfig['coverageReporter'] = { - dir: 'coverage/', - reporters: [ - { type: 'lcovonly', subdir: '.', file: 'lcov.info' }, - { type: 'html', subdir: 'html' } - ] - }; - } - return testConfig; -}; \ No newline at end of file +}; diff --git a/client/js/components/common/not_found.spec.jsx b/client/js/components/common/not_found.spec.jsx index d2cc15a..b9f7f1f 100644 --- a/client/js/components/common/not_found.spec.jsx +++ b/client/js/components/common/not_found.spec.jsx @@ -1,10 +1,11 @@ import React from 'react'; -import TestUtils from 'react/lib/ReactTestUtils'; +import TestUtils from 'react-addons-test-utils'; import NotFound from './not_found'; +import Stub from '../../../specs_support/stub'; describe('not found', () => { it('renders a "not found" message', () => { - const result = TestUtils.renderIntoDocument(
    ); + const result = TestUtils.renderIntoDocument(); const heading = TestUtils.findRenderedDOMComponentWithTag(result, 'h1'); expect(heading.textContent).toContain('Page Not Found'); }); diff --git a/client/js/components/layout/index.spec.jsx b/client/js/components/layout/index.spec.jsx index 16fcaec..a3eb1b9 100644 --- a/client/js/components/layout/index.spec.jsx +++ b/client/js/components/layout/index.spec.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import TestUtils from 'react/lib/ReactTestUtils'; +import TestUtils from 'react-addons-test-utils'; import { Provider } from 'react-redux'; import Helper from '../../../specs_support/helper'; import Index from './index'; diff --git a/client/package.json b/client/package.json index b7369f5..e094e22 100644 --- a/client/package.json +++ b/client/package.json @@ -1,4 +1,7 @@ { + "scripts": { + "postinstall": "node node_modules/phantomjs-prebuilt/install.js" + }, "dependencies": { "babel": "6.5.2", "babel-polyfill": "^6.16.0", @@ -30,7 +33,7 @@ "babel-preset-react": "^6.16.0", "babel-preset-stage-0": "^6.16.0", "chunk-manifest-webpack-plugin": "0.1.0", - "coveralls": "2.11.15", + "coveralls": "^2.11.15", "css-loader": "0.26.1", "dotenv": "2.0.0", "ecstatic": "2.1.0", @@ -39,7 +42,7 @@ "eslint-config-airbnb": "^13.0.0", "eslint-plugin-babel": "^4.0.0", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jsx-a11y": "3.0.1", + "eslint-plugin-jsx-a11y": "2.2.3", "eslint-plugin-react": "^6.8.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", @@ -77,6 +80,7 @@ "phantomjs-prebuilt": "^2.1.13", "protractor": "4.0.11", "psi": "2.0.4", + "react-addons-test-utils": "^15.4.1", "react-hot-loader": "^3.0.0-beta.6", "redbox-react": "^1.3.3", "redux-devtools": "3.3.1", diff --git a/client/specs_support/utils.js b/client/specs_support/utils.js index df31b87..6c61567 100644 --- a/client/specs_support/utils.js +++ b/client/specs_support/utils.js @@ -1,13 +1,12 @@ -import TestUtils from 'react/lib/ReactTestUtils'; -import _ from "lodash"; +import TestUtils from 'react-addons-test-utils'; +import _ from 'lodash'; export default { - findTextField(textFields, labelText){ - return _.find(textFields, function(field){ - var label = TestUtils.findRenderedDOMComponentWithTag(field, 'label'); - return label.getDOMNode().textContent.toLowerCase() == labelText; + findTextField(textFields, labelText) { + return _.find(textFields, (field) => { + const label = TestUtils.findRenderedDOMComponentWithTag(field, 'label'); + return label.getDOMNode().textContent.toLowerCase() === labelText; }); - } - -}; \ No newline at end of file + }, +}; diff --git a/client/webpack.tests.js b/client/webpack.tests.js index dd08b26..2348c81 100644 --- a/client/webpack.tests.js +++ b/client/webpack.tests.js @@ -4,10 +4,10 @@ // Create a Webpack require context so we can dynamically require our // project's modules. Exclude test files in this context. -var context = require.context("./js", true, /\.spec\.js$/); +const context = require.context('./js', true, /\.spec\.jsx?$/); // Extract the module ids that Webpack uses to track modules. -var projectModuleIds = context.keys().map(module => +const projectModuleIds = context.keys().map(module => String(context.resolve(module))); // See http://kentor.me/posts/testing-react-and-flux-applications-with-karma-and-webpack/ @@ -16,4 +16,4 @@ beforeEach(() => { projectModuleIds.forEach(id => delete require.cache[id]); }); -context.keys().forEach(context); \ No newline at end of file +context.keys().forEach(context); diff --git a/client/yarn.lock b/client/yarn.lock index 3135238..c63d5f1 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1809,7 +1809,7 @@ 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" -coveralls@2.11.15: +coveralls@^2.11.15: version "2.11.15" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" dependencies: @@ -2512,9 +2512,9 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.1.tgz#38f22742a5752a8e72db693d7cd86e13a357da25" +eslint-plugin-jsx-a11y@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz#4e35cb71b8a7db702ac415c806eb8e8d9ea6c65d" dependencies: damerau-levenshtein "^1.0.0" jsx-ast-utils "^1.0.0" @@ -5803,6 +5803,10 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.0: minimist "^1.2.0" strip-json-comments "~1.0.4" +react-addons-test-utils@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.1.tgz#1e4caab151bf27cce26df5f9cb714f4fd8359ae1" + react-base16-styling@^0.4.1: version "0.4.6" resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.4.6.tgz#ac23cb19b278974d965003b88f06a038d790bc80" diff --git a/package.json b/package.json index c802e36..47ae4dc 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "postinstall": "cd ./client && yarn", "test": "cd ./client && ./node_modules/karma/bin/karma start", - "coveralls": "cd ./client && cat coverage/lcov.info | coveralls", + "coverage": "cat ./coverage/**/coverage.info | ./client/node_modules/coveralls/bin/coveralls.js", "hot": "cd ./client && node webpack.hot.js", "live": "cd ./client && node server.js", "build_dev": "cd ./client && node ./build.js", From c83951be20a311e2aa6385c97bb733ee59d9a8e8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 8 Dec 2016 17:06:32 -0700 Subject: [PATCH 233/452] Timeout (#9) * use jwts instead of sessions * Adds optional timeout * Modified linter to allow multispaces --- .eslintrc.yml | 1 + client/js/actions/jwt.js | 2 +- client/js/components/home.jsx | 2 +- client/js/libs/api.js | 71 +++++++++++++++++++++++++++++----- client/js/libs/api.spec.js | 15 +++++++ client/js/middleware/api.js | 2 +- client/specs_support/helper.js | 29 ++++++-------- 7 files changed, 91 insertions(+), 31 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 0655d8d..7c9819c 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -26,3 +26,4 @@ rules: - error - unix import/no-unresolved: 0 + no-multi-spaces: 0 diff --git a/client/js/actions/jwt.js b/client/js/actions/jwt.js index 0814a78..f8993b5 100644 --- a/client/js/actions/jwt.js +++ b/client/js/actions/jwt.js @@ -15,6 +15,6 @@ export function refreshJwt(userId) { return { type: Constants.REFRESH_JWT, method: Network.GET, - url: `api/sessions/${userId}`, + url: `api/jwts/${userId}`, }; } diff --git a/client/js/components/home.jsx b/client/js/components/home.jsx index 2885b4e..cfd62d1 100644 --- a/client/js/components/home.jsx +++ b/client/js/components/home.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React from 'react'; import assets from '../libs/assets'; export default function Home() { diff --git a/client/js/libs/api.js b/client/js/libs/api.js index d9f4208..c65f130 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -7,23 +7,73 @@ const pendingRequests = {}; export default class Api { - static get(url, apiUrl, jwt, csrf, params, headers) { - return Api.execRequest(NetworkConstants.GET, url, apiUrl, jwt, csrf, params, null, headers); + static get(url, apiUrl, jwt, csrf, params, headers, timeout = NetworkConstants.TIMEOUT) { + return Api.execRequest( + NetworkConstants.GET, + url, + apiUrl, + jwt, + csrf, + params, + null, + headers, + timeout, + ); } - static post(url, apiUrl, jwt, csrf, params, body, headers) { - return Api.execRequest(NetworkConstants.POST, url, apiUrl, jwt, csrf, params, body, headers); + static post(url, apiUrl, jwt, csrf, params, body, headers, timeout = NetworkConstants.TIMEOUT) { + return Api.execRequest( + NetworkConstants.POST, + url, + apiUrl, + jwt, + csrf, + params, + body, + headers, + timeout, + ); } - static put(url, apiUrl, jwt, csrf, params, body, headers) { - return Api.execRequest(NetworkConstants.PUT, url, apiUrl, jwt, csrf, params, body, headers); + static put(url, apiUrl, jwt, csrf, params, body, headers, timeout = NetworkConstants.TIMEOUT) { + return Api.execRequest( + NetworkConstants.PUT, + url, + apiUrl, + jwt, + csrf, + params, + body, + headers, + timeout, + ); } - static del(url, apiUrl, jwt, csrf, params, headers) { - return Api.execRequest(NetworkConstants.DEL, url, apiUrl, jwt, csrf, params, null, headers); + static del(url, apiUrl, jwt, csrf, params, headers, timeout = NetworkConstants.TIMEOUT) { + return Api.execRequest( + NetworkConstants.DEL, + url, + apiUrl, + jwt, + csrf, + params, + null, + headers, + timeout, + ); } - static execRequest(method, url, apiUrl, jwt, csrf, params, body, headers) { + static execRequest( + method, + url, + apiUrl, + jwt, + csrf, + params, + body, + headers, + timeout = NetworkConstants.TIMEOUT, + ) { return Api.doRequest(Api.makeUrl(`${url}${Api.queryStringFrom(params)}`, apiUrl), (fullUrl) => { let request; @@ -44,7 +94,8 @@ export default class Api { break; } - request.set('Accept', 'application/json').timeout(NetworkConstants.TIMEOUT); + request.set('Accept', 'application/json'); + request.timeout(timeout); if (!_.isNil(jwt)) { request.set('Authorization', `Bearer ${jwt}`); } if (!_.isNil(csrf)) { request.set('X-CSRF-Token', csrf); } diff --git a/client/js/libs/api.spec.js b/client/js/libs/api.spec.js index 7785e1a..54b251b 100644 --- a/client/js/libs/api.spec.js +++ b/client/js/libs/api.spec.js @@ -107,6 +107,21 @@ describe('api', () => { expect(request.requestHeaders['X-CSRF-Token']).toBeUndefined(); }); + it('calls execRequest with optional timeout', () => { + const url = '/api/test/7'; + const timeout = 1000; + api.execRequest(Network.GET, url, apiUrl, null, null, {}, {}, {}, timeout).then((result) => { + expect(result.statusCode).toBe(200); + expect(result.text).toEqual(Helper.testPayload()); + }); + const request = jasmine.Ajax.requests.mostRecent(); + expect(request.url).toEqual(`${apiUrl}${url}`); + expect(request.method.toLowerCase()).toEqual(Network.GET); + expect(request.requestHeaders.Accept).toEqual('application/json'); + expect(request.requestHeaders.Authorization).toBeUndefined(); + expect(request.requestHeaders['X-CSRF-Token']).toBeUndefined(); + }); + describe('Pending Requests', () => { const url = 'http://www.example.com'; const requestMethod = () => {}; diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index e35d596..c27a05f 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -37,7 +37,7 @@ const API = store => next => (action) => { } if (action.method) { - request(action.method, action.url, action.params, action.body, action.headers); + request(action.method, action.url, action.params, action.body, action.headers, action.timeout); } // call the next middleWare diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index 0df234b..414dda7 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -1,10 +1,7 @@ -"use strict"; +import _ from 'lodash'; +import configureStore from '../js/store/configure_store'; -import _ from "lodash"; - -import configureStore from "../js/store/configure_store"; - -export default class Helper{ +export default class Helper { // Create a fake store for testing static mockStore(state) { @@ -18,7 +15,7 @@ export default class Helper{ } // Create a real store that can be used for testing - static makeStore(settings){ + static makeStore(settings) { const initialState = { jwt : "fake_jwt_token", settings : _.assign({ @@ -29,16 +26,15 @@ export default class Helper{ return configureStore(initialState); } - static testPayload(){ + static testPayload() { return JSON.stringify([{ "id":1, "name":"Starter App" }]); } - static stubAjax(){ - - beforeEach(function(){ + static stubAjax() { + beforeEach(() => { jasmine.Ajax.install(); jasmine.Ajax.stubRequest( @@ -58,24 +54,21 @@ export default class Helper{ "statusText": "OK", "responseText": Helper.testPayload() }); - }); - afterEach(function(){ + afterEach(() => { jasmine.Ajax.uninstall(); }); } - static mockClock(){ - - beforeEach(function(){ + static mockClock() { + beforeEach(() => { jasmine.clock().install(); // Mock out the built in timers }); - afterEach(function(){ + afterEach(() => { jasmine.clock().uninstall(); }); - } } From 0d008e17edd60268b7baa3264cf5041f7393602c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 9 Dec 2016 09:45:29 -0700 Subject: [PATCH 234/452] Removes requirement for dangling comma --- .eslintrc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index 7c9819c..f74af1e 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -27,3 +27,4 @@ rules: - unix import/no-unresolved: 0 no-multi-spaces: 0 + comma-dangle: "only-multiline" From 5a8f31d8712a3c8e97e0acd70fcf05ceaf65fb80 Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Fri, 9 Dec 2016 17:26:37 -0700 Subject: [PATCH 235/452] New rulez (#10) * I would like to use dev dependancies * new line * And fixes this stuff too --- .eslintrc.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index f74af1e..6e10492 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -27,4 +27,9 @@ rules: - unix import/no-unresolved: 0 no-multi-spaces: 0 - comma-dangle: "only-multiline" + comma-dangle: + - error + - only-multiline + import/no-extraneous-dependencies: + - error + - devDependencies: true From 6fdfa7c275e1dbb3ca8fa969cf3c3e28084a9929 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 14 Dec 2016 20:37:40 -0700 Subject: [PATCH 236/452] Allow padded blocks --- .eslintrc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index 6e10492..3b650f6 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -33,3 +33,4 @@ rules: import/no-extraneous-dependencies: - error - devDependencies: true + padded-blocks: false From f18761cec163c8001fcec69a6bb674fc108af99e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 15 Dec 2016 13:59:59 -0700 Subject: [PATCH 237/452] Fixes missing timeout value --- client/js/middleware/api.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index c27a05f..5e5120b 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -2,7 +2,7 @@ import api from '../libs/api'; import { DONE } from '../constants/wrapper'; const API = store => next => (action) => { - function request(method, url, params, body, headers) { + function request(method, url, params, body, headers, timeout) { const state = store.getState(); const promise = api.execRequest( method, @@ -12,7 +12,8 @@ const API = store => next => (action) => { state.settings.csrfToken, params, body, - headers); + headers, + timeout); if (promise) { promise.then( From b65d0b7297a49f790cf61ed2e88d27966a1dd2c5 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 16 Dec 2016 16:25:14 -0700 Subject: [PATCH 238/452] Fixes response type --- client/specs_support/helper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index 414dda7..b5f90ad 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -41,7 +41,7 @@ export default class Helper { RegExp('.*/api/test') ).andReturn({ "status": 200, - "contentType": "json", + "contentType": "application/json", "statusText": "OK", "responseText": Helper.testPayload() }); @@ -50,7 +50,7 @@ export default class Helper { RegExp('.*/api/test/.+') ).andReturn({ "status": 200, - "contentType": "json", + "contentType": "application/json", "statusText": "OK", "responseText": Helper.testPayload() }); From be80b2944407f138c47621eac06038819acf6e78 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 19 Dec 2016 15:56:34 -0700 Subject: [PATCH 239/452] Clean up configure store --- client/js/store/configure_store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 3d4cb42..1935f87 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -27,7 +27,7 @@ export default function(initialState){ if (__DEV__ && module.hot) { module.hot.accept( '../reducers', - () => store.replaceReducer(require('../reducers')) + () => store.replaceReducer(rootReducer) ); } From 1988fac640974a2c6994b213a2e2ae3648f351a8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 19 Dec 2016 15:58:01 -0700 Subject: [PATCH 240/452] Removes quotes for linter --- client/specs_support/helper.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index b5f90ad..6fcfee7 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -40,19 +40,19 @@ export default class Helper { jasmine.Ajax.stubRequest( RegExp('.*/api/test') ).andReturn({ - "status": 200, - "contentType": "application/json", - "statusText": "OK", - "responseText": Helper.testPayload() + status: 200, + contentType: "application/json", + statusText: "OK", + responseText: Helper.testPayload() }); jasmine.Ajax.stubRequest( RegExp('.*/api/test/.+') ).andReturn({ - "status": 200, - "contentType": "application/json", - "statusText": "OK", - "responseText": Helper.testPayload() + status: 200, + contentType: "application/json", + statusText: "OK", + responseText: Helper.testPayload() }); }); From 17af280647dc4b440281aaedda355429631346f8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 20 Dec 2016 21:18:32 -0700 Subject: [PATCH 241/452] Updates packages --- client/package.json | 34 +- client/yarn.lock | 1725 +++++++++++++++++++------------------------ 2 files changed, 791 insertions(+), 968 deletions(-) diff --git a/client/package.json b/client/package.json index e094e22..0734ff5 100644 --- a/client/package.json +++ b/client/package.json @@ -4,25 +4,25 @@ }, "dependencies": { "babel": "6.5.2", - "babel-polyfill": "^6.16.0", - "babel-runtime": "^6.18.0", + "babel-polyfill": "^6.20.0", + "babel-runtime": "^6.20.0", "es6-promise": "^4.0.5", "lodash": "4.17.2", "react": "15.4.1", "react-dom": "15.4.1", "react-proxy-loader": "0.3.4", - "react-redux": "4.4.6", + "react-redux": "5.0.1", "react-router": "3.0.0", "react-tap-event-plugin": "2.0.1", "redux": "3.6.0", - "superagent": "3.1.0", + "superagent": "3.3.1", "uuid": "3.0.1" }, "devDependencies": { "autoprefixer-loader": "3.2.0", - "babel-core": "^6.18.2", + "babel-core": "^6.21.0", "babel-eslint": "^7.1.1", - "babel-loader": "^6.2.8", + "babel-loader": "^6.2.10", "babel-plugin-transform-class-properties": "^6.19.0", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.9.1", @@ -32,17 +32,17 @@ "babel-preset-es2015": "^6.18.0", "babel-preset-react": "^6.16.0", "babel-preset-stage-0": "^6.16.0", - "chunk-manifest-webpack-plugin": "0.1.0", + "chunk-manifest-webpack-plugin": "1.0.0", "coveralls": "^2.11.15", "css-loader": "0.26.1", "dotenv": "2.0.0", "ecstatic": "2.1.0", "ejs": "^2.5.5", - "eslint": "^3.11.1", + "eslint": "^3.12.2", "eslint-config-airbnb": "^13.0.0", "eslint-plugin-babel": "^4.0.0", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jsx-a11y": "2.2.3", + "eslint-plugin-jsx-a11y": "3.0.2", "eslint-plugin-react": "^6.8.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", @@ -53,7 +53,7 @@ "fs-extra": "^1.0.0", "html-minifier": "3.2.3", "html-truncate": "^1.2.1", - "imports-loader": "0.6.5", + "imports-loader": "0.7.0", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "1.1.0", "jasmine": "^2.5.2", @@ -63,7 +63,7 @@ "karma-cli": "1.0.1", "karma-coverage": "1.1.1", "karma-firefox-launcher": "1.0.0", - "karma-jasmine": "1.0.2", + "karma-jasmine": "1.1.0", "karma-jasmine-ajax": "0.1.13", "karma-phantomjs-launcher": "1.0.2", "karma-sourcemap-loader": "0.3.7", @@ -73,12 +73,12 @@ "less-loader": "2.2.3", "marked": "^0.3.6", "minimist": "1.2.0", - "node-sass": "3.13.0", + "node-sass": "4.1.1", "node-watch": "^0.4.1", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", - "phantomjs-prebuilt": "^2.1.13", - "protractor": "4.0.11", + "phantomjs-prebuilt": "^2.1.14", + "protractor": "4.0.14", "psi": "2.0.4", "react-addons-test-utils": "^15.4.1", "react-hot-loader": "^3.0.0-beta.6", @@ -86,11 +86,11 @@ "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.1.1", - "sass-loader": "4.0.2", + "sass-loader": "4.1.0", "style-loader": "0.13.1", "url-loader": "0.5.7", - "webpack": "1.13.3", - "webpack-dev-middleware": "^1.8.4", + "webpack": "1.14.0", + "webpack-dev-middleware": "^1.9.0", "webpack-hot-middleware": "^2.13.2" } } diff --git a/client/yarn.lock b/client/yarn.lock index c63d5f1..1067d72 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1,20 +1,20 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@types/jasmine@^2.5.36": - version "2.5.36" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.36.tgz#6d804b79a57e9380d766a2680e9362c17d9556d2" + version "2.5.38" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.38.tgz#a4379124c4921d4e21de54ec74669c9e9b356717" "@types/node@^6.0.46": - version "6.0.46" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.46.tgz#8d9e48572831f05b11cc4c793754d43437219d62" + version "6.0.52" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.52.tgz#1ac3a99b42320f9e463482f25af4c2359473aaa6" "@types/q@^0.0.32": version "0.0.32" resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" -"@types/selenium-webdriver@~2.53.31": - version "2.53.33" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.33.tgz#64672bae3acedf9d9e6bcfa8bdb7c37497751c3d" +"@types/selenium-webdriver@2.53.37": + version "2.53.37" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.37.tgz#34f743c20e53ae7100ede90870fde554df2447f8" abbrev@~1.0.9, abbrev@1, abbrev@1.0.x: version "1.0.9" @@ -44,9 +44,9 @@ acorn@^3.0.0, acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.1, acorn@4.X: - version "4.0.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1" +acorn@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" adm-zip@^0.4.7, adm-zip@0.4.7: version "0.4.7" @@ -68,12 +68,12 @@ agent-base@2: semver "~5.0.1" ajv-keywords@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.1.1.tgz#02550bc605a3e576041565628af972e06c549d50" + version "1.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.2.0.tgz#676c4f087bfe1e8b12dca6fda2f3c74f417b099c" ajv@^4.7.0: - version "4.7.7" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.7.7.tgz#4980d5f65ce90a2579532eec66429f320dea0321" + version "4.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.0.tgz#7ae6169180eb199192a8b9a19fd0f47fc9ac8764" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -95,8 +95,8 @@ alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" amdefine@>=0.0.4: - version "1.0.0" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33" + 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" @@ -106,7 +106,7 @@ ansi-html@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" -ansi-regex@^2.0.0: +ansi-regex@*, ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" @@ -239,14 +239,6 @@ asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" -asn1@0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" - -assert-plus@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" - assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" @@ -284,10 +276,10 @@ async@^1.3.0, async@^1.4.0, async@^1.5.0, async@~1.5.2, async@1.x: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.0.1.tgz#b709cc0280a9c36f09f4536be823c838a9049e25" + version "2.1.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" dependencies: - lodash "^4.8.0" + lodash "^4.14.0" async@~0.2.6: version "0.2.10" @@ -301,10 +293,6 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -atob@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" - autoprefixer-loader@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/autoprefixer-loader/-/autoprefixer-loader-3.2.0.tgz#39a7b6646a8269865073d958c97f486152c2c84a" @@ -315,20 +303,16 @@ autoprefixer-loader@3.2.0: postcss-safe-parser "^1.0.1" autoprefixer@^6.0.2, autoprefixer@^6.3.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.5.0.tgz#910de0aa0f22af4c7d50367cbc9d4d412945162f" + version "6.5.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.5.4.tgz#1386eb6708ccff36aefff70adc694ecfd60af1b0" dependencies: browserslist "~1.4.0" - caniuse-db "^1.0.30000540" + caniuse-db "^1.0.30000597" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^5.2.2" + postcss "^5.2.6" postcss-value-parser "^3.2.3" -aws-sign2@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" - aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -337,27 +321,27 @@ aws4@^1.2.1: version "1.5.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" -babel-code-frame@^6.11.0, babel-code-frame@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.16.0.tgz#f90e60da0862909d3ce098733b5d3987c97cb8de" +babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26" dependencies: chalk "^1.1.0" esutils "^2.0.2" js-tokens "^2.0.0" -babel-core@^6.18.0, babel-core@^6.18.2: - version "6.18.2" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.2.tgz#d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b" +babel-core@^6.18.0, babel-core@^6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724" dependencies: - babel-code-frame "^6.16.0" - babel-generator "^6.18.0" + babel-code-frame "^6.20.0" + babel-generator "^6.21.0" babel-helpers "^6.16.0" babel-messages "^6.8.0" babel-register "^6.18.0" - babel-runtime "^6.9.1" + babel-runtime "^6.20.0" babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-traverse "^6.21.0" + babel-types "^6.21.0" babylon "^6.11.0" convert-source-map "^1.1.0" debug "^2.1.1" @@ -379,52 +363,40 @@ babel-eslint@^7.1.1: babylon "^6.13.0" lodash.pickby "^4.6.0" -babel-generator@^6.11.3: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.17.0.tgz#b894e3808beef7800f2550635bfe024b6226cf33" - dependencies: - babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.16.0" - detect-indent "^3.0.1" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - -babel-generator@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.18.0.tgz#e4f104cb3063996d9850556a45aae4a022060a07" +babel-generator@^6.18.0, babel-generator@^6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494" dependencies: babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.18.0" + babel-runtime "^6.20.0" + babel-types "^6.21.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" source-map "^0.5.0" -babel-helper-bindify-decorators@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.8.0.tgz#b34805a30b1433cc0042f7054f88a7133c144909" +babel-helper-bindify-decorators@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz#fc00c573676a6e702fffa00019580892ec8780a5" dependencies: babel-runtime "^6.0.0" - babel-traverse "^6.8.0" - babel-types "^6.8.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.15.0.tgz#39e9ee143f797b642262e4646c681c32089ef1ab" + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6" dependencies: - babel-helper-explode-assignable-expression "^6.8.0" + babel-helper-explode-assignable-expression "^6.18.0" babel-runtime "^6.0.0" - babel-types "^6.15.0" + babel-types "^6.18.0" babel-helper-builder-react-jsx@^6.8.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.9.0.tgz#a633978d669c4c9dcad716cc577ee3e0bb8ae723" + version "6.21.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.21.1.tgz#c4a24208655be9dc1cccf14d366da176f20645e4" dependencies: babel-runtime "^6.9.0" - babel-types "^6.9.0" + babel-types "^6.21.0" esutils "^2.0.0" lodash "^4.2.0" @@ -437,7 +409,7 @@ babel-helper-call-delegate@^6.18.0: babel-traverse "^6.18.0" babel-types "^6.18.0" -babel-helper-define-map@^6.18.0: +babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2" dependencies: @@ -446,33 +418,24 @@ babel-helper-define-map@^6.18.0: babel-types "^6.18.0" lodash "^4.2.0" -babel-helper-define-map@^6.8.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.9.0.tgz#6629f9b2a7e58e18e8379a57d1e6fbb2969902fb" - dependencies: - babel-helper-function-name "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.9.0" - lodash "^4.2.0" - -babel-helper-explode-assignable-expression@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.8.0.tgz#9b3525e05b761c3b88919d730a28bad1967e6556" +babel-helper-explode-assignable-expression@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe" dependencies: babel-runtime "^6.0.0" - babel-traverse "^6.8.0" - babel-types "^6.8.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" babel-helper-explode-class@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.8.0.tgz#196a228cc69ea57308695e4ebd1a36cf3f8eca3d" + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz#c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb" dependencies: - babel-helper-bindify-decorators "^6.8.0" + babel-helper-bindify-decorators "^6.18.0" babel-runtime "^6.0.0" - babel-traverse "^6.8.0" - babel-types "^6.8.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" -babel-helper-function-name@^6.18.0: +babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" dependencies: @@ -482,16 +445,6 @@ babel-helper-function-name@^6.18.0: babel-traverse "^6.18.0" babel-types "^6.18.0" -babel-helper-function-name@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.8.0.tgz#a0336ba14526a075cdf502fc52d3fe84b12f7a34" - dependencies: - babel-helper-get-function-arity "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - babel-traverse "^6.8.0" - babel-types "^6.8.0" - babel-helper-get-function-arity@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24" @@ -499,13 +452,6 @@ babel-helper-get-function-arity@^6.18.0: babel-runtime "^6.0.0" babel-types "^6.18.0" -babel-helper-get-function-arity@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.8.0.tgz#88276c24bd251cdf6f61b6f89f745f486ced92af" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.8.0" - babel-helper-hoist-variables@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a" @@ -520,32 +466,25 @@ babel-helper-optimise-call-expression@^6.18.0: babel-runtime "^6.0.0" babel-types "^6.18.0" -babel-helper-optimise-call-expression@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.8.0.tgz#4175628e9c89fc36174904f27070f29d38567f06" - dependencies: - babel-runtime "^6.0.0" - babel-types "^6.8.0" - babel-helper-regex@^6.8.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.9.0.tgz#c74265fde180ff9a16735fee05e63cadb9e0b057" + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6" dependencies: babel-runtime "^6.9.0" - babel-types "^6.9.0" + babel-types "^6.18.0" lodash "^4.2.0" babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2: - version "6.16.2" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.16.2.tgz#24315bde8326c60022dc053cce84cfe38d724b82" + version "6.20.3" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.20.3.tgz#9dd3b396f13e35ef63e538098500adc24c63c4e7" dependencies: - babel-helper-function-name "^6.8.0" - babel-runtime "^6.0.0" + babel-helper-function-name "^6.18.0" + babel-runtime "^6.20.0" babel-template "^6.16.0" - babel-traverse "^6.16.0" - babel-types "^6.16.0" + babel-traverse "^6.20.0" + babel-types "^6.20.0" -babel-helper-replace-supers@^6.18.0: +babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e" dependencies: @@ -556,17 +495,6 @@ babel-helper-replace-supers@^6.18.0: babel-traverse "^6.18.0" babel-types "^6.18.0" -babel-helper-replace-supers@^6.8.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.16.0.tgz#21c97623cc7e430855753f252740122626a39e6b" - dependencies: - babel-helper-optimise-call-expression "^6.8.0" - babel-messages "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.16.0" - babel-traverse "^6.16.0" - babel-types "^6.16.0" - babel-helpers@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3" @@ -574,9 +502,9 @@ babel-helpers@^6.16.0: babel-runtime "^6.0.0" babel-template "^6.16.0" -babel-loader@^6.2.8: - version "6.2.8" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.8.tgz#30d7183aef60afc140b36443676b7acb4c12ac9c" +babel-loader@^6.2.10: + version "6.2.10" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.10.tgz#adefc2b242320cd5d15e65b31cea0e8b1b02d4b0" dependencies: find-cache-dir "^0.1.1" loader-utils "^0.2.11" @@ -603,9 +531,9 @@ babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" -babel-plugin-syntax-class-constructor-call@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.13.0.tgz#96fb2e9f177dca22824065de4392f2fe3486b765" +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" @@ -619,6 +547,10 @@ babel-plugin-syntax-do-expressions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" +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" @@ -627,25 +559,25 @@ 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.3.13, babel-plugin-syntax-flow@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.13.0.tgz#9af0cd396087bf7677053e1afa52f206c0416f17" +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: + 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-function-bind@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.13.0.tgz#e741ff3992c578310be45c571bcd90a2f9c5586e" + 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.3.13: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz#2b84b7d53dd744f94ff1fad7669406274b23f541" + version "6.20.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.20.0.tgz#442835e19179f45b87e92d477d70b9f1f18b5c4f" babel-plugin-transform-async-generator-functions@^6.17.0: version "6.17.0" @@ -664,22 +596,14 @@ babel-plugin-transform-async-to-generator@^6.16.0: babel-runtime "^6.0.0" babel-plugin-transform-class-constructor-call@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.8.0.tgz#6e740bc80f16d295fa598d92518666020a906192" + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.18.0.tgz#80855e38a1ab47b8c6c647f8ea1bcd2c00ca3aae" dependencies: - babel-plugin-syntax-class-constructor-call "^6.8.0" + babel-plugin-syntax-class-constructor-call "^6.18.0" babel-runtime "^6.0.0" babel-template "^6.8.0" -babel-plugin-transform-class-properties@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.16.0.tgz#969bca24d34e401d214f36b8af5c1346859bc904" - dependencies: - babel-helper-function-name "^6.8.0" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.9.1" - -babel-plugin-transform-class-properties@^6.19.0: +babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-properties@^6.19.0: version "6.19.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz#1274b349abaadc835164e2004f4a2444a2788d5f" dependencies: @@ -727,13 +651,13 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: babel-runtime "^6.0.0" babel-plugin-transform-es2015-block-scoping@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz#3bfdcfec318d46df22525cdea88f1978813653af" + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.21.0.tgz#e840687f922e70fb2c42bb13501838c174a115ed" dependencies: - babel-runtime "^6.9.0" + babel-runtime "^6.20.0" babel-template "^6.15.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-traverse "^6.21.0" + babel-types "^6.21.0" lodash "^4.2.0" babel-plugin-transform-es2015-classes@^6.18.0: @@ -759,8 +683,8 @@ babel-plugin-transform-es2015-computed-properties@^6.3.13: babel-template "^6.8.0" babel-plugin-transform-es2015-destructuring@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.18.0.tgz#a08fb89415ab82058649558bedb7bf8dafa76ba5" + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz#ff1d911c4b3f4cab621bd66702a869acd1900533" dependencies: babel-runtime "^6.9.0" @@ -809,8 +733,8 @@ babel-plugin-transform-es2015-modules-commonjs@^6.18.0: babel-types "^6.18.0" babel-plugin-transform-es2015-modules-systemjs@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.18.0.tgz#f09294707163edae4d3b3e8bfacecd01d920b7ad" + version "6.19.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz#50438136eba74527efa00a5b0fefaf1dc4071da6" dependencies: babel-helper-hoist-variables "^6.18.0" babel-runtime "^6.11.6" @@ -832,15 +756,15 @@ babel-plugin-transform-es2015-object-super@^6.3.13: babel-runtime "^6.0.0" babel-plugin-transform-es2015-parameters@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz#9b2cfe238c549f1635ba27fc1daa858be70608b1" + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.21.0.tgz#46a655e6864ef984091448cdf024d87b60b2a7d8" dependencies: babel-helper-call-delegate "^6.18.0" babel-helper-get-function-arity "^6.18.0" babel-runtime "^6.9.0" babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-traverse "^6.21.0" + babel-types "^6.21.0" babel-plugin-transform-es2015-shorthand-properties@^6.18.0: version "6.18.0" @@ -899,10 +823,10 @@ babel-plugin-transform-export-extensions@^6.3.13: babel-runtime "^6.0.0" babel-plugin-transform-flow-strip-types@^6.3.13: - version "6.14.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.14.0.tgz#35ceb03f8770934044bab1a76f7e4ee0aa9220f9" + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.21.0.tgz#2eea3f8b5bb234339b47283feac155cfb237b948" dependencies: - babel-plugin-syntax-flow "^6.8.0" + babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.0.0" babel-plugin-transform-function-bind@^6.3.13: @@ -913,11 +837,11 @@ babel-plugin-transform-function-bind@^6.3.13: babel-runtime "^6.0.0" babel-plugin-transform-object-rest-spread@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.16.0.tgz#db441d56fffc1999052fdebe2e2f25ebd28e36a9" + version "6.20.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.20.2.tgz#e816c55bba77b14c16365d87e2ae48c8fd18fc2e" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.20.0" babel-plugin-transform-react-constant-elements@^6.9.1: version "6.9.1" @@ -964,12 +888,10 @@ babel-plugin-transform-react-remove-prop-types@^0.2.11: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.11.tgz#05eb7cc4670d6506d801680576589c7abcd51b00" babel-plugin-transform-regenerator@^6.16.0: - version "6.16.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59" + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.21.0.tgz#75d0c7e7f84f379358f508451c68a2c5fa5a9703" dependencies: - babel-runtime "^6.9.0" - babel-types "^6.16.0" - private "~0.1.5" + regenerator-transform "0.9.8" babel-plugin-transform-runtime@^6.15.0, babel-plugin-transform-runtime@^6.7.5: version "6.15.0" @@ -984,13 +906,13 @@ babel-plugin-transform-strict-mode@^6.18.0: babel-runtime "^6.0.0" babel-types "^6.18.0" -babel-polyfill@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.16.0.tgz#2d45021df87e26a374b6d4d1a9c65964d17f2422" +babel-polyfill@^6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7" dependencies: - babel-runtime "^6.9.1" + babel-runtime "^6.20.0" core-js "^2.4.0" - regenerator-runtime "^0.9.5" + regenerator-runtime "^0.10.0" babel-preset-es2015@^6.18.0: version "6.18.0" @@ -1050,10 +972,11 @@ babel-preset-stage-1@^6.16.0: babel-preset-stage-2 "^6.16.0" babel-preset-stage-2@^6.16.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.17.0.tgz#dc4f84582781353cef36c41247eae5e36c4cae0d" + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz#9eb7bf9a8e91c68260d5ba7500493caaada4b5b5" dependencies: - babel-plugin-transform-class-properties "^6.16.0" + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.18.0" babel-plugin-transform-decorators "^6.13.0" babel-preset-stage-3 "^6.17.0" @@ -1079,21 +1002,14 @@ babel-register@^6.18.0: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.2.0, babel-runtime@^6.9.0, babel-runtime@^6.9.1: - version "6.11.6" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" +babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.20.0, babel-runtime@^6.6.1, babel-runtime@^6.9.0, babel-runtime@^6.9.1: + version "6.20.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f" dependencies: core-js "^2.4.0" - regenerator-runtime "^0.9.5" + regenerator-runtime "^0.10.0" -babel-runtime@^6.18.0, babel-runtime@^6.6.1: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.18.0.tgz#0f4177ffd98492ef13b9f823e9994a02584c9078" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.9.5" - -babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.7.0, babel-template@^6.8.0, babel-template@^6.9.0: +babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.7.0, babel-template@^6.8.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" dependencies: @@ -1103,48 +1019,25 @@ babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-te babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.8.0, babel-traverse@^6.9.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.16.0.tgz#fba85ae1fd4d107de9ce003149cc57f53bef0c4f" - dependencies: - babel-code-frame "^6.16.0" - babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.16.0" - babylon "^6.11.0" - debug "^2.2.0" - globals "^8.3.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-traverse@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.18.0.tgz#5aeaa980baed2a07c8c47329cd90c3b90c80f05e" +babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad" dependencies: - babel-code-frame "^6.16.0" + babel-code-frame "^6.20.0" babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.18.0" + babel-runtime "^6.20.0" + babel-types "^6.21.0" babylon "^6.11.0" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.10.2, babel-types@^6.13.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.8.0, babel-types@^6.9.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.16.0.tgz#71cca1dbe5337766225c5c193071e8ebcbcffcfe" - dependencies: - babel-runtime "^6.9.1" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babel-types@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.18.0.tgz#1f7d5a73474c59eb9151b2417bbff4e4fce7c3f8" +babel-types@^6.13.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.20.0, babel-types@^6.21.0, babel-types@^6.8.0, babel-types@^6.9.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2" dependencies: - babel-runtime "^6.9.1" + babel-runtime "^6.20.0" esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^1.0.1" @@ -1153,11 +1046,7 @@ babel@6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" -babylon@^6.11.0, babylon@^6.8.1: - version "6.11.4" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.11.4.tgz#75e1f52187efa0cde5a541a7f7fdda38f6eb5bd2" - -babylon@^6.13.0: +babylon@^6.11.0, babylon@^6.13.0: version "6.14.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" @@ -1169,10 +1058,6 @@ balanced-match@^0.4.1, 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@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" - base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" @@ -1185,18 +1070,14 @@ base64-js@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" -base64-url@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.2.tgz#4b08113b49d23889f306be64372762d31412f7a8" - -Base64@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" - base64id@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" +base64url@^2.0.0, base64url@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" + base64url@~0.0.4: version "0.0.6" resolved "https://registry.yarnpkg.com/base64url/-/base64url-0.0.6.tgz#9597b36b330db1c42477322ea87ea8027499b82b" @@ -1215,8 +1096,8 @@ bcrypt-pbkdf@^1.0.0: tweetnacl "^0.14.3" beeper@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.0.tgz#9ee6fc1ce7f54feaace7ce73588b056037866a2c" + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" benchmark@1.0.0: version "1.0.0" @@ -1233,8 +1114,8 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" binary-extensions@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d" + version "1.8.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" bl@^1.0.0, bl@~1.1.2: version "1.1.2" @@ -1242,12 +1123,6 @@ bl@^1.0.0, bl@~1.1.2: dependencies: readable-stream "~2.0.5" -bl@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e" - dependencies: - readable-stream "~2.0.5" - blob@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" @@ -1258,10 +1133,6 @@ block-stream@*, block-stream@0.0.9: dependencies: inherits "~2.0.0" -bluebird@^2.9.30: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" - bluebird@^3.3.0: version "3.4.6" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f" @@ -1319,7 +1190,13 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -browserify-zlib@~0.1.4: +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-zlib@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" dependencies: @@ -1332,10 +1209,10 @@ browserslist@~1.4.0: caniuse-db "^1.0.30000539" buffer-crc32@~0.2.3: - version "0.2.5" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.5.tgz#db003ac2671e62ebd6ece78ea2c2e1b405736e91" + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" -buffer-equal-constant-time@^1.0.1: +buffer-equal-constant-time@^1.0.1, 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" @@ -1364,6 +1241,10 @@ 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@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-2.0.0.tgz#6f22003baacf003ccd287afe6872151fddc58579" + builtins@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" @@ -1423,9 +1304,9 @@ camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" -caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000540: - version "1.0.30000553" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000553.tgz#e7e908f43b788e6ac78fc161fedc4626d6a39f24" +caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000597: + version "1.0.30000601" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000601.tgz#073c9d1c62edb399ecc783a7ab40698b5694d2fe" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1485,8 +1366,8 @@ chmodr@~1.0.2: resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" chokidar@^1.0.0, chokidar@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.0.tgz#90c32ad4802901d7713de532dc284e96a63ad058" + version "1.6.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -1503,25 +1384,25 @@ chownr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -chunk-manifest-webpack-plugin@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-0.1.0.tgz#6138488fc21ddab4ccfb7c1c11d51bb80a943186" +chunk-manifest-webpack-plugin@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-1.0.0.tgz#84ef34ff676e7b147e9512f7f0289ef3589f33e2" dependencies: - webpack-core "^0.4.8" + webpack-core "^0.6.9" -circular-json@^0.3.0: +circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" clap@^1.0.9: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.1.tgz#a8a93e0bfb7581ac199c4f001a5525a724ce696d" + version "1.1.2" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.2.tgz#316545bf22229225a2cecaa6824cd2f56a9709ed" dependencies: chalk "^1.1.3" clean-css@3.4.x: - version "3.4.20" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.20.tgz#c0d8963b5448e030f0bcd3ddd0dac4dfe3dea501" + version "3.4.23" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.23.tgz#604fbbca24c12feb59b02f00b84f1fb7ded6d001" dependencies: commander "2.8.x" source-map "0.4.x" @@ -1592,24 +1473,24 @@ coa@~1.0.1: q "^1.1.2" code-point-at@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.0.1.tgz#1104cd34f9b5b45d3eba88f1babc1924e1ce35fb" - dependencies: - number-is-nan "^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: - version "1.5.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.5.0.tgz#7a2b4efb4488df85bca6443cb038b7100fbe7de1" + version "1.8.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.8.2.tgz#be868184d7c8631766d54e7078e2672d7c7e3339" + dependencies: + color-name "^1.1.1" -color-name@^1.0.0: +color-name@^1.0.0, color-name@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" color-space@^1.14.3: - version "1.14.6" - resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.14.6.tgz#a52fd4f083073d3cb335c3b4dc35d5fd59347f25" + version "1.14.7" + resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.14.7.tgz#b7f5a31779427bb25f9927a69410d80c2eaaa71b" dependencies: - husl ">=5.0" + husl "^5.0.0" mumath "^3.0.0" color-string@^0.3.0: @@ -1619,8 +1500,8 @@ color-string@^0.3.0: color-name "^1.0.0" color@^0.11.0: - version "0.11.3" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.3.tgz#4bad1d0d52499dd00dbd6f0868442467e49394e6" + 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" @@ -1655,13 +1536,13 @@ combine-lists@^1.0.0: dependencies: lodash "^4.5.0" -combined-stream@^1.0.5, combined-stream@~1.0.1, combined-stream@~1.0.5: +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.8.1, commander@^2.9.0, commander@2.9.x: +commander@^2.9.0, commander@2.9.x: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1702,12 +1583,12 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" concat-stream@~1.4.7: version "1.4.10" @@ -1765,9 +1646,9 @@ 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" -constants-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" +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" @@ -1781,7 +1662,7 @@ content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0, convert-source-map@1.X: +convert-source-map@^1.1.0, convert-source-map@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" @@ -1838,10 +1719,11 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" -crypto-browserify@~3.2.6: - version "3.2.8" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.2.8.tgz#b9b11dbe6d9651dd882a01e6cc467df718ecf189" +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" @@ -1883,22 +1765,13 @@ css-selector-tokenizer@^0.7.0: fastparse "^1.1.1" regexpu-core "^1.0.0" -css@2.X: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc" - dependencies: - inherits "^2.0.1" - source-map "^0.1.38" - source-map-resolve "^0.3.0" - urix "^0.1.0" - cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" "cssnano@>=2.6.1 <4": - version "3.7.7" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.7.7.tgz#27fac611380c6a49d6f722c0537e5a988a785010" + version "3.9.1" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.9.1.tgz#41422bb5390d85a94ad4db03cc1a188bf68744fe" dependencies: autoprefixer "^6.3.1" decamelize "^1.1.2" @@ -1940,10 +1813,6 @@ csso@~2.2.1: clap "^1.0.9" source-map "^0.5.3" -ctype@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -1951,8 +1820,8 @@ currently-unhandled@^0.4.1: array-find-index "^1.0.1" custom-event@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.0.tgz#2e4628be19dc4b214b5c02630c5971e811618062" + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" d@^0.1.1, d@~0.1.1: version "0.1.1" @@ -1965,8 +1834,8 @@ damerau-levenshtein@^1.0.0: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2" dashdash@^1.12.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141" + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" @@ -1981,7 +1850,13 @@ dateformat@^1.0.11, dateformat@^1.0.6: get-stdin "^4.0.1" meow "^3.3.0" -debug@^2.1.1, debug@^2.2.0, debug@~2.2.0, debug@2, debug@2.2.0: +debug@^2.1.1, debug@^2.2.0, debug@2: + version "2.4.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.4.5.tgz#34c7b12a1ca96674428f41fe92c49b4ce7cd0607" + dependencies: + ms "0.7.2" + +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: @@ -2105,24 +1980,12 @@ destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -detect-indent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" - dependencies: - get-stdin "^4.0.1" - minimist "^1.1.0" - repeating "^1.1.0" - 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-newline@2.X: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -2140,14 +2003,7 @@ difflib@~0.2.1: dependencies: heap ">= 0.2.0" -doctrine@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.4.0.tgz#e2db32defa752407b935b381e89f3740e469e599" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@1.5.0: +doctrine@^1.2.2, doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: @@ -2230,8 +2086,8 @@ duplexer2@0.0.2: readable-stream "~1.1.9" duplexify@^3.2.0: - version "3.4.5" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.4.5.tgz#0e7e287a775af753bf57e6e7b7f21f183f6c3a53" + version "3.5.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" dependencies: end-of-stream "1.0.0" inherits "^2.0.1" @@ -2251,11 +2107,12 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -ecdsa-sig-formatter@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.7.tgz#3137e976a1d6232517e2513e04e32f79bcbdf126" +ecdsa-sig-formatter@^1.0.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: - base64-url "^1.2.1" + base64url "^2.0.0" + safe-buffer "^5.0.1" ecstatic@2.1.0: version "2.1.0" @@ -2512,9 +2369,9 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz#4e35cb71b8a7db702ac415c806eb8e8d9ea6c65d" +eslint-plugin-jsx-a11y@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.2.tgz#9f0eabcafde3d2a2600d96a66adb90d099e841fe" dependencies: damerau-levenshtein "^1.0.0" jsx-ast-utils "^1.0.0" @@ -2527,9 +2384,9 @@ eslint-plugin-react@^6.8.0: doctrine "^1.2.2" jsx-ast-utils "^1.3.4" -eslint@^3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.11.1.tgz#408be581041385cba947cd8d1cd2227782b55dbf" +eslint@^3.12.2: + version "3.12.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.12.2.tgz#6be5a9aa29658252abd7f91e9132bab1f26f3c34" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -2542,7 +2399,7 @@ eslint@^3.11.1: esutils "^2.0.2" file-entry-cache "^2.0.0" glob "^7.0.3" - globals "^9.2.0" + globals "^9.14.0" ignore "^3.2.0" imurmurhash "^0.1.4" inquirer "^0.12.0" @@ -2757,27 +2614,16 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" -fbjs@^0.8.1, fbjs@^0.8.6: - version "0.8.6" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.6.tgz#7eb67d6986b2d5007a9b6e92e0e7cb6f75cad290" - 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" - ua-parser-js "^0.7.9" - -fbjs@^0.8.4: - version "0.8.5" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.5.tgz#f69ba8a876096cb1b9bffe4d7c1e71c19d39d008" +fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: + version "0.8.8" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.8.tgz#02f1b6e0ea0d46c24e0b51a2d24df069563a5ad6" dependencies: core-js "^1.0.0" - immutable "^3.7.6" 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: @@ -2807,8 +2653,8 @@ file-loader@0.9.0: loader-utils "~0.2.5" file-type@^3.1.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.8.0.tgz#bcadf6a8f624ebe4a10e5ad26727b6b93f16d78d" + 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.0" @@ -2870,15 +2716,15 @@ first-chunk-stream@^1.0.0: resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" flat-cache@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.1.tgz#6c837d6225a7de5659323740b36d5361f71691ff" + version "1.2.2" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" dependencies: - circular-json "^0.3.0" + circular-json "^0.3.1" del "^2.0.2" graceful-fs "^4.1.2" write "^0.2.1" -flatten@^1.0.2, flatten@1.0.2: +flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" @@ -2886,13 +2732,13 @@ for-in@^0.1.5: version "0.1.6" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" -for-own@^0.1.3: +for-own@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" dependencies: for-in "^0.1.5" -forever-agent@~0.6.0, forever-agent@~0.6.1: +forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2904,7 +2750,7 @@ form-data@^2.1.1, form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -form-data@~1.0.0-rc1, form-data@~1.0.0-rc3, form-data@~1.0.0-rc4: +form-data@~1.0.0-rc3, form-data@~1.0.0-rc4: version "1.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" dependencies: @@ -2948,7 +2794,7 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra@^1.0.0: +fs-extra@^1.0.0, fs-extra@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" dependencies: @@ -2956,16 +2802,6 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" -fs-extra@~0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - fs-vacuum@~1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.9.tgz#4f90193ab8ea02890995bcd4e804659a5d366b2d" @@ -2988,8 +2824,8 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.0.14" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.14.tgz#558e8cc38643d8ef40fe45158486d0d25758eee4" + version "1.0.15" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.29" @@ -3053,15 +2889,29 @@ gauge@~2.6.0: 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" +gauge@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" dependencies: - globule "^1.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" + 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" + supports-color "^0.2.0" + 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" + +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" @@ -3111,10 +2961,11 @@ glob-parent@^2.0.0: is-glob "^2.0.0" glob-parent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.0.0.tgz#c7bdeb5260732196c740de9274c08814056014bb" + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" dependencies: - is-glob "^3.0.0" + is-glob "^3.1.0" + path-dirname "^1.0.0" glob-stream@^5.3.2: version "5.3.5" @@ -3156,7 +3007,7 @@ glob@^6.0.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@~7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -3167,7 +3018,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@~7.0.3, glob@~7.0.6: +glob@~7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" dependencies: @@ -3185,13 +3036,9 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^8.3.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" - -globals@^9.0.0, globals@^9.2.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.12.0.tgz#992ce90828c3a55fa8f16fada177adb64664cf9d" +globals@^9.0.0, globals@^9.14.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" globby@^5.0.0: version "5.0.0" @@ -3205,12 +3052,12 @@ globby@^5.0.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.0.0.tgz#f22aebaacce02be492453e979c3ae9b6983f1c6c" + version "1.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" dependencies: - glob "~7.0.3" - lodash "~4.9.0" - minimatch "~3.0.0" + glob "~7.1.1" + lodash "~4.16.4" + minimatch "~3.0.2" glogg@^1.0.0: version "1.0.0" @@ -3219,21 +3066,21 @@ glogg@^1.0.0: sparkles "^1.0.0" google-auth-library@~0.9.7: - version "0.9.8" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.9.8.tgz#667acb8cc2242d8da83f7d308d76ac434ef53679" + version "0.9.10" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.9.10.tgz#4993dc07bb4834b8ca0350213a6873a32c6051b9" dependencies: async "~1.4.2" gtoken "^1.1.0" jws "~3.0.0" lodash.noop "~3.0.0" - request "~2.60.0" + request "~2.74.0" string-template "~0.2.0" google-p12-pem@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.0.tgz#fb2523bf84ff74676e84c72b4def50961e617d1c" + version "0.1.1" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.1.tgz#66ef8946ee97e8da37f1beb1d8ec5c3be2ba4539" dependencies: - node-forge "^0.6.33" + node-forge "^0.6.46" googleapis@^7.1.0: version "7.1.0" @@ -3247,12 +3094,11 @@ googleapis@^7.1.0: url "^0.11.0" got@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-5.6.0.tgz#bb1d7ee163b78082bbc8eb836f3f395004ea6fbf" + version "5.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" dependencies: create-error-class "^3.0.1" duplexer2 "^0.1.4" - is-plain-obj "^1.0.0" is-redirect "^1.0.0" is-retry-allowed "^1.0.0" is-stream "^1.0.0" @@ -3263,13 +3109,13 @@ got@^5.0.0: pinkie-promise "^2.0.0" read-all-stream "^3.0.0" readable-stream "^2.0.5" - timed-out "^2.0.0" - unzip-response "^1.0.0" + timed-out "^3.0.0" + unzip-response "^1.0.2" url-parse-lax "^1.0.0" -graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@~4.1.6, graceful-fs@4.X: - version "4.1.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.9.tgz#baacba37d19d11f9d146d3578bc99958c3787e29" +graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.6: + 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" @@ -3297,19 +3143,15 @@ gulp-rename@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" -gulp-sourcemaps@^1.5.2: - version "1.7.1" - resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.7.1.tgz#2a6aa5fb2d6315f56cdb750d9a90257d752e2fc2" +gulp-sourcemaps@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" dependencies: - acorn "4.X" - convert-source-map "1.X" - css "2.X" - detect-newline "2.X" - graceful-fs "4.X" - source-map "0.X" - strip-bom "2.X" - through2 "2.X" - vinyl "1.X" + convert-source-map "^1.1.1" + graceful-fs "^4.1.2" + strip-bom "^2.0.0" + through2 "^2.0.0" + vinyl "^1.0.0" gulp-util@^3.0.1: version "3.0.7" @@ -3341,8 +3183,8 @@ gulplog@^1.0.0: glogg "^1.0.0" handlebars@^4.0.1: - version "4.0.5" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.5.tgz#92c6ed6bb164110c50d4d8d0fbddc70806c6f8e7" + version "4.0.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -3350,15 +3192,6 @@ handlebars@^4.0.1: optionalDependencies: uglify-js "^2.6" -har-validator@^1.6.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-1.8.0.tgz#d83842b0eb4c435960aeb108a067a3aa94c0eeb2" - dependencies: - bluebird "^2.9.30" - chalk "^1.0.0" - commander "^2.8.1" - is-my-json-valid "^2.12.0" - har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" @@ -3421,7 +3254,7 @@ hasha@~2.2.0: is-stream "^1.0.1" pinkie-promise "^2.0.0" -hawk@~3.1.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: @@ -3495,36 +3328,21 @@ html-truncate@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.1.tgz#90a546b9429bec7aeb5d57a53547c317fbd6f5f3" -http-browserify@^1.3.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" - dependencies: - Base64 "~0.2.0" - inherits "~2.0.1" - http-errors@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.0.tgz#b1cb3d8260fd8e2386cad3189045943372d48211" + version "1.5.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" dependencies: - inherits "2.0.1" - setprototypeof "1.0.1" - statuses ">= 1.3.0 < 2" + inherits "2.0.3" + setprototypeof "1.0.2" + statuses ">= 1.3.1 < 2" http-proxy@^1.13.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.15.1.tgz#91a6088172e79bc0e821d5eb04ce702f32446393" + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" dependencies: eventemitter3 "1.x.x" requires-port "1.x.x" -http-signature@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.11.0.tgz#1796cf67a001ad5cd6849dca0991485f09089fe6" - dependencies: - asn1 "0.1.11" - assert-plus "^0.1.5" - ctype "0.5.3" - http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -3533,9 +3351,9 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.0.tgz#b3ffdfe734b2a3d4a9efd58e8654c91fce86eafd" +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" https-proxy-agent@^1.0.0: version "1.0.0" @@ -3552,11 +3370,15 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -husl@>=5.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/husl/-/husl-6.0.1.tgz#c6a9f2edea1fc24c00ccb565903bccf37cf3cc58" +husl@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/husl/-/husl-5.0.3.tgz#ee272aaff1bebe40df3588ed007b70de7e679788" + +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" -iconv-lite@~0.4.13, iconv-lite@0.4.13: +iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -3580,18 +3402,14 @@ image-size@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.0.tgz#be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651" -immutable@^3.7.6: - version "3.8.1" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" - -imports-loader@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.6.5.tgz#ae74653031d59e37b3c2fb2544ac61aeae3530a6" +imports-loader@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.0.tgz#468c04de8075941cfab28146c755c24cc1f36ccd" dependencies: - loader-utils "0.2.x" - source-map "0.1.x" + loader-utils "^0.2.16" + source-map "^0.5.6" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3622,13 +3440,13 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" inflight@^1.0.4, inflight@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.5.tgz#db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a" + 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.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@2: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -3680,8 +3498,8 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54" + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: loose-envify "^1.0.0" @@ -3694,8 +3512,8 @@ ipaddr.js@1.1.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" is-absolute-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.0.0.tgz#9c4b20b0e5c0cbef9a479a367ede6f991679f359" + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" is-absolute@^0.1.5: version "0.1.7" @@ -3745,9 +3563,9 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" -is-extglob@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.0.0.tgz#a9b92c1ae2d7a975ad307be0722049c7e4ea2f13" +is-extglob@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" is-finite@^1.0.0: version "1.0.2" @@ -3761,23 +3579,27 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" -is-glob@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.0.0.tgz#e433c222db9d77844084d72db1eff047845985c1" +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" dependencies: - is-extglob "^2.0.0" + is-extglob "^2.1.0" is-gzip@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" -is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.0, is-my-json-valid@^2.12.4: +is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" dependencies: @@ -3863,8 +3685,8 @@ is-stream@^1.0.0, is-stream@^1.0.1: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" is-svg@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.0.1.tgz#f93ab3bf1d6bbca30e9753cd3485b1300eebc013" + 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" @@ -3921,7 +3743,7 @@ isomorphic-fetch@^2.1.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isstream@~0.1.1, isstream@~0.1.2: +isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -3938,15 +3760,16 @@ istanbul-lib-coverage@^1.0.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2" istanbul-lib-instrument@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.1.3.tgz#66d5353d1f592b9e34d1cf9acda9c3f1ab509696" + version "1.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.0.tgz#19f0a973397454989b98330333063a5b56df0e58" dependencies: - babel-generator "^6.11.3" - babel-template "^6.9.0" - babel-traverse "^6.9.0" - babel-types "^6.10.2" - babylon "^6.8.1" + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" istanbul-lib-coverage "^1.0.0" + semver "^5.3.0" istanbul@^0.4.0, istanbul@0.4.5: version "0.4.5" @@ -3968,8 +3791,8 @@ istanbul@^0.4.0, istanbul@0.4.5: wordwrap "^1.0.0" jasmine-ajax@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.2.0.tgz#0a1600b7d3c503a3904f80679b867985a84e4756" + version "3.3.1" + resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz#f8cad9fd49dfd44f3cf798d36f4e857d125c75c5" jasmine-core@~2.4.0: version "2.4.1" @@ -4013,15 +3836,18 @@ js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -js-tokens@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.3.tgz#14e56eb68c8f1a92c43d59f5014ec29dc20f2ae1" - js-tokens@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" -js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@~3.6.1, js-yaml@3.6.1, js-yaml@3.x: +js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@3.x: + 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" + +js-yaml@~3.6.1, js-yaml@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: @@ -4064,7 +3890,7 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -4077,8 +3903,8 @@ json3@3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" json5@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.0.tgz#9b20715b026cbe3778fd769edccd822d8332a5b2" + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" jsonfile@^2.1.0: version "2.4.0" @@ -4103,19 +3929,20 @@ jsprim@^1.2.2: verror "1.3.6" jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.4.tgz#0257ed1cc4b1e65b39d7d9940f9fb4f20f7ba0a9" + version "1.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.5.tgz#9ba6297198d9f754594d62e59496ffb923778dd4" dependencies: acorn-jsx "^3.0.1" object-assign "^4.1.0" -jwa@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.3.tgz#fa9f2f005ff0c630e7c41526a31f37f79733cd6d" +jwa@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" dependencies: - base64url "~1.0.4" - buffer-equal-constant-time "^1.0.1" - ecdsa-sig-formatter "^1.0.0" + base64url "2.0.0" + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.9" + safe-buffer "^5.0.1" jwa@~1.0.0: version "1.0.2" @@ -4126,11 +3953,12 @@ jwa@~1.0.0: ecdsa-sig-formatter "^1.0.0" jws@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.3.tgz#b88f1b4581a2c5ee8813c06b3fdf90ea9b5c7e6c" + version "3.1.4" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" dependencies: - base64url "~1.0.4" - jwa "^1.1.2" + base64url "^2.0.0" + jwa "^1.1.4" + safe-buffer "^5.0.1" jws@~3.0.0: version "3.0.0" @@ -4172,9 +4000,9 @@ karma-jasmine-ajax@0.1.13: dependencies: jasmine-ajax "^3.0.0" -karma-jasmine@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.0.2.tgz#c0b3ab327bf207db60e17fa27db37cfdef5d8e6c" +karma-jasmine@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" karma-phantomjs-launcher@1.0.2: version "1.0.2" @@ -4241,14 +4069,16 @@ kew@~0.7.0: resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" kind-of@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" + version "3.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" dependencies: is-buffer "^1.0.2" klaw@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.0.tgz#8857bfbc1d824badf13d3d0241d8bbe46fb12f73" + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" latest-version@^2.0.0: version "2.0.0" @@ -4321,12 +4151,12 @@ loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^ object-assign "^4.0.1" lockfile@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.2.tgz#97e1990174f696cbe0a3acd58a43b84aa30c7c83" + version "1.0.3" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" -lodash-es@^4.2.1: - version "4.16.4" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.16.4.tgz#4dc3e2cf33a8c343028aa7f7e06d1c9697042599" +lodash-es@^4.2.0, lodash-es@^4.2.1: + version "4.17.2" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.2.tgz#59011b585166e613eb9dd5fc256b2cd1a30f3712" lodash._basecopy@^3.0.0: version "3.0.1" @@ -4428,6 +4258,10 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.mergewith@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" + lodash.noop@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c" @@ -4477,18 +4311,14 @@ lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0: - version "4.16.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.4.tgz#01ce306b9bad1319f2a5528674f88297aeb70127" - -lodash@~4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.9.0.tgz#4c20d742f03ce85dc700e0dd7ab9bcab85e6fc14" - -lodash@4.17.2: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1, lodash@4.17.2: version "4.17.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" +lodash@~4.16.4: + version "4.16.6" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" + log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" @@ -4505,10 +4335,10 @@ longest@^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: - version "1.2.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.2.0.tgz#69a65aad3de542cf4ee0f4fe74e8e33c709ccb0f" + version "1.3.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8" dependencies: - js-tokens "^1.0.1" + js-tokens "^2.0.0" loud-rejection@^1.0.0: version "1.6.0" @@ -4526,8 +4356,8 @@ lowercase-keys@^1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" lru-cache@^4.0.1, lru-cache@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.1.tgz#1343955edaf2e37d9b9e7ee7241e27c4b9fb72be" + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" dependencies: pseudomap "^1.0.1" yallist "^2.0.0" @@ -4577,6 +4407,13 @@ memory-fs@~0.3.0: errno "^0.1.3" readable-stream "^2.0.1" +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" + meow@^3.3.0, meow@^3.5.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -4606,8 +4443,8 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" merge-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.0.tgz#9cfd156fef35421e2b5403ce11dc6eb1962b026e" + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" dependencies: readable-stream "^2.0.1" @@ -4637,21 +4474,11 @@ mime-db@~1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" -mime-db@~1.24.0: - version "1.24.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c" - mime-db@~1.25.0: version "1.25.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" -mime-types@^2.1.11, mime-types@~2.1.11, mime-types@~2.1.2, mime-types@~2.1.7: - version "2.1.12" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729" - dependencies: - mime-db "~1.24.0" - -mime-types@^2.1.12: +mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: version "2.1.13" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" dependencies: @@ -4677,7 +4504,7 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.0, minimatch@~3.0.3, "minimatch@2 || 3": +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3, "minimatch@2 || 3": version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: @@ -4718,6 +4545,10 @@ 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" + msee@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/msee/-/msee-0.1.2.tgz#f2d1e20ef94b8cd45243f2d5c817e97143f0286d" @@ -4783,9 +4614,9 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@^0.6.33: - version "0.6.43" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.43.tgz#70c40ca7ed9f0f4aa35b424507ca9e45246bfe09" +node-forge@^0.6.46: + version "0.6.46" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.46.tgz#04a8a1c336eb72ef6f434ba7c854d608916c328d" node-gyp@^3.3.1, node-gyp@~3.4.0: version "3.4.0" @@ -4806,51 +4637,51 @@ node-gyp@^3.3.1, node-gyp@~3.4.0: tar "^2.0.0" which "1" -node-libs-browser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.6.0.tgz#244806d44d319e048bc8607b5cc4eaf9a29d2e3c" +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" + browserify-zlib "^0.1.4" buffer "^4.9.0" console-browserify "^1.1.0" - constants-browserify "0.0.1" - crypto-browserify "~3.2.6" + constants-browserify "^1.0.0" + crypto-browserify "3.3.0" domain-browser "^1.1.1" events "^1.0.0" - http-browserify "^1.3.2" - https-browserify "0.0.0" - os-browserify "~0.1.2" + 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 "^1.1.13" - stream-browserify "^1.0.0" - string_decoder "~0.10.25" - timers-browserify "^1.0.1" + 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.10.1" - util "~0.10.3" + url "^0.11.0" + util "^0.10.3" vm-browserify "0.0.4" node-pre-gyp@^0.6.29: - version "0.6.30" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.30.tgz#64d3073a6f573003717ccfe30c89023297babba1" + version "0.6.32" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" dependencies: - mkdirp "~0.5.0" - nopt "~3.0.1" - npmlog "4.x" - rc "~1.1.0" - request "2.x" - rimraf "~2.5.0" + mkdirp "~0.5.1" + nopt "~3.0.6" + npmlog "^4.0.1" + rc "~1.1.6" + request "^2.79.0" + rimraf "~2.5.4" semver "~5.3.0" - tar "~2.2.0" - tar-pack "~3.1.0" + tar "~2.2.1" + tar-pack "~3.3.0" -node-sass@3.13.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-3.13.0.tgz#d08b95bdebf40941571bd2c16a9334b980f8924f" +node-sass@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.1.1.tgz#dc3e27d25bd827b6276ea243be357c7c7cd07111" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -4861,6 +4692,7 @@ node-sass@3.13.0: 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" @@ -4868,12 +4700,13 @@ node-sass@3.13.0: npmlog "^4.0.0" request "^2.61.0" sass-graph "^2.1.1" + stdout-stream "^1.4.0" node-status-codes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" -node-uuid@~1.4.0, node-uuid@~1.4.7: +node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" @@ -4887,7 +4720,7 @@ nopt@~2.1.1: dependencies: abbrev "1" -nopt@~3.0.1, nopt@~3.0.6, "nopt@2 || 3", nopt@3.x: +nopt@~3.0.6, "nopt@2 || 3", nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: @@ -4915,8 +4748,8 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" normalize-url@^1.0.0, normalize-url@^1.4.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.6.1.tgz#a9f254fa065bbc2934461c0c09423815976155a2" + version "1.8.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.8.0.tgz#a9550b079aa3523c85d78df24eef1959fce359ab" dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" @@ -5062,13 +4895,13 @@ npm@^2.15.10: wrappy "~1.0.2" write-file-atomic "~1.1.4" -npmlog@^4.0.0, npmlog@4.x: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f" +npmlog@^4.0.0, npmlog@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" - gauge "~2.6.0" + gauge "~2.7.1" set-blocking "~2.0.0" "npmlog@~2.0.0 || ~3.1.0", "npmlog@0 || 1 || 2 || 3": @@ -5104,7 +4937,7 @@ 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" -oauth-sign@~0.8.0, oauth-sign@~0.8.1: +oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -5133,10 +4966,10 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" object.omit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.0.tgz#868597333d54e60662940bb458605dd6ae12fe94" + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" dependencies: - for-own "^0.1.3" + for-own "^0.1.4" is-extendable "^0.1.1" on-finished@~2.3.0: @@ -5194,9 +5027,9 @@ ordered-read-streams@^0.3.0: is-stream "^1.0.1" readable-stream "^2.0.1" -os-browserify@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" +os-browserify@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" os-homedir@^1.0.0: version "1.0.2" @@ -5213,8 +5046,8 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" osenv@^0.1.0, osenv@~0.1.3, osenv@0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217" + 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" @@ -5289,6 +5122,10 @@ path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -5329,17 +5166,17 @@ pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" -phantomjs-prebuilt@^2.1.13, phantomjs-prebuilt@^2.1.7: - version "2.1.13" - resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.13.tgz#66556ad9e965d893ca5a7dc9e763df7e8697f76d" +phantomjs-prebuilt@^2.1.14, phantomjs-prebuilt@^2.1.7: + version "2.1.14" + resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" dependencies: es6-promise "~4.0.3" extract-zip "~1.5.0" - fs-extra "~0.30.0" + fs-extra "~1.0.0" hasha "~2.2.0" kew "~0.7.0" progress "~1.1.8" - request "~2.74.0" + request "~2.79.0" request-progress "~2.0.1" which "~1.2.10" @@ -5390,8 +5227,8 @@ postcss-colormin@^2.1.8: postcss-value-parser "^3.2.3" postcss-convert-values@^2.3.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.4.1.tgz#45dce4d4e33b7d967b97a4d937f270ea98d2fe7a" + version "2.5.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.5.0.tgz#570aceb04b3061fb25f6f46bd0329e7ab6263c0b" dependencies: postcss "^5.0.11" postcss-value-parser "^3.1.2" @@ -5403,8 +5240,8 @@ postcss-discard-comments@^2.0.4: postcss "^5.0.14" postcss-discard-duplicates@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.1.tgz#5fae3f1a71df3e19cffb37309d1a7dba56c4589c" + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.2.tgz#02be520e91571ffb10738766a981d5770989bb32" dependencies: postcss "^5.0.4" @@ -5421,10 +5258,9 @@ postcss-discard-overridden@^0.1.1: postcss "^5.0.16" postcss-discard-unused@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.1.tgz#5d021f021a6ed6cec7310d4603794a75ddd53232" + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" dependencies: - flatten "1.0.2" postcss "^5.0.14" uniqs "^2.0.0" @@ -5450,8 +5286,8 @@ postcss-merge-longhand@^2.0.1: postcss "^5.0.4" postcss-merge-rules@^2.0.3: - version "2.0.10" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.0.10.tgz#54b360be804e7e69a5c7222635247b92a3569e9b" + version "2.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.0.11.tgz#c5d7c8de5056a7377aea0dff2fd83f92cafb9b8a" dependencies: postcss "^5.0.4" vendors "^1.0.0" @@ -5469,15 +5305,15 @@ postcss-minify-font-values@^1.0.2: postcss-value-parser "^3.0.2" postcss-minify-gradients@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.3.tgz#09d228148c942fa8126679de9ff7738b54919fe3" + 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.1.3" + postcss-value-parser "^3.3.0" postcss-minify-params@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.0.5.tgz#82d602643b8616a61fb3634d7ede0289836d67f9" + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.1.tgz#c899444d9e2ff8933018befac151fbfadf10e737" dependencies: alphanum-sort "^1.0.1" postcss "^5.0.2" @@ -5485,10 +5321,11 @@ postcss-minify-params@^1.0.4: uniqs "^2.0.0" postcss-minify-selectors@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.0.5.tgz#4e1f966fb49c95266804016ba9a3c6645bb601e0" + version "2.0.7" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.0.7.tgz#bfb9248fe14db33770f036572de6b4897c48d81c" dependencies: alphanum-sort "^1.0.2" + has "^1.0.1" postcss "^5.0.14" postcss-selector-parser "^2.0.0" @@ -5520,8 +5357,8 @@ postcss-modules-values@^1.1.0: postcss "^5.0.14" postcss-normalize-charset@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.0.tgz#2fbd30e12248c442981d31ea2484d46fd0628970" + 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" @@ -5542,8 +5379,8 @@ postcss-ordered-values@^2.1.0: postcss-value-parser "^3.0.1" postcss-reduce-idents@^2.2.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.3.0.tgz#a697b52953ed6825ffea404e26a4f105d8b8d569" + version "2.3.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.3.1.tgz#024e8e219f52773313408573db9645ba62d2d2fe" dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.2" @@ -5555,9 +5392,10 @@ postcss-reduce-initial@^1.0.0: postcss "^5.0.4" postcss-reduce-transforms@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.3.tgz#fc193e435a973c10f9801c74700a830f79643343" + 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" @@ -5568,16 +5406,16 @@ postcss-safe-parser@^1.0.1: postcss "^5.0.18" postcss-selector-parser@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.1.tgz#fdbf696103b12b0a64060e5610507f410491f7c8" + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.2.tgz#3d70f5adda130da51c7c0c2fc023f56b1374fe08" dependencies: flatten "^1.0.2" indexes-of "^1.0.1" uniq "^1.0.1" postcss-svgo@^2.1.1: - version "2.1.5" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.5.tgz#46fc0363f01bab6a36a9abb01c229fcc45363094" + 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" @@ -5592,20 +5430,21 @@ postcss-unique-selectors@^2.0.2: 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.1.3, postcss-value-parser@^3.2.3: +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.1.1" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.1.1.tgz#ea3fbe656c9738aa8729e2ee96ec2a46089b720f" + 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.18, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.2: - version "5.2.4" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.4.tgz#8eb4bee3e5c4e091585b116df32d8db24a535f21" +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.18, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.6: + version "5.2.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.6.tgz#a252cd67cd52585035f17e9ad12b35137a7bdd9e" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -5630,7 +5469,7 @@ pretty-bytes@^3.0.1: dependencies: number-is-nan "^1.0.0" -private@^0.1.6, private@~0.1.5: +private@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" @@ -5638,7 +5477,7 @@ process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" -process@^0.11.0, process@~0.11.0: +process@^0.11.0: version "0.11.9" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" @@ -5666,14 +5505,14 @@ proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -protractor@4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.11.tgz#fc4bf8d75deec8516b600f87ea5b95ecf537d059" +protractor@4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.14.tgz#efc4a877fac3a182a9dded26cd5869f4762fd172" dependencies: "@types/jasmine" "^2.5.36" "@types/node" "^6.0.46" "@types/q" "^0.0.32" - "@types/selenium-webdriver" "~2.53.31" + "@types/selenium-webdriver" "2.53.37" adm-zip "0.4.7" chalk "^1.1.3" glob "^7.0.3" @@ -5684,7 +5523,7 @@ protractor@4.0.11: saucelabs "~1.3.0" selenium-webdriver "2.53.3" source-map-support "~0.4.0" - webdriver-manager "^10.2.8" + webdriver-manager "^10.3.0" proxy-addr@~1.1.2: version "1.1.2" @@ -5720,7 +5559,7 @@ psi@2.0.4: sort-on "^1.2.2" update-notifier "^0.6.0" -punycode@^1.2.4: +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -5740,21 +5579,17 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@^6.1.0, qs@~6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" - -qs@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" +qs@^6.1.0, qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" qs@~6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.1.0.tgz#ec1d1626b24278d99f0fdf4549e524e24eceeb26" -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +qs@~6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" qs@6.2.0: version "6.2.0" @@ -5767,7 +5602,7 @@ query-string@^4.1.0, query-string@^4.2.2: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@~0.2.0: +querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -5776,8 +5611,8 @@ querystring@^0.2.0, querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" randomatic@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.5.tgz#5e9ef5f2d573c67bd2b8124ae90b5156e457840b" + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" dependencies: is-number "^2.0.2" kind-of "^3.0.2" @@ -5794,7 +5629,7 @@ raw-body@~2.1.7: iconv-lite "0.4.13" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.0: +rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" dependencies: @@ -5828,10 +5663,6 @@ react-dock@^0.2.1: lodash.debounce "^3.1.1" object-assign "^4.0.1" -"react-dom@^0.14.0 || ^15.0.0": - version "15.3.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f" - react-dom@15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.1.tgz#d54c913261aaedb17adc20410d029dcc18a1344a" @@ -5877,21 +5708,22 @@ react-pure-render@^1.0.2: resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" react-redux@^4.0.0: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.5.tgz#f509a2981be2252d10c629ef7c559347a4aec457" + version "4.4.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209" dependencies: hoist-non-react-statics "^1.0.3" invariant "^2.0.0" lodash "^4.2.0" loose-envify "^1.1.0" -react-redux@4.4.6: - version "4.4.6" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209" +react-redux@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.1.tgz#84a41bd4cdd180452bb6922bc79ad25bd5abb7c4" dependencies: hoist-non-react-statics "^1.0.3" invariant "^2.0.0" lodash "^4.2.0" + lodash-es "^4.2.0" loose-envify "^1.1.0" react-router@3.0.0: @@ -5969,18 +5801,9 @@ read@~1.0.1, read@~1.0.7, read@1: dependencies: mute-stream "~0.0.4" -readable-stream@^1.0.27-1, readable-stream@^1.1.13, readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@~2.1.4, readable-stream@~2.1.5, "readable-stream@1 || 2": - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" +readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2, "readable-stream@1 || 2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -5999,6 +5822,15 @@ readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2. isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@~2.0.0, readable-stream@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" @@ -6010,6 +5842,18 @@ readable-stream@~2.0.0, readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" +readable-stream@~2.1.4, readable-stream@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" @@ -6049,15 +5893,7 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redbox-react@^1.2.5: - version "1.3.1" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.1.tgz#02ea395f93442ac43e5363004d50a9cd1327ce41" - dependencies: - error-stack-parser "^1.3.6" - object-assign "^4.0.1" - react-dom "^0.14.0 || ^15.0.0" - -redbox-react@^1.3.3: +redbox-react@^1.2.5, redbox-react@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.3.tgz#63ec9c2cb9c620c46e2b9f8543b4898f1b787e41" dependencies: @@ -6086,10 +5922,10 @@ reduce-css-calc@^1.2.6: reduce-function-call "^1.0.1" reduce-function-call@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.1.tgz#fa02e126e695824263cab91d3a5b0fdc1dd27a9a" + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" dependencies: - balanced-match "~0.1.0" + balanced-match "^0.4.2" redux-devtools-dock-monitor@1.1.1: version "1.1.1" @@ -6101,8 +5937,8 @@ redux-devtools-dock-monitor@1.1.1: react-pure-render "^1.0.2" redux-devtools-instrument@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.3.2.tgz#47c0e5df5daf22bf2fbc267e779b150159c87b9c" + version "1.3.3" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.3.3.tgz#4a17c80cc23465646460b2da3ee438a4ac0b28ae" dependencies: lodash "^4.2.0" symbol-observable "^0.2.4" @@ -6141,12 +5977,20 @@ redux@^3.5.2, redux@3.6.0: symbol-observable "^1.0.2" regenerate@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.1.tgz#0300203a5d2fdcf89116dce84275d011f5903f33" + version "1.3.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + +regenerator-runtime@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" -regenerator-runtime@^0.9.5: - version "0.9.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz#403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc" +regenerator-transform@0.9.8: + version "0.9.8" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" regex-cache@^0.4.2: version "0.4.3" @@ -6172,8 +6016,8 @@ regexpu-core@^2.0.0: regjsparser "^0.1.4" registry-auth-token@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.0.1.tgz#c3ee5ec585bce29f88bf41629a3944c71ed53e25" + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" dependencies: rc "^1.1.6" @@ -6206,8 +6050,8 @@ repeat-string@^0.2.2: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" repeat-string@^1.5.2: - version "1.5.4" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.5.4.tgz#64ec0c91e0f4b475f90d5b643651e3e6e5b6c2d5" + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" repeating@^1.1.0: version "1.1.3" @@ -6231,18 +6075,17 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@2, request@2.75.0, request@2.x: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" +request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0, request@2: + 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" - bl "~1.1.2" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~2.0.0" + form-data "~2.1.1" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6250,24 +6093,25 @@ request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@2, r isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" - node-uuid "~1.4.7" oauth-sign "~0.8.1" - qs "~6.2.0" + qs "~6.3.0" stringstream "~0.0.4" tough-cookie "~2.3.0" tunnel-agent "~0.4.1" + uuid "^3.0.0" -request@^2.78.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@~2.72.0: + version "2.72.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" + bl "~1.1.2" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~2.1.1" + form-data "~1.0.0-rc3" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6275,40 +6119,16 @@ request@^2.78.0: isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" + node-uuid "~1.4.7" oauth-sign "~0.8.1" - qs "~6.3.0" + qs "~6.1.0" stringstream "~0.0.4" - tough-cookie "~2.3.0" + tough-cookie "~2.2.0" tunnel-agent "~0.4.1" - uuid "^3.0.0" - -request@~2.60.0: - version "2.60.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.60.0.tgz#498820957fcdded1d37749069610c85f61a29f2d" - dependencies: - aws-sign2 "~0.5.0" - bl "~1.0.0" - caseless "~0.11.0" - combined-stream "~1.0.1" - extend "~3.0.0" - forever-agent "~0.6.0" - form-data "~1.0.0-rc1" - har-validator "^1.6.1" - hawk "~3.1.0" - http-signature "~0.11.0" - isstream "~0.1.1" - json-stringify-safe "~5.0.0" - mime-types "~2.1.2" - node-uuid "~1.4.0" - oauth-sign "~0.8.0" - qs "~4.0.0" - stringstream "~0.0.4" - tough-cookie ">=0.12.0" - tunnel-agent "~0.4.0" -request@~2.72.0: - version "2.72.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" +request@~2.74.0: + version "2.74.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -6317,7 +6137,7 @@ request@~2.72.0: combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~1.0.0-rc3" + form-data "~1.0.0-rc4" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6327,14 +6147,14 @@ request@~2.72.0: mime-types "~2.1.7" node-uuid "~1.4.7" oauth-sign "~0.8.1" - qs "~6.1.0" + qs "~6.2.0" stringstream "~0.0.4" - tough-cookie "~2.2.0" + tough-cookie "~2.3.0" tunnel-agent "~0.4.1" -request@~2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" +request@2.75.0: + version "2.75.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -6343,7 +6163,7 @@ request@~2.74.0: combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~1.0.0-rc4" + form-data "~2.0.0" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6367,8 +6187,8 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" require-uncached@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.2.tgz#67dad3b733089e77030124678a459589faf6a7ec" + 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" @@ -6381,11 +6201,11 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve-url@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" +resolve@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" -resolve@^1.1.6, resolve@1.1.x: +resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -6397,8 +6217,8 @@ restore-cursor@^1.0.1: onetime "^1.0.0" retry@^0.10.0, retry@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.0.tgz#649e15ca408422d98318161935e7f7d652d435dd" + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" right-align@^0.1.1: version "0.1.3" @@ -6406,7 +6226,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@~2.5.0, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2: +rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -6434,6 +6254,10 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + safe-json-parse@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-2.0.0.tgz#6da43f2e4a864335773b1d2df0db2c1962a0beec" @@ -6446,9 +6270,9 @@ sass-graph@^2.1.1: lodash "^4.0.0" yargs "^4.7.1" -sass-loader@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.0.2.tgz#a616eb770366543e64f547c8630f39c4da75f15d" +sass-loader@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.1.0.tgz#fd8604c5bf90001b173bb27540e8f2f5ed64602b" dependencies: async "^2.0.1" loader-utils "^0.2.15" @@ -6541,9 +6365,13 @@ set-immediate-shim@^1.0.0, 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" -setprototypeof@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.1.tgz#52009b27888c4dc48f591949c0a8275834c1ca7e" +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.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" sha.js@2.2.6: version "2.2.6" @@ -6569,8 +6397,8 @@ sigmund@~1.0.0: resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" signal-exit@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" slash@^1.0.0: version "1.0.0" @@ -6665,30 +6493,17 @@ sorted-object@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" -source-list-map@^0.1.4, source-list-map@~0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.6.tgz#e1e6f94f0b40c4d28dcf8f5b8766e0e45636877f" - -source-map-resolve@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761" - dependencies: - atob "~1.1.0" - resolve-url "~0.2.1" - source-map-url "~0.3.0" - urix "~0.1.0" +source-list-map@^0.1.4, source-list-map@~0.1.0, source-list-map@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e" source-map-support@^0.4.2, source-map-support@~0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.3.tgz#693c8383d4389a4569486987c219744dfc601685" + version "0.4.6" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.6.tgz#32552aa64b458392a85eab3b0b5ee61527167aeb" dependencies: source-map "^0.5.3" -source-map-url@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" - -source-map@^0.1.38, source-map@^0.1.41, source-map@~0.1.38, source-map@0.1.x: +source-map@^0.1.41: version "0.1.43" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" dependencies: @@ -6700,7 +6515,7 @@ source-map@^0.4.4, source-map@~0.4.1, source-map@0.4.x: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3, source-map@0.X: +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -6761,16 +6576,22 @@ stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" -"statuses@>= 1.3.0 < 2", statuses@~1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.0.tgz#8e55758cb20e7682c1f4fce8dcab30bf01d1e07a" +"statuses@>= 1.3.1 < 2", statuses@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" -stream-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193" +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 "^1.0.27-1" + readable-stream "^2.0.2" stream-combiner@~0.0.4: version "0.0.4" @@ -6785,6 +6606,16 @@ stream-combiner2@^1.1.1: duplexer2 "~0.1.0" readable-stream "^2.0.2" +stream-http@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.5.0.tgz#585eee513217ed98fe199817e7313b6f772a6802" + dependencies: + builtin-status-codes "^2.0.0" + inherits "^2.0.1" + readable-stream "^2.1.0" + 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" @@ -6793,7 +6624,7 @@ 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_decoder@~0.10.25, string_decoder@~0.10.x: +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" @@ -6813,6 +6644,13 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -6834,7 +6672,7 @@ strip-bom-stream@^1.0.0: first-chunk-stream "^1.0.0" strip-bom "^2.0.0" -strip-bom@^2.0.0, strip-bom@2.X: +strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: @@ -6887,9 +6725,9 @@ sum-up@^1.0.1: dependencies: chalk "^1.0.0" -superagent@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.1.0.tgz#e05a03b630cd7b0a0e17c26543977fd4a35c3296" +superagent@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.3.1.tgz#b171b974f0a76da65e1f00430c8cb7a8b52a404c" dependencies: component-emitter "^1.2.0" cookiejar "^2.0.6" @@ -6902,6 +6740,10 @@ superagent@3.1.0: qs "^6.1.0" readable-stream "^2.0.5" +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -6929,27 +6771,27 @@ symbol-observable@^0.2.4: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" symbol-observable@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.3.tgz#0fdb005e84f346a899d492beba23068b32d1525a" + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" table@^3.7.8: - version "3.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.0.tgz#252166c7f3286684a9d561b0f3a8929caf3a997b" + 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 "^1.0.1" + 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" -tar-pack@~3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.1.4.tgz#bc8cf9a22f5832739f12f3910dac1eb97b49708c" +tar-pack@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" dependencies: debug "~2.2.0" fstream "~1.0.10" @@ -6969,7 +6811,7 @@ tar-stream@^1.1.1: readable-stream "^2.0.0" xtend "^4.0.0" -tar@^2.0.0, tar@~2.2.0, tar@~2.2.1: +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: @@ -7003,26 +6845,26 @@ through2@^0.6.0, through2@^0.6.1: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through2@^2.0.0, through2@~2.0.0, through2@2.X: - version "2.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" +through2@^2.0.0, through2@~2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" dependencies: - readable-stream "~2.0.0" - xtend "~4.0.0" + readable-stream "^2.1.5" + xtend "~4.0.1" time-stamp@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" -timed-out@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" +timed-out@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.0.tgz#43b98b14bb712c9161c28f4dc1f3068d67a04ec2" -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" +timers-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" dependencies: - process "~0.11.0" + setimmediate "^1.0.4" tmp@0.0.24: version "0.0.24" @@ -7044,18 +6886,24 @@ 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.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -tough-cookie@>=0.12.0, tough-cookie@~2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.1.tgz#99c77dfbb7d804249e8a299d4cb0fd81fef083fd" - tough-cookie@~2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7" +tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -7067,20 +6915,20 @@ trim-repeated@^1.0.0: escape-string-regexp "^1.0.2" tryit@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.2.tgz#c196b0073e6b1c595d93c9c830855b7acc32a453" + version "1.0.3" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 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.4.0, tunnel-agent@~0.4.0, tunnel-agent@~0.4.1: +tunnel-agent@^0.4.0, 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.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" + 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" @@ -7089,32 +6937,23 @@ type-check@~0.3.2: prelude-ls "~1.1.2" type-is@~1.6.13: - version "1.6.13" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.13.tgz#6e83ba7bc30cd33a7bb0b7fb00737a2085bf9d08" + version "1.6.14" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" dependencies: media-typer "0.3.0" - mime-types "~2.1.11" + mime-types "~2.1.13" -typedarray@~0.0.5: +typedarray@^0.0.6, typedarray@~0.0.5: 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.10" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.10.tgz#917559ddcce07cbc09ece7d80495e4c268f4ef9f" + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@^2.6, uglify-js@2.7.x: - version "2.7.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.3.tgz#39b3a7329b89f5ec507e344c6e22568698ef4868" - dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" - -uglify-js@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.4.tgz#a295a0de12b6a650c031c40deb0dc40b14568bd2" +uglify-js@^2.6, uglify-js@~2.7.3, uglify-js@2.7.x: + 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" @@ -7162,9 +7001,9 @@ unpipe@~1.0.0, unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" -unzip-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.1.tgz#4a73959f2989470fa503791cefb54e1dbbc68412" +unzip-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" update-notifier@^0.6.0: version "0.6.3" @@ -7181,10 +7020,6 @@ upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" -urix@^0.1.0, urix@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - url-join@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" @@ -7209,13 +7044,6 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -url@~0.10.1: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - 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" @@ -7240,7 +7068,7 @@ util-extend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" -util@~0.10.3, util@0.10.3: +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: @@ -7297,13 +7125,13 @@ vinyl-assign@^1.0.1: readable-stream "^2.0.0" vinyl-fs@^2.2.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.3.tgz#3d97e562ebfdd4b66921dea70626b84bde9d2d07" + version "2.4.4" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239" dependencies: duplexify "^3.2.0" glob-stream "^5.3.2" graceful-fs "^4.0.0" - gulp-sourcemaps "^1.5.2" + gulp-sourcemaps "1.6.0" is-valid-glob "^0.3.0" lazystream "^1.0.0" lodash.isequal "^4.0.0" @@ -7333,7 +7161,7 @@ vinyl@^0.5.0: clone-stats "^0.0.1" replace-ext "0.0.1" -vinyl@^1.0.0, vinyl@1.X: +vinyl@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" dependencies: @@ -7377,9 +7205,9 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -webdriver-manager@^10.2.8: - version "10.2.10" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.2.10.tgz#e81d869375dd9395e1a88d7342bbc759b8d654f3" +webdriver-manager@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.3.0.tgz#99314588a0b1dbe688c441d74288c6cb1875fa8b" dependencies: adm-zip "^0.4.7" chalk "^1.1.1" @@ -7392,24 +7220,18 @@ webdriver-manager@^10.2.8: rimraf "^2.5.2" semver "^5.3.0" -webpack-core@^0.4.8: - version "0.4.8" - resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.4.8.tgz#07fc55aba81d17dba8cae5a43d6bd69236f8b5f8" - dependencies: - source-map "~0.1.38" - -webpack-core@~0.6.0: - version "0.6.8" - resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.8.tgz#edf9135de00a6a3c26dd0f14b208af0aa4af8d0a" +webpack-core@^0.6.9, 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.0" + source-list-map "~0.1.7" source-map "~0.4.1" -webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.8.4.tgz#e8765c9122887ce9e3abd4cc9c3eb31b61e0948d" +webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.9.0.tgz#a1c67a3dfd8a5c5d62740aa0babe61758b4c84aa" dependencies: - memory-fs "~0.3.0" + memory-fs "~0.4.1" mime "^1.3.4" path-is-absolute "^1.0.0" range-parser "^1.0.3" @@ -7424,15 +7246,15 @@ webpack-hot-middleware@^2.13.2: strip-ansi "^3.0.0" webpack-sources@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.2.tgz#057a3f3255f8ba561b901d9150589aa103a57e65" + version "0.1.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.3.tgz#15ce2fb79d0a1da727444ba7c757bf164294f310" dependencies: source-list-map "~0.1.0" source-map "~0.5.3" -webpack@1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.3.tgz#e79c46fe5a37c5ca70084ba0894c595cdcb42815" +webpack@1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823" dependencies: acorn "^3.0.0" async "^1.3.0" @@ -7442,17 +7264,17 @@ webpack@1.13.3: loader-utils "^0.2.11" memory-fs "~0.3.0" mkdirp "~0.5.0" - node-libs-browser "^0.6.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.0" + webpack-core "~0.6.9" whatwg-fetch@>=0.10.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e" + version "2.0.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.1.tgz#078b9461bbe91cea73cbce8bb122a05f9e92b772" whet.extend@~0.9.9: version "0.9.9" @@ -7463,8 +7285,8 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" which@^1.1.1, which@^1.2.1, which@^1.2.9, which@~1.2.10, which@~1.2.11, which@1: - version "1.2.11" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.11.tgz#c8b2eeea6b8c1659fa7c1dd4fdaabe9533dc5e8b" + version "1.2.12" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: isexe "^1.1.1" @@ -7501,10 +7323,11 @@ wordwrap@0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" wrap-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.0.0.tgz#7d30f8f873f9a5bbc3a64dabc8d177e071ae426f" + 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" wrap-fn@^0.1.0: version "0.1.5" @@ -7577,7 +7400,7 @@ xmlhttprequest-ssl@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67" -xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0: +xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -7631,8 +7454,8 @@ yargs@~3.10.0: window-size "0.1.0" yauzl@^2.2.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.6.0.tgz#40894d4587bb125500d05df45471cd5e114a76f9" + version "2.7.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.7.0.tgz#e21d847868b496fc29eaec23ee87fdd33e9b2bce" dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.0.1" From 852adc318716325fd988e344c551c053ff2d8d8d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 24 Dec 2016 09:00:34 -0700 Subject: [PATCH 242/452] Allow spacing in objects --- .eslintrc.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index 3b650f6..8a414a7 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -34,3 +34,5 @@ rules: - error - devDependencies: true padded-blocks: false + key-spacing: + mode: minimum From e6233e8278bc1a052f731b40a527ad2bd8a39deb Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 24 Dec 2016 09:30:11 -0700 Subject: [PATCH 243/452] Adds __DEV__ to eslint --- .eslintrc.yml | 1 + client/js/libs/api.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 8a414a7..5dab736 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -21,6 +21,7 @@ globals: spyOn: false jasmine: false module: false + __DEV__: false rules: linebreak-style: - error diff --git a/client/js/libs/api.js b/client/js/libs/api.js index c65f130..c0c5022 100644 --- a/client/js/libs/api.js +++ b/client/js/libs/api.js @@ -1,4 +1,4 @@ -import _ from 'lodash'; +import _ from 'lodash'; import Request from 'superagent'; import NetworkConstants from '../constants/network'; From 9e33d10bc56c82804d684a38d9e008d16fbdb167 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 9 Jan 2017 17:01:12 -0700 Subject: [PATCH 244/452] Change requirements in eslintrc.yml --- .eslintrc.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 5dab736..1304200 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -21,7 +21,7 @@ globals: spyOn: false jasmine: false module: false - __DEV__: false + __DEV__: false rules: linebreak-style: - error @@ -34,6 +34,7 @@ rules: import/no-extraneous-dependencies: - error - devDependencies: true - padded-blocks: false + padded-blocks: 0 key-spacing: - mode: minimum + - 2 + - mode: minimum From 8b3e842698c92661bfb3db58dc9f3e3d1cce6d27 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 9 Jan 2017 17:01:43 -0700 Subject: [PATCH 245/452] Use older version of aslant jsx-a11y --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 0734ff5..9e7f04b 100644 --- a/client/package.json +++ b/client/package.json @@ -42,7 +42,7 @@ "eslint-config-airbnb": "^13.0.0", "eslint-plugin-babel": "^4.0.0", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jsx-a11y": "3.0.2", + "eslint-plugin-jsx-a11y": "2.2.3", "eslint-plugin-react": "^6.8.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", From 6acf5940bfd3037f3ef5d707a0f7b9b988406abf Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 9 Jan 2017 17:04:05 -0700 Subject: [PATCH 246/452] Updates js packages --- client/package.json | 33 ++--- client/yarn.lock | 285 ++++++++++++++++++++++++++++---------------- 2 files changed, 198 insertions(+), 120 deletions(-) diff --git a/client/package.json b/client/package.json index 9e7f04b..662fc95 100644 --- a/client/package.json +++ b/client/package.json @@ -7,9 +7,10 @@ "babel-polyfill": "^6.20.0", "babel-runtime": "^6.20.0", "es6-promise": "^4.0.5", - "lodash": "4.17.2", - "react": "15.4.1", - "react-dom": "15.4.1", + "lodash": "4.17.4", + "postcss-loader": "^1.2.1", + "react": "15.4.2", + "react": "15.4.2", "react-proxy-loader": "0.3.4", "react-redux": "5.0.1", "react-router": "3.0.0", @@ -35,15 +36,15 @@ "chunk-manifest-webpack-plugin": "1.0.0", "coveralls": "^2.11.15", "css-loader": "0.26.1", - "dotenv": "2.0.0", + "dotenv": "4.0.0", "ecstatic": "2.1.0", "ejs": "^2.5.5", - "eslint": "^3.12.2", - "eslint-config-airbnb": "^13.0.0", + "eslint": "^3.13.1", + "eslint-config-airbnb": "^14.0.0", "eslint-plugin-babel": "^4.0.0", "eslint-plugin-import": "^2.2.0", "eslint-plugin-jsx-a11y": "2.2.3", - "eslint-plugin-react": "^6.8.0", + "eslint-plugin-react": "^6.9.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.14.0", @@ -55,7 +56,7 @@ "html-truncate": "^1.2.1", "imports-loader": "0.7.0", "istanbul": "0.4.5", - "istanbul-instrumenter-loader": "1.1.0", + "istanbul-instrumenter-loader": "1.2.0", "jasmine": "^2.5.2", "jasmine-core": "2.5.2", "karma": "1.3.0", @@ -68,29 +69,29 @@ "karma-phantomjs-launcher": "1.0.2", "karma-sourcemap-loader": "0.3.7", "karma-spec-reporter": "0.0.26", - "karma-webpack": "1.8.0", - "less": "2.7.1", + "karma-webpack": "1.8.1", + "less": "2.7.2", "less-loader": "2.2.3", "marked": "^0.3.6", "minimist": "1.2.0", - "node-sass": "4.1.1", + "node-sass": "4.2.0", "node-watch": "^0.4.1", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", "phantomjs-prebuilt": "^2.1.14", "protractor": "4.0.14", "psi": "2.0.4", - "react-addons-test-utils": "^15.4.1", - "react-hot-loader": "^3.0.0-beta.6", + "react-addons-test-utils": "^15.4.2", + "react-hot-loader": "^1.3.1", "redbox-react": "^1.3.3", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", - "redux-devtools-log-monitor": "1.1.1", - "sass-loader": "4.1.0", + "redux-devtools-log-monitor": "1.2.0", + "sass-loader": "4.1.1", "style-loader": "0.13.1", "url-loader": "0.5.7", "webpack": "1.14.0", "webpack-dev-middleware": "^1.9.0", - "webpack-hot-middleware": "^2.13.2" + "webpack-hot-middleware": "^2.15.0" } } diff --git a/client/yarn.lock b/client/yarn.lock index 1067d72..c34b557 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -106,7 +106,7 @@ ansi-html@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" -ansi-regex@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" @@ -223,6 +223,13 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +array.prototype.find@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.1.tgz#1557f888df6c57e4d1256f20852d687a25b51fde" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.0" + arraybuffer.slice@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" @@ -1009,7 +1016,7 @@ babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtim core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.7.0, babel-template@^6.8.0: +babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.8.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" dependencies: @@ -1662,7 +1669,7 @@ content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0, convert-source-map@^1.1.1: +convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" @@ -1690,6 +1697,17 @@ 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" +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82" + dependencies: + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" + coveralls@^2.11.15: version "2.11.15" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" @@ -1948,6 +1966,13 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +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" @@ -2019,10 +2044,6 @@ dom-serialize@^2.2.0: extend "^3.0.0" void-elements "^2.0.0" -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.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" @@ -2039,9 +2060,9 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dotenv@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" +dotenv@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" download@^4.4.1: version "4.4.3" @@ -2237,6 +2258,23 @@ error@^4.2.0: string-template "~0.2.0" xtend "~4.0.0" +es-abstract@^1.5.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + is-callable "^1.1.3" + is-regex "^1.0.3" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: version "0.10.12" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" @@ -2325,15 +2363,15 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-airbnb-base@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz#f17d4e52992c1d45d1b7713efbcd5ecd0e7e0506" +eslint-config-airbnb-base@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.0.1.tgz#5401dba284c6b7d7c8fb1c2ee19aba018f9dfa21" -eslint-config-airbnb@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-13.0.0.tgz#688d15d3c276c0c753ae538c92a44397d76ae46e" +eslint-config-airbnb@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-14.0.0.tgz#bfd87a71102ba3ee19c3733357000b3d5e39790f" dependencies: - eslint-config-airbnb-base "^10.0.0" + eslint-config-airbnb-base "^11.0.1" eslint-import-resolver-node@^0.2.0: version "0.2.3" @@ -2369,24 +2407,25 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.2.tgz#9f0eabcafde3d2a2600d96a66adb90d099e841fe" +eslint-plugin-jsx-a11y@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz#4e35cb71b8a7db702ac415c806eb8e8d9ea6c65d" dependencies: damerau-levenshtein "^1.0.0" jsx-ast-utils "^1.0.0" object-assign "^4.0.1" -eslint-plugin-react@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.8.0.tgz#741ab5438a094532e5ce1bbb935d6832356f492d" +eslint-plugin-react@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz#54c2e9906b76f9d10142030bdc34e9d6840a0bb2" dependencies: + array.prototype.find "^2.0.1" doctrine "^1.2.2" jsx-ast-utils "^1.3.4" -eslint@^3.12.2: - version "3.12.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.12.2.tgz#6be5a9aa29658252abd7f91e9132bab1f26f3c34" +eslint@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.13.1.tgz#564d2646b5efded85df96985332edd91a23bff25" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -2418,7 +2457,7 @@ eslint@^3.12.2: require-uncached "^1.0.2" shelljs "^0.7.5" strip-bom "^3.0.0" - strip-json-comments "~1.0.1" + strip-json-comments "~2.0.1" table "^3.7.8" text-table "~0.2.0" user-home "^2.0.0" @@ -2614,7 +2653,7 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" -fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: +fbjs@^0.8.4, fbjs@^0.8.6: version "0.8.8" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.8.tgz#02f1b6e0ea0d46c24e0b51a2d24df069563a5ad6" dependencies: @@ -2738,6 +2777,10 @@ for-own@^0.1.4: dependencies: for-in "^0.1.5" +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" @@ -2854,7 +2897,7 @@ fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2: +function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" @@ -3029,13 +3072,6 @@ glob@~7.0.6: once "^1.3.0" path-is-absolute "^1.0.0" -global@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df" - dependencies: - min-document "^2.19.0" - process "~0.5.1" - globals@^9.0.0, globals@^9.14.0: version "9.14.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" @@ -3409,7 +3445,7 @@ imports-loader@0.7.0: loader-utils "^0.2.16" source-map "^0.5.6" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3545,6 +3581,14 @@ is-bzip2@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -3666,6 +3710,10 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" +is-regex@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" + is-relative@^0.1.0: version "0.1.3" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82" @@ -3690,6 +3738,10 @@ is-svg@^2.0.0: 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-tar@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d" @@ -3747,10 +3799,11 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-instrumenter-loader@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.1.0.tgz#0384c08d8d7c9cb5cbb3282467d758087f9c059d" +istanbul-instrumenter-loader@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.2.0.tgz#bef469049b81b23581d0d4db37a271206033cc52" dependencies: + convert-source-map "^1.3.0" istanbul-lib-instrument "^1.1.3" loader-utils "^0.2.16" object-assign "^4.1.0" @@ -3840,7 +3893,7 @@ js-tokens@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" -js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@3.x: +js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@3.x: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" dependencies: @@ -4023,9 +4076,9 @@ karma-spec-reporter@0.0.26: dependencies: colors "~0.6.0" -karma-webpack@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-1.8.0.tgz#340c7999eb3745b47becab47d0d304dac2c55257" +karma-webpack@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-1.8.1.tgz#39d5fd2edeea3cc3ef5b405989b37d5b0e6a3b4e" dependencies: async "~0.9.0" loader-utils "^0.2.5" @@ -4112,9 +4165,9 @@ less-loader@2.2.3: dependencies: loader-utils "^0.2.5" -less@2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/less/-/less-2.7.1.tgz#6cbfea22b3b830304e9a5fb371d54fa480c9d7cf" +less@2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/less/-/less-2.7.2.tgz#368d6cc73e1fb03981183280918743c5dcf9b3df" optionalDependencies: errno "^0.1.1" graceful-fs "^4.1.2" @@ -4122,6 +4175,7 @@ less@2.7.1: mime "^1.2.11" mkdirp "^0.5.0" promise "^7.1.1" + request "^2.72.0" source-map "^0.5.3" levn@^0.3.0, levn@~0.3.0: @@ -4311,7 +4365,7 @@ lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1, lodash@4.17.2: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1: version "4.17.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" @@ -4319,6 +4373,10 @@ lodash@~4.16.4: version "4.16.6" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" +lodash@4.17.4: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" @@ -4498,12 +4556,6 @@ mime@1.2.x: version "1.2.11" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - dependencies: - dom-walk "^0.1.0" - minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3, "minimatch@2 || 3": version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -4679,9 +4731,9 @@ node-pre-gyp@^0.6.29: tar "~2.2.1" tar-pack "~3.3.0" -node-sass@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.1.1.tgz#dc3e27d25bd827b6276ea243be357c7c7cd07111" +node-sass@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.2.0.tgz#ef3e686c119118e01b0a3c7345821a0d7400acf2" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -4961,6 +5013,10 @@ 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.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" @@ -5031,7 +5087,7 @@ os-browserify@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -5271,6 +5327,38 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" +postcss-load-config@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.0.0.tgz#1399f60dcd6bd9c3124b2eb22960f77f9dc08b3d" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.0.2" + postcss-load-plugins "^2.0.0" + +postcss-load-options@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.0.2.tgz#b99eb5759a588f4b2dd8b6471c6985f72060e7b0" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.1.0.tgz#dbb6f46271df8d16e19b5d691ebda5175ce424a0" + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + +postcss-loader: + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.2.1.tgz#8809ab184a9f903a01f660385f2e296ff563d22c" + dependencies: + loader-utils "^0.2.16" + object-assign "^4.1.0" + postcss "^5.2.6" + postcss-load-config "^1.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" @@ -5481,10 +5569,6 @@ process@^0.11.0: version "0.11.9" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - progress@^1.1.8, progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" @@ -5638,9 +5722,12 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.6: minimist "^1.2.0" strip-json-comments "~1.0.4" -react-addons-test-utils@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.1.tgz#1e4caab151bf27cce26df5f9cb714f4fd8359ae1" +react-addons-test-utils@^15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" + dependencies: + fbjs "^0.8.4" + object-assign "^4.1.0" react-base16-styling@^0.4.1: version "0.4.6" @@ -5652,10 +5739,6 @@ react-base16-styling@^0.4.1: lodash.flow "^3.3.0" pure-color "^1.2.0" -react-deep-force-update@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" - react-dock@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/react-dock/-/react-dock-0.2.3.tgz#a25461564f3cf64ab5b7098e7546036066a9c0e2" @@ -5663,23 +5746,15 @@ react-dock@^0.2.1: lodash.debounce "^3.1.1" object-assign "^4.0.1" -react-dom@15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.1.tgz#d54c913261aaedb17adc20410d029dcc18a1344a" - dependencies: - fbjs "^0.8.1" - loose-envify "^1.1.0" - object-assign "^4.1.0" +react-hot-api@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/react-hot-api/-/react-hot-api-0.4.7.tgz#a7e22a56d252e11abd9366b61264cf4492c58171" -react-hot-loader@^3.0.0-beta.6: - version "3.0.0-beta.6" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4" +react-hot-loader@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-1.3.1.tgz#c95647ae78b73dfceff6ec71ffcb04182ff6daf9" dependencies: - babel-template "^6.7.0" - global "^4.3.0" - react-deep-force-update "^2.0.1" - react-proxy "^3.0.0-alpha.0" - redbox-react "^1.2.5" + react-hot-api "^0.4.5" source-map "^0.4.4" react-json-tree@^0.10.0: @@ -5697,12 +5772,6 @@ react-proxy-loader@0.3.4: dependencies: loader-utils "~0.2.6" -react-proxy@^3.0.0-alpha.0: - version "3.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" - dependencies: - lodash "^4.6.1" - react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" @@ -5742,9 +5811,9 @@ react-tap-event-plugin@2.0.1: dependencies: fbjs "^0.8.6" -react@15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/react/-/react-15.4.1.tgz#498e918602677a3983cd0fd206dfe700389a0dd6" +react@15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef" dependencies: fbjs "^0.8.4" loose-envify "^1.1.0" @@ -5893,7 +5962,7 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redbox-react@^1.2.5, redbox-react@^1.3.3: +redbox-react@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.3.tgz#63ec9c2cb9c620c46e2b9f8543b4898f1b787e41" dependencies: @@ -5943,9 +6012,9 @@ redux-devtools-instrument@^1.0.1: lodash "^4.2.0" symbol-observable "^0.2.4" -redux-devtools-log-monitor@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.1.1.tgz#6d6c731e239934e4306765c256d9e1c1efd72e3c" +redux-devtools-log-monitor@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.2.0.tgz#136a202f999c659a13fbb5c50793106e80722311" dependencies: lodash.debounce "^4.0.4" react-json-tree "^0.10.0" @@ -6182,6 +6251,10 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + 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" @@ -6270,9 +6343,9 @@ sass-graph@^2.1.1: lodash "^4.0.0" yargs "^4.7.1" -sass-loader@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.1.0.tgz#fd8604c5bf90001b173bb27540e8f2f5ed64602b" +sass-loader@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.1.1.tgz#79ef9468cf0bf646c29529e1f2cba6bd6e51c7bc" dependencies: async "^2.0.1" loader-utils "^0.2.15" @@ -6699,10 +6772,14 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-json-comments@~1.0.1, strip-json-comments@~1.0.4: +strip-json-comments@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + strip-outer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.0.tgz#aac0ba60d2e90c5d4f275fd8869fd9a2d310ffb8" @@ -7236,9 +7313,9 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.9.0: path-is-absolute "^1.0.0" range-parser "^1.0.3" -webpack-hot-middleware@^2.13.2: - version "2.13.2" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.13.2.tgz#6500b15e6d4f1a9590f8df708183f4d2ac2c3e9e" +webpack-hot-middleware@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.15.0.tgz#71995af7c0025f109df482f86f1e10379526d026" dependencies: ansi-html "0.0.6" html-entities "^1.2.0" From edf934d3ecf40c66ec0c04e85e3862102b27dac4 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 9 Jan 2017 17:14:55 -0700 Subject: [PATCH 247/452] Use beta hot loader --- client/package.json | 2 +- client/yarn.lock | 59 ++++++++++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/client/package.json b/client/package.json index 662fc95..bbef77b 100644 --- a/client/package.json +++ b/client/package.json @@ -82,7 +82,7 @@ "protractor": "4.0.14", "psi": "2.0.4", "react-addons-test-utils": "^15.4.2", - "react-hot-loader": "^1.3.1", + "react-hot-loader": "^3.0.0-beta.6", "redbox-react": "^1.3.3", "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", diff --git a/client/yarn.lock b/client/yarn.lock index c34b557..76bddf3 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1016,7 +1016,7 @@ babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtim core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.8.0: +babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.7.0, babel-template@^6.8.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" dependencies: @@ -2044,6 +2044,10 @@ dom-serialize@^2.2.0: extend "^3.0.0" void-elements "^2.0.0" +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.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" @@ -3072,6 +3076,13 @@ glob@~7.0.6: once "^1.3.0" path-is-absolute "^1.0.0" +global@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + globals@^9.0.0, globals@^9.14.0: version "9.14.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" @@ -4369,14 +4380,14 @@ lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, loda version "4.17.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" +lodash@^4.6.1, lodash@4.17.4: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + lodash@~4.16.4: version "4.16.6" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" -lodash@4.17.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" @@ -4556,6 +4567,12 @@ mime@1.2.x: version "1.2.11" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3, "minimatch@2 || 3": version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -5569,6 +5586,10 @@ process@^0.11.0: version "0.11.9" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + progress@^1.1.8, progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" @@ -5739,6 +5760,10 @@ react-base16-styling@^0.4.1: lodash.flow "^3.3.0" pure-color "^1.2.0" +react-deep-force-update@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" + react-dock@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/react-dock/-/react-dock-0.2.3.tgz#a25461564f3cf64ab5b7098e7546036066a9c0e2" @@ -5746,15 +5771,15 @@ react-dock@^0.2.1: lodash.debounce "^3.1.1" object-assign "^4.0.1" -react-hot-api@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/react-hot-api/-/react-hot-api-0.4.7.tgz#a7e22a56d252e11abd9366b61264cf4492c58171" - -react-hot-loader@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-1.3.1.tgz#c95647ae78b73dfceff6ec71ffcb04182ff6daf9" +react-hot-loader@^3.0.0-beta.6: + version "3.0.0-beta.6" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4" dependencies: - react-hot-api "^0.4.5" + babel-template "^6.7.0" + global "^4.3.0" + react-deep-force-update "^2.0.1" + react-proxy "^3.0.0-alpha.0" + redbox-react "^1.2.5" source-map "^0.4.4" react-json-tree@^0.10.0: @@ -5772,6 +5797,12 @@ react-proxy-loader@0.3.4: dependencies: loader-utils "~0.2.6" +react-proxy@^3.0.0-alpha.0: + version "3.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" + dependencies: + lodash "^4.6.1" + react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" @@ -5962,7 +5993,7 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redbox-react@^1.3.3: +redbox-react@^1.2.5, redbox-react@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.3.tgz#63ec9c2cb9c620c46e2b9f8543b4898f1b787e41" dependencies: From 556f60bbbbbfe38f1504716ea3826952c95c389d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 11 Jan 2017 20:51:52 -0700 Subject: [PATCH 248/452] Fixes failing spec. Formats code for eslint. --- .eslintrc.yml | 19 +- .nvmrc | 2 +- client/build.js | 5 +- client/config/webpack.config.js | 164 ++-- client/js/actions/jwt.js | 6 +- client/js/app.jsx | 16 +- .../js/components/common/not_found.spec.jsx | 6 +- client/js/components/home.spec.jsx | 23 + client/js/components/layout/index.spec.jsx | 8 +- client/js/constants/error.js | 8 +- client/js/constants/network.js | 10 +- client/js/constants/wrapper.js | 20 +- client/js/constants/wrapper.spec.js | 24 + client/js/dev/dev_tools.jsx | 6 +- client/js/libs/api.spec.js | 4 +- client/js/libs/assets.spec.js | 2 +- client/js/middleware/api.js | 14 +- client/js/middleware/api.spec.js | 4 +- client/js/reducers/index.js | 6 +- client/js/reducers/jwt.spec.js | 6 +- client/js/routes.jsx | 3 +- client/js/store/configure_store.js | 8 +- client/js/store/configure_store.spec.js | 4 +- client/karma.conf.js | 4 +- client/package.json | 4 +- client/specs_support/spec_helper.js | 4 +- client/tools/build/content.js | 67 +- client/webpack.hot.js | 2 +- client/yarn.lock | 836 ++++++++---------- 29 files changed, 638 insertions(+), 647 deletions(-) create mode 100644 client/js/components/home.spec.jsx create mode 100644 client/js/constants/wrapper.spec.js diff --git a/.eslintrc.yml b/.eslintrc.yml index 1304200..4d9f4eb 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -27,7 +27,13 @@ rules: - error - unix import/no-unresolved: 0 - no-multi-spaces: 0 + no-multi-spaces: [1, { + "exceptions": { + "VariableDeclaration": true, + "ImportDeclaration": true, + "AssignmentExpression": true + } + }] comma-dangle: - error - only-multiline @@ -35,6 +41,11 @@ rules: - error - devDependencies: true padded-blocks: 0 - key-spacing: - - 2 - - mode: minimum + key-spacing: [2, { + align: { + "afterColon": true, + "beforeColon": true, + "on": "colon", + "mode": "minimum" + } + }] diff --git a/.nvmrc b/.nvmrc index b81ba51..b616717 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -6.9.1 \ No newline at end of file +7.4.0 \ No newline at end of file diff --git a/client/build.js b/client/build.js index a4263e3..3cb8242 100644 --- a/client/build.js +++ b/client/build.js @@ -1,2 +1,3 @@ -var build = require("./tools/build"); -build.build(false); \ No newline at end of file +const build = require('./tools/build'); + +build.build(false); diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index bbf1294..e555edd 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -1,79 +1,73 @@ -var webpack = require('webpack'); -var path = require('path'); -var ExtractTextPlugin = require('extract-text-webpack-plugin'); -var ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); -var settings = require('./settings.js'); -var _ = require('lodash'); - -module.exports = function(stage){ - - var production = stage == "production"; - var development = stage == "development"; - var test = stage == "test"; - - // Public path indicates where the assets will be served from. In dev this will likely be localhost or a local domain. - // In production this could be a CDN. In developerment this will point to whatever public url is serving - // dev assets. - var publicPath = production ? settings.prodAssetsUrl + settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput; - - var excludeFromStats = [ - /node_modules[\\\/]react(-router)?[\\\/]/ - ]; +const webpack = require('webpack'); +const path = require('path'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); +const _ = require('lodash'); +const settings = require('./settings'); + +module.exports = function webpackConfig(stage) { - var autoprefix = '{browsers:["Android 2.3", "Android >= 4", "Chrome >= 20", "Firefox >= 24", "Explorer >= 8", "iOS >= 6", "Opera >= 12", "Safari >= 6"]}'; + const production = stage === 'production' || stage === 'staging'; - var plugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. + // Public path indicates where the assets will be served from. In dev this will likely be + // localhost or a local domain. In production this could be a CDN. In developerment this will + // point to whatever public url is serving dev assets. + const publicPath = production ? + settings.prodAssetsUrl + settings.prodRelativeOutput : + settings.devAssetsUrl + settings.devRelativeOutput; + + let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. ',plugins[]=transform-class-properties'; // Allows class instance fields and class static properties. - var presets = 'presets[]=react' + // Include all plugins needed for React - ',presets[]=es2015' + // Include all plugins needed to handle es2015 syntax - ',presets[]=stage-0'; // Enables experimental ES features. + const presets = 'presets[]=react' + // Include all plugins needed for React + ',presets[]=es2015' + // Include all plugins needed to handle es2015 syntax + ',presets[]=stage-0'; // Enables experimental ES features. - if(development){ - plugins = plugins + ',plugins[]=react-hot-loader/babel'; - } else if (production) { - plugins = plugins + ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement - plugins = plugins + ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code + if (production) { + babelPlugins += ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement + babelPlugins += ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code + } else if (stage === 'hot') { + babelPlugins += ',plugins[]=react-hot-loader/babel'; } - var babel = 'babel?' + plugins + '&' + presets; + const babel = `babel?${babelPlugins}&${presets}`; - var jsLoaders = [babel]; + const jsLoaders = [babel]; - var cssLoaders = ['css-loader', 'autoprefixer-loader?' + autoprefix]; + const cssLoaders = ['style-loader', 'css-loader', 'postcss-loader']; - var scssLoaders = cssLoaders.slice(0); - scssLoaders.push('sass-loader?outputStyle=expanded&includePaths[]=' + (path.resolve(__dirname, './node_modules/bootstrap-sass'))); + const scssLoaders = cssLoaders.slice(0); + scssLoaders.push(`sass-loader?outputStyle=expanded&includePaths[]=${(path.resolve(__dirname, './node_modules/bootstrap-sass'))}`); - var lessLoaders = cssLoaders.slice(0); - lessLoaders.push('less-loader'); + const lessLoaders = cssLoaders.slice(0); + lessLoaders.push('less-loader'); - var entries = _.cloneDeep(settings.entries); + let entries = _.cloneDeep(settings.entries); - var cssEntries = settings.cssEntries; - for(var name in cssEntries){ + const cssEntries = settings.cssEntries; + for (let name in cssEntries) { entries[name] = cssEntries[name]; } - if(development){ - entries = _.reduce(entries, function(result, entry, key){ + if (stage === 'hot') { + entries = _.reduce(entries, (result, entry, key) => { result[key] = [ 'eventsource-polyfill', - 'webpack-hot-middleware/client?path=' + publicPath + '__webpack_hmr&timeout=20000&reload=true', + `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true`, entry ]; return result; }, {}); } - var extractCSS = new ExtractTextPlugin(production ? '[name]-[chunkhash].css' : '[name].css'); + const extractCSS = new ExtractTextPlugin(production ? '[name]-[chunkhash].css' : '[name].css'); - var plugins = []; + let plugins = []; - if(production){ + if (production) { plugins = [ - new webpack.DefinePlugin({'process.env.NODE_ENV': '"production"', '__DEV__': false}), + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"', __DEV__: false }), new webpack.optimize.DedupePlugin(), new webpack.optimize.UglifyJsPlugin(), new webpack.optimize.OccurrenceOrderPlugin(), @@ -83,30 +77,32 @@ module.exports = function(stage){ manfiestVariable: 'webpackBundleManifest' }), extractCSS - //new webpack.optimize.CommonsChunkPlugin('init.js') // Use to extract common code from multiple entry points into a single init.js + + // Use to extract common code from multiple entry points into a single init.js + //new webpack.optimize.CommonsChunkPlugin('init.js'); ]; - } else if (development){ + } else if (stage === 'hot') { plugins = [ - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), new webpack.HotModuleReplacementPlugin(), new webpack.NoErrorsPlugin(), extractCSS ]; - } else if (test){ + } else { plugins = [ - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', '__DEV__': true }), + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), extractCSS ]; } - var loaders = [ - { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, - { test: /\.css$/i , loader: extractCSS.extract(cssLoaders) }, - { test: /\.less$/i , loader: extractCSS.extract(lessLoaders) }, - { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']}, //'image-webpack-loader?optimizationLevel=7&interlaced=false' - { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]']} + const loaders = [ + { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, + { test: /\.css$/i, loader: extractCSS.extract(cssLoaders) }, + { test: /\.less$/i, loader: extractCSS.extract(lessLoaders) }, + { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, //'image-webpack-loader?optimizationLevel=7&interlaced=false' + { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; return { @@ -114,33 +110,33 @@ module.exports = function(stage){ entry: entries, output: { path: production ? settings.prodOutput : settings.devOutput, // Location where generated files will be output - filename: production ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, - chunkFilename: production ? '[id]-[chunkhash]' + settings.buildSuffix : '[id]' + settings.buildSuffix, - publicPath: publicPath, - sourceMapFilename: 'debugging/[file].map', - pathinfo: !production // http://webpack.github.io/docs/configuration.html#output-pathinfo + filename : production ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, + chunkFilename : production ? '[id]-[chunkhash]' + settings.buildSuffix : '[id]' + settings.buildSuffix, + publicPath : publicPath, + sourceMapFilename : 'debugging/[file].map', + pathinfo : !production // http://webpack.github.io/docs/configuration.html#output-pathinfo }, - resolve: { - extensions: ['', '.js', '.json', '.jsx'], - modulesDirectories: ['node_modules', 'vendor'] + resolve : { + extensions : ['', '.js', '.json', '.jsx'], + modulesDirectories : ['node_modules', 'vendor'] }, - cache: true, - quiet: false, - noInfo: false, - debug: false, - outputPathinfo: !production, - devtool: production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool - stats: { - colors: true + cache : true, + quiet : false, + noInfo : false, + debug : false, + outputPathinfo : !production, + devtool : production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool + stats : { + colors : true }, - plugins: plugins, - module: { - loaders: loaders + plugins : plugins, + module : { + loaders : loaders }, - devServer: { - stats: { - cached: false, - exclude: excludeFromStats + devServer : { + stats : { + cached : false, + exclude : [ /node_modules[\\\/]react(-router)?[\\\/]/ ] } } }; diff --git a/client/js/actions/jwt.js b/client/js/actions/jwt.js index f8993b5..351c02f 100644 --- a/client/js/actions/jwt.js +++ b/client/js/actions/jwt.js @@ -13,8 +13,8 @@ export const Constants = wrapper(actions, requests); export function refreshJwt(userId) { return { - type: Constants.REFRESH_JWT, - method: Network.GET, - url: `api/jwts/${userId}`, + type : Constants.REFRESH_JWT, + method : Network.GET, + url : `api/jwts/${userId}`, }; } diff --git a/client/js/app.jsx b/client/js/app.jsx index 9235d49..ad353df 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -1,12 +1,12 @@ import 'babel-polyfill'; -import es6Promise from 'es6-promise'; -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Provider } from 'react-redux'; -import routes from './routes'; -import DevTools from './dev/dev_tools'; -import configureStore from './store/configure_store'; -import jwt from './loaders/jwt'; +import es6Promise from 'es6-promise'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import { Provider } from 'react-redux'; +import routes from './routes'; +import DevTools from './dev/dev_tools'; +import configureStore from './store/configure_store'; +import jwt from './loaders/jwt'; import { getInitialSettings } from './reducers/settings'; // Polyfill es6 promises for IE diff --git a/client/js/components/common/not_found.spec.jsx b/client/js/components/common/not_found.spec.jsx index b9f7f1f..d00d6f6 100644 --- a/client/js/components/common/not_found.spec.jsx +++ b/client/js/components/common/not_found.spec.jsx @@ -1,7 +1,7 @@ -import React from 'react'; +import React from 'react'; import TestUtils from 'react-addons-test-utils'; -import NotFound from './not_found'; -import Stub from '../../../specs_support/stub'; +import NotFound from './not_found'; +import Stub from '../../../specs_support/stub'; describe('not found', () => { it('renders a "not found" message', () => { diff --git a/client/js/components/home.spec.jsx b/client/js/components/home.spec.jsx new file mode 100644 index 0000000..4c4f199 --- /dev/null +++ b/client/js/components/home.spec.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import TestUtils from 'react-addons-test-utils'; +import { Provider } from 'react-redux'; +import Helper from '../../specs_support/helper'; +import Home from './home'; + +describe('home', () => { + let result; + let props; + + beforeEach(() => { + props = {}; + result = TestUtils.renderIntoDocument( + + + , + ); + }); + + it('renders the home component', () => { + expect(result).toBeDefined(); + }); +}); diff --git a/client/js/components/layout/index.spec.jsx b/client/js/components/layout/index.spec.jsx index a3eb1b9..e6e0056 100644 --- a/client/js/components/layout/index.spec.jsx +++ b/client/js/components/layout/index.spec.jsx @@ -1,8 +1,8 @@ -import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import React from 'react'; +import TestUtils from 'react-addons-test-utils'; import { Provider } from 'react-redux'; -import Helper from '../../../specs_support/helper'; -import Index from './index'; +import Helper from '../../../specs_support/helper'; +import Index from './index'; describe('index', () => { let result; diff --git a/client/js/constants/error.js b/client/js/constants/error.js index b82ca32..6d097f5 100644 --- a/client/js/constants/error.js +++ b/client/js/constants/error.js @@ -1,5 +1,5 @@ export default { - TIMEOUT: 'NETWORK_TIMEOUT', - ERROR: 'NETWORK_ERROR', - NOT_AUTHORIZED: 'NETWORK_NOT_AUTHORIZED', -}; \ No newline at end of file + TIMEOUT : 'NETWORK_TIMEOUT', + ERROR : 'NETWORK_ERROR', + NOT_AUTHORIZED : 'NETWORK_NOT_AUTHORIZED', +}; diff --git a/client/js/constants/network.js b/client/js/constants/network.js index e9a2855..0035a60 100644 --- a/client/js/constants/network.js +++ b/client/js/constants/network.js @@ -1,7 +1,7 @@ export default { - GET: 'get', - POST: 'post', - PUT: 'put', - DEL: 'delete', - TIMEOUT: 20000, + GET : 'get', + POST : 'post', + PUT : 'put', + DEL : 'delete', + TIMEOUT : 20000, }; diff --git a/client/js/constants/wrapper.js b/client/js/constants/wrapper.js index 392e0cb..7130632 100644 --- a/client/js/constants/wrapper.js +++ b/client/js/constants/wrapper.js @@ -2,18 +2,18 @@ import _ from 'lodash'; export const DONE = '_DONE'; -export default function(actionTypes, asyncActionTypes){ +export default function (actionTypes, asyncActionTypes) { - var types = _.reduce(actionTypes, (result, key) => { - result[key] = key; - return result; - }, {}); + let types = _.reduce(actionTypes, (result, key) => ({ + ...result, + [key]: key + }), {}); - types = _.reduce(asyncActionTypes, (result, key) => { - result[key] = key; - result[`${key}${DONE}`] = `${key}${DONE}`; - return result; - }, types); + types = _.reduce(asyncActionTypes, (result, key) => ({ + ...result, + [key] : key, + [`${key}${DONE}`] : `${key}${DONE}` + }), types); types.DONE = DONE; diff --git a/client/js/constants/wrapper.spec.js b/client/js/constants/wrapper.spec.js new file mode 100644 index 0000000..42f4ef9 --- /dev/null +++ b/client/js/constants/wrapper.spec.js @@ -0,0 +1,24 @@ +import wrapper from './wrapper'; + +describe('wrapper', () => { + const actionTypes = [ + 'LOCAL_ACTION' + ]; + const asyncActionTypes = [ + 'SERVER_ACTION' + ]; + const result = wrapper(actionTypes, asyncActionTypes); + + it('Setups up local actions', () => { + // Local actions shouldn't get a 'DONE' + expect(result.LOCAL_ACTION).toEqual('LOCAL_ACTION'); + expect(result.LOCAL_ACTION_DONE).toEqual(undefined); + }); + + it('Adds a "DONE" for async actions', () => { + // Server actions or async actions get a 'DONE' + expect(result.SERVER_ACTION).toEqual('SERVER_ACTION'); + expect(result.SERVER_ACTION_DONE).toEqual('SERVER_ACTION_DONE'); + }); + +}); diff --git a/client/js/dev/dev_tools.jsx b/client/js/dev/dev_tools.jsx index 812c0ad..db4e21f 100644 --- a/client/js/dev/dev_tools.jsx +++ b/client/js/dev/dev_tools.jsx @@ -1,7 +1,7 @@ -import React from 'react'; +import React from 'react'; import { createDevTools } from 'redux-devtools'; -import LogMonitor from 'redux-devtools-log-monitor'; -import DockMonitor from 'redux-devtools-dock-monitor'; +import LogMonitor from 'redux-devtools-log-monitor'; +import DockMonitor from 'redux-devtools-dock-monitor'; export default createDevTools( { const jwt = 'jwt_token'; diff --git a/client/js/libs/assets.spec.js b/client/js/libs/assets.spec.js index 748bb36..11a219c 100644 --- a/client/js/libs/assets.spec.js +++ b/client/js/libs/assets.spec.js @@ -1,4 +1,4 @@ -import _ from 'lodash'; +import _ from 'lodash'; import assets from './assets'; describe('assets', () => { diff --git a/client/js/middleware/api.js b/client/js/middleware/api.js index 5e5120b..99e4876 100644 --- a/client/js/middleware/api.js +++ b/client/js/middleware/api.js @@ -1,4 +1,4 @@ -import api from '../libs/api'; +import api from '../libs/api'; import { DONE } from '../constants/wrapper'; const API = store => next => (action) => { @@ -19,17 +19,17 @@ const API = store => next => (action) => { promise.then( (response) => { store.dispatch({ - type: action.type + DONE, - payload: response.body, - original: action, + type : action.type + DONE, + payload : response.body, + original : action, response, }); // Dispatch the new data }, (error) => { store.dispatch({ - type: action.type + DONE, - payload: {}, - original: action, + type : action.type + DONE, + payload : {}, + original : action, error, }); // Dispatch the new error }, diff --git a/client/js/middleware/api.spec.js b/client/js/middleware/api.spec.js index 03b7577..85358fc 100644 --- a/client/js/middleware/api.spec.js +++ b/client/js/middleware/api.spec.js @@ -1,6 +1,6 @@ -import api from './api'; +import api from './api'; import Network from '../constants/network'; -import Helper from '../../specs_support/helper'; +import Helper from '../../specs_support/helper'; describe('api middleware', () => { Helper.stubAjax(); diff --git a/client/js/reducers/index.js b/client/js/reducers/index.js index cfac3a5..7b76557 100644 --- a/client/js/reducers/index.js +++ b/client/js/reducers/index.js @@ -1,7 +1,7 @@ import { combineReducers } from 'redux'; -import settings from './settings'; -import application from './application'; -import jwt from './jwt'; +import settings from './settings'; +import application from './application'; +import jwt from './jwt'; const rootReducer = combineReducers({ settings, diff --git a/client/js/reducers/jwt.spec.js b/client/js/reducers/jwt.spec.js index b1b1776..05d915d 100644 --- a/client/js/reducers/jwt.spec.js +++ b/client/js/reducers/jwt.spec.js @@ -1,5 +1,5 @@ import { Constants as JwtConstants } from '../actions/jwt'; -import jwt from './jwt'; +import jwt from './jwt'; describe('jwt reducer', () => { describe('initial state', () => { @@ -17,8 +17,8 @@ describe('jwt reducer', () => { const newJwt = { jwt: '1234' }; const newState = jwt(state, { - type: JwtConstants.REFRESH_JWT_DONE, - payload: newJwt, + type : JwtConstants.REFRESH_JWT_DONE, + payload : newJwt, }); expect(newState).toEqual(newJwt.jwt); diff --git a/client/js/routes.jsx b/client/js/routes.jsx index 46fefe9..95eeb55 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -1,6 +1,7 @@ 'use strict'; -import React from 'react'; // if you use jsx, you have to have React imported +// if you use jsx, you have to import React +import React from 'react'; import { Router, Route, IndexRoute } from 'react-router'; import appHistory from './history'; diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index 1935f87..a9173be 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -1,10 +1,10 @@ import { createStore, applyMiddleware, compose } from 'redux'; import { persistState } from 'redux-devtools'; import rootReducer from '../reducers'; -import DevTools from '../dev/dev_tools.jsx'; +import DevTools from '../dev/dev_tools'; import API from '../middleware/api'; -let middleware = [ API ]; +const middleware = [API]; let enhancers = [ applyMiddleware(...middleware) @@ -13,7 +13,7 @@ let enhancers = [ // In production, we want to use just the middleware. // In development, we want to use some store enhancers from redux-devtools. // UglifyJS will eliminate the dead code depending on the build environment. -if (__DEV__){ +if (__DEV__) { enhancers = [ ...enhancers, DevTools.instrument(), @@ -21,7 +21,7 @@ if (__DEV__){ ]; } -export default function(initialState){ +export default function (initialState) { const store = compose(...enhancers)(createStore)(rootReducer, initialState); if (__DEV__ && module.hot) { diff --git a/client/js/store/configure_store.spec.js b/client/js/store/configure_store.spec.js index c2bf3ec..ccce5d1 100644 --- a/client/js/store/configure_store.spec.js +++ b/client/js/store/configure_store.spec.js @@ -3,8 +3,8 @@ import configureStore from './configure_store'; describe('configure store', () => { it('setups up initial state', () => { const settings = { - csrf: 'csrf_token', - apiUrl: 'http://www.example.com', + csrf : 'csrf_token', + apiUrl : 'http://www.example.com', }; const initialState = { jwt: 'jwt_token', diff --git a/client/karma.conf.js b/client/karma.conf.js index 8b28d82..d37b876 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -1,5 +1,5 @@ -var karmaConf = require('./config/karma'); +const karmaConf = require('./config/karma'); -module.exports = function(config){ +module.exports = function karmaConfig(config) { config.set(karmaConf()); }; diff --git a/client/package.json b/client/package.json index bbef77b..85532ec 100644 --- a/client/package.json +++ b/client/package.json @@ -10,7 +10,7 @@ "lodash": "4.17.4", "postcss-loader": "^1.2.1", "react": "15.4.2", - "react": "15.4.2", + "react-dom": "15.4.2", "react-proxy-loader": "0.3.4", "react-redux": "5.0.1", "react-router": "3.0.0", @@ -43,7 +43,7 @@ "eslint-config-airbnb": "^14.0.0", "eslint-plugin-babel": "^4.0.0", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jsx-a11y": "2.2.3", + "eslint-plugin-jsx-a11y": "3.0.2", "eslint-plugin-react": "^6.9.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", diff --git a/client/specs_support/spec_helper.js b/client/specs_support/spec_helper.js index ec14f6e..91469f9 100644 --- a/client/specs_support/spec_helper.js +++ b/client/specs_support/spec_helper.js @@ -1,9 +1,7 @@ -"use strict"; - // Test helper. Load libraries and polyfills // Function.prototype.bind polyfill used by PhantomJS -if (typeof Function.prototype.bind != 'function') { +if (typeof Function.prototype.bind !== 'function') { Function.prototype.bind = function bind(obj) { var args = Array.prototype.slice.call(arguments, 1), self = this, diff --git a/client/tools/build/content.js b/client/tools/build/content.js index fc8595d..09b804f 100644 --- a/client/tools/build/content.js +++ b/client/tools/build/content.js @@ -1,46 +1,43 @@ -var path = require("path"); -var _ = require("lodash"); -var fs = require("fs"); -var frontMatter = require("front-matter"); -var truncate = require("html-truncate"); -var ejs = require("ejs"); - -var utils = require("./utils"); -var marked = require("./markdown"); -var templates = require("./templates"); -var applyProduction = require("./production"); +const _ = require('lodash'); +const fs = require('fs'); +const frontMatter = require('front-matter'); +const ejs = require('ejs'); + +const marked = require('./markdown'); +const templates = require('./templates'); +const applyProduction = require('./production'); // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -module.exports = function(fullPath, webpackConfig, webpackStats, stage, options){ - var content = fs.readFileSync(fullPath, "utf8"); - var parsed = frontMatter(content); - var metadata = parsed.attributes; - var title = metadata.title; - var destination = metadata.permalink; - var data = _.merge({ - "_" : _, - title : title, - metadata : metadata, - url : destination +module.exports = function buildContent(fullPath, webpackConfig, webpackStats, stage, options) { + const content = fs.readFileSync(fullPath, 'utf8'); + const parsed = frontMatter(content); + const metadata = parsed.attributes; + const title = metadata.title; + const destination = metadata.permalink; + const data = _.merge({ + _, + title, + metadata, + url: destination }, options.templateData); - var html = parsed.body; + let html = parsed.body; // Parse any markdown in the resulting html html = marked(html); - try{ + try { // Allow ejs code in content html = ejs.compile(html, { - cache: false, - filename: fullPath + cache : false, + filename : fullPath })(data); - } catch(err){ - console.log("Unable to compile html from " + fullPath); + } catch (err) { + console.log(`Unable to compile html from ${fullPath}`); console.log(err); - console.log("Call stack"); + console.log('Call stack'); console.log(err.stack); } @@ -50,12 +47,12 @@ module.exports = function(fullPath, webpackConfig, webpackStats, stage, options) html = applyProduction(html, stage, webpackConfig, webpackStats, options); return { - title : title, - metadata : metadata, - source : fullPath, - destination : destination, - html : html, - url : destination + title, + metadata, + destination, + html, + source : fullPath, + url : destination }; }; diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 5c1d37a..7c79791 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -4,7 +4,7 @@ var webpack = require("webpack"); var webpackMiddleware = require("webpack-dev-middleware"); var webpackHotMiddleware = require("webpack-hot-middleware"); var settings = require("./config/settings.js"); -var webpackConfig = require("./config/webpack.config")("development"); +var webpackConfig = require("./config/webpack.config")("hot"); var path = require("path"); var app = express(); diff --git a/client/yarn.lock b/client/yarn.lock index 76bddf3..37e8af8 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1,12 +1,14 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 + + "@types/jasmine@^2.5.36": - version "2.5.38" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.38.tgz#a4379124c4921d4e21de54ec74669c9e9b356717" + version "2.5.40" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.40.tgz#875c7ae739dcab1342794f51231c4aadcda6eb79" "@types/node@^6.0.46": - version "6.0.52" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.52.tgz#1ac3a99b42320f9e463482f25af4c2359473aaa6" + version "6.0.59" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.59.tgz#b7fd8f3144c447c829a8eab8805c3a523e9e5b44" "@types/q@^0.0.32": version "0.0.32" @@ -16,17 +18,10 @@ version "2.53.37" resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.37.tgz#34f743c20e53ae7100ede90870fde554df2447f8" -abbrev@~1.0.9, abbrev@1, abbrev@1.0.x: +abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -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.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.1.4.tgz#d71c96f7d41d0feda2c38cd14e8a27c04158df4a" @@ -34,6 +29,13 @@ accepts@1.1.4: mime-types "~2.0.4" negotiator "0.4.9" +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" + acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -48,14 +50,14 @@ acorn@^4.0.1: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" -adm-zip@^0.4.7, adm-zip@0.4.7: - version "0.4.7" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" - adm-zip@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" +adm-zip@0.4.7, adm-zip@^0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" + after@0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" @@ -68,12 +70,12 @@ agent-base@2: semver "~5.0.1" ajv-keywords@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.2.0.tgz#676c4f087bfe1e8b12dca6fda2f3c74f417b099c" + version "1.5.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.0.tgz#c11e6859eafff83e0dafc416929472eca946aa2c" ajv@^4.7.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.0.tgz#7ae6169180eb199192a8b9a19fd0f47fc9ac8764" + version "4.10.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.4.tgz#c0974dd00b3464984892d6010aa9c2c945933254" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -190,14 +192,14 @@ array-find@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/array-find/-/array-find-0.1.1.tgz#dc813845ad5a9afc35cb92b786c878d81b5b82ce" -array-flatten@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.0.tgz#26a692c83881fc68dac3ec5d1f0c1b49bf2304d9" - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +array-flatten@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.0.tgz#26a692c83881fc68dac3ec5d1f0c1b49bf2304d9" + array-index@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" @@ -274,14 +276,14 @@ async-some@~1.0.2: dependencies: dezalgo "^1.0.2" +async@1.x, async@^1.3.0, async@^1.4.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@^0.9.0, 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.4.0, async@^1.5.0, async@~1.5.2, async@1.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - async@^2.0.1: version "2.1.4" resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" @@ -310,14 +312,14 @@ autoprefixer-loader@3.2.0: postcss-safe-parser "^1.0.1" autoprefixer@^6.0.2, autoprefixer@^6.3.1: - version "6.5.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.5.4.tgz#1386eb6708ccff36aefff70adc694ecfd60af1b0" + version "6.6.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.6.1.tgz#11a4077abb4b313253ec2f6e1adb91ad84253519" dependencies: - browserslist "~1.4.0" - caniuse-db "^1.0.30000597" + browserslist "~1.5.1" + caniuse-db "^1.0.30000604" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^5.2.6" + postcss "^5.2.8" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: @@ -900,7 +902,7 @@ babel-plugin-transform-regenerator@^6.16.0: dependencies: regenerator-transform "0.9.8" -babel-plugin-transform-runtime@^6.15.0, babel-plugin-transform-runtime@^6.7.5: +babel-plugin-transform-runtime@^6.15.0: version "6.15.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" dependencies: @@ -1081,7 +1083,7 @@ base64id@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" -base64url@^2.0.0, base64url@2.0.0: +base64url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" @@ -1141,8 +1143,8 @@ block-stream@*, block-stream@0.0.9: inherits "~2.0.0" bluebird@^3.3.0: - version "3.4.6" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f" + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" body-parser@^1.12.4: version "1.15.2" @@ -1209,17 +1211,13 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.4.0.tgz#9cfdcf5384d9158f5b70da2aa00b30e8ff019049" +browserslist@^1.0.1, browserslist@^1.5.2, browserslist@~1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.5.2.tgz#1c82fde0ee8693e6d15c49b7bff209dc06298c56" dependencies: - caniuse-db "^1.0.30000539" + caniuse-db "^1.0.30000604" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - -buffer-equal-constant-time@^1.0.1, buffer-equal-constant-time@1.0.1: +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" @@ -1248,9 +1246,9 @@ 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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-2.0.0.tgz#6f22003baacf003ccd287afe6872151fddc58579" +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" builtins@0.0.7: version "0.0.7" @@ -1311,9 +1309,19 @@ camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" -caniuse-db@^1.0.30000539, caniuse-db@^1.0.30000597: - version "1.0.30000601" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000601.tgz#073c9d1c62edb399ecc783a7ab40698b5694d2fe" +caniuse-api@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.2.tgz#8f393c682f661c0a997b77bba6e826483fb3600e" + dependencies: + browserslist "^1.0.1" + caniuse-db "^1.0.30000346" + lodash.memoize "^4.1.0" + lodash.uniq "^4.3.0" + shelljs "^0.7.0" + +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000604: + version "1.0.30000604" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000604.tgz#bc139270a777564d19c0aadcd832b491d093bda5" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1465,14 +1473,14 @@ cmd-shim@~2.0.2: graceful-fs "^4.1.2" mkdirp "~0.5.0" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - co@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" +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.1" resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" @@ -1549,15 +1557,15 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.9.0, commander@2.9.x: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" +commander@2.8.x, commander@~2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" dependencies: graceful-readlink ">= 1.0.0" -commander@~2.8.1, commander@2.8.x: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" +commander@2.9.x, commander@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" @@ -1569,10 +1577,6 @@ 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.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - component-emitter@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" @@ -1581,6 +1585,10 @@ component-emitter@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" +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" @@ -1589,6 +1597,14 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concat-stream@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" @@ -1605,14 +1621,6 @@ concat-stream@~1.4.7: readable-stream "~1.1.9" typedarray "~0.0.5" -concat-stream@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - config-chain@~1.1.10: version "1.1.11" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" @@ -1788,8 +1796,8 @@ cssesc@^0.1.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" "cssnano@>=2.6.1 <4": - version "3.9.1" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.9.1.tgz#41422bb5390d85a94ad4db03cc1a188bf68744fe" + 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" @@ -1861,29 +1869,33 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^1.0.11, dateformat@^1.0.6: +dateformat@^1.0.6: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" dependencies: get-stdin "^4.0.1" meow "^3.3.0" -debug@^2.1.1, debug@^2.2.0, debug@2: - version "2.4.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.4.5.tgz#34c7b12a1ca96674428f41fe92c49b4ce7cd0607" +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + +debug@0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + +debug@2, debug@^2.1.1, debug@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" dependencies: ms "0.7.2" -debug@~2.2.0, debug@2.2.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@0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2028,7 +2040,7 @@ difflib@~0.2.1: dependencies: heap ">= 0.2.0" -doctrine@^1.2.2, doctrine@1.5.0: +doctrine@1.5.0, doctrine@^1.2.2: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: @@ -2094,9 +2106,11 @@ dreamopt@~0.6.0: dependencies: wordwrap ">=0.0.2" -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" duplexer2@^0.1.4, duplexer2@~0.1.0: version "0.1.4" @@ -2104,11 +2118,9 @@ duplexer2@^0.1.4, duplexer2@~0.1.0: dependencies: readable-stream "^2.0.2" -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" duplexify@^3.2.0: version "3.5.0" @@ -2132,7 +2144,7 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -ecdsa-sig-formatter@^1.0.0, ecdsa-sig-formatter@1.0.9: +ecdsa-sig-formatter@^1.0.0: version "1.0.9" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" dependencies: @@ -2174,13 +2186,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" - dependencies: - once "~1.3.0" - -end-of-stream@1.0.0: +end-of-stream@1.0.0, end-of-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" dependencies: @@ -2279,6 +2285,10 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" +es5-ext@0.8.x: + version "0.8.2" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" + es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: version "0.10.12" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" @@ -2286,10 +2296,6 @@ es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0. es6-iterator "2" es6-symbol "~3.1" -es5-ext@0.8.x: - version "0.8.2" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" - es6-iterator@2: version "2.0.0" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" @@ -2323,7 +2329,7 @@ es6-set@~0.1.3: es6-symbol "3" event-emitter "~0.3.4" -es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@~3.1.0, es6-symbol@3: +es6-symbol@3, es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" dependencies: @@ -2411,9 +2417,9 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz#4e35cb71b8a7db702ac415c806eb8e8d9ea6c65d" +eslint-plugin-jsx-a11y@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.2.tgz#9f0eabcafde3d2a2600d96a66adb90d099e841fe" dependencies: damerau-levenshtein "^1.0.0" jsx-ast-utils "^1.0.0" @@ -2477,7 +2483,7 @@ esprima-fb@~12001.1.0-dev-harmony-fb: version "12001.1.0-dev-harmony-fb" resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-12001.1.0-dev-harmony-fb.tgz#d84400384ba95ce2678c617ad24a7f40808da915" -esprima@^2.6.0, esprima@^2.7.1, esprima@2.7.x: +esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -2611,7 +2617,7 @@ extend-shallow@^2.0.1: dependencies: is-extendable "^0.1.0" -extend@^3.0.0, extend@~3.0.0, extend@3: +extend@3, extend@^3.0.0, extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" @@ -2643,21 +2649,21 @@ extsprintf@1.0.2: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" fancy-log@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.2.0.tgz#d5a51b53e9ab22ca07d558f2b67ae55fdb5fcbd8" + version "1.3.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" dependencies: chalk "^1.1.1" time-stamp "^1.0.0" fast-levenshtein@~2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" + 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" -fbjs@^0.8.4, fbjs@^0.8.6: +fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: version "0.8.8" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.8.tgz#02f1b6e0ea0d46c24e0b51a2d24df069563a5ad6" dependencies: @@ -2871,8 +2877,8 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.0.15" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" + version "1.0.17" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.29" @@ -2922,20 +2928,6 @@ gauge@~1.2.5: lodash.padend "^4.1.0" lodash.padstart "^4.1.0" -gauge@~2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-color "^0.1.7" - 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" - gauge@~2.7.1: version "2.7.2" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" @@ -3201,14 +3193,14 @@ gulp-sourcemaps@1.6.0: vinyl "^1.0.0" gulp-util@^3.0.1: - version "3.0.7" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" dependencies: array-differ "^1.0.0" array-uniq "^1.0.2" beeper "^1.0.0" chalk "^1.0.0" - dateformat "^1.0.11" + dateformat "^2.0.0" fancy-log "^1.1.0" gulplog "^1.0.0" has-gulplog "^0.1.0" @@ -3266,7 +3258,7 @@ has-binary@0.1.7: dependencies: isarray "0.0.1" -has-color@^0.1.7, has-color@~0.1.0: +has-color@~0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" @@ -3310,14 +3302,14 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" -he@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/he/-/he-0.5.0.tgz#2c05ffaef90b68e860f3fd2b54ef580989277ee2" - he@1.1.x: version "1.1.0" resolved "https://registry.yarnpkg.com/he/-/he-1.1.0.tgz#29319d49beec13a9b1f3c4f9b2a6dde4859bb2a7" +he@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/he/-/he-0.5.0.tgz#2c05ffaef90b68e860f3fd2b54ef580989277ee2" + "heap@>= 0.2.0": version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" @@ -3346,7 +3338,7 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.1.5, hosted-git-info@~2.1.5: +hosted-git-info@^2.1.4, hosted-git-info@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" @@ -3421,11 +3413,7 @@ husl@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/husl/-/husl-5.0.3.tgz#ee272aaff1bebe40df3588ed007b70de7e679788" -iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - -iconv-lite@0.4.13: +iconv-lite@0.4.13, iconv-lite@~0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -3446,8 +3434,8 @@ ignore@^3.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" image-size@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.0.tgz#be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651" + version "0.5.1" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.1.tgz#28eea8548a4b1443480ddddc1e083ae54652439f" imports-loader@0.7.0: version "0.7.0" @@ -3493,7 +3481,7 @@ inflight@^1.0.4, inflight@~1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.3: +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" @@ -3707,7 +3695,7 @@ is-plain-obj@^1.0.0: 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" + resolved "http://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" is-primitive@^2.0.0: version "2.0.0" @@ -3777,17 +3765,17 @@ is-zip@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-zip/-/is-zip-1.0.0.tgz#47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325" -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" - 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" + isbinaryfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.1.tgz#6e99573675372e841a0520c036b41513d783e79e" + version "3.0.2" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" isexe@^1.1.1: version "1.1.2" @@ -3824,8 +3812,8 @@ istanbul-lib-coverage@^1.0.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2" istanbul-lib-instrument@^1.1.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.0.tgz#19f0a973397454989b98330333063a5b56df0e58" + version "1.4.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" @@ -3835,7 +3823,7 @@ istanbul-lib-instrument@^1.1.3: istanbul-lib-coverage "^1.0.0" semver "^5.3.0" -istanbul@^0.4.0, istanbul@0.4.5: +istanbul@0.4.5, istanbul@^0.4.0: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" dependencies: @@ -3858,13 +3846,21 @@ jasmine-ajax@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz#f8cad9fd49dfd44f3cf798d36f4e857d125c75c5" +jasmine-core@2.5.2, jasmine-core@~2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" + jasmine-core@~2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.4.1.tgz#6f83ab3a0f16951722ce07d206c773d57cc838be" -jasmine-core@~2.5.2, jasmine-core@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" +jasmine@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.4.1.tgz#9016dda453213d27ac6d43dc4ea97315a189085e" + dependencies: + exit "^0.1.2" + glob "^3.2.11" + jasmine-core "~2.4.0" jasmine@^2.5.2: version "2.5.2" @@ -3874,14 +3870,6 @@ jasmine@^2.5.2: glob "^7.0.6" jasmine-core "~2.5.2" -jasmine@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.4.1.tgz#9016dda453213d27ac6d43dc4ea97315a189085e" - dependencies: - exit "^0.1.2" - glob "^3.2.11" - jasmine-core "~2.4.0" - jasminewd2@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-0.0.10.tgz#94f48ae2bc946cad643035467b4bb7ea9c1075ef" @@ -3904,14 +3892,7 @@ js-tokens@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" -js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@3.x: - 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" - -js-yaml@~3.6.1, js-yaml@3.6.1: +js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@~3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: @@ -3981,8 +3962,8 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsonpointer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: version "1.3.1" @@ -3999,15 +3980,6 @@ jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: acorn-jsx "^3.0.1" object-assign "^4.1.0" -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" - jwa@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.0.2.tgz#fd79609f1e772e299dce8ddb76d00659dd83511f" @@ -4016,15 +3988,7 @@ jwa@~1.0.0: buffer-equal-constant-time "^1.0.1" ecdsa-sig-formatter "^1.0.0" -jws@^3.0.0: - 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" - -jws@~3.0.0: +jws@^3.0.0, jws@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jws/-/jws-3.0.0.tgz#da5f267897dd4e9cf8137979db33fc54a3c05418" dependencies: @@ -4206,7 +4170,7 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5, loader-utils@~0.2.6, loader-utils@0.2.x: +loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5, loader-utils@~0.2.6: version "0.2.16" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" dependencies: @@ -4220,8 +4184,8 @@ lockfile@~1.0.1: resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" lodash-es@^4.2.0, lodash-es@^4.2.1: - version "4.17.2" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.2.tgz#59011b585166e613eb9dd5fc256b2cd1a30f3712" + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" lodash._basecopy@^3.0.0: version "3.0.1" @@ -4323,6 +4287,10 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.memoize@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" @@ -4372,18 +4340,18 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" -lodash@^3.8.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1: - version "4.17.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" +lodash.uniq@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.6.1, lodash@4.17.4: +lodash@4.17.4, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^3.8.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + lodash@~4.16.4: version "4.16.6" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" @@ -4424,6 +4392,10 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" +lru-cache@2, lru-cache@2.2.x: + version "2.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + lru-cache@^4.0.1, lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -4431,14 +4403,6 @@ lru-cache@^4.0.1, lru-cache@~4.0.1: pseudomap "^1.0.1" yallist "^2.0.0" -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - -lru-cache@2.2.x: - version "2.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" - macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" @@ -4559,26 +4523,20 @@ mime-types@~2.0.4: dependencies: mime-db "~1.12.0" -mime@^1.2.11, mime@^1.3.4, mime@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - mime@1.2.x: version "1.2.11" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" +mime@1.3.4, mime@^1.2.11, mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" dependencies: dom-walk "^0.1.0" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3, "minimatch@2 || 3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - minimatch@0.3: version "0.3.0" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" @@ -4586,23 +4544,19 @@ minimatch@0.3: lru-cache "2" sigmund "~1.0.0" -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, 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" +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" -minimist@0.0.8: +minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1, mkdirp@0.5.x: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" mkdirp@0.5.0: version "0.5.0" @@ -4610,6 +4564,12 @@ mkdirp@0.5.0: dependencies: minimist "0.0.8" +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" + ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" @@ -4640,17 +4600,13 @@ mumath@^3.0.0: dependencies: almost-equal "^1.1.0" -mute-stream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" - -mute-stream@0.0.5: +mute-stream@0.0.5, mute-stream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" nan@^2.3.0, nan@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" + version "2.5.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" natural-compare@^1.4.0: version "1.4.0" @@ -4671,8 +4627,8 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" no-case@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.0.tgz#ca2825ccb76b18e6f79d573dcfbf1eace33dd164" + version "2.3.1" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081" dependencies: lower-case "^1.1.1" @@ -4687,7 +4643,25 @@ node-forge@^0.6.46: version "0.6.46" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.46.tgz#04a8a1c336eb72ef6f434ba7c854d608916c328d" -node-gyp@^3.3.1, node-gyp@~3.4.0: +node-gyp@^3.3.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.5.0.tgz#a8fe5e611d079ec16348a3eb960e78e11c85274a" + 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 "2.x || 3.x || 4 || 5" + tar "^2.0.0" + which "1" + +node-gyp@~3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" dependencies: @@ -4783,15 +4757,15 @@ node-watch@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.4.1.tgz#d0947d54a995f91135db4056b68722c6d7c322ad" -nopt@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.1.2.tgz#6cccd977b80132a07731d6e8ce58c2c8303cf9af" +"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: abbrev "1" -nopt@~3.0.6, "nopt@2 || 3", nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" +nopt@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.1.2.tgz#6cccd977b80132a07731d6e8ce58c2c8303cf9af" dependencies: abbrev "1" @@ -4817,8 +4791,8 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" normalize-url@^1.0.0, normalize-url@^1.4.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.8.0.tgz#a9550b079aa3523c85d78df24eef1959fce359ab" + version "1.9.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.0.tgz#c2bb50035edee62cd81edb2d45da68dc25e3423e" dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" @@ -4836,14 +4810,7 @@ npm-install-checks@~1.0.7: npmlog "0.1 || 1 || 2" semver "^2.3.0 || 3.x || 4 || 5" -"npm-package-arg@^3.0.0 || ^4.0.0", npm-package-arg@^4.0.0, npm-package-arg@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.2.0.tgz#809bc61cabf54bd5ff94f6165c89ba8ee88c115c" - dependencies: - hosted-git-info "^2.1.5" - semver "^5.1.0" - -npm-package-arg@~4.1.0: +"npm-package-arg@^3.0.0 || ^4.0.0", npm-package-arg@^4.0.0, npm-package-arg@^4.1.1, npm-package-arg@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.1.1.tgz#86d9dca985b4c5e5d59772dfd5de6919998a495a" dependencies: @@ -4964,32 +4931,23 @@ npm@^2.15.10: wrappy "~1.0.2" write-file-atomic "~1.1.4" -npmlog@^4.0.0, npmlog@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" +"npmlog@0 || 1 || 2 || 3", "npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" dependencies: + ansi "~0.3.1" are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" + gauge "~1.2.5" -"npmlog@~2.0.0 || ~3.1.0", "npmlog@0 || 1 || 2 || 3": - version "3.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873" +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" - gauge "~2.6.0" + gauge "~2.7.1" set-blocking "~2.0.0" -npmlog@~2.0.4, "npmlog@0.1 || 1 || 2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - null-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" @@ -5051,7 +5009,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.3, once@~1.4.0, once@1.x: +once@1.x, once@^1.3.0, 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: @@ -5118,7 +5076,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, 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.1.0, osenv@~0.1.3, osenv@0: +osenv@0, osenv@^0.1.0, osenv@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: @@ -5300,8 +5258,8 @@ postcss-colormin@^2.1.8: postcss-value-parser "^3.2.3" postcss-convert-values@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.5.0.tgz#570aceb04b3061fb25f6f46bd0329e7ab6263c0b" + version "2.6.0" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.0.tgz#08c6d06130fe58a91a21ff50829e1aad6a3a1acc" dependencies: postcss "^5.0.11" postcss-value-parser "^3.1.2" @@ -5354,8 +5312,8 @@ postcss-load-config@^1.0.0: postcss-load-plugins "^2.0.0" postcss-load-options@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.0.2.tgz#b99eb5759a588f4b2dd8b6471c6985f72060e7b0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.1.0.tgz#e39215d154a19f69f9cb6052bffad4a82f09f354" dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" @@ -5367,7 +5325,7 @@ postcss-load-plugins@^2.0.0: cosmiconfig "^2.1.1" object-assign "^4.1.0" -postcss-loader: +postcss-loader@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.2.1.tgz#8809ab184a9f903a01f660385f2e296ff563d22c" dependencies: @@ -5391,10 +5349,13 @@ postcss-merge-longhand@^2.0.1: postcss "^5.0.4" postcss-merge-rules@^2.0.3: - version "2.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.0.11.tgz#c5d7c8de5056a7377aea0dff2fd83f92cafb9b8a" + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.1.tgz#5e5640020ce43cddd343c73bba91c9a358d1fe0f" 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: @@ -5417,8 +5378,8 @@ postcss-minify-gradients@^1.0.1: postcss-value-parser "^3.3.0" postcss-minify-params@^1.0.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.1.tgz#c899444d9e2ff8933018befac151fbfadf10e737" + 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" @@ -5426,8 +5387,8 @@ postcss-minify-params@^1.0.4: uniqs "^2.0.0" postcss-minify-selectors@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.0.7.tgz#bfb9248fe14db33770f036572de6b4897c48d81c" + 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" @@ -5468,8 +5429,8 @@ postcss-normalize-charset@^1.1.0: postcss "^5.0.5" postcss-normalize-url@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.7.tgz#6bd90d0a4bc5a1df22c26ea65c53257dc3829f4e" + 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" @@ -5484,15 +5445,15 @@ postcss-ordered-values@^2.1.0: postcss-value-parser "^3.0.1" postcss-reduce-idents@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.3.1.tgz#024e8e219f52773313408573db9645ba62d2d2fe" + 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.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.0.tgz#8f739b938289ef2e48936d7101783e4741ca9bbb" + 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" @@ -5510,7 +5471,7 @@ postcss-safe-parser@^1.0.1: dependencies: postcss "^5.0.18" -postcss-selector-parser@^2.0.0: +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.2.tgz#3d70f5adda130da51c7c0c2fc023f56b1374fe08" dependencies: @@ -5547,9 +5508,9 @@ postcss-zindex@^2.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.18, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.6: - version "5.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.6.tgz#a252cd67cd52585035f17e9ad12b35137a7bdd9e" +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.18, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.6, postcss@^5.2.8: + version "5.2.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.9.tgz#282a644f92d4b871ade2d3ce8bd0ea46f18317b6" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -5664,19 +5625,19 @@ psi@2.0.4: sort-on "^1.2.2" update-notifier "^0.6.0" -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - 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" + pure-color@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.2.0.tgz#702d2f2819dd545b1fde5116fca5f0c2dad2d18d" -q@^1.1.2, q@^1.4.1, q@1.4.1: +q@1.4.1, q@^1.1.2, q@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" @@ -5684,6 +5645,10 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" +qs@6.2.0, qs@~6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" + qs@^6.1.0, qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" @@ -5692,14 +5657,6 @@ qs@~6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.1.0.tgz#ec1d1626b24278d99f0fdf4549e524e24eceeb26" -qs@~6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" - -qs@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" - query-string@^4.1.0, query-string@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822" @@ -5711,7 +5668,7 @@ 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: +querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -5771,6 +5728,14 @@ react-dock@^0.2.1: lodash.debounce "^3.1.1" object-assign "^4.0.1" +react-dom@15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f" + dependencies: + fbjs "^0.8.1" + loose-envify "^1.1.0" + object-assign "^4.1.0" + react-hot-loader@^3.0.0-beta.6: version "3.0.0-beta.6" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4" @@ -5783,10 +5748,9 @@ react-hot-loader@^3.0.0-beta.6: source-map "^0.4.4" react-json-tree@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.0.tgz#92d5c223fc7718614a906591cd916127ce2b6033" + version "0.10.1" + resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.1.tgz#7f9eab36abf8adf329c7e5ad4091f5987bcbd5de" dependencies: - babel-plugin-transform-runtime "^6.7.5" babel-runtime "^6.6.1" react-base16-styling "^0.4.1" react-pure-render "^1.0.2" @@ -5807,23 +5771,23 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" -react-redux@^4.0.0: - version "4.4.6" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209" +react-redux@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.1.tgz#84a41bd4cdd180452bb6922bc79ad25bd5abb7c4" dependencies: hoist-non-react-statics "^1.0.3" invariant "^2.0.0" lodash "^4.2.0" + lodash-es "^4.2.0" loose-envify "^1.1.0" -react-redux@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.1.tgz#84a41bd4cdd180452bb6922bc79ad25bd5abb7c4" +react-redux@^4.0.0: + version "4.4.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209" dependencies: hoist-non-react-statics "^1.0.3" invariant "^2.0.0" lodash "^4.2.0" - lodash-es "^4.2.0" loose-envify "^1.1.0" react-router@3.0.0: @@ -5870,7 +5834,7 @@ read-installed@~4.0.3: optionalDependencies: graceful-fs "^4.1.2" -read-package-json@^2.0.0, read-package-json@~2.0.4, "read-package-json@1 || 2": +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.4.tgz#61ed1b2256ea438d8008895090be84b8e799c853" dependencies: @@ -5895,13 +5859,13 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read@~1.0.1, read@~1.0.7, read@1: +read@1, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" dependencies: mute-stream "~0.0.4" -readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2, "readable-stream@1 || 2": +"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" dependencies: @@ -6037,11 +6001,11 @@ redux-devtools-dock-monitor@1.1.1: react-pure-render "^1.0.2" redux-devtools-instrument@^1.0.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.3.3.tgz#4a17c80cc23465646460b2da3ee438a4ac0b28ae" + version "1.6.0" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.6.0.tgz#a16678a6c3338db10cd5e0b8801e294c52466eb8" dependencies: lodash "^4.2.0" - symbol-observable "^0.2.4" + symbol-observable "^1.0.2" redux-devtools-log-monitor@1.2.0: version "1.2.0" @@ -6067,7 +6031,7 @@ redux-devtools@3.3.1: redux "^3.5.2" redux-devtools-instrument "^1.0.1" -redux@^3.5.2, redux@3.6.0: +redux@3.6.0, redux@^3.5.2: version "3.6.0" resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" dependencies: @@ -6175,7 +6139,7 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0, request@2: +request@2, request@^2.54.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -6200,9 +6164,9 @@ request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@^2.7 tunnel-agent "~0.4.1" uuid "^3.0.0" -request@~2.72.0: - version "2.72.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" +request@2.75.0, request@^2.61.0, request@^2.72.0: + version "2.75.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -6211,7 +6175,7 @@ request@~2.72.0: combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~1.0.0-rc3" + form-data "~2.0.0" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6221,14 +6185,14 @@ request@~2.72.0: mime-types "~2.1.7" node-uuid "~1.4.7" oauth-sign "~0.8.1" - qs "~6.1.0" + qs "~6.2.0" stringstream "~0.0.4" - tough-cookie "~2.2.0" + tough-cookie "~2.3.0" tunnel-agent "~0.4.1" -request@~2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" +request@~2.72.0: + version "2.72.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -6237,7 +6201,7 @@ request@~2.74.0: combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~1.0.0-rc4" + form-data "~1.0.0-rc3" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6247,14 +6211,14 @@ request@~2.74.0: mime-types "~2.1.7" node-uuid "~1.4.7" oauth-sign "~0.8.1" - qs "~6.2.0" + qs "~6.1.0" stringstream "~0.0.4" - tough-cookie "~2.3.0" + tough-cookie "~2.2.0" tunnel-agent "~0.4.1" -request@2.75.0: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" +request@~2.74.0: + version "2.74.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -6263,7 +6227,7 @@ request@2.75.0: combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~2.0.0" + form-data "~1.0.0-rc4" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6305,11 +6269,7 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" - -resolve@1.1.x: +resolve@1.1.x, resolve@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -6330,7 +6290,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -6388,14 +6348,14 @@ saucelabs@~1.3.0: dependencies: https-proxy-agent "^1.0.0" -sax@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - sax@0.6.x: version "0.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" +sax@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + seek-bzip@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" @@ -6418,7 +6378,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0, "semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5": +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -6488,9 +6448,9 @@ sha@~2.0.1: graceful-fs "^4.1.2" readable-stream "^2.0.2" -shelljs@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675" +shelljs@^0.7.0, shelljs@^0.7.5: + version "0.7.6" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -6602,20 +6562,20 @@ source-list-map@^0.1.4, source-list-map@~0.1.0, source-list-map@~0.1.7: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e" source-map-support@^0.4.2, source-map-support@~0.4.0: - version "0.4.6" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.6.tgz#32552aa64b458392a85eab3b0b5ee61527167aeb" + version "0.4.8" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b" dependencies: source-map "^0.5.3" -source-map@^0.1.41: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" +source-map@0.4.x, source-map@^0.4.4, 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.4.4, source-map@~0.4.1, source-map@0.4.x: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" +source-map@^0.1.41: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" dependencies: amdefine ">=0.0.4" @@ -6697,12 +6657,6 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" @@ -6710,11 +6664,17 @@ stream-combiner2@^1.1.1: duplexer2 "~0.1.0" readable-stream "^2.0.2" +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + stream-http@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.5.0.tgz#585eee513217ed98fe199817e7313b6f772a6802" + version "2.6.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.0.tgz#adf3309ced17624ebfb7ef13e6ac4cfe405a8b12" dependencies: - builtin-status-codes "^2.0.0" + builtin-status-codes "^3.0.0" inherits "^2.0.1" readable-stream "^2.1.0" to-arraybuffer "^1.0.0" @@ -6728,10 +6688,6 @@ 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_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-template@^0.2.0, string-template@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -6755,6 +6711,10 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^3.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" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -6874,10 +6834,6 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -symbol-observable@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" - symbol-observable@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" @@ -6935,10 +6891,6 @@ throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" -through@^2.3.6, through@~2.3, through@~2.3.1, through@2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - through2-filter@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" @@ -6960,13 +6912,17 @@ through2@^2.0.0, through2@~2.0.0: readable-stream "^2.1.5" xtend "~4.0.1" +through@2, through@^2.3.6, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + time-stamp@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" timed-out@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.0.tgz#43b98b14bb712c9161c28f4dc1f3068d67a04ec2" + version "3.1.3" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" timers-browserify@^2.0.2: version "2.0.2" @@ -7059,7 +7015,7 @@ ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@^2.6, uglify-js@~2.7.3, uglify-js@2.7.x: +uglify-js@2.7.x, uglify-js@^2.6, uglify-js@~2.7.3: version "2.7.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" dependencies: @@ -7072,7 +7028,7 @@ 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, uid-number@0.0.6: +uid-number@0.0.6, uid-number@~0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -7089,8 +7045,8 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" uniqid@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.0.tgz#33d9679f65022f48988a03fd24e7dcaf8f109eca" + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" dependencies: macaddress "^0.2.8" @@ -7105,7 +7061,7 @@ unique-stream@^2.0.2: json-stable-stringify "^1.0.0" through2-filter "^2.0.0" -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7159,8 +7115,8 @@ user-home@^2.0.0: os-homedir "^1.0.0" useragent@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.9.tgz#4dba2bc4dad1875777ab15de3ff8098b475000b7" + version "2.1.10" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.10.tgz#2456c5c2b722b47f3d8321ed257b490a3d9bb2af" dependencies: lru-cache "2.2.x" @@ -7176,7 +7132,7 @@ util-extend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" -util@^0.10.3, util@0.10.3: +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: @@ -7186,14 +7142,14 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" +uuid@3.0.1, uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + 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.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" @@ -7392,7 +7348,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@^1.1.1, which@^1.2.1, which@^1.2.9, which@~1.2.10, which@~1.2.11, which@1: +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.9, which@~1.2.10, which@~1.2.11: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: @@ -7410,15 +7366,19 @@ widest-line@^1.0.0: dependencies: string-width "^1.0.1" +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.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" -wordwrap@^1.0.0, wordwrap@>=0.0.2, wordwrap@~1.0.0: +wordwrap@>=0.0.2, wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -7426,10 +7386,6 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -7443,19 +7399,11 @@ wrap-fn@^0.1.0: dependencies: co "3.1.0" -wrappy@~1.0.2, wrappy@1: +wrappy@1, wrappy@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab" - dependencies: - graceful-fs "^4.1.2" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write-file-atomic@~1.1.4: +write-file-atomic@^1.1.2, write-file-atomic@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b" dependencies: @@ -7469,16 +7417,16 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" +ws@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9" dependencies: options ">=0.0.5" ultron "1.0.x" -ws@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9" +ws@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" dependencies: options ">=0.0.5" ultron "1.0.x" @@ -7508,7 +7456,7 @@ xmlhttprequest-ssl@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67" -xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -7561,14 +7509,7 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" -yauzl@^2.2.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.7.0.tgz#e21d847868b496fc29eaec23ee87fdd33e9b2bce" - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.0.1" - -yauzl@2.4.1: +yauzl@2.4.1, yauzl@^2.2.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" dependencies: @@ -7577,4 +7518,3 @@ yauzl@2.4.1: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - From bcd6212df0fb037cb1217c01f0390c9a1c35fa02 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 11 Jan 2017 20:55:05 -0700 Subject: [PATCH 249/452] Don't need use strict --- client/js/routes.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/js/routes.jsx b/client/js/routes.jsx index 95eeb55..ec128db 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -1,5 +1,3 @@ -'use strict'; - // if you use jsx, you have to import React import React from 'react'; import { Router, Route, IndexRoute } from 'react-router'; From b30257d0ed74be272579236c20e11648bae70e62 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 13 Jan 2017 13:13:40 -0700 Subject: [PATCH 250/452] Updates version number --- client/.nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/.nvmrc b/client/.nvmrc index b81ba51..b616717 100644 --- a/client/.nvmrc +++ b/client/.nvmrc @@ -1 +1 @@ -6.9.1 \ No newline at end of file +7.4.0 \ No newline at end of file From e0ada032b6d106344f87862271efdc7724582486 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 13 Jan 2017 13:13:52 -0700 Subject: [PATCH 251/452] Style loader causing problems. --- client/config/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index e555edd..40e4679 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -35,7 +35,7 @@ module.exports = function webpackConfig(stage) { const jsLoaders = [babel]; - const cssLoaders = ['style-loader', 'css-loader', 'postcss-loader']; + const cssLoaders = ['css-loader?importLoaders=1', 'postcss-loader']; const scssLoaders = cssLoaders.slice(0); scssLoaders.push(`sass-loader?outputStyle=expanded&includePaths[]=${(path.resolve(__dirname, './node_modules/bootstrap-sass'))}`); From 4b98d5697aed478aef79ed3e065895a7140a73b4 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 13 Jan 2017 17:14:40 -0700 Subject: [PATCH 252/452] formatting code --- client/config/settings.js | 48 +++++++++++----------- client/config/webpack.config.js | 72 ++++++++++++++++----------------- 2 files changed, 59 insertions(+), 61 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index bf4c08e..92f0bbd 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -1,14 +1,14 @@ -var info = require('../../package.json'); -var deployConfig = require('../../.s3-website.json'); -var path = require('path'); +const info = require('../../package.json'); +const deployConfig = require('../../.s3-website.json'); +const path = require('path'); -var clientAppPath = path.join(__dirname, '../'); +const clientAppPath = path.join(__dirname, '../'); -var devRelativeOutput = '/'; -var prodRelativeOutput = '/'; +const devRelativeOutput = '/'; +const prodRelativeOutput = '/'; -var devOutput = path.join(__dirname, '../../build/dev', devRelativeOutput); -var prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); +const devOutput = path.join(__dirname, '../../build/dev', devRelativeOutput); +const prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); //const prodAssetsUrl = ''; // Set this to the url where the assets will be deployed. // If you want the paths to be relative to the deploy then leave this @@ -16,43 +16,43 @@ var prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput) // it could be the ssl version of your S3 bucket ie: // https://s3.amazonaws.com/' + deployConfig.domain; -const prodAssetsUrl = 'https://s3.amazonaws.com/' + deployConfig.domain; +const prodAssetsUrl = `https://s3.amazonaws.com/${deployConfig.domain}`; // There is a warning if the .env file is missing // This is fine in a production setting, where settings // are loaded from the env and not from a file -require('dotenv').load({path: path.join(__dirname, '../../.env')}); +require('dotenv').load({ path: path.join(__dirname, '../../.env') }); -var hotPort = process.env.ASSETS_PORT || 8080; +const hotPort = process.env.ASSETS_PORT || 8080; module.exports = { - title: info.title, - author: info.author, - version: info.versions, - build: Date.now(), + title : info.title, + author : info.author, + version : info.versions, + build : Date.now(), - devRelativeOutput: devRelativeOutput, - prodRelativeOutput: prodRelativeOutput, + devRelativeOutput, + prodRelativeOutput, - devOutput: devOutput, - prodOutput: prodOutput, + devOutput, + prodOutput, // Dev urls devAssetsUrl: process.env.ASSETS_URL || '', - prodAssetsUrl: prodAssetsUrl, + prodAssetsUrl, - hotPort: hotPort, + hotPort, buildSuffix: '_bundle.js', - staticDir: clientAppPath + 'static', + staticDir: `${clientAppPath}static`, entries: { - app: clientAppPath + 'js/app.jsx' + app: `${clientAppPath}js/app.jsx` }, cssEntries: { - styles: clientAppPath + 'styles/styles.js' + styles: `${clientAppPath}styles/styles.js` } }; diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 40e4679..66fd1aa 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -16,7 +16,7 @@ module.exports = function webpackConfig(stage) { settings.prodAssetsUrl + settings.prodRelativeOutput : settings.devAssetsUrl + settings.devRelativeOutput; - let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. + let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. ',plugins[]=transform-class-properties'; // Allows class instance fields and class static properties. @@ -73,8 +73,8 @@ module.exports = function webpackConfig(stage) { new webpack.optimize.OccurrenceOrderPlugin(), new webpack.optimize.AggressiveMergingPlugin(), new ChunkManifestPlugin({ - filename: 'webpack-common-manifest.json', - manfiestVariable: 'webpackBundleManifest' + filename : 'webpack-common-manifest.json', + manfiestVariable : 'webpackBundleManifest' }), extractCSS @@ -96,47 +96,45 @@ module.exports = function webpackConfig(stage) { } const loaders = [ - { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, - { test: /\.css$/i, loader: extractCSS.extract(cssLoaders) }, - { test: /\.less$/i, loader: extractCSS.extract(lessLoaders) }, - { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, //'image-webpack-loader?optimizationLevel=7&interlaced=false' + { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, + { test: /\.css$/i, loader: extractCSS.extract(cssLoaders) }, + { test: /\.less$/i, loader: extractCSS.extract(lessLoaders) }, + { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; return { - context: __dirname, - entry: entries, - output: { - path: production ? settings.prodOutput : settings.devOutput, // Location where generated files will be output - filename : production ? '[name]-[chunkhash]' + settings.buildSuffix : '[name]' + settings.buildSuffix, - chunkFilename : production ? '[id]-[chunkhash]' + settings.buildSuffix : '[id]' + settings.buildSuffix, - publicPath : publicPath, + context : __dirname, + entry : entries, + output : { + publicPath, + // Location where generated files will be output + path : production ? settings.prodOutput : settings.devOutput, + filename : production ? `[name]-[chunkhash]${settings.buildSuffix}` : `[name]${settings.buildSuffix}`, + chunkFilename : production ? `[id]-[chunkhash]${settings.buildSuffix}` : `[id]${settings.buildSuffix}`, sourceMapFilename : 'debugging/[file].map', - pathinfo : !production // http://webpack.github.io/docs/configuration.html#output-pathinfo + // http://webpack.github.io/docs/configuration.html#output-pathinfo + pathinfo : !production }, - resolve : { - extensions : ['', '.js', '.json', '.jsx'], - modulesDirectories : ['node_modules', 'vendor'] + resolve: { + extensions : ['', '.js', '.json', '.jsx'], + modulesDirectories : ['node_modules', 'vendor'] }, - cache : true, - quiet : false, - noInfo : false, - debug : false, - outputPathinfo : !production, - devtool : production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool - stats : { - colors : true - }, - plugins : plugins, - module : { - loaders : loaders - }, - devServer : { - stats : { - cached : false, - exclude : [ /node_modules[\\\/]react(-router)?[\\\/]/ ] + cache : true, + quiet : false, + noInfo : false, + debug : false, + outputPathinfo : !production, + devtool : production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool + stats : { colors: true }, + plugins, + module : { loaders }, + devServer : { + stats: { + cached : false, + exclude : [/node_modules[\\\/]react(-router)?[\\\/]/] } } }; From 9feda3890f04fd7e30f5e4b062aa73509169f833 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 16 Jan 2017 17:09:11 -0700 Subject: [PATCH 253/452] Format for aslant --- client/config/karma.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/client/config/karma.js b/client/config/karma.js index 5807cb7..f93bdb8 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -1,5 +1,5 @@ // karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html -var webpack = require('webpack'); +const webpack = require('webpack'); const webpackConfig = require('./webpack.config')('test'); module.exports = () => { @@ -58,24 +58,24 @@ module.exports = () => { // karma-webpack configuration. Load and transpile js and jsx files. // Use istanbul-transformer post loader to generate code coverage report. webpack: { - devtool: 'eval', - plugins: webpackConfig.plugins, - module: webpackConfig.module, - resolve: webpackConfig.resolve, + devtool : 'eval', + plugins : webpackConfig.plugins, + module : webpackConfig.module, + resolve : webpackConfig.resolve, }, // Reduce the noise to the console webpackMiddleware: { - noInfo: true, - stats: { + noInfo : true, + stats : { colors: true, }, }, coverageReporter: { - type: 'lcovonly', - dir: '../coverage/', - file: 'coverage.info', + type : 'lcovonly', + dir : '../coverage/', + file : 'coverage.info', }, }; return testConfig; From 8529c540b2172fa6110ec3af744dabbc40f8af18 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 16 Jan 2017 17:11:30 -0700 Subject: [PATCH 254/452] Fixes postcss. Updates versions. --- client/package.json | 6 +- client/postcss.config.js | 9 ++ client/yarn.lock | 218 +++++++++++++++++++++++---------------- package.json | 3 +- yarn.lock | 11 +- 5 files changed, 150 insertions(+), 97 deletions(-) create mode 100644 client/postcss.config.js diff --git a/client/package.json b/client/package.json index 85532ec..027b7e9 100644 --- a/client/package.json +++ b/client/package.json @@ -8,7 +8,6 @@ "babel-runtime": "^6.20.0", "es6-promise": "^4.0.5", "lodash": "4.17.4", - "postcss-loader": "^1.2.1", "react": "15.4.2", "react-dom": "15.4.2", "react-proxy-loader": "0.3.4", @@ -20,7 +19,7 @@ "uuid": "3.0.1" }, "devDependencies": { - "autoprefixer-loader": "3.2.0", + "autoprefixer": "^6.6.1", "babel-core": "^6.21.0", "babel-eslint": "^7.1.1", "babel-loader": "^6.2.10", @@ -79,6 +78,9 @@ "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", "phantomjs-prebuilt": "^2.1.14", + "postcss-load-config": "^1.1.0", + "postcss-loader": "^1.2.1", + "postcss-smart-import": "^0.6.7", "protractor": "4.0.14", "psi": "2.0.4", "react-addons-test-utils": "^15.4.2", diff --git a/client/postcss.config.js b/client/postcss.config.js new file mode 100644 index 0000000..b72ff9c --- /dev/null +++ b/client/postcss.config.js @@ -0,0 +1,9 @@ +const postCss = require('postcss-smart-import'); +const autoprefixer = require('autoprefixer'); + +module.exports = { + plugins: [ + postCss({ /* ...options */ }), + autoprefixer({ /* ...options */ }) + ] +}; diff --git a/client/yarn.lock b/client/yarn.lock index 37e8af8..dd3bd27 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -7,8 +7,8 @@ resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.40.tgz#875c7ae739dcab1342794f51231c4aadcda6eb79" "@types/node@^6.0.46": - version "6.0.59" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.59.tgz#b7fd8f3144c447c829a8eab8805c3a523e9e5b44" + version "6.0.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.60.tgz#e7e134ebc674ae6ed93c36c767739b110d2c57fc" "@types/q@^0.0.32": version "0.0.32" @@ -108,9 +108,9 @@ ansi-html@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" -ansi-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" +ansi-regex@*, ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-styles@^2.2.1: version "2.2.1" @@ -136,6 +136,10 @@ ansistyles@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" +any-promise@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27" + anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" @@ -197,8 +201,8 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" array-flatten@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.0.tgz#26a692c83881fc68dac3ec5d1f0c1b49bf2304d9" + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" array-index@^1.0.0: version "1.0.0" @@ -302,16 +306,7 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -autoprefixer-loader@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/autoprefixer-loader/-/autoprefixer-loader-3.2.0.tgz#39a7b6646a8269865073d958c97f486152c2c84a" - dependencies: - autoprefixer "^6.0.2" - loader-utils "^0.2.11" - postcss "^5.0.4" - postcss-safe-parser "^1.0.1" - -autoprefixer@^6.0.2, autoprefixer@^6.3.1: +autoprefixer@^6.3.1, autoprefixer@^6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.6.1.tgz#11a4077abb4b313253ec2f6e1adb91ad84253519" dependencies: @@ -1056,8 +1051,8 @@ babel@6.5.2: resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" babylon@^6.11.0, babylon@^6.13.0: - version "6.14.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" + version "6.15.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" backo2@1.0.2: version "1.0.2" @@ -1320,8 +1315,8 @@ caniuse-api@^1.5.2: shelljs "^0.7.0" caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000604: - version "1.0.30000604" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000604.tgz#bc139270a777564d19c0aadcd832b491d093bda5" + version "1.0.30000611" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000611.tgz#1075d14d9b3cc153caf5e9e35f45565b03304c37" capture-stack-trace@^1.0.0: version "1.0.0" @@ -2820,8 +2815,8 @@ form-data@~2.0.0: mime-types "^2.1.11" formidable@^1.0.17: - version "1.0.17" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + version "1.1.1" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" forwarded@~0.1.0: version "0.1.0" @@ -3444,7 +3439,7 @@ imports-loader@0.7.0: loader-utils "^0.2.16" source-map "^0.5.6" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3542,9 +3537,9 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ipaddr.js@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" +ipaddr.js@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" is-absolute-url@^2.0.0: version "2.1.0" @@ -3863,8 +3858,8 @@ jasmine@2.4.1: jasmine-core "~2.4.0" jasmine@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.2.tgz#6283cef7085c095cc25d651e954df004f7e3e421" + version "2.5.3" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.3.tgz#5441f254e1fc2269deb1dfd93e0e57d565ff4d22" dependencies: exit "^0.1.2" glob "^7.0.6" @@ -3892,6 +3887,10 @@ js-tokens@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" +js-tokens@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.0.tgz#a2f2a969caae142fb3cd56228358c89366957bd1" + js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@~3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" @@ -4276,8 +4275,8 @@ lodash.isarray@^3.0.0: resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" lodash.isequal@^4.0.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.4.0.tgz#6295768e98e14dc15ce8d362ef6340db82852031" + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" lodash.keys@^3.0.0: version "3.1.2" @@ -4344,7 +4343,7 @@ lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@4.17.4, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@4.17.4, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4372,10 +4371,10 @@ longest@^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: - version "1.3.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8" + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: - js-tokens "^2.0.0" + js-tokens "^3.0.0" loud-rejection@^1.0.0: version "1.6.0" @@ -4392,7 +4391,11 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@2, lru-cache@2.2.x: +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" @@ -4507,15 +4510,15 @@ mime-db@~1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" -mime-db@~1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" +mime-db@~1.26.0: + version "1.26.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: - version "2.1.13" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" + version "2.1.14" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" dependencies: - mime-db "~1.25.0" + mime-db "~1.26.0" mime-types@~2.0.4: version "2.0.14" @@ -4640,8 +4643,8 @@ node-fetch@^1.0.1: is-stream "^1.0.1" node-forge@^0.6.46: - version "0.6.46" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.46.tgz#04a8a1c336eb72ef6f434ba7c854d608916c328d" + version "0.6.47" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.47.tgz#84a239c1eabfd9bbe3a9b7308d52102fdba1da81" node-gyp@^3.3.1: version "3.5.0" @@ -4981,8 +4984,8 @@ object-assign@^3.0.0: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + 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" @@ -5302,37 +5305,37 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" -postcss-load-config@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.0.0.tgz#1399f60dcd6bd9c3124b2eb22960f77f9dc08b3d" +postcss-load-config@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.1.0.tgz#1c3c217608642448c03bebf3c32b1b28985293f9" dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" - postcss-load-options "^1.0.2" - postcss-load-plugins "^2.0.0" + postcss-load-options "^1.1.0" + postcss-load-plugins "^2.2.0" -postcss-load-options@^1.0.2: +postcss-load-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.1.0.tgz#e39215d154a19f69f9cb6052bffad4a82f09f354" dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" -postcss-load-plugins@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.1.0.tgz#dbb6f46271df8d16e19b5d691ebda5175ce424a0" +postcss-load-plugins@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.2.0.tgz#84ef9cf36e637810ac5265e03f6d4c48ead83314" dependencies: cosmiconfig "^2.1.1" object-assign "^4.1.0" postcss-loader@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.2.1.tgz#8809ab184a9f903a01f660385f2e296ff563d22c" + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.2.2.tgz#bbf4e19a8cde85597e0c9bfd96015fe775a157ac" dependencies: loader-utils "^0.2.16" object-assign "^4.1.0" - postcss "^5.2.6" - postcss-load-config "^1.0.0" + postcss "^5.2.9" + postcss-load-config "^1.1.0" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -5343,8 +5346,8 @@ postcss-merge-idents@^2.1.5: postcss-value-parser "^3.1.1" postcss-merge-longhand@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.1.tgz#ff59b5dec6d586ce2cea183138f55c5876fa9cdc" + 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" @@ -5438,8 +5441,8 @@ postcss-normalize-url@^3.0.7: postcss-value-parser "^3.2.3" postcss-ordered-values@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.2.tgz#be8b511741fab2dac8e614a2302e9d10267b0771" + 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" @@ -5465,11 +5468,11 @@ postcss-reduce-transforms@^1.0.3: postcss "^5.0.8" postcss-value-parser "^3.0.1" -postcss-safe-parser@^1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-1.0.7.tgz#43bd0c8c84d5f7d8474de825c699e4dabcac72a8" +postcss-scss@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.4.0.tgz#087c052c529b9270d9580bd1248a0f93d3b40d57" dependencies: - postcss "^5.0.18" + postcss "^5.2.5" postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.2" @@ -5479,6 +5482,21 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-smart-import@^0.6.7: + version "0.6.7" + resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.6.7.tgz#653a69b524cb4a75533e7f6d17edaefb72dc68dd" + dependencies: + babel-runtime "^6.20.0" + lodash "^4.17.4" + object-assign "^4.1.0" + postcss "^5.2.9" + postcss-scss "^0.4.0" + postcss-value-parser "^3.3.0" + promise-each "^2.2.0" + read-cache "^1.0.0" + resolve "^1.2.0" + sugarss "^0.2.0" + postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" @@ -5508,9 +5526,9 @@ postcss-zindex@^2.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.18, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.6, postcss@^5.2.8: - version "5.2.9" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.9.tgz#282a644f92d4b871ade2d3ce8bd0ea46f18317b6" +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.4, postcss@^5.2.5, postcss@^5.2.8, postcss@^5.2.9: + version "5.2.10" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.10.tgz#b58b64e04f66f838b7bc7cb41f7dac168568a945" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -5555,6 +5573,12 @@ progress@^1.1.8, progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +promise-each@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/promise-each/-/promise-each-2.2.0.tgz#3353174eff2694481037e04e01f77aa0fb6d1b60" + dependencies: + any-promise "^0.1.0" + promise@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" @@ -5592,11 +5616,11 @@ protractor@4.0.14: webdriver-manager "^10.3.0" proxy-addr@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" + version "1.1.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" dependencies: forwarded "~0.1.0" - ipaddr.js "1.1.1" + ipaddr.js "1.2.0" prr@~0.0.0: version "0.0.0" @@ -5658,8 +5682,8 @@ qs@~6.1.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.1.0.tgz#ec1d1626b24278d99f0fdf4549e524e24eceeb26" query-string@^4.1.0, query-string@^4.2.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822" + version "4.3.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.1.tgz#54baada6713eafc92be75c47a731f2ebd09cd11d" dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -5821,6 +5845,12 @@ read-all-stream@^3.0.0: pinkie-promise "^2.0.0" readable-stream "^2.0.0" +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + dependencies: + pify "^2.3.0" + read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -6273,6 +6303,10 @@ resolve@1.1.x, resolve@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -6557,13 +6591,13 @@ sorted-object@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" -source-list-map@^0.1.4, source-list-map@~0.1.0, source-list-map@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e" +source-list-map@^0.1.4, 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.2, source-map-support@~0.4.0: - version "0.4.8" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.8.tgz#4871918d8a3af07289182e974e32844327b2e98b" + version "0.4.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.9.tgz#45eaa04f067e049d987b27599ed014a37750aaff" dependencies: source-map "^0.5.3" @@ -6618,8 +6652,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" + version "1.10.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -6671,8 +6705,8 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-http@^2.3.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.0.tgz#adf3309ced17624ebfb7ef13e6ac4cfe405a8b12" + version "2.6.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.2.tgz#bdfe40d2ee9262eb6bf2255bb3ad0ec0cdd6526d" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -6787,6 +6821,12 @@ style-loader@0.13.1: dependencies: loader-utils "^0.2.7" +sugarss@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-0.2.0.tgz#ac34237563327c6ff897b64742bf6aec190ad39e" + dependencies: + postcss "^5.2.4" + sum-up@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e" @@ -6817,8 +6857,8 @@ supports-color@^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.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: has-flag "^1.0.0" @@ -7310,10 +7350,10 @@ webpack-hot-middleware@^2.15.0: strip-ansi "^3.0.0" webpack-sources@^0.1.0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.3.tgz#15ce2fb79d0a1da727444ba7c757bf164294f310" + version "0.1.4" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd" dependencies: - source-list-map "~0.1.0" + source-list-map "~0.1.7" source-map "~0.5.3" webpack@1.14.0: diff --git a/package.json b/package.json index 47ae4dc..3093875 100644 --- a/package.json +++ b/package.json @@ -27,5 +27,6 @@ "dependencies": { "del": "^2.2.2" }, - "devDependencies": {} + "devDependencies": { + } } diff --git a/yarn.lock b/yarn.lock index dcd92f3..cf509e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,5 +1,7 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 + + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -68,8 +70,8 @@ globby@^5.0.0: pinkie-promise "^2.0.0" inflight@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.5.tgz#db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a" + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" @@ -101,8 +103,8 @@ minimatch@^3.0.2: brace-expansion "^1.0.0" object-assign@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" once@^1.3.0: version "1.4.0" @@ -141,4 +143,3 @@ rimraf@^2.2.8: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - From 3f54b25b0addc948cb6ab18c9eb399101c4ce695 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 24 Jan 2017 14:43:54 -0700 Subject: [PATCH 255/452] Remove uneeded .nvmrc --- client/.nvmrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 client/.nvmrc diff --git a/client/.nvmrc b/client/.nvmrc deleted file mode 100644 index b616717..0000000 --- a/client/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -7.4.0 \ No newline at end of file From 3aced7d97f08e28507efab9a9ec1730663edffcd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 31 Jan 2017 11:46:06 -0700 Subject: [PATCH 256/452] Adds s3-json for deployment of client app to s3 bucket --- package.json | 6 +- yarn.lock | 294 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 297 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 3093875..40fc8a6 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,8 @@ "react" ], "dependencies": { - "del": "^2.2.2" + "del": "^2.2.2", + "s3-website": "^2.1.0" }, - "devDependencies": { - } + "devDependencies": {} } diff --git a/yarn.lock b/yarn.lock index cf509e9..2518f79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,10 @@ # yarn lockfile v1 +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -16,10 +20,36 @@ arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +asap@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +async@^0.9.0: + version "0.9.2" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +aws-sdk@^2.1.4, aws-sdk@^2.2.4: + version "2.9.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.9.0.tgz#f258dcc295b1e7eca49d3624abfbf5f7d644172c" + dependencies: + buffer "4.9.1" + crypto-browserify "1.0.9" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.1.5" + url "0.10.3" + uuid "3.0.0" + xml2js "0.4.15" + xmlbuilder "2.6.2" + balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +base64-js@^1.0.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + brace-expansion@^1.0.0: version "1.1.6" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" @@ -27,10 +57,56 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" +buffer@4.9.1: + 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" + +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cloudfront-tls@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cloudfront-tls/-/cloudfront-tls-1.0.0.tgz#e8451106ab112e247714d3f0bc38aa198a347f16" + dependencies: + async "^0.9.0" + aws-sdk "^2.1.4" + commander "^2.6.0" + +colors@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +commander@^2.6.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +console.table@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.7.0.tgz#5c074bc990529c679095300372fcc2ef620f0ade" + dependencies: + easy-table "0.3.0" + +crypto-browserify@1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" + +deep-diff@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.4.tgz#aac5c39952236abe5f037a2349060ba01b00ae48" + del@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -43,10 +119,40 @@ del@^2.2.2: pinkie-promise "^2.0.0" rimraf "^2.2.8" +dezalgo@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + dependencies: + asap "^2.0.0" + wrappy "1" + +dotenv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" + +easy-table@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-0.3.0.tgz#46f3b04418273a716c2ce8c52f1caca9d0241cb7" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +glob@7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" + 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@^7.0.3, glob@^7.0.5: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" @@ -69,6 +175,14 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -96,12 +210,111 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +isarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + +lodash._basedifference@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" + dependencies: + lodash._baseindexof "^3.0.0" + lodash._cacheindexof "^3.0.0" + lodash._createcache "^3.0.0" + +lodash._baseflatten@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash._baseindexof@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + +lodash._cacheindexof@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + +lodash._createcache@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + dependencies: + lodash._getnative "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash.difference@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-3.2.2.tgz#dc463fffe6619ab4af49a3c87ace6695a285dde6" + dependencies: + lodash._basedifference "^3.0.0" + lodash._baseflatten "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.intersection@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-3.2.0.tgz#e5b3611298a1187247b99eeadb385a3da018c570" + dependencies: + lodash._baseindexof "^3.0.0" + lodash._cacheindexof "^3.0.0" + lodash._createcache "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + +lodash@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.5.0.tgz#19bb3f4d51278f0b8c818ed145c74ecf9fe40e6d" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + +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" + +mime@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" +object-assign@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -112,6 +325,10 @@ once@^1.3.0: dependencies: wrappy "1" +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -134,12 +351,89 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +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" + rimraf@^2.2.8: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: glob "^7.0.5" +run-auto@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/run-auto/-/run-auto-1.1.3.tgz#c2d5163fec1ab78b6345cdd3992fce032f671f88" + dependencies: + dezalgo "^1.0.1" + +s3-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/s3-diff/-/s3-diff-1.1.0.tgz#cf66700255ea214467534b41a8608e7be97e5be1" + dependencies: + aws-sdk "^2.2.4" + glob "^7.0.5" + lodash.difference "^3.2.2" + lodash.intersection "^3.2.0" + run-auto "^1.1.3" + +s3-website@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-2.1.0.tgz#9e2b9d4befa231dd423a17d6102345c2ef6b98af" + dependencies: + aws-sdk "^2.1.4" + cloudfront-tls "^1.0.0" + colors "^1.1.2" + commander "^2.6.0" + console.table "^0.7.0" + deep-diff "^0.3.0" + dotenv "^2.0.0" + glob "7.0.5" + log-update "^1.0.2" + merge-defaults "^0.2.1" + mime "^1.3.4" + object-assign "^2.0.0" + s3-diff "^1.1.0" + +sax@1.1.5, sax@>=0.6.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.5.tgz#1da50a8d00cdecd59405659f5ff85349fe773743" + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +uuid@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xml2js@0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.15.tgz#95cd03ff2dd144ec28bc6273bf2b2890c581ad0c" + dependencies: + sax ">=0.6.0" + xmlbuilder ">=2.4.6" + +xmlbuilder@2.6.2, xmlbuilder@>=2.4.6: + version "2.6.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-2.6.2.tgz#f916f6d10d45dc171b1be2e6e673fb6e0cc35d0a" + dependencies: + lodash "~3.5.0" From 7019a76267c70e7e812802bd3ed82f80b3153aad Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 31 Jan 2017 12:34:42 -0700 Subject: [PATCH 257/452] Updated readme and basic config --- README.md | 42 ++++++++++++++++++--------------- client/config/settings.js | 2 +- client/config/webpack.config.js | 2 ++ 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 30e7430..c617f3d 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,27 @@ #React Client Starter App [![Build Status](https://travis-ci.org/atomicjolt/react_client_starter_app.svg?branch=master)](https://travis-ci.org/atomicjolt/react_client_starter_app) [![Coverage Status](https://coveralls.io/repos/github/atomicjolt/react_client_starter_app/badge.svg?branch=coveralls)](https://coveralls.io/github/atomicjolt/react_client_starter_app?branch=coveralls) ----------------------- -There are many starter kits that will help you get started with React and Redux. This is the one created by, maintained by and used by [Atomic Jolt](http://www.atomicjolt.com). Atomic Jolt uses this as application as a starting place for our [Ruby on Rails React starter application](https://github.com/atomicjolt/react_starter_app) and our [Firebase React starter appliction](https://github.com/atomicjolt/react_firebase_starter_app). +There are many starter kits that will help you get started with React and Redux. +This is the one created by, maintained by and used by [Atomic Jolt](http://www.atomicjolt.com). +Atomic Jolt uses this as application as a starting place for our +[Ruby on Rails React starter application](https://github.com/atomicjolt/react_starter_app) +and our [Firebase React starter appliction](https://github.com/atomicjolt/react_firebase_starter_app). #Getting Started: ----------------------- -Make sure to install git and npm before you start then: +Make sure to install git, npm and yarn before you start then: 1. git clone https://github.com/atomicjolt/react_client_starter_app.git my_project_name -2. Rename .env.example to .env. This file contains the port the server will use. The default 8080 should be fine, but you can also use a local domain or ngrok if you wish. -3. npm install +2. Rename .env.example to .env. This file contains the port the server will use. + The default 8080 should be fine, but you can also use a local domain or ngrok if you wish. +3. Install packages with + + `yarn` + 4. Start server with: - `npm run hot` + `yarn hot` then visit http://localhost:8080 @@ -64,7 +72,7 @@ Files added to the static directory will be copied directly into the build. Thes ----------- Karma and Jasmine are used for testing. To run tests run: - `npm run test` + `yarn test` #Check for updates @@ -86,27 +94,23 @@ Inside the client directory run: You can also use a .env file. See the [s3-website](https://github.com/klaemo/s3-website) documentation for more options. - 2. Install the s3-website node package globally: - - `npm install -g s3-website` - - 3. Edit configuration. + 2. Edit configuration. Open up .s3-website.json and set the desired bucket name - 4. Configure the bucket as a website + 3. Configure the bucket as a website - `npm run create` + `yarn create` - 5. Deploy. + 4. Deploy. - `npm run release` + `yarn release` #Production ----------------------- If you want to see what your application will look like in production run - `npm run live` + `yarn live` This will serve files from the build/prod directory. @@ -116,17 +120,17 @@ This will serve files from the build/prod directory. Build a development release without deploying: - `npm run build_dev` + `yarn build_dev` Build a release without deploying: - `npm run build` + `yarn build` Build a release and deploy: - `npm run release` + `yarn release` License and attribution diff --git a/client/config/settings.js b/client/config/settings.js index 92f0bbd..2f82726 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -10,7 +10,7 @@ const prodRelativeOutput = '/'; const devOutput = path.join(__dirname, '../../build/dev', devRelativeOutput); const prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); -//const prodAssetsUrl = ''; // Set this to the url where the assets will be deployed. +// const prodAssetsUrl = ''; // Set this to the url where the assets will be deployed. // If you want the paths to be relative to the deploy then leave this // value as an empty string. This value could also be a CDN or // it could be the ssl version of your S3 bucket ie: diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 66fd1aa..5f7d9b4 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -29,6 +29,8 @@ module.exports = function webpackConfig(stage) { babelPlugins += ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code } else if (stage === 'hot') { babelPlugins += ',plugins[]=react-hot-loader/babel'; + } else if (stage === 'test') { + babelPlugins += ',plugins[]=babel-plugin-rewire'; } const babel = `babel?${babelPlugins}&${presets}`; From f55b3423fe2ee47868c4a05672f96533f581d3e7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 13:47:12 -0700 Subject: [PATCH 258/452] Updates eslint rules --- .eslintrc.yml | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 4d9f4eb..381daac 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -27,13 +27,12 @@ rules: - error - unix import/no-unresolved: 0 - no-multi-spaces: [1, { - "exceptions": { - "VariableDeclaration": true, - "ImportDeclaration": true, - "AssignmentExpression": true - } - }] + no-multi-spaces: + - 1 + - exceptions: + VariableDeclarator: true + ImportDeclaration: true + AssignmentExpression: true comma-dangle: - error - only-multiline @@ -41,11 +40,10 @@ rules: - error - devDependencies: true padded-blocks: 0 - key-spacing: [2, { - align: { - "afterColon": true, - "beforeColon": true, - "on": "colon", - "mode": "minimum" - } - }] + key-spacing: + - 2 + - align: + afterColon: true + beforeColon: true + "on": colon + mode: minimum From 38d32aef8c9e5ee1ac9ff8bd89570e58ca8d7e4b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 14:18:25 -0700 Subject: [PATCH 259/452] Updates readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c617f3d..c28d194 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ There are many starter kits that will help you get started with React and Redux. This is the one created by, maintained by and used by [Atomic Jolt](http://www.atomicjolt.com). Atomic Jolt uses this as application as a starting place for our -[Ruby on Rails React starter application](https://github.com/atomicjolt/react_starter_app) +[Ruby on Rails and React starter application](https://github.com/atomicjolt/react_rails_starter_app) and our [Firebase React starter appliction](https://github.com/atomicjolt/react_firebase_starter_app). From 455c3a43591ae80eba6e056a46746cc61090c4b0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 14:43:38 -0700 Subject: [PATCH 260/452] Removes unused test plugin from webpack config --- client/config/webpack.config.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 5f7d9b4..fac4750 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -30,7 +30,7 @@ module.exports = function webpackConfig(stage) { } else if (stage === 'hot') { babelPlugins += ',plugins[]=react-hot-loader/babel'; } else if (stage === 'test') { - babelPlugins += ',plugins[]=babel-plugin-rewire'; + // Add test plugins as needed } const babel = `babel?${babelPlugins}&${presets}`; @@ -48,9 +48,9 @@ module.exports = function webpackConfig(stage) { let entries = _.cloneDeep(settings.entries); const cssEntries = settings.cssEntries; - for (let name in cssEntries) { + _.each(cssEntries, (name) => { entries[name] = cssEntries[name]; - } + }); if (stage === 'hot') { entries = _.reduce(entries, (result, entry, key) => { From 2549e85922d48ff32f915bd3da93c00e0ea0198a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 14:43:52 -0700 Subject: [PATCH 261/452] New packages --- client/yarn.lock | 1267 +++++++++++++++++++++++----------------------- 1 file changed, 623 insertions(+), 644 deletions(-) diff --git a/client/yarn.lock b/client/yarn.lock index dd3bd27..8dfece9 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -3,12 +3,12 @@ "@types/jasmine@^2.5.36": - version "2.5.40" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.40.tgz#875c7ae739dcab1342794f51231c4aadcda6eb79" + version "2.5.41" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.41.tgz#d5e86161a0af80d52062b310a33ed65b051a0713" "@types/node@^6.0.46": - version "6.0.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.60.tgz#e7e134ebc674ae6ed93c36c767739b110d2c57fc" + version "6.0.62" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.62.tgz#85222c077b54f25b57417bb708b9f877bda37f89" "@types/q@^0.0.32": version "0.0.32" @@ -36,20 +36,20 @@ accepts@~1.3.3: mime-types "~2.1.11" negotiator "0.6.1" -acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: +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@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" + acorn@^3.0.0, acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" - adm-zip@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" @@ -70,12 +70,12 @@ agent-base@2: semver "~5.0.1" ajv-keywords@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.0.tgz#c11e6859eafff83e0dafc416929472eca946aa2c" + version "1.5.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" ajv@^4.7.0: - version "4.10.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.10.4.tgz#c0974dd00b3464984892d6010aa9c2c945933254" + version "4.11.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -230,11 +230,11 @@ array-unique@^0.2.1: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" array.prototype.find@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.1.tgz#1557f888df6c57e4d1256f20852d687a25b51fde" + version "2.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.3.tgz#08c3ec33e32ec4bab362a2958e686ae92f59271d" dependencies: define-properties "^1.1.2" - es-abstract "^1.5.0" + es-abstract "^1.7.0" arraybuffer.slice@0.0.6: version "0.0.6" @@ -307,14 +307,14 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" autoprefixer@^6.3.1, autoprefixer@^6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.6.1.tgz#11a4077abb4b313253ec2f6e1adb91ad84253519" + version "6.7.2" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.2.tgz#172ab07b998ae9b957530928a59a40be54a45023" dependencies: - browserslist "~1.5.1" - caniuse-db "^1.0.30000604" + browserslist "^1.7.1" + caniuse-db "^1.0.30000618" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^5.2.8" + postcss "^5.2.11" postcss-value-parser "^3.2.3" aws-sign2@~0.6.0: @@ -325,27 +325,27 @@ aws4@^1.2.1: version "1.5.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" -babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26" +babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: chalk "^1.1.0" esutils "^2.0.2" - js-tokens "^2.0.0" + js-tokens "^3.0.0" -babel-core@^6.18.0, babel-core@^6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724" - dependencies: - babel-code-frame "^6.20.0" - babel-generator "^6.21.0" - babel-helpers "^6.16.0" - babel-messages "^6.8.0" - babel-register "^6.18.0" - babel-runtime "^6.20.0" - babel-template "^6.16.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" +babel-core@^6.21.0, babel-core@^6.22.0: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.22.0" + babel-helpers "^6.22.0" + babel-messages "^6.22.0" + babel-register "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.1" + babel-types "^6.22.0" babylon "^6.11.0" convert-source-map "^1.1.0" debug "^2.1.1" @@ -367,144 +367,144 @@ babel-eslint@^7.1.1: babylon "^6.13.0" lodash.pickby "^4.6.0" -babel-generator@^6.18.0, babel-generator@^6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.21.0.tgz#605f1269c489a1c75deeca7ea16d43d4656c8494" +babel-generator@^6.18.0, babel-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" dependencies: - babel-messages "^6.8.0" - babel-runtime "^6.20.0" - babel-types "^6.21.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" source-map "^0.5.0" -babel-helper-bindify-decorators@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz#fc00c573676a6e702fffa00019580892ec8780a5" +babel-helper-bindify-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" dependencies: - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-helper-builder-binary-assignment-operator-visitor@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6" +babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" dependencies: - babel-helper-explode-assignable-expression "^6.18.0" - babel-runtime "^6.0.0" - babel-types "^6.18.0" + babel-helper-explode-assignable-expression "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-helper-builder-react-jsx@^6.8.0: - version "6.21.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.21.1.tgz#c4a24208655be9dc1cccf14d366da176f20645e4" +babel-helper-builder-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" dependencies: - babel-runtime "^6.9.0" - babel-types "^6.21.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" esutils "^2.0.0" lodash "^4.2.0" -babel-helper-call-delegate@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd" +babel-helper-call-delegate@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" dependencies: - babel-helper-hoist-variables "^6.18.0" - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2" +babel-helper-define-map@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" dependencies: - babel-helper-function-name "^6.18.0" - babel-runtime "^6.9.0" - babel-types "^6.18.0" + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" lodash "^4.2.0" -babel-helper-explode-assignable-expression@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe" +babel-helper-explode-assignable-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" dependencies: - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-helper-explode-class@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz#c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb" +babel-helper-explode-class@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b" dependencies: - babel-helper-bindify-decorators "^6.18.0" - babel-runtime "^6.0.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-helper-bindify-decorators "^6.22.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6" +babel-helper-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" dependencies: - babel-helper-get-function-arity "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-helper-get-function-arity@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz#a5b19695fd3f9cdfc328398b47dafcd7094f9f24" +babel-helper-get-function-arity@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-helper-hoist-variables@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz#a835b5ab8b46d6de9babefae4d98ea41e866b82a" +babel-helper-hoist-variables@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-helper-optimise-call-expression@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f" +babel-helper-optimise-call-expression@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-helper-regex@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6" +babel-helper-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" dependencies: - babel-runtime "^6.9.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" lodash "^4.2.0" -babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2: - version "6.20.3" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.20.3.tgz#9dd3b396f13e35ef63e538098500adc24c63c4e7" +babel-helper-remap-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" dependencies: - babel-helper-function-name "^6.18.0" - babel-runtime "^6.20.0" - babel-template "^6.16.0" - babel-traverse "^6.20.0" - babel-types "^6.20.0" + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e" +babel-helper-replace-supers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" dependencies: - babel-helper-optimise-call-expression "^6.18.0" - babel-messages "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" + babel-helper-optimise-call-expression "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-helpers@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3" +babel-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" dependencies: - babel-runtime "^6.0.0" - babel-template "^6.16.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" babel-loader@^6.2.10: version "6.2.10" @@ -515,17 +515,17 @@ babel-loader@^6.2.10: mkdirp "^0.5.1" object-assign "^4.0.1" -babel-messages@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9" +babel-messages@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" dependencies: - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-check-es2015-constants@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7" +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.0.0" + babel-runtime "^6.22.0" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" @@ -579,42 +579,42 @@ 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.3.13: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.20.0.tgz#442835e19179f45b87e92d477d70b9f1f18b5c4f" +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-generator-functions@^6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54" +babel-plugin-transform-async-generator-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.22.0.tgz#a720a98153a7596f204099cd5409f4b3c05bab46" dependencies: - babel-helper-remap-async-to-generator "^6.16.2" + babel-helper-remap-async-to-generator "^6.22.0" babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-async-to-generator@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999" +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" dependencies: - babel-helper-remap-async-to-generator "^6.16.0" + babel-helper-remap-async-to-generator "^6.22.0" babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-class-constructor-call@^6.3.13: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.18.0.tgz#80855e38a1ab47b8c6c647f8ea1bcd2c00ca3aae" +babel-plugin-transform-class-constructor-call@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.22.0.tgz#11a4d2216abb5b0eef298b493748f4f2f4869120" dependencies: babel-plugin-syntax-class-constructor-call "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -babel-plugin-transform-class-properties@^6.18.0, babel-plugin-transform-class-properties@^6.19.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz#1274b349abaadc835164e2004f4a2444a2788d5f" +babel-plugin-transform-class-properties@^6.19.0, babel-plugin-transform-class-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8" dependencies: - babel-helper-function-name "^6.18.0" + babel-helper-function-name "^6.22.0" babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.9.1" - babel-template "^6.15.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" babel-plugin-transform-decorators-legacy@^1.3.4: version "1.3.4" @@ -624,424 +624,422 @@ babel-plugin-transform-decorators-legacy@^1.3.4: babel-runtime "^6.2.0" babel-template "^6.3.0" -babel-plugin-transform-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d" +babel-plugin-transform-decorators@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c" dependencies: - babel-helper-define-map "^6.8.0" - babel-helper-explode-class "^6.8.0" + babel-helper-explode-class "^6.22.0" babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" - babel-types "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-do-expressions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.8.0.tgz#fda692af339835cc255bb7544efb8f7c1306c273" +babel-plugin-transform-do-expressions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" dependencies: babel-plugin-syntax-do-expressions "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-arrow-functions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d" +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.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoped-functions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d" +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.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.18.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.21.0.tgz#e840687f922e70fb2c42bb13501838c174a115ed" +babel-plugin-transform-es2015-block-scoping@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" dependencies: - babel-runtime "^6.20.0" - babel-template "^6.15.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" lodash "^4.2.0" -babel-plugin-transform-es2015-classes@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9" - dependencies: - babel-helper-define-map "^6.18.0" - babel-helper-function-name "^6.18.0" - babel-helper-optimise-call-expression "^6.18.0" - babel-helper-replace-supers "^6.18.0" - babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-template "^6.14.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" +babel-plugin-transform-es2015-classes@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" + dependencies: + babel-helper-define-map "^6.22.0" + babel-helper-function-name "^6.22.0" + babel-helper-optimise-call-expression "^6.22.0" + babel-helper-replace-supers "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-es2015-computed-properties@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870" +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" dependencies: - babel-helper-define-map "^6.8.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -babel-plugin-transform-es2015-destructuring@^6.18.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz#ff1d911c4b3f4cab621bd66702a869acd1900533" +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" dependencies: - babel-runtime "^6.9.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d" +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" dependencies: - babel-runtime "^6.0.0" - babel-types "^6.8.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-es2015-for-of@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70" +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" dependencies: - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719" +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" dependencies: - babel-helper-function-name "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.9.0" + babel-helper-function-name "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-es2015-literals@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468" +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.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40" +babel-plugin-transform-es2015-modules-amd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" + babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -babel-plugin-transform-es2015-modules-commonjs@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc" +babel-plugin-transform-es2015-modules-commonjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" dependencies: - babel-plugin-transform-strict-mode "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.16.0" - babel-types "^6.18.0" + babel-plugin-transform-strict-mode "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-es2015-modules-systemjs@^6.18.0: - version "6.19.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz#50438136eba74527efa00a5b0fefaf1dc4071da6" +babel-plugin-transform-es2015-modules-systemjs@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" dependencies: - babel-helper-hoist-variables "^6.18.0" - babel-runtime "^6.11.6" - babel-template "^6.14.0" + babel-helper-hoist-variables "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -babel-plugin-transform-es2015-modules-umd@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50" +babel-plugin-transform-es2015-modules-umd@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.18.0" - babel-runtime "^6.0.0" - babel-template "^6.8.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" -babel-plugin-transform-es2015-object-super@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5" +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" dependencies: - babel-helper-replace-supers "^6.8.0" - babel-runtime "^6.0.0" + babel-helper-replace-supers "^6.22.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.18.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.21.0.tgz#46a655e6864ef984091448cdf024d87b60b2a7d8" +babel-plugin-transform-es2015-parameters@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" dependencies: - babel-helper-call-delegate "^6.18.0" - babel-helper-get-function-arity "^6.18.0" - babel-runtime "^6.9.0" - babel-template "^6.16.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" + babel-helper-call-delegate "^6.22.0" + babel-helper-get-function-arity "^6.22.0" + babel-runtime "^6.22.0" + babel-template "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-es2015-shorthand-properties@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43" +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-es2015-spread@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c" +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.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be" +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" dependencies: - babel-helper-regex "^6.8.0" - babel-runtime "^6.0.0" - babel-types "^6.8.0" + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" -babel-plugin-transform-es2015-template-literals@^6.6.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b" +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.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-typeof-symbol@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798" +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" dependencies: - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.3.13: - version "6.11.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c" +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" dependencies: - babel-helper-regex "^6.8.0" - babel-runtime "^6.0.0" + babel-helper-regex "^6.22.0" + babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-exponentiation-operator@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4" +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.8.0" + babel-helper-builder-binary-assignment-operator-visitor "^6.22.0" babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-export-extensions@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz#fa80ff655b636549431bfd38f6b817bd82e47f5b" +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.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-flow-strip-types@^6.3.13: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.21.0.tgz#2eea3f8b5bb234339b47283feac155cfb237b948" +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.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-function-bind@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.8.0.tgz#e7f334ce69f50d28fe850a822eaaab9fa4f4d821" +babel-plugin-transform-function-bind@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" dependencies: babel-plugin-syntax-function-bind "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-object-rest-spread@^6.16.0: - version "6.20.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.20.2.tgz#e816c55bba77b14c16365d87e2ae48c8fd18fc2e" +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.20.0" + babel-runtime "^6.22.0" babel-plugin-transform-react-constant-elements@^6.9.1: - version "6.9.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.9.1.tgz#125b86d96cb322e2139b607fd749ad5fbb17f005" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.22.0.tgz#4af456f80d283e8be00f00f12852354defa08ee1" dependencies: - babel-runtime "^6.9.1" + babel-runtime "^6.22.0" -babel-plugin-transform-react-display-name@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.8.0.tgz#f7a084977383d728bdbdc2835bba0159577f660e" +babel-plugin-transform-react-display-name@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26" dependencies: - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" babel-plugin-transform-react-inline-elements@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.8.0.tgz#fc2d8fec1f2f87e5c4961ac367610039f325bbe6" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-inline-elements/-/babel-plugin-transform-react-inline-elements-6.22.0.tgz#6687211a32b49a52f22c573a2b5504a25ef17c53" dependencies: - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx-self@^6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.11.0.tgz#605c9450c1429f97a930f7e1dfe3f0d9d0dbd0f4" +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.9.0" + babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx-source@^6.3.13: - version "6.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.9.0.tgz#af684a05c2067a86e0957d4f343295ccf5dccf00" +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.9.0" + babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx@^6.3.13: - version "6.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.8.0.tgz#94759942f70af18c617189aa7f3593f1644a71ab" +babel-plugin-transform-react-jsx@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" dependencies: - babel-helper-builder-react-jsx "^6.8.0" + babel-helper-builder-react-jsx "^6.22.0" babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.0.0" + babel-runtime "^6.22.0" babel-plugin-transform-react-remove-prop-types@^0.2.11: - version "0.2.11" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.11.tgz#05eb7cc4670d6506d801680576589c7abcd51b00" + version "0.2.12" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.12.tgz#3406696df0b8b456089f9d726d27e7e123d2f929" -babel-plugin-transform-regenerator@^6.16.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.21.0.tgz#75d0c7e7f84f379358f508451c68a2c5fa5a9703" +babel-plugin-transform-regenerator@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" dependencies: regenerator-transform "0.9.8" babel-plugin-transform-runtime@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.22.0.tgz#10968d760bbf6517243081eec778e10fa828551c" dependencies: - babel-runtime "^6.9.0" + babel-runtime "^6.22.0" -babel-plugin-transform-strict-mode@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d" +babel-plugin-transform-strict-mode@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" dependencies: - babel-runtime "^6.0.0" - babel-types "^6.18.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" babel-polyfill@^6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.20.0.tgz#de4a371006139e20990aac0be367d398331204e7" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b" dependencies: - babel-runtime "^6.20.0" + babel-runtime "^6.22.0" core-js "^2.4.0" regenerator-runtime "^0.10.0" babel-preset-es2015@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312" - dependencies: - babel-plugin-check-es2015-constants "^6.3.13" - babel-plugin-transform-es2015-arrow-functions "^6.3.13" - babel-plugin-transform-es2015-block-scoped-functions "^6.3.13" - babel-plugin-transform-es2015-block-scoping "^6.18.0" - babel-plugin-transform-es2015-classes "^6.18.0" - babel-plugin-transform-es2015-computed-properties "^6.3.13" - babel-plugin-transform-es2015-destructuring "^6.18.0" - babel-plugin-transform-es2015-duplicate-keys "^6.6.0" - babel-plugin-transform-es2015-for-of "^6.18.0" - babel-plugin-transform-es2015-function-name "^6.9.0" - babel-plugin-transform-es2015-literals "^6.3.13" - babel-plugin-transform-es2015-modules-amd "^6.18.0" - babel-plugin-transform-es2015-modules-commonjs "^6.18.0" - babel-plugin-transform-es2015-modules-systemjs "^6.18.0" - babel-plugin-transform-es2015-modules-umd "^6.18.0" - babel-plugin-transform-es2015-object-super "^6.3.13" - babel-plugin-transform-es2015-parameters "^6.18.0" - babel-plugin-transform-es2015-shorthand-properties "^6.18.0" - babel-plugin-transform-es2015-spread "^6.3.13" - babel-plugin-transform-es2015-sticky-regex "^6.3.13" - babel-plugin-transform-es2015-template-literals "^6.6.0" - babel-plugin-transform-es2015-typeof-symbol "^6.18.0" - babel-plugin-transform-es2015-unicode-regex "^6.3.13" - babel-plugin-transform-regenerator "^6.16.0" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.22.0" + babel-plugin-transform-es2015-classes "^6.22.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.22.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.22.0" + babel-plugin-transform-es2015-modules-systemjs "^6.22.0" + babel-plugin-transform-es2015-modules-umd "^6.22.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.22.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.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" babel-preset-react@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.16.0.tgz#aa117d60de0928607e343c4828906e4661824316" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165" dependencies: babel-plugin-syntax-flow "^6.3.13" babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-flow-strip-types "^6.3.13" - babel-plugin-transform-react-display-name "^6.3.13" - babel-plugin-transform-react-jsx "^6.3.13" - babel-plugin-transform-react-jsx-self "^6.11.0" - babel-plugin-transform-react-jsx-source "^6.3.13" + babel-plugin-transform-flow-strip-types "^6.22.0" + babel-plugin-transform-react-display-name "^6.22.0" + babel-plugin-transform-react-jsx "^6.22.0" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" babel-preset-stage-0@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.16.0.tgz#f5a263c420532fd57491f1a7315b3036e428f823" + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.22.0.tgz#707eeb5b415da769eff9c42f4547f644f9296ef9" dependencies: - babel-plugin-transform-do-expressions "^6.3.13" - babel-plugin-transform-function-bind "^6.3.13" - babel-preset-stage-1 "^6.16.0" + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-function-bind "^6.22.0" + babel-preset-stage-1 "^6.22.0" -babel-preset-stage-1@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz#9d31fbbdae7b17c549fd3ac93e3cf6902695e479" +babel-preset-stage-1@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.22.0.tgz#7da05bffea6ad5a10aef93e320cfc6dd465dbc1a" dependencies: - babel-plugin-transform-class-constructor-call "^6.3.13" - babel-plugin-transform-export-extensions "^6.3.13" - babel-preset-stage-2 "^6.16.0" + babel-plugin-transform-class-constructor-call "^6.22.0" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.22.0" -babel-preset-stage-2@^6.16.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz#9eb7bf9a8e91c68260d5ba7500493caaada4b5b5" +babel-preset-stage-2@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07" dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.18.0" - babel-plugin-transform-decorators "^6.13.0" - babel-preset-stage-3 "^6.17.0" - -babel-preset-stage-3@^6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.3.13" - babel-plugin-transform-async-generator-functions "^6.17.0" - babel-plugin-transform-async-to-generator "^6.16.0" - babel-plugin-transform-exponentiation-operator "^6.3.13" - babel-plugin-transform-object-rest-spread "^6.16.0" - -babel-register@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68" - dependencies: - babel-core "^6.18.0" - babel-runtime "^6.11.6" + babel-plugin-transform-class-properties "^6.22.0" + babel-plugin-transform-decorators "^6.22.0" + babel-preset-stage-3 "^6.22.0" + +babel-preset-stage-3@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" + dependencies: + babel-core "^6.22.0" + babel-runtime "^6.22.0" core-js "^2.4.0" home-or-tmp "^2.0.0" lodash "^4.2.0" mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.20.0, babel-runtime@^6.6.1, babel-runtime@^6.9.0, babel-runtime@^6.9.1: - version "6.20.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.20.0.tgz#87300bdcf4cd770f09bf0048c64204e17806d16f" +babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.6.1: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" dependencies: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.3.0, babel-template@^6.7.0, babel-template@^6.8.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca" +babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.3.0, babel-template@^6.7.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" dependencies: - babel-runtime "^6.9.0" - babel-traverse "^6.16.0" - babel-types "^6.16.0" + babel-runtime "^6.22.0" + babel-traverse "^6.22.0" + babel-types "^6.22.0" babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.21.0.tgz#69c6365804f1a4f69eb1213f85b00a818b8c21ad" +babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: + version "6.22.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" dependencies: - babel-code-frame "^6.20.0" - babel-messages "^6.8.0" - babel-runtime "^6.20.0" - babel-types "^6.21.0" - babylon "^6.11.0" + babel-code-frame "^6.22.0" + babel-messages "^6.22.0" + babel-runtime "^6.22.0" + babel-types "^6.22.0" + babylon "^6.15.0" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.13.0, babel-types@^6.15.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.20.0, babel-types@^6.21.0, babel-types@^6.8.0, babel-types@^6.9.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.21.0.tgz#314b92168891ef6d3806b7f7a917fdf87c11a4b2" +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" dependencies: - babel-runtime "^6.20.0" + babel-runtime "^6.22.0" esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^1.0.1" @@ -1050,7 +1048,7 @@ babel@6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" -babylon@^6.11.0, babylon@^6.13.0: +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: version "6.15.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" @@ -1094,8 +1092,8 @@ base64url@~1.0.4: meow "~2.0.0" bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" @@ -1142,19 +1140,19 @@ bluebird@^3.3.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" body-parser@^1.12.4: - version "1.15.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67" + version "1.16.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.0.tgz#924a5e472c6229fb9d69b85a20d5f2532dec788b" dependencies: bytes "2.4.0" content-type "~1.0.2" - debug "~2.2.0" + debug "2.6.0" depd "~1.1.0" - http-errors "~1.5.0" - iconv-lite "0.4.13" + http-errors "~1.5.1" + iconv-lite "0.4.15" on-finished "~2.3.0" - qs "6.2.0" - raw-body "~2.1.7" - type-is "~1.6.13" + qs "6.2.1" + raw-body "~2.2.0" + type-is "~1.6.14" boom@2.x.x: version "2.10.1" @@ -1206,11 +1204,12 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@^1.0.1, browserslist@^1.5.2, browserslist@~1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.5.2.tgz#1c82fde0ee8693e6d15c49b7bff209dc06298c56" +browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.1.tgz#cc9bd193979a2a4b09fdb3df6003fefe48ccefe1" dependencies: - caniuse-db "^1.0.30000604" + caniuse-db "^1.0.30000617" + electron-to-chromium "^1.2.1" buffer-equal-constant-time@^1.0.1: version "1.0.1" @@ -1305,18 +1304,17 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" caniuse-api@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.2.tgz#8f393c682f661c0a997b77bba6e826483fb3600e" + version "1.5.3" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" dependencies: browserslist "^1.0.1" caniuse-db "^1.0.30000346" lodash.memoize "^4.1.0" lodash.uniq "^4.3.0" - shelljs "^0.7.0" -caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000604: - version "1.0.30000611" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000611.tgz#1075d14d9b3cc153caf5e9e35f45565b03304c37" +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000617, caniuse-db@^1.0.30000618: + version "1.0.30000621" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000621.tgz#be8726af1a39315618a0f364998cf9c9a0431177" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1411,8 +1409,8 @@ clap@^1.0.9: chalk "^1.1.3" clean-css@3.4.x: - version "3.4.23" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.23.tgz#604fbbca24c12feb59b02f00b84f1fb7ded6d001" + version "3.4.24" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.24.tgz#89f5a5e9da37ae02394fe049a41388abbe72c3b5" dependencies: commander "2.8.x" source-map "0.4.x" @@ -1487,8 +1485,8 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" color-convert@^1.3.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.8.2.tgz#be868184d7c8631766d54e7078e2672d7c7e3339" + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: color-name "^1.1.1" @@ -1664,9 +1662,9 @@ 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.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" +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@~1.0.2: version "1.0.2" @@ -1712,14 +1710,14 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: require-from-string "^1.1.0" coveralls@^2.11.15: - version "2.11.15" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.15.tgz#37d3474369d66c14f33fa73a9d25cee6e099fca0" + version "2.11.16" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.16.tgz#da9061265142ddee954f68379122be97be8ab4b1" dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" log-driver "1.2.5" minimist "1.2.0" - request "2.75.0" + request "2.79.0" create-error-class@^3.0.1: version "3.0.2" @@ -1827,9 +1825,9 @@ cssesc@^0.1.0: postcss-value-parser "^3.2.3" postcss-zindex "^2.0.1" -csso@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.2.1.tgz#51fbb5347e50e81e6ed51668a48490ae6fe2afe2" +csso@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.1.tgz#4f8d91a156f2f1c2aebb40b8fb1b5eb83d94d3b9" dependencies: clap "^1.0.9" source-map "^0.5.3" @@ -1879,7 +1877,7 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@^2.1.1, debug@^2.2.0: +debug@2, debug@2.6.0, debug@^2.1.1, debug@^2.2.0: version "2.6.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" dependencies: @@ -2167,6 +2165,10 @@ ejs@^2.5.5: version "2.5.5" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77" +electron-to-chromium@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.1.tgz#63ac7579a1c5bedb296c8607621f2efc9a54b968" + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -2263,9 +2265,9 @@ error@^4.2.0: string-template "~0.2.0" xtend "~4.0.0" -es-abstract@^1.5.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99" +es-abstract@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.0" @@ -2368,15 +2370,15 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-airbnb-base@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.0.1.tgz#5401dba284c6b7d7c8fb1c2ee19aba018f9dfa21" +eslint-config-airbnb-base@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.0.tgz#dc9b3ec70b8c74dcbe6d6257c9da3992c39ca2ca" eslint-config-airbnb@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-14.0.0.tgz#bfd87a71102ba3ee19c3733357000b3d5e39790f" + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-14.1.0.tgz#355d290040bbf8e00bf8b4b19f4b70cbe7c2317f" dependencies: - eslint-config-airbnb-base "^11.0.1" + eslint-config-airbnb-base "^11.1.0" eslint-import-resolver-node@^0.2.0: version "0.2.3" @@ -2394,8 +2396,8 @@ eslint-module-utils@^2.0.0: pkg-dir "^1.0.0" eslint-plugin-babel@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.0.0.tgz#a92114e2c493ac3034b030d7ecf96e174a76ef3f" + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.0.1.tgz#77de74dabd67a6bef3b16bf258f5804e971e7349" eslint-plugin-import@^2.2.0: version "2.2.0" @@ -2429,8 +2431,8 @@ eslint-plugin-react@^6.9.0: jsx-ast-utils "^1.3.4" eslint@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.13.1.tgz#564d2646b5efded85df96985332edd91a23bff25" + version "3.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.15.0.tgz#bdcc6a6c5ffe08160e7b93c066695362a91e30f2" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -2438,7 +2440,7 @@ eslint@^3.13.1: debug "^2.1.1" doctrine "^1.2.2" escope "^3.6.0" - espree "^3.3.1" + espree "^3.4.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" @@ -2467,11 +2469,11 @@ eslint@^3.13.1: text-table "~0.2.0" user-home "^2.0.0" -espree@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c" +espree@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" dependencies: - acorn "^4.0.1" + acorn "4.0.4" acorn-jsx "^3.0.0" esprima-fb@~12001.1.0-dev-harmony-fb: @@ -2576,12 +2578,12 @@ expand-range@^1.8.1: fill-range "^2.1.0" express@^4.14.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" + version "4.14.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.14.1.tgz#646c237f766f148c2120aff073817b9e4d7e0d33" dependencies: accepts "~1.3.3" array-flatten "1.1.1" - content-disposition "0.5.1" + content-disposition "0.5.2" content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" @@ -2590,19 +2592,19 @@ express@^4.14.0: encodeurl "~1.0.1" escape-html "~1.0.3" etag "~1.7.0" - finalhandler "0.5.0" + finalhandler "0.5.1" fresh "0.3.0" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.1" path-to-regexp "0.1.7" - proxy-addr "~1.1.2" + proxy-addr "~1.1.3" qs "6.2.0" range-parser "~1.2.0" - send "0.14.1" - serve-static "~1.11.1" - type-is "~1.6.13" + send "0.14.2" + serve-static "~1.11.2" + type-is "~1.6.14" utils-merge "1.0.0" vary "~1.1.0" @@ -2659,8 +2661,8 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.8.tgz#02f1b6e0ea0d46c24e0b51a2d24df069563a5ad6" + version "0.8.9" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2740,6 +2742,16 @@ finalhandler@0.5.0: statuses "~1.3.0" unpipe "~1.0.0" +finalhandler@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.1.tgz#2c400d8d4530935bc232549c5fa385ec07de6fcd" + dependencies: + debug "~2.2.0" + escape-html "~1.0.3" + on-finished "~2.3.0" + statuses "~1.3.1" + unpipe "~1.0.0" + find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -2806,14 +2818,6 @@ form-data@~1.0.0-rc3, form-data@~1.0.0-rc4: combined-stream "^1.0.5" mime-types "^2.1.11" -form-data@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - formidable@^1.0.17: version "1.1.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" @@ -2831,8 +2835,8 @@ from@~0: resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" front-matter@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.1.tgz#f7071f549798d7cabe9f3f3c011316d7322bf41b" + version "2.1.2" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.1.2.tgz#f75983b9f2f413be658c93dfd7bd8ce4078f5cdb" dependencies: js-yaml "^3.4.6" @@ -3298,8 +3302,8 @@ hawk@~3.1.3: sntp "1.x.x" he@1.1.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.0.tgz#29319d49beec13a9b1f3c4f9b2a6dde4859bb2a7" + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" he@^0.5.0: version "0.5.0" @@ -3362,7 +3366,7 @@ html-truncate@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.1.tgz#90a546b9429bec7aeb5d57a53547c317fbd6f5f3" -http-errors@~1.5.0: +http-errors@~1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" dependencies: @@ -3408,9 +3412,9 @@ husl@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/husl/-/husl-5.0.3.tgz#ee272aaff1bebe40df3588ed007b70de7e679788" -iconv-lite@0.4.13, iconv-lite@~0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +iconv-lite@0.4.15, iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" icss-replace-symbols@^1.0.2: version "1.0.2" @@ -3425,8 +3429,8 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" ignore@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" + version "3.2.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.2.tgz#1c51e1ef53bab6ddc15db4d9ac4ec139eceb3410" image-size@~0.5.0: version "0.5.1" @@ -3803,8 +3807,8 @@ istanbul-instrumenter-loader@1.2.0: object-assign "^4.1.0" istanbul-lib-coverage@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2" + version "1.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" istanbul-lib-instrument@^1.1.3: version "1.4.2" @@ -3883,21 +3887,24 @@ js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -js-tokens@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" - js-tokens@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.0.tgz#a2f2a969caae142fb3cd56228358c89366957bd1" + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" -js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@~3.6.1: +js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: argparse "^1.0.7" esprima "^2.6.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.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" @@ -3973,10 +3980,9 @@ jsprim@^1.2.2: verror "1.3.6" jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.3.5.tgz#9ba6297198d9f754594d62e59496ffb923778dd4" + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz#5afe38868f56bc8cc7aeaef0100ba8c75bd12591" dependencies: - acorn-jsx "^3.0.1" object-assign "^4.1.0" jwa@~1.0.0: @@ -4262,10 +4268,6 @@ lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" -lodash.indexof@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c" - lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -4423,10 +4425,8 @@ marked@^0.3.6, marked@~0.3.0: resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" math-expression-evaluator@^1.2.14: - version "1.2.14" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.14.tgz#39511771ed9602405fba9affff17eb4d2a3843ab" - dependencies: - lodash.indexof "^4.0.5" + version "1.2.16" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" media-typer@0.3.0: version "0.3.0" @@ -4598,8 +4598,8 @@ multipipe@^0.1.2: duplexer2 "0.0.2" mumath@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.1.tgz#264b3d610d7a0a4e574ff282424b5427be0b0c96" + version "3.3.3" + resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.3.tgz#262e10fcc10699f7050dc707575d39db5c903181" dependencies: almost-equal "^1.1.0" @@ -4608,8 +4608,8 @@ mute-stream@0.0.5, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" nan@^2.3.0, nan@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" + version "2.5.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" natural-compare@^1.4.0: version "1.4.0" @@ -4643,8 +4643,8 @@ node-fetch@^1.0.1: is-stream "^1.0.1" node-forge@^0.6.46: - version "0.6.47" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.47.tgz#84a239c1eabfd9bbe3a9b7308d52102fdba1da81" + version "0.6.48" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.48.tgz#6986ea43bdd3cadc47a19db97759055edf753c01" node-gyp@^3.3.1: version "3.5.0" @@ -4712,8 +4712,8 @@ node-libs-browser@^0.7.0: vm-browserify "0.0.4" node-pre-gyp@^0.6.29: - version "0.6.32" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" + version "0.6.33" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9" dependencies: mkdirp "~0.5.1" nopt "~3.0.6" @@ -5253,16 +5253,16 @@ postcss-calc@^5.2.0: reduce-css-calc "^1.2.6" postcss-colormin@^2.1.8: - version "2.2.1" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.1.tgz#dc5421b6ae6f779ef6bfd47352b94abe59d0316b" + 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.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.0.tgz#08c6d06130fe58a91a21ff50829e1aad6a3a1acc" + 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" @@ -5526,14 +5526,14 @@ postcss-zindex@^2.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.4, postcss@^5.2.5, postcss@^5.2.8, postcss@^5.2.9: - version "5.2.10" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.10.tgz#b58b64e04f66f838b7bc7cb41f7dac168568a945" +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.11, postcss@^5.2.4, postcss@^5.2.5, postcss@^5.2.9: + version "5.2.12" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.12.tgz#6a2b15e35dd65634441bb0961fa796904c7890e0" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" source-map "^0.5.6" - supports-color "^3.1.2" + supports-color "^3.2.3" prelude-ls@~1.1.2: version "1.1.2" @@ -5554,8 +5554,8 @@ pretty-bytes@^3.0.1: number-is-nan "^1.0.0" private@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" process-nextick-args@~1.0.6: version "1.0.7" @@ -5615,7 +5615,7 @@ protractor@4.0.14: source-map-support "~0.4.0" webdriver-manager "^10.3.0" -proxy-addr@~1.1.2: +proxy-addr@~1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" dependencies: @@ -5669,10 +5669,14 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@6.2.0, qs@~6.2.0: +qs@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" +qs@6.2.1, qs@~6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" + qs@^6.1.0, qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" @@ -5707,12 +5711,12 @@ range-parser@^1.0.3, range-parser@^1.2.0, 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.1.7: - version "2.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" +raw-body@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" dependencies: bytes "2.4.0" - iconv-lite "0.4.13" + iconv-lite "0.4.15" unpipe "1.0.0" rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.6: @@ -5732,8 +5736,8 @@ react-addons-test-utils@^15.4.2: object-assign "^4.1.0" react-base16-styling@^0.4.1: - version "0.4.6" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.4.6.tgz#ac23cb19b278974d965003b88f06a038d790bc80" + version "0.4.7" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.4.7.tgz#a3eaf884a0adfc1896455f6302ff75de72e51a2e" dependencies: base16 "^1.0.0" color-space "^1.14.3" @@ -6031,8 +6035,8 @@ redux-devtools-dock-monitor@1.1.1: react-pure-render "^1.0.2" redux-devtools-instrument@^1.0.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.6.0.tgz#a16678a6c3338db10cd5e0b8801e294c52466eb8" + version "1.7.1" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.7.1.tgz#30a28b76ac7fcfd0b8d4295ab6178cfc85088f6c" dependencies: lodash "^4.2.0" symbol-observable "^1.0.2" @@ -6088,7 +6092,7 @@ regenerator-transform@0.9.8: regex-cache@^0.4.2: version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + resolved "http://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" dependencies: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" @@ -6169,7 +6173,7 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@2, request@^2.54.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: +request@2, request@2.79.0, request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -6194,32 +6198,6 @@ request@2, request@^2.54.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, r tunnel-agent "~0.4.1" uuid "^3.0.0" -request@2.75.0, request@^2.61.0, request@^2.72.0: - version "2.75.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - 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" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - request@~2.72.0: version "2.72.0" resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" @@ -6299,11 +6277,11 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.x, resolve@^1.1.6: +resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.2.0: +resolve@^1.1.6, resolve@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" @@ -6428,9 +6406,9 @@ semver@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" -send@0.14.1: - version "0.14.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" +send@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef" dependencies: debug "~2.2.0" depd "~1.1.0" @@ -6439,21 +6417,21 @@ send@0.14.1: escape-html "~1.0.3" etag "~1.7.0" fresh "0.3.0" - http-errors "~1.5.0" + http-errors "~1.5.1" mime "1.3.4" - ms "0.7.1" + ms "0.7.2" on-finished "~2.3.0" range-parser "~1.2.0" - statuses "~1.3.0" + statuses "~1.3.1" -serve-static@~1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" +serve-static@~1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.2.tgz#2cf9889bd4435a320cc36895c9aa57bd662e6ac7" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.14.1" + send "0.14.2" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -6482,7 +6460,7 @@ sha@~2.0.1: graceful-fs "^4.1.2" readable-stream "^2.0.2" -shelljs@^0.7.0, shelljs@^0.7.5: +shelljs@^0.7.5: version "0.7.6" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" dependencies: @@ -6596,8 +6574,8 @@ source-list-map@^0.1.4, source-list-map@~0.1.7: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" source-map-support@^0.4.2, source-map-support@~0.4.0: - version "0.4.9" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.9.tgz#45eaa04f067e049d987b27599ed014a37750aaff" + version "0.4.11" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" dependencies: source-map "^0.5.3" @@ -6674,7 +6652,7 @@ stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" -"statuses@>= 1.3.1 < 2", statuses@~1.3.0: +"statuses@>= 1.3.1 < 2", statuses@~1.3.0, statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -6705,8 +6683,8 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-http@^2.3.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.2.tgz#bdfe40d2ee9262eb6bf2255bb3ad0ec0cdd6526d" + version "2.6.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -6856,20 +6834,20 @@ 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.1.2: +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" svgo@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.1.tgz#287320fed972cb097e72c2bb1685f96fe08f8034" + 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.2.1" - js-yaml "~3.6.1" + csso "~2.3.1" + js-yaml "~3.7.0" mkdirp "~0.5.1" sax "~1.2.1" whet.extend "~0.9.9" @@ -6974,7 +6952,7 @@ tmp@0.0.24: version "0.0.24" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" -tmp@0.0.28: +tmp@0.0.28, tmp@0.0.x: version "0.0.28" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" dependencies: @@ -7040,7 +7018,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.13: +type-is@~1.6.14: version "1.6.14" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" dependencies: @@ -7155,10 +7133,11 @@ user-home@^2.0.0: os-homedir "^1.0.0" useragent@^2.1.9: - version "2.1.10" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.10.tgz#2456c5c2b722b47f3d8321ed257b490a3d9bb2af" + version "2.1.12" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.12.tgz#aa7da6cdc48bdc37ba86790871a7321d64edbaa2" dependencies: lru-cache "2.2.x" + tmp "0.0.x" utf8@2.1.0: version "2.1.0" @@ -7332,8 +7311,8 @@ webpack-core@^0.6.9, webpack-core@~0.6.9: source-map "~0.4.1" webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.9.0.tgz#a1c67a3dfd8a5c5d62740aa0babe61758b4c84aa" + version "1.10.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.0.tgz#7d5be2651e692fddfafd8aaed177c16ff51f0eb8" dependencies: memory-fs "~0.4.1" mime "^1.3.4" @@ -7341,8 +7320,8 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.9.0: range-parser "^1.0.3" webpack-hot-middleware@^2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.15.0.tgz#71995af7c0025f109df482f86f1e10379526d026" + version "2.16.1" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.16.1.tgz#ae209bcab2b9b672f1b0fdcf6c5c2a680ff118e1" dependencies: ansi-html "0.0.6" html-entities "^1.2.0" @@ -7377,8 +7356,8 @@ webpack@1.14.0: webpack-core "~0.6.9" whatwg-fetch@>=0.10.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.1.tgz#078b9461bbe91cea73cbce8bb122a05f9e92b772" + version "2.0.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" whet.extend@~0.9.9: version "0.9.9" From 089e8910d63c4b38597a47a8634f23d47c856f64 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 16:48:03 -0700 Subject: [PATCH 262/452] Fixing lint styles --- .eslintignore | 5 +++++ .eslintrc.yml | 7 +------ .nvmrc | 2 +- client/config/webpack.config.js | 16 ++++++++-------- client/js/constants/error.js | 6 +++--- client/js/constants/network.js | 10 +++++----- client/js/constants/wrapper.js | 4 ++-- 7 files changed, 25 insertions(+), 25 deletions(-) create mode 100644 .eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..4cb7a62 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +# /node_modules/* and /bower_components/* ignored by default + +# Ignore built files except build/index.js +build/* +!build/index.js diff --git a/.eslintrc.yml b/.eslintrc.yml index 381daac..8f9f728 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -41,9 +41,4 @@ rules: - devDependencies: true padded-blocks: 0 key-spacing: - - 2 - - align: - afterColon: true - beforeColon: true - "on": colon - mode: minimum + - 0 diff --git a/.nvmrc b/.nvmrc index b616717..a2931d3 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -7.4.0 \ No newline at end of file +7.5.0 \ No newline at end of file diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index fac4750..d35ef42 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -75,13 +75,13 @@ module.exports = function webpackConfig(stage) { new webpack.optimize.OccurrenceOrderPlugin(), new webpack.optimize.AggressiveMergingPlugin(), new ChunkManifestPlugin({ - filename : 'webpack-common-manifest.json', - manfiestVariable : 'webpackBundleManifest' + filename: 'webpack-common-manifest.json', + manfiestVariable: 'webpackBundleManifest' }), extractCSS // Use to extract common code from multiple entry points into a single init.js - //new webpack.optimize.CommonsChunkPlugin('init.js'); + // new webpack.optimize.CommonsChunkPlugin('init.js'); ]; } else if (stage === 'hot') { plugins = [ @@ -98,13 +98,13 @@ module.exports = function webpackConfig(stage) { } const loaders = [ - { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, + { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, - { test: /\.css$/i, loader: extractCSS.extract(cssLoaders) }, + { test: /\.css$/i, loader: extractCSS.extract(cssLoaders) }, { test: /\.less$/i, loader: extractCSS.extract(lessLoaders) }, { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, - { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } + { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; return { @@ -136,7 +136,7 @@ module.exports = function webpackConfig(stage) { devServer : { stats: { cached : false, - exclude : [/node_modules[\\\/]react(-router)?[\\\/]/] + exclude : [/node_modules[\\/]react(-router)?[\\/]/] } } }; diff --git a/client/js/constants/error.js b/client/js/constants/error.js index 6d097f5..264917b 100644 --- a/client/js/constants/error.js +++ b/client/js/constants/error.js @@ -1,5 +1,5 @@ export default { - TIMEOUT : 'NETWORK_TIMEOUT', - ERROR : 'NETWORK_ERROR', - NOT_AUTHORIZED : 'NETWORK_NOT_AUTHORIZED', + TIMEOUT: 'NETWORK_TIMEOUT', + ERROR: 'NETWORK_ERROR', + NOT_AUTHORIZED: 'NETWORK_NOT_AUTHORIZED', }; diff --git a/client/js/constants/network.js b/client/js/constants/network.js index 0035a60..b770921 100644 --- a/client/js/constants/network.js +++ b/client/js/constants/network.js @@ -1,7 +1,7 @@ export default { - GET : 'get', - POST : 'post', - PUT : 'put', - DEL : 'delete', - TIMEOUT : 20000, + GET: 'get', + POST: 'post', + PUT: 'put', + DEL: 'delete', + TIMEOUT: 20000, }; diff --git a/client/js/constants/wrapper.js b/client/js/constants/wrapper.js index 7130632..0626dd1 100644 --- a/client/js/constants/wrapper.js +++ b/client/js/constants/wrapper.js @@ -11,8 +11,8 @@ export default function (actionTypes, asyncActionTypes) { types = _.reduce(asyncActionTypes, (result, key) => ({ ...result, - [key] : key, - [`${key}${DONE}`] : `${key}${DONE}` + [key]: key, + [`${key}${DONE}`]: `${key}${DONE}` }), types); types.DONE = DONE; From 8cf97b562f7deaa729c4e220d89dedd90feca814 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 17:10:47 -0700 Subject: [PATCH 263/452] Moves contents of html head into seperate file --- client/html/layouts/application.html | 15 +-------------- client/html/layouts/partials/_head.html | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 client/html/layouts/partials/_head.html diff --git a/client/html/layouts/application.html b/client/html/layouts/application.html index f19bc82..33fa4d5 100644 --- a/client/html/layouts/application.html +++ b/client/html/layouts/application.html @@ -1,19 +1,6 @@ - - - - React Client Starter - - - - - + <%- include('./partials/_head.html') %> <%- include('./partials/_header.html') %> <%- content %> diff --git a/client/html/layouts/partials/_head.html b/client/html/layouts/partials/_head.html new file mode 100644 index 0000000..1bd779e --- /dev/null +++ b/client/html/layouts/partials/_head.html @@ -0,0 +1,14 @@ + + + + React Client Starter + + + + + \ No newline at end of file From d39c37616d1f3116913a7d86180b958da67f8573 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 17:19:02 -0700 Subject: [PATCH 264/452] Move head tags back into layout --- client/html/layouts/application.html | 4 +++- client/html/layouts/partials/_head.html | 26 ++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/client/html/layouts/application.html b/client/html/layouts/application.html index 33fa4d5..0a41ff5 100644 --- a/client/html/layouts/application.html +++ b/client/html/layouts/application.html @@ -1,6 +1,8 @@ - <%- include('./partials/_head.html') %> + + <%- include('./partials/_head.html') %> + <%- include('./partials/_header.html') %> <%- content %> diff --git a/client/html/layouts/partials/_head.html b/client/html/layouts/partials/_head.html index 1bd779e..94f1d3a 100644 --- a/client/html/layouts/partials/_head.html +++ b/client/html/layouts/partials/_head.html @@ -1,14 +1,12 @@ - - - - React Client Starter - - - - - \ No newline at end of file + + +React Client Starter + + + + From 2163ed972c88e985c5b6fe490f6333ba6ba38d1a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 18:05:42 -0700 Subject: [PATCH 265/452] Adds webpack only build --- client/build_webpack.js | 3 +++ client/tools/build/index.js | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 client/build_webpack.js diff --git a/client/build_webpack.js b/client/build_webpack.js new file mode 100644 index 0000000..c4c0b22 --- /dev/null +++ b/client/build_webpack.js @@ -0,0 +1,3 @@ +const build = require('./tools/build'); + +build.buildWebpackEntries(false); diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 580529f..e59d517 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -159,7 +159,8 @@ function watch(){ module.exports = { watch : watch, - build : build + build : build, + buildWebpackEntries }; From 6d2a1e17347e6dcaaa1f6cee5a1c435a049687ce Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 18:05:51 -0700 Subject: [PATCH 266/452] Fixes webpack config build error --- client/config/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index d35ef42..f92caa4 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -48,7 +48,7 @@ module.exports = function webpackConfig(stage) { let entries = _.cloneDeep(settings.entries); const cssEntries = settings.cssEntries; - _.each(cssEntries, (name) => { + _.each(cssEntries, (path, name) => { entries[name] = cssEntries[name]; }); From 1699ffdb62aa1e41ce1693cc0f16c8a9f2ab4ed5 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 6 Feb 2017 18:06:29 -0700 Subject: [PATCH 267/452] Renames param --- client/config/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index f92caa4..c92fd21 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -48,7 +48,7 @@ module.exports = function webpackConfig(stage) { let entries = _.cloneDeep(settings.entries); const cssEntries = settings.cssEntries; - _.each(cssEntries, (path, name) => { + _.each(cssEntries, (_stylePath, name) => { entries[name] = cssEntries[name]; }); From f0273a5701c260966aedc90c53449f20b98fa36e Mon Sep 17 00:00:00 2001 From: James Carbine Date: Mon, 6 Feb 2017 22:06:35 -0700 Subject: [PATCH 268/452] Fix lint errors (#11) * remove old bind polyfill that is no longer needed * Fix lint errors/warnings --- .eslintrc.yml | 17 +++++++++++++++-- client/js/app.jsx | 8 ++++++-- client/js/components/layout/index.jsx | 4 ++++ client/js/constants/wrapper.js | 2 +- client/js/loaders/jwt.js | 2 +- client/js/routes.jsx | 4 ++-- client/js/store/configure_store.js | 2 +- client/specs_support/helper.js | 26 ++++++++++++-------------- client/specs_support/spec_helper.js | 21 --------------------- client/specs_support/stub.jsx | 11 ++++++----- 10 files changed, 48 insertions(+), 49 deletions(-) delete mode 100644 client/specs_support/spec_helper.js diff --git a/.eslintrc.yml b/.eslintrc.yml index 8f9f728..44d0975 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -40,5 +40,18 @@ rules: - error - devDependencies: true padded-blocks: 0 - key-spacing: - - 0 + key-spacing: 0 + space-before-function-paren: + - 2 + - never + func-names: + - 2 + - as-needed + react/prefer-stateless-function: + - 2 + - ignorePureComponents: true + react/forbid-prop-types: + - 2 + - forbid: + - any + - array diff --git a/client/js/app.jsx b/client/js/app.jsx index ad353df..2db3dd6 100644 --- a/client/js/app.jsx +++ b/client/js/app.jsx @@ -3,6 +3,7 @@ import es6Promise from 'es6-promise'; import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; +import injectTapEventPlugin from 'react-tap-event-plugin'; import routes from './routes'; import DevTools from './dev/dev_tools'; import configureStore from './store/configure_store'; @@ -16,11 +17,14 @@ es6Promise.polyfill(); // Can go away when react 1.0 release // Check this repo: // https://github.com/zilverline/react-tap-event-plugin -import injectTapEventPlugin from "react-tap-event-plugin"; injectTapEventPlugin(); -class Root extends React.Component { +class Root extends React.PureComponent { + static propTypes = { + store: React.PropTypes.object.isRequired, + }; + render() { const devTools = __DEV__ ? : null; const { store } = this.props; diff --git a/client/js/components/layout/index.jsx b/client/js/components/layout/index.jsx index 56a9b0d..4aa2d2a 100644 --- a/client/js/components/layout/index.jsx +++ b/client/js/components/layout/index.jsx @@ -6,6 +6,10 @@ export default class Index extends React.Component { children: React.PropTypes.node, }; + static defaultProps = { + children: '', + } + constructor() { super(); this.state = {}; diff --git a/client/js/constants/wrapper.js b/client/js/constants/wrapper.js index 0626dd1..172443c 100644 --- a/client/js/constants/wrapper.js +++ b/client/js/constants/wrapper.js @@ -2,7 +2,7 @@ import _ from 'lodash'; export const DONE = '_DONE'; -export default function (actionTypes, asyncActionTypes) { +export default function(actionTypes, asyncActionTypes) { let types = _.reduce(actionTypes, (result, key) => ({ ...result, diff --git a/client/js/loaders/jwt.js b/client/js/loaders/jwt.js index 32a4c67..a2143a3 100644 --- a/client/js/loaders/jwt.js +++ b/client/js/loaders/jwt.js @@ -1,6 +1,6 @@ import { refreshJwt } from '../actions/jwt'; -export default function (dispatch, currentUserId) { +export default function(dispatch, currentUserId) { const refresh = 1000 * 60 * 20; // every 20 minutes setInterval(() => { dispatch(refreshJwt(currentUserId)); diff --git a/client/js/routes.jsx b/client/js/routes.jsx index ec128db..37b1714 100644 --- a/client/js/routes.jsx +++ b/client/js/routes.jsx @@ -9,9 +9,9 @@ import NotFound from './components/common/not_found'; export default ( - + - + ); diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js index a9173be..693b1de 100644 --- a/client/js/store/configure_store.js +++ b/client/js/store/configure_store.js @@ -21,7 +21,7 @@ if (__DEV__) { ]; } -export default function (initialState) { +export default function(initialState) { const store = compose(...enhancers)(createStore)(rootReducer, initialState); if (__DEV__ && module.hot) { diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index 6fcfee7..23f862c 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -8,28 +8,26 @@ export default class Helper { return { subscribe: () => {}, dispatch: () => {}, - getState: () => { - return {...state}; - } + getState: () => ({ ...state }) }; } // Create a real store that can be used for testing static makeStore(settings) { const initialState = { - jwt : "fake_jwt_token", - settings : _.assign({ - csrf : "csrf_token", - apiUrl : "http://www.example.com" - }, settings) + jwt: 'fake_jwt_token', + settings: _.assign({ + csrf: 'csrf_token', + apiUrl: 'http://www.example.com' + }, settings) }; return configureStore(initialState); } static testPayload() { return JSON.stringify([{ - "id":1, - "name":"Starter App" + id: 1, + name: 'Starter App' }]); } @@ -41,8 +39,8 @@ export default class Helper { RegExp('.*/api/test') ).andReturn({ status: 200, - contentType: "application/json", - statusText: "OK", + contentType: 'application/json', + statusText: 'OK', responseText: Helper.testPayload() }); @@ -50,8 +48,8 @@ export default class Helper { RegExp('.*/api/test/.+') ).andReturn({ status: 200, - contentType: "application/json", - statusText: "OK", + contentType: 'application/json', + statusText: 'OK', responseText: Helper.testPayload() }); }); diff --git a/client/specs_support/spec_helper.js b/client/specs_support/spec_helper.js deleted file mode 100644 index 91469f9..0000000 --- a/client/specs_support/spec_helper.js +++ /dev/null @@ -1,21 +0,0 @@ -// Test helper. Load libraries and polyfills - -// Function.prototype.bind polyfill used by PhantomJS -if (typeof Function.prototype.bind !== 'function') { - Function.prototype.bind = function bind(obj) { - var args = Array.prototype.slice.call(arguments, 1), - self = this, - nop = function() { - }, - bound = function() { - return self.apply( - this instanceof nop ? this : (obj || {}), args.concat( - Array.prototype.slice.call(arguments) - ) - ); - }; - nop.prototype = this.prototype || {}; - bound.prototype = new nop(); - return bound; - }; -} \ No newline at end of file diff --git a/client/specs_support/stub.jsx b/client/specs_support/stub.jsx index 53f846f..1b51410 100644 --- a/client/specs_support/stub.jsx +++ b/client/specs_support/stub.jsx @@ -1,10 +1,11 @@ -"use strict"; - import React from 'react'; -export default class Stub extends React.Component{ +export default class Stub extends React.PureComponent { + static propTypes = { + children: React.PropTypes.object.isRequired, + } - render(){ + render() { return
    {this.props.children}
    ; } -} \ No newline at end of file +} From 05511e6aaedef5718ddf77b2111e1627936999a6 Mon Sep 17 00:00:00 2001 From: James Carbine Date: Wed, 8 Feb 2017 10:47:14 -0700 Subject: [PATCH 269/452] Update eslint (#12) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove array from forbidden props add a11y rule don’t force default values --- .eslintrc.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 44d0975..8621c62 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -41,6 +41,8 @@ rules: - devDependencies: true padded-blocks: 0 key-spacing: 0 + react/require-default-props: 0 + jsx-a11y/no-static-element-interactions: 0 space-before-function-paren: - 2 - never @@ -54,4 +56,3 @@ rules: - 2 - forbid: - any - - array From c6d0dbee2e245797735d8a3ea2c4a35bf789af6a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 8 Feb 2017 10:58:54 -0700 Subject: [PATCH 270/452] Add s3-website as dev dependency --- client/package.json | 1 + client/yarn.lock | 216 ++++++++++++++++++++++++++++++++++++++++---- package.json | 7 +- 3 files changed, 204 insertions(+), 20 deletions(-) diff --git a/client/package.json b/client/package.json index 027b7e9..657600d 100644 --- a/client/package.json +++ b/client/package.json @@ -89,6 +89,7 @@ "redux-devtools": "3.3.1", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.2.0", + "s3-website": "^2.1.0", "sass-loader": "4.1.1", "style-loader": "0.13.1", "url-loader": "0.5.7", diff --git a/client/yarn.lock b/client/yarn.lock index 8dfece9..700f174 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -100,7 +100,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.1.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -108,7 +108,7 @@ ansi-html@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" -ansi-regex@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -317,6 +317,20 @@ autoprefixer@^6.3.1, autoprefixer@^6.6.1: postcss "^5.2.11" postcss-value-parser "^3.2.3" +aws-sdk@^2.1.4, aws-sdk@^2.2.4: + version "2.10.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.10.0.tgz#5acb2a213147c503915dbd3d0aa324a136fed25a" + dependencies: + buffer "4.9.1" + crypto-browserify "1.0.9" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.1.5" + url "0.10.3" + uuid "3.0.0" + xml2js "0.4.15" + xmlbuilder "2.6.2" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -1228,7 +1242,7 @@ buffer-to-vinyl@^1.0.0: uuid "^2.0.1" vinyl "^1.0.0" -buffer@^4.9.0: +buffer@4.9.1, buffer@^4.9.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: @@ -1421,7 +1435,7 @@ cli-color@~0.1.6: dependencies: es5-ext "0.8.x" -cli-cursor@^1.0.1: +cli-cursor@^1.0.1, cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: @@ -1459,6 +1473,14 @@ clone@^1.0.0, clone@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" +cloudfront-tls@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cloudfront-tls/-/cloudfront-tls-1.0.0.tgz#e8451106ab112e247714d3f0bc38aa198a347f16" + dependencies: + async "^0.9.0" + aws-sdk "^2.1.4" + commander "^2.6.0" + cmd-shim@~2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" @@ -1523,7 +1545,7 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@^1.1.0, colors@~1.1.2: +colors@^1.1.0, colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1556,7 +1578,7 @@ commander@2.8.x, commander@~2.8.1: dependencies: graceful-readlink ">= 1.0.0" -commander@2.9.x, commander@^2.9.0: +commander@2.9.x, commander@^2.6.0, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1654,6 +1676,12 @@ 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" +console.table@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.7.0.tgz#5c074bc990529c679095300372fcc2ef620f0ade" + dependencies: + easy-table "0.3.0" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -1738,6 +1766,10 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +crypto-browserify@1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" + crypto-browserify@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" @@ -1957,6 +1989,10 @@ decompress@^3.0.0: vinyl-assign "^1.0.1" vinyl-fs "^2.2.0" +deep-diff@^0.3.0: + version "0.3.4" + resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.4.tgz#aac5c39952236abe5f037a2349060ba01b00ae48" + deep-extend@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" @@ -2073,6 +2109,10 @@ dotenv@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" +dotenv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" + download@^4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac" @@ -2131,6 +2171,10 @@ each-async@^1.0.0: onetime "^1.0.0" set-immediate-shim "^1.0.0" +easy-table@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-0.3.0.tgz#46f3b04418273a716c2ce8c52f1caca9d0241cb7" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -3018,6 +3062,17 @@ glob-stream@^5.3.2: to-absolute-glob "^0.1.1" unique-stream "^2.0.2" +glob@7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" + 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@^3.2.11: version "3.2.11" resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" @@ -3443,7 +3498,7 @@ imports-loader@0.7.0: loader-utils "^0.2.16" source-map "^0.5.6" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3877,6 +3932,10 @@ jju@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + jodid25519@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" @@ -4196,6 +4255,25 @@ lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" +lodash._basedifference@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" + dependencies: + lodash._baseindexof "^3.0.0" + lodash._cacheindexof "^3.0.0" + lodash._createcache "^3.0.0" + +lodash._baseflatten@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash._baseindexof@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -4204,6 +4282,16 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" +lodash._cacheindexof@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + +lodash._createcache@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + dependencies: + lodash._getnative "^3.0.0" + lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -4258,6 +4346,14 @@ lodash.debounce@^4.0.4: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" +lodash.difference@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-3.2.2.tgz#dc463fffe6619ab4af49a3c87ace6695a285dde6" + dependencies: + lodash._basedifference "^3.0.0" + lodash._baseflatten "^3.0.0" + lodash.restparam "^3.0.0" + lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -4268,6 +4364,15 @@ lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" +lodash.intersection@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-3.2.0.tgz#e5b3611298a1187247b99eeadb385a3da018c570" + dependencies: + lodash._baseindexof "^3.0.0" + lodash._cacheindexof "^3.0.0" + lodash._createcache "^3.0.0" + lodash.restparam "^3.0.0" + lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" @@ -4353,6 +4458,14 @@ lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" +lodash@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" + +lodash@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.5.0.tgz#19bb3f4d51278f0b8c818ed145c74ecf9fe40e6d" + lodash@~4.16.4: version "4.16.6" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" @@ -4361,6 +4474,13 @@ log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + log4js@^0.6.31: version "0.6.38" resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" @@ -4393,11 +4513,7 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - -lru-cache@2.2.x: +lru-cache@2, lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" @@ -4474,6 +4590,12 @@ meow@~2.0.0: minimist "^1.1.0" object-assign "^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" @@ -6277,11 +6399,11 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.x: +resolve@1.1.x, resolve@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.2.0: +resolve@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" @@ -6318,6 +6440,12 @@ run-async@^0.1.0: dependencies: once "^1.3.0" +run-auto@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/run-auto/-/run-auto-1.1.3.tgz#c2d5163fec1ab78b6345cdd3992fce032f671f88" + dependencies: + dezalgo "^1.0.1" + run-parallel@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039" @@ -6330,6 +6458,34 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +s3-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/s3-diff/-/s3-diff-1.1.0.tgz#cf66700255ea214467534b41a8608e7be97e5be1" + dependencies: + aws-sdk "^2.2.4" + glob "^7.0.5" + lodash.difference "^3.2.2" + lodash.intersection "^3.2.0" + run-auto "^1.1.3" + +s3-website@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-2.1.0.tgz#9e2b9d4befa231dd423a17d6102345c2ef6b98af" + dependencies: + aws-sdk "^2.1.4" + cloudfront-tls "^1.0.0" + colors "^1.1.2" + commander "^2.6.0" + console.table "^0.7.0" + deep-diff "^0.3.0" + dotenv "^2.0.0" + glob "7.0.5" + log-update "^1.0.2" + merge-defaults "^0.2.1" + mime "^1.3.4" + object-assign "^2.0.0" + s3-diff "^1.1.0" + safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -6364,7 +6520,11 @@ sax@0.6.x: version "0.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" -sax@~1.2.1: +sax@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.5.tgz#1da50a8d00cdecd59405659f5ff85349fe773743" + +sax@>=0.6.0, sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -7119,6 +7279,13 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -7161,6 +7328,10 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" +uuid@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" + uuid@3.0.1, uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" @@ -7460,6 +7631,13 @@ 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" +xml2js@0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.15.tgz#95cd03ff2dd144ec28bc6273bf2b2890c581ad0c" + dependencies: + sax ">=0.6.0" + xmlbuilder ">=2.4.6" + xml2js@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d" @@ -7467,7 +7645,13 @@ xml2js@0.4.4: sax "0.6.x" xmlbuilder ">=1.0.0" -xmlbuilder@>=1.0.0: +xmlbuilder@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-2.6.2.tgz#f916f6d10d45dc171b1be2e6e673fb6e0cc35d0a" + dependencies: + lodash "~3.5.0" + +xmlbuilder@>=1.0.0, xmlbuilder@>=2.4.6: version "8.2.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" diff --git a/package.json b/package.json index 40fc8a6..d084813 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "live": "cd ./client && node server.js", "build_dev": "cd ./client && node ./build.js", "build": "cd ./client && node ./build.js --release", - "create": "cd ./client && node ./build.js --release && cd .. && s3-website create", - "release": "cd ./client && node ./build.js --release && cd .. && s3-website deploy", + "create": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js create", + "release": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js deploy", "lint": "cd ./client && eslint js" }, "repository": { @@ -25,8 +25,7 @@ "react" ], "dependencies": { - "del": "^2.2.2", - "s3-website": "^2.1.0" + "del": "^2.2.2" }, "devDependencies": {} } From 9caf68649817e1b7fb7de6751e14fdfd92d68fc0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 8 Feb 2017 11:03:03 -0700 Subject: [PATCH 271/452] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c28d194..b345a50 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Karma and Jasmine are used for testing. To run tests run: ----------- Inside the client directory run: - `npm-check-updates` + `yarn upgrade-interactive` #Deploy to S3: From 1de344c1f67f2386817c0a114dcfd30f25d0e565 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 8 Feb 2017 11:10:06 -0700 Subject: [PATCH 272/452] Updates packages --- client/package.json | 26 +-- client/yarn.lock | 549 ++++++++++++++++++++------------------------ 2 files changed, 267 insertions(+), 308 deletions(-) diff --git a/client/package.json b/client/package.json index 657600d..ffa560f 100644 --- a/client/package.json +++ b/client/package.json @@ -11,11 +11,11 @@ "react": "15.4.2", "react-dom": "15.4.2", "react-proxy-loader": "0.3.4", - "react-redux": "5.0.1", - "react-router": "3.0.0", + "react-redux": "^5.0.2", + "react-router": "^3.0.2", "react-tap-event-plugin": "2.0.1", "redux": "3.6.0", - "superagent": "3.3.1", + "superagent": "^3.4.1", "uuid": "3.0.1" }, "devDependencies": { @@ -27,7 +27,7 @@ "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.9.1", "babel-plugin-transform-react-inline-elements": "^6.8.0", - "babel-plugin-transform-react-remove-prop-types": "^0.2.11", + "babel-plugin-transform-react-remove-prop-types": "^0.3.1", "babel-plugin-transform-runtime": "^6.15.0", "babel-preset-es2015": "^6.18.0", "babel-preset-react": "^6.16.0", @@ -42,23 +42,23 @@ "eslint-config-airbnb": "^14.0.0", "eslint-plugin-babel": "^4.0.0", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jsx-a11y": "3.0.2", + "eslint-plugin-jsx-a11y": "^4.0.0", "eslint-plugin-react": "^6.9.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.14.0", "extract-text-webpack-plugin": "1.0.1", - "file-loader": "0.9.0", + "file-loader": "^0.10.0", "front-matter": "^2.1.1", - "fs-extra": "^1.0.0", - "html-minifier": "3.2.3", + "fs-extra": "^2.0.0", + "html-minifier": "^3.3.1", "html-truncate": "^1.2.1", "imports-loader": "0.7.0", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "1.2.0", "jasmine": "^2.5.2", "jasmine-core": "2.5.2", - "karma": "1.3.0", + "karma": "^1.4.1", "karma-chrome-launcher": "2.0.0", "karma-cli": "1.0.1", "karma-coverage": "1.1.1", @@ -73,7 +73,7 @@ "less-loader": "2.2.3", "marked": "^0.3.6", "minimist": "1.2.0", - "node-sass": "4.2.0", + "node-sass": "^4.5.0", "node-watch": "^0.4.1", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", @@ -81,16 +81,16 @@ "postcss-load-config": "^1.1.0", "postcss-loader": "^1.2.1", "postcss-smart-import": "^0.6.7", - "protractor": "4.0.14", + "protractor": "^5.1.1", "psi": "2.0.4", "react-addons-test-utils": "^15.4.2", "react-hot-loader": "^3.0.0-beta.6", "redbox-react": "^1.3.3", - "redux-devtools": "3.3.1", + "redux-devtools": "^3.3.2", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.2.0", "s3-website": "^2.1.0", - "sass-loader": "4.1.1", + "sass-loader": "^5.0.1", "style-loader": "0.13.1", "url-loader": "0.5.7", "webpack": "1.14.0", diff --git a/client/yarn.lock b/client/yarn.lock index 700f174..7c0b87c 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -2,10 +2,6 @@ # yarn lockfile v1 -"@types/jasmine@^2.5.36": - version "2.5.41" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.41.tgz#d5e86161a0af80d52062b310a33ed65b051a0713" - "@types/node@^6.0.46": version "6.0.62" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.62.tgz#85222c077b54f25b57417bb708b9f877bda37f89" @@ -14,22 +10,15 @@ version "0.0.32" resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" -"@types/selenium-webdriver@2.53.37": - version "2.53.37" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.37.tgz#34f743c20e53ae7100ede90870fde554df2447f8" +"@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39": + version "2.53.39" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.39.tgz#15ff93392c339abd39d6d3a04e715faa9a263cf3" abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -accepts@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.1.4.tgz#d71c96f7d41d0feda2c38cd14e8a27c04158df4a" - dependencies: - mime-types "~2.0.4" - negotiator "0.4.9" - -accepts@~1.3.3: +accepts@1.3.3, accepts@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: @@ -54,13 +43,13 @@ adm-zip@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" -adm-zip@0.4.7, adm-zip@^0.4.7: +adm-zip@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" -after@0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" agent-base@2: version "2.0.1" @@ -174,6 +163,12 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +aria-query@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.3.0.tgz#cb8a9984e2862711c83c80ade5b8f5ca0de2b467" + dependencies: + ast-types-flow "0.0.7" + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -266,6 +261,10 @@ assert@^1.1.1: dependencies: util "0.10.3" +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -899,9 +898,9 @@ babel-plugin-transform-react-jsx@^6.22.0: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-remove-prop-types@^0.2.11: - version "0.2.12" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.12.tgz#3406696df0b8b456089f9d726d27e7e123d2f929" +babel-plugin-transform-react-remove-prop-types@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.3.1.tgz#e59f281d06617eb93453dbb066d3f737f3299326" babel-plugin-transform-regenerator@^6.22.0: version "6.22.0" @@ -1078,17 +1077,17 @@ base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" -base64-arraybuffer@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154" +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.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" -base64id@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" base64url@^2.0.0: version "2.0.0" @@ -1115,10 +1114,6 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" -benchmark@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-1.0.0.tgz#2f1e2fa4c359f11122aa183082218e957e390c73" - better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" @@ -1149,6 +1144,12 @@ block-stream@*, block-stream@0.0.9: dependencies: inherits "~2.0.0" +blocking-proxy@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-0.0.5.tgz#462905e0dcfbea970f41aa37223dda9c07b1912b" + dependencies: + minimist "^1.2.0" + bluebird@^3.3.0: version "3.4.7" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" @@ -1422,12 +1423,11 @@ clap@^1.0.9: dependencies: chalk "^1.1.3" -clean-css@3.4.x: - version "3.4.24" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.24.tgz#89f5a5e9da37ae02394fe049a41388abbe72c3b5" +clean-css@4.0.x: + version "4.0.5" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.5.tgz#6a48c30dad03ebe425d209fc282baa53d36c92ca" dependencies: - commander "2.8.x" - source-map "0.4.x" + source-map "0.5.x" cli-color@~0.1.6: version "0.1.7" @@ -1572,18 +1572,18 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.8.x, commander@~2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" - dependencies: - graceful-readlink ">= 1.0.0" - commander@2.9.x, commander@^2.6.0, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" +commander@~2.8.1: + 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" @@ -1596,11 +1596,7 @@ 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.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" - -component-emitter@^1.2.0: +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" @@ -1921,6 +1917,12 @@ debug@2.2.0, debug@~2.2.0: 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" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2213,6 +2215,10 @@ electron-to-chromium@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.1.tgz#63ac7579a1c5bedb296c8607621f2efc9a54b968" +emoji-regex@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.0.tgz#d14ef743a7dfa6eaf436882bd1920a4aed84dd94" + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -2233,43 +2239,44 @@ end-of-stream@1.0.0, end-of-stream@^1.0.0: dependencies: once "~1.3.0" -engine.io-client@1.6.9: - version "1.6.9" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.6.9.tgz#1d6ad48048a5083c95096943b29d36efdb212401" +engine.io-client@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.2.tgz#c38767547f2a7d184f5752f6f0ad501006703766" dependencies: - component-emitter "1.1.2" + component-emitter "1.2.1" component-inherit "0.0.3" - debug "2.2.0" - engine.io-parser "1.2.4" + debug "2.3.3" + engine.io-parser "1.3.2" has-cors "1.1.0" indexof "0.0.1" - parsejson "0.0.1" - parseqs "0.0.2" - parseuri "0.0.4" - ws "1.0.1" - xmlhttprequest-ssl "1.5.1" + parsejson "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + ws "1.1.1" + xmlhttprequest-ssl "1.5.3" yeast "0.1.2" -engine.io-parser@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.2.4.tgz#e0897b0bf14e792d4cd2a5950553919c56948c42" +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.1" + after "0.8.2" arraybuffer.slice "0.0.6" - base64-arraybuffer "0.1.2" + base64-arraybuffer "0.1.5" blob "0.0.4" - has-binary "0.1.6" - utf8 "2.1.0" + has-binary "0.1.7" + wtf-8 "1.0.0" -engine.io@1.6.10: - version "1.6.10" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.6.10.tgz#f87d84e1bd21d1a2ec7f8deef0c62054acdfb27a" +engine.io@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.2.tgz#6b59be730b348c0125b0a4589de1c355abcf7a7e" dependencies: - accepts "1.1.4" - base64id "0.1.0" - debug "2.2.0" - engine.io-parser "1.2.4" - ws "1.0.1" + 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.1" enhanced-resolve@~0.9.0: version "0.9.1" @@ -2458,11 +2465,14 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-3.0.2.tgz#9f0eabcafde3d2a2600d96a66adb90d099e841fe" +eslint-plugin-jsx-a11y@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz#779bb0fe7b08da564a422624911de10061e048ee" dependencies: + aria-query "^0.3.0" + ast-types-flow "0.0.7" damerau-levenshtein "^1.0.0" + emoji-regex "^6.1.0" jsx-ast-utils "^1.0.0" object-assign "^4.0.1" @@ -2736,9 +2746,9 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42" +file-loader@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.0.tgz#bbe6db7474ac92c7f54fdc197cf547e98b6b8e12" dependencies: loader-utils "~0.2.5" @@ -2862,7 +2872,7 @@ form-data@~1.0.0-rc3, form-data@~1.0.0-rc4: combined-stream "^1.0.5" mime-types "^2.1.11" -formidable@^1.0.17: +formidable@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" @@ -2890,7 +2900,14 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra@^1.0.0, fs-extra@~1.0.0: +fs-extra@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + +fs-extra@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" dependencies: @@ -3073,13 +3090,6 @@ glob@7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" - dependencies: - inherits "2" - minimatch "0.3" - glob@^5.0.15, glob@^5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -3100,7 +3110,7 @@ glob@^6.0.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@~7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -3300,12 +3310,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-binary@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10" - dependencies: - isarray "0.0.1" - has-binary@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" @@ -3404,12 +3408,12 @@ html-entities@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" -html-minifier@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.2.3.tgz#d2ff536e24d95726c332493d8f77d84dbed85372" +html-minifier@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.3.1.tgz#dd38e60571537bf34a8171889c64fce73c45edad" dependencies: camel-case "3.0.x" - clean-css "3.4.x" + clean-css "4.0.x" commander "2.9.x" he "1.1.x" ncname "1.0.x" @@ -3904,19 +3908,7 @@ jasmine-core@2.5.2, jasmine-core@~2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" -jasmine-core@~2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.4.1.tgz#6f83ab3a0f16951722ce07d206c773d57cc838be" - -jasmine@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.4.1.tgz#9016dda453213d27ac6d43dc4ea97315a189085e" - dependencies: - exit "^0.1.2" - glob "^3.2.11" - jasmine-core "~2.4.0" - -jasmine@^2.5.2: +jasmine@^2.5.2, jasmine@^2.5.3: version "2.5.3" resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.3.tgz#5441f254e1fc2269deb1dfd93e0e57d565ff4d22" dependencies: @@ -3924,9 +3916,9 @@ jasmine@^2.5.2: glob "^7.0.6" jasmine-core "~2.5.2" -jasminewd2@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-0.0.10.tgz#94f48ae2bc946cad643035467b4bb7ea9c1075ef" +jasminewd2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.0.0.tgz#10aacd2c588c1ceb6a0b849f1a7f3f959f777c91" jju@^1.1.0: version "1.3.0" @@ -4004,10 +3996,6 @@ 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.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.2.6.tgz#f6efc93c06a04de9aec53053df2559bb19e2038b" - json3@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" @@ -4125,9 +4113,9 @@ karma-webpack@1.8.1: source-map "^0.1.41" webpack-dev-middleware "^1.0.11" -karma@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/karma/-/karma-1.3.0.tgz#b2b94e8f499fadd0069d54f9aef4a4d48ec5cc1f" +karma@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/karma/-/karma-1.4.1.tgz#41981a71d54237606b0a3ea8c58c90773f41650e" dependencies: bluebird "^3.3.0" body-parser "^1.12.4" @@ -4139,7 +4127,7 @@ karma@1.3.0: di "^0.0.1" dom-serialize "^2.2.0" expand-braces "^0.1.1" - glob "^7.0.3" + glob "^7.1.1" graceful-fs "^4.1.2" http-proxy "^1.13.0" isbinaryfile "^3.0.0" @@ -4151,10 +4139,11 @@ karma@1.3.0: qjobs "^1.1.4" range-parser "^1.2.0" rimraf "^2.3.3" - socket.io "1.4.7" + safe-buffer "^5.0.1" + socket.io "1.7.2" source-map "^0.5.3" tmp "0.0.28" - useragent "^2.1.9" + useragent "^2.1.10" kew@~0.7.0: version "0.7.0" @@ -4425,6 +4414,10 @@ lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" +lodash.tail@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" + lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" @@ -4513,7 +4506,7 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@2, lru-cache@2.2.x: +lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" @@ -4628,10 +4621,6 @@ micromatch@^2.1.5, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" - mime-db@~1.26.0: version "1.26.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" @@ -4642,12 +4631,6 @@ mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, dependencies: mime-db "~1.26.0" -mime-types@~2.0.4: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6" - dependencies: - mime-db "~1.12.0" - mime@1.2.x: version "1.2.11" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" @@ -4662,13 +4645,6 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimatch@0.3: - version "0.3.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2, minimatch@~3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -4743,10 +4719,6 @@ ncname@1.0.x: dependencies: xml-char-classes "^1.0.0" -negotiator@0.4.9: - version "0.4.9" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f" - negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -4768,25 +4740,7 @@ node-forge@^0.6.46: version "0.6.48" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.48.tgz#6986ea43bdd3cadc47a19db97759055edf753c01" -node-gyp@^3.3.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.5.0.tgz#a8fe5e611d079ec16348a3eb960e78e11c85274a" - 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 "2.x || 3.x || 4 || 5" - tar "^2.0.0" - which "1" - -node-gyp@~3.4.0: +node-gyp@^3.3.1, node-gyp@~3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" dependencies: @@ -4847,9 +4801,9 @@ node-pre-gyp@^0.6.29: tar "~2.2.1" tar-pack "~3.3.0" -node-sass@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.2.0.tgz#ef3e686c119118e01b0a3c7345821a0d7400acf2" +node-sass@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.0.tgz#532e37bad0ce587348c831535dbc98ea4289508b" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5064,7 +5018,7 @@ npm@^2.15.10: are-we-there-yet "~1.1.2" gauge "~1.2.5" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1: +npmlog@^4.0.0, npmlog@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: @@ -5093,6 +5047,10 @@ oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +object-assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + object-assign@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-1.0.0.tgz#e65dc8766d3b47b4b8307465c8311da030b070a6" @@ -5246,21 +5204,21 @@ parse-key@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/parse-key/-/parse-key-0.2.1.tgz#7bcf76595536e36075664be4d687e4bdd910208f" -parsejson@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.1.tgz#9b10c6c0d825ab589e685153826de0a3ba278bcc" +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.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.2.tgz#9dfe70b2cddac388bde4f35b1f240fa58adbe6c7" +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.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.4.tgz#806582a39887e1ea18dd5e2fe0e01902268e9350" +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" @@ -5717,25 +5675,25 @@ proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -protractor@4.0.14: - version "4.0.14" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-4.0.14.tgz#efc4a877fac3a182a9dded26cd5869f4762fd172" +protractor@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.1.1.tgz#10c4e336571b28875b8acc3ae3e4e1e40ef7e986" dependencies: - "@types/jasmine" "^2.5.36" "@types/node" "^6.0.46" "@types/q" "^0.0.32" - "@types/selenium-webdriver" "2.53.37" - adm-zip "0.4.7" + "@types/selenium-webdriver" "~2.53.39" + blocking-proxy "0.0.5" chalk "^1.1.3" glob "^7.0.3" - jasmine "2.4.1" - jasminewd2 "0.0.10" + jasmine "^2.5.3" + jasminewd2 "^2.0.0" optimist "~0.6.0" q "1.4.1" saucelabs "~1.3.0" - selenium-webdriver "2.53.3" + selenium-webdriver "3.0.1" source-map-support "~0.4.0" - webdriver-manager "^10.3.0" + webdriver-js-extender "^1.0.0" + webdriver-manager "^12.0.1" proxy-addr@~1.1.3: version "1.1.3" @@ -5791,11 +5749,11 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@6.2.0: +qs@6.2.0, qs@~6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" -qs@6.2.1, qs@~6.2.0: +qs@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" @@ -5921,9 +5879,9 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" -react-redux@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.1.tgz#84a41bd4cdd180452bb6922bc79ad25bd5abb7c4" +react-redux@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.2.tgz#3d9878f5f71c6fafcd45de1fbb162ea31f389814" dependencies: hoist-non-react-statics "^1.0.3" invariant "^2.0.0" @@ -5931,18 +5889,9 @@ react-redux@5.0.1: lodash-es "^4.2.0" loose-envify "^1.1.0" -react-redux@^4.0.0: - version "4.4.6" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209" - dependencies: - hoist-non-react-statics "^1.0.3" - invariant "^2.0.0" - lodash "^4.2.0" - loose-envify "^1.1.0" - -react-router@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff" +react-router@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.2.tgz#5a19156678810e01d81901f9c0fef63284b8a514" dependencies: history "^3.0.0" hoist-non-react-statics "^1.2.0" @@ -6178,16 +6127,14 @@ redux-devtools-themes@^1.0.0: dependencies: base16 "^1.0.0" -redux-devtools@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.3.1.tgz#e2ed0b5335310935a25bbc73c60c09e522182850" +redux-devtools@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.3.2.tgz#f427f71964e2b3785b68834b6e4fe99d8da75b5e" dependencies: lodash "^4.2.0" - react-redux "^4.0.0" - redux "^3.5.2" redux-devtools-instrument "^1.0.1" -redux@3.6.0, redux@^3.5.2: +redux@3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" dependencies: @@ -6424,7 +6371,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@~2.5.1, rimraf@~2.5.4: +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -6502,13 +6449,14 @@ sass-graph@^2.1.1: lodash "^4.0.0" yargs "^4.7.1" -sass-loader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-4.1.1.tgz#79ef9468cf0bf646c29529e1f2cba6bd6e51c7bc" +sass-loader@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-5.0.1.tgz#4aa82f44242abe62ed8fdcd28d6331a34ef27c2d" dependencies: async "^2.0.1" loader-utils "^0.2.15" - object-assign "^4.1.0" + lodash.tail "^4.1.1" + pify "^2.3.0" saucelabs@~1.3.0: version "1.3.0" @@ -6520,11 +6468,11 @@ sax@0.6.x: version "0.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" -sax@1.1.5: +sax@1.1.5, sax@>=0.6.0: version "1.1.5" resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.5.tgz#1da50a8d00cdecd59405659f5ff85349fe773743" -sax@>=0.6.0, sax@~1.2.1: +sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -6534,7 +6482,16 @@ seek-bzip@^1.0.3: dependencies: commander "~2.8.1" -selenium-webdriver@2.53.3: +selenium-webdriver@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz#a2dea5da4a97f6672e89e7ca7276cefa365147a7" + dependencies: + adm-zip "^0.4.7" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +selenium-webdriver@^2.53.2: version "2.53.3" resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085" dependencies: @@ -6628,10 +6585,6 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6654,59 +6607,49 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -socket.io-adapter@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.4.0.tgz#fb9f82ab1aa65290bf72c3657955b930a991a24f" +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.2.0" - socket.io-parser "2.2.2" + debug "2.3.3" + socket.io-parser "2.3.1" -socket.io-client@1.4.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.4.6.tgz#49b0ba537efd15b8297c84016e642e1c7c752c3d" +socket.io-client@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.2.tgz#39fdb0c3dd450e321b7e40cfd83612ec533dd644" dependencies: backo2 "1.0.2" component-bind "1.0.0" - component-emitter "1.2.0" - debug "2.2.0" - engine.io-client "1.6.9" + component-emitter "1.2.1" + debug "2.3.3" + engine.io-client "1.8.2" has-binary "0.1.7" indexof "0.0.1" object-component "0.0.3" - parseuri "0.0.4" - socket.io-parser "2.2.6" + parseuri "0.0.5" + socket.io-parser "2.3.1" to-array "0.1.4" -socket.io-parser@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.2.tgz#3d7af6b64497e956b7d9fe775f999716027f9417" - dependencies: - benchmark "1.0.0" - component-emitter "1.1.2" - debug "0.7.4" - isarray "0.0.1" - json3 "3.2.6" - -socket.io-parser@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.6.tgz#38dfd61df50dcf8ab1d9e2091322bf902ba28b99" +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: - benchmark "1.0.0" component-emitter "1.1.2" debug "2.2.0" isarray "0.0.1" json3 "3.3.2" -socket.io@1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.4.7.tgz#92b7f7cb88c5797d4daee279fe8075dbe6d3fa1c" +socket.io@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.2.tgz#83bbbdf2e79263b378900da403e7843e05dc3b71" dependencies: - debug "2.2.0" - engine.io "1.6.10" + debug "2.3.3" + engine.io "1.8.2" has-binary "0.1.7" - socket.io-adapter "0.4.0" - socket.io-client "1.4.6" - socket.io-parser "2.2.6" + object-assign "4.1.0" + socket.io-adapter "0.5.0" + socket.io-client "1.7.2" + socket.io-parser "2.3.1" sort-keys@^1.0.0: version "1.1.2" @@ -6739,11 +6682,9 @@ source-map-support@^0.4.2, source-map-support@~0.4.0: dependencies: source-map "^0.5.3" -source-map@0.4.x, source-map@^0.4.4, 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.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" source-map@^0.1.41: version "0.1.43" @@ -6751,9 +6692,11 @@ source-map@^0.1.41: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@^0.4.4, 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.2.0: version "0.2.0" @@ -6971,16 +6914,16 @@ sum-up@^1.0.1: dependencies: chalk "^1.0.0" -superagent@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.3.1.tgz#b171b974f0a76da65e1f00430c8cb7a8b52a404c" +superagent@^3.4.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.4.2.tgz#aa9a00f21720e230a6e7e9d7f07e0ab84509b833" dependencies: component-emitter "^1.2.0" cookiejar "^2.0.6" debug "^2.2.0" extend "^3.0.0" form-data "^2.1.1" - formidable "^1.0.17" + formidable "^1.1.1" methods "^1.1.1" mime "^1.3.4" qs "^6.1.0" @@ -7118,6 +7061,12 @@ tmp@0.0.28, tmp@0.0.x: dependencies: os-tmpdir "~1.0.1" +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + dependencies: + os-tmpdir "~1.0.1" + to-absolute-glob@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" @@ -7299,17 +7248,13 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -useragent@^2.1.9: +useragent@^2.1.10: version "2.1.12" resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.12.tgz#aa7da6cdc48bdc37ba86790871a7321d64edbaa2" dependencies: lru-cache "2.2.x" tmp "0.0.x" -utf8@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.0.tgz#0cfec5c8052d44a23e3aaa908104e8075f95dfd5" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7459,9 +7404,16 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -webdriver-manager@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-10.3.0.tgz#99314588a0b1dbe688c441d74288c6cb1875fa8b" +webdriver-js-extender@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz#81c533a9e33d5bfb597b4e63e2cdb25b54777515" + dependencies: + "@types/selenium-webdriver" "^2.53.35" + selenium-webdriver "^2.53.2" + +webdriver-manager@^12.0.1: + version "12.0.2" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.2.tgz#9bc541e975b18de8bf7f6ad163b69488169e8914" dependencies: adm-zip "^0.4.7" chalk "^1.1.1" @@ -7473,6 +7425,7 @@ webdriver-manager@^10.3.0: request "^2.78.0" rimraf "^2.5.2" semver "^5.3.0" + xml2js "^0.4.17" webpack-core@^0.6.9, webpack-core@~0.6.9: version "0.6.9" @@ -7607,20 +7560,17 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9" - dependencies: - options ">=0.0.5" - ultron "1.0.x" - -ws@^1.0.1: +ws@1.1.1, ws@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" 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@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" @@ -7645,19 +7595,28 @@ xml2js@0.4.4: sax "0.6.x" xmlbuilder ">=1.0.0" -xmlbuilder@2.6.2: +xml2js@^0.4.17: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" + dependencies: + sax ">=0.6.0" + xmlbuilder "^4.1.0" + +xmlbuilder@2.6.2, xmlbuilder@>=1.0.0, xmlbuilder@>=2.4.6: version "2.6.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-2.6.2.tgz#f916f6d10d45dc171b1be2e6e673fb6e0cc35d0a" dependencies: lodash "~3.5.0" -xmlbuilder@>=1.0.0, xmlbuilder@>=2.4.6: - version "8.2.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" +xmlbuilder@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" + dependencies: + lodash "^4.0.0" -xmlhttprequest-ssl@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67" +xmlhttprequest-ssl@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" From cc30a3005b8421b1b2c879a73042d1488765e6d9 Mon Sep 17 00:00:00 2001 From: James Carbine Date: Wed, 8 Feb 2017 13:46:01 -0700 Subject: [PATCH 273/452] Update eslint (#13) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don’t require extensions --- .eslintrc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index 8621c62..f37bce5 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -56,3 +56,4 @@ rules: - 2 - forbid: - any + import/extensions: 0 From c9daa24eb75cf8672c2bc01cc6abf642e67b665b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 8 Feb 2017 20:52:09 -0700 Subject: [PATCH 274/452] Make linter get along with tools --- client/tools/build/content.js | 58 ++++++++- client/tools/build/file.js | 48 ++++---- client/tools/build/index.js | 185 +++++++++++----------------- client/tools/build/markdown.js | 7 +- client/tools/build/production.js | 30 +++-- client/tools/build/templates.js | 97 ++++++++------- client/tools/build/utils.js | 48 ++++---- client/tools/build/webpack_utils.js | 42 +++---- 8 files changed, 272 insertions(+), 243 deletions(-) diff --git a/client/tools/build/content.js b/client/tools/build/content.js index 09b804f..ca279bc 100644 --- a/client/tools/build/content.js +++ b/client/tools/build/content.js @@ -1,3 +1,4 @@ +const path = require('path'); const _ = require('lodash'); const fs = require('fs'); const frontMatter = require('front-matter'); @@ -6,11 +7,14 @@ const ejs = require('ejs'); const marked = require('./markdown'); const templates = require('./templates'); const applyProduction = require('./production'); +const file = require('./file'); + +const ignoreFiles = ['.DS_Store']; // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -module.exports = function buildContent(fullPath, webpackConfig, webpackStats, stage, options) { +function buildContent(fullPath, webpackConfig, webpackStats, stage, options) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -55,4 +59,56 @@ module.exports = function buildContent(fullPath, webpackConfig, webpackStats, st url : destination }; +} + +// ----------------------------------------------------------------------------- +// build html and markdown files in a given directory +// ----------------------------------------------------------------------------- +function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage, options) { + let results = []; + const files = fs.readdirSync(inputPath); + files.forEach((fileName) => { + const fullInputPath = path.join(inputPath, fileName); + const doOutput = options.templateDirs.indexOf(fullInputPath) < 0 && // Ignore template dirs + !_.includes(ignoreFiles, fileName); + if (doOutput) { + if (fs.statSync(fullInputPath).isDirectory()) { + results = _.concat(results, buildContents( + fullInputPath, + outputPath, + webpackConfig, + webpackStats, + stage, + options + )); + } else { + const ext = path.extname(fullInputPath); + if (_.includes(options.buildExtensions, ext)) { + const page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); + let outFile = fileName; + let outPath = outputPath; + let inPath = inputPath; + if (page.destination && page.destination.length > 0) { + if (_.endsWith(page.destination, '/')) { + outPath = path.join(outPath, page.destination); + outFile = 'index.html'; + } else { + outFile = page.destination; + } + inPath = ''; + } + page.outputFilePath = file.write(inPath, outPath, outFile, page.html, options); + results.push(page); + } else { + file.copy(inputPath, outputPath, fileName, options); + } + } + } + }); + return results; +} + +module.exports = { + buildContent, + buildContents }; diff --git a/client/tools/build/file.js b/client/tools/build/file.js index c3aee3f..98372ba 100644 --- a/client/tools/build/file.js +++ b/client/tools/build/file.js @@ -1,42 +1,42 @@ -var path = require("path"); -var fs = require('fs-extra') +const path = require('path'); +const fs = require('fs-extra'); // ----------------------------------------------------------------------------- -// write file +// main build // ----------------------------------------------------------------------------- -function write(inputPath, outputPath, fileName, content, options){ - return makeOutputFilePath(inputPath, outputPath, fileName, options, function(out){ - fs.writeFile(out, content, function(err){ - if(err){ return console.log(err); } - }); +function makeOutputFilePath(inputPath, outputPath, fileName, options, cb) { + const relPath = inputPath.replace(options.rootInputPath, ''); // build relative path for output file + const out = path.join(outputPath, relPath, fileName); + const dir = path.dirname(out); + fs.mkdirs(dir, {}, () => { + cb(out); }); + return out; } // ----------------------------------------------------------------------------- -// copy file +// write file // ----------------------------------------------------------------------------- -function copy(inputPath, outputPath, fileName, options){ - return makeOutputFilePath(inputPath, outputPath, fileName, options, function(out){ - fs.copy(path.join(inputPath, fileName), out, function(err){ - if(err){ return console.log(err); } +function write(inputPath, outputPath, fileName, content, options) { + return makeOutputFilePath(inputPath, outputPath, fileName, options, (out) => { + fs.writeFile(out, content, (err) => { + if (err) { console.log(err); } }); }); } // ----------------------------------------------------------------------------- -// main build +// copy file // ----------------------------------------------------------------------------- -function makeOutputFilePath(inputPath, outputPath, fileName, options, cb){ - var relPath = inputPath.replace(options.rootInputPath, ""); // build relative path for output file - var out = path.join(outputPath, relPath, fileName); - var dir = path.dirname(out); - fs.mkdirs(dir, {}, function(){ - cb(out); +function copy(inputPath, outputPath, fileName, options) { + return makeOutputFilePath(inputPath, outputPath, fileName, options, (out) => { + fs.copy(path.join(inputPath, fileName), out, (err) => { + if (err) { console.log(err); } + }); }); - return out; } module.exports = { - write : write, - copy : copy -}; \ No newline at end of file + write, + copy +}; diff --git a/client/tools/build/index.js b/client/tools/build/index.js index e59d517..6792de8 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -1,59 +1,56 @@ -var path = require("path"); -var _ = require("lodash"); -var fs = require("fs-extra"); -var webpack = require("webpack"); -var nodeWatch = require("node-watch"); - -var file = require("./file"); -var buildContent = require("./content"); -var templates = require("./templates"); -var utils = require("./utils"); -var applyProduction = require("./production"); +const path = require('path'); +const fs = require('fs-extra'); +const webpack = require('webpack'); +const nodeWatch = require('node-watch'); + +const file = require('./file'); +const content = require('./content'); // Settings -var webpackConfigBuilder = require("../../config/webpack.config"); -var settings = require("../../config/settings"); -var argv = require("minimist")(process.argv.slice(2)); -var release = argv.release; -var stage = release ? "production" : "development"; +const webpackConfigBuilder = require('../../config/webpack.config'); +const settings = require('../../config/settings'); + +const argv = require('minimist')(process.argv.slice(2)); -var inputPath = path.join(__dirname, "../../html"); -var templateDirs = [path.join(inputPath, "layouts")]; -var outputPath = stage == "production" ? settings.prodOutput : settings.devOutput; +const release = argv.release; +const stage = release ? 'production' : 'development'; -var ignoreFiles = [".DS_Store"]; +const inputPath = path.join(__dirname, '../../html'); +const templateDirs = [path.join(inputPath, 'layouts')]; +const outputPath = stage === 'production' ? settings.prodOutput : settings.devOutput; -var options = { + +const options = { truncateSummaryAt : 1000, buildExtensions : ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) rootInputPath : inputPath, // Original input path entries : settings.entries, // Webpack entry points cssEntries : settings.cssEntries, // Webpack css entry points buildSuffix : settings.buildSuffix, // Webpack build suffix. ie _bundle.js - templateData : {}, // Object that will be passed to every page as it is rendered - templateMap : {}, // Used to specify specific templates on a per file basis - templateDirs : templateDirs // Directories to look in for template + templateData : {}, // Object that will be passed to every page as it is rendered + templateMap : {}, // Used to specify specific templates on a per file basis + templateDirs // Directories to look in for template }; // ----------------------------------------------------------------------------- // run webpack to build entry points // ----------------------------------------------------------------------------- -function buildWebpackEntries(isHot){ - return new Promise(function(resolve, reject){ - var webpackConfig = webpackConfigBuilder(stage); - if(!isHot){ - var bundler = webpack(webpackConfig); - function bundle(err, stats){ - if(err){ - console.log("webpack error", err); +function buildWebpackEntries(isHot) { + return new Promise((resolve, reject) => { + const webpackConfig = webpackConfigBuilder(stage); + if (!isHot) { + const bundler = webpack(webpackConfig); + const bundle = (err, stats) => { + if (err) { + console.log('webpack error', err); reject(err); } - //console.log("webpack", stats.toString({colors: true})); + // console.log("webpack", stats.toString({colors: true})); resolve({ - webpackConfig: webpackConfig, + webpackConfig, webpackStats: stats.toJson() }); - } + }; bundler.run(bundle); } else { resolve(webpackConfig, null); @@ -61,96 +58,75 @@ function buildWebpackEntries(isHot){ }); } -// ----------------------------------------------------------------------------- -// build html and markdown files in a given directory -// ----------------------------------------------------------------------------- -function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage, options){ - var results = []; - var files = fs.readdirSync(inputPath); - files.forEach(function(fileName){ - var fullInputPath = path.join(inputPath, fileName); - var doOutput = options.templateDirs.indexOf(fullInputPath) < 0 && // Ignore template dirs - !_.includes(ignoreFiles, fileName); - if(doOutput){ - if(fs.statSync(fullInputPath).isDirectory()){ - results = _.concat(results, buildContents(fullInputPath, outputPath, webpackConfig, webpackStats, stage, options)); - } else { - var ext = path.extname(fullInputPath); - if(_.includes(options.buildExtensions, ext)){ - var page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); - var outFile = fileName; - var outPath = outputPath; - var inPath = inputPath; - if(page.destination && page.destination.length > 0){ - if(_.endsWith(page.destination, "/")){ - outPath = path.join(outPath, page.destination); - outFile = "index.html"; - } else { - outFile = page.destination; - } - inPath = ""; - } - page.outputFilePath = file.write(inPath, outPath, outFile, page.html, options); - results.push(page); - } else { - file.copy(inputPath, outputPath, fileName, options); - } - } - } - }); - return results; -} // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- -function build(isHot){ - return new Promise(function(resolve, reject){ +function build(isHot) { + return new Promise((resolve) => { // Delete everything in the output path - fs.emptydir(outputPath, function(){ + fs.emptydir(outputPath, () => { // Copy static files to build directory try { - var stats = fs.statSync(settings.staticDir); - console.log("Copying static files in " + settings.staticDir); + // const stats = fs.statSync(settings.staticDir); + console.log(`Copying static files in ${settings.staticDir}`); fs.copySync(settings.staticDir, outputPath); - } - catch(err) { + } catch (err) { // No static dir. Do nothing } // Build files - console.log("Building files in: " + inputPath); - buildWebpackEntries(isHot).then(function(packResults){ - var pages = buildContents(inputPath, outputPath, packResults.webpackConfig, packResults.webpackStats, stage, options); + console.log(`Building files in: ${inputPath}`); + buildWebpackEntries(isHot).then((packResults) => { + const pages = content.buildContents( + inputPath, + outputPath, + packResults.webpackConfig, + packResults.webpackStats, + stage, + options + ); resolve({ - pages : pages, - inputPath : inputPath, - outputPath : outputPath, + pages, + inputPath, + outputPath, webpackConfig : packResults.webpackConfig, webpackStats : packResults.webpackStats, - stage : stage, - options : options + stage, + options }); }); }); }); -}; +} // ----------------------------------------------------------------------------- // watch // ----------------------------------------------------------------------------- -function watch(){ - return new Promise(function(resolve, reject){ - build(true).then(function(buildResults){ +function watch() { + return new Promise((resolve) => { + build(true).then((buildResults) => { // Watch content - nodeWatch(buildResults.inputPath, function(filePath){ + nodeWatch(buildResults.inputPath, (filePath) => { // Build the page - var page = buildContent(filePath, buildResults.webpackConfig, buildResults.webpackStats, buildResults.stage, buildResults.options); - page.outputFilePath = file.write(buildResults.inputPath, buildResults.outputPath, path.basename(filePath), page.html, buildResults.options); + const page = content.buildContent( + filePath, + buildResults.webpackConfig, + buildResults.webpackStats, + buildResults.stage, + buildResults.options + ); + page.outputFilePath = file.write( + buildResults.inputPath, + buildResults.outputPath, + path.basename(filePath), + page.html, + buildResults.options + ); }); resolve(); }); @@ -158,20 +134,7 @@ function watch(){ } module.exports = { - watch : watch, - build : build, + watch, + build, buildWebpackEntries }; - - - - - - - - - - - - - diff --git a/client/tools/build/markdown.js b/client/tools/build/markdown.js index a3fc49e..ac6c4ac 100644 --- a/client/tools/build/markdown.js +++ b/client/tools/build/markdown.js @@ -1,6 +1,6 @@ -var marked = require("marked"); +const marked = require('marked'); -var markedOptions = { +const markedOptions = { gfm: true, tables: true, breaks: false, @@ -9,6 +9,7 @@ var markedOptions = { smartLists: true, smartypants: false }; + marked.setOptions(markedOptions); -module.exports = marked; \ No newline at end of file +module.exports = marked; diff --git a/client/tools/build/production.js b/client/tools/build/production.js index cd6e2a0..fadeaa0 100644 --- a/client/tools/build/production.js +++ b/client/tools/build/production.js @@ -1,15 +1,27 @@ -var minify = require('html-minifier').minify; -var webpackUtils = require("./webpack_utils"); +const minify = require('html-minifier').minify; +const webpackUtils = require('./webpack_utils'); -module.exports = function(html, stage, webpackConfig, webpackStats, options){ - if(stage == "production"){ - html = webpackUtils.apply(html, webpackConfig, webpackStats, options.entries, options.cssEntries, options.buildSuffix); - return minify(html, { +module.exports = function applyProduction(html, stage, webpackConfig, webpackStats, options) { + + let productionHtml = html; + + if (stage === 'production') { + productionHtml = webpackUtils.apply( + html, + webpackConfig, + webpackStats, + options.entries, + options.cssEntries, + options.buildSuffix + ); + + return minify(productionHtml, { removeComments: true, collapseWhitespace: true, minifyJS: true }); - } else { - return html; } -}; \ No newline at end of file + + return productionHtml; + +}; diff --git a/client/tools/build/templates.js b/client/tools/build/templates.js index 7dcfced..4b76943 100644 --- a/client/tools/build/templates.js +++ b/client/tools/build/templates.js @@ -1,67 +1,39 @@ -var fs = require("fs"); -var path = require("path"); -var _ = require("lodash"); -var ejs = require("ejs"); +const fs = require('fs'); +const path = require('path'); +const _ = require('lodash'); +const ejs = require('ejs'); -var utils = require("./utils"); +const utils = require('./utils'); -// ----------------------------------------------------------------------------- -// Apply layouts to content -// ----------------------------------------------------------------------------- -function apply(data, fullPath, templateMap, templateDirs){ - - // If the user has specified a layout in the front matter use that. - // Then try the layout map and finally default to application.html - var layoutFile = data.metadata.layout || templateMap[fullPath] || "application.html"; - var template = loadTemplate(layoutFile, templateDirs); - - var html = ""; - - try{ - html = template(_.merge({ - cleanTag : utils.cleanTag, - "_" : _ - }, data)); - } catch(err){ - console.log(err); - console.log("Unable to build file: " + fullPath + " Data: " + data); - console.log("Stack Trace:"); - console.log(err.trace); - } - return html; -} - -function safeReadLayout(file){ - try{ +function safeReadLayout(file) { + try { return fs.readFileSync(file, 'utf8'); - } catch(e){ + } catch (e) { return false; } } -function firstValid(func, collection){ - for(var i=0; i path.join(location, fileName)) .uniq() .value(); - var result = firstValid(safeReadLayout, layouts); + const result = firstValid(safeReadLayout, layouts); - if(!result){ - throw "No template found matching " + file; + if (!result) { + throw new Error(`No template found matching ${fileName}`); } return ejs.compile(result.value, { @@ -70,8 +42,35 @@ function loadTemplate(file, templateDirs){ }); } +// ----------------------------------------------------------------------------- +// Apply layouts to content +// ----------------------------------------------------------------------------- +function apply(data, fullPath, templateMap, templateDirs) { + + // If the user has specified a layout in the front matter use that. + // Then try the layout map and finally default to application.html + const layoutFile = data.metadata.layout || templateMap[fullPath] || 'application.html'; + const template = loadTemplate(layoutFile, templateDirs); + + let html = ''; + + try { + html = template(_.merge({ + cleanTag : utils.cleanTag, + _ + }, data)); + } catch (err) { + console.log(err); + console.log(`Unable to build file: ${fullPath} Data: ${data}`); + console.log('Stack Trace:'); + console.log(err.trace); + } + + return html; +} + module.exports = { - apply: apply, - loadTemplate: loadTemplate + apply, + loadTemplate }; diff --git a/client/tools/build/utils.js b/client/tools/build/utils.js index bdf05ee..50bc8dd 100644 --- a/client/tools/build/utils.js +++ b/client/tools/build/utils.js @@ -1,41 +1,41 @@ -var path = require("path"); -var _ = require("lodash"); +const path = require('path'); +const _ = require('lodash'); + +// Regex used to parse date from file name +const dateRegEx = /(\d{4})-(\d{1,2})-(\d{1,2})-(.*)/; // ----------------------------------------------------------------------------- // Make tags snake case // ----------------------------------------------------------------------------- -function cleanTag(tag){ +function cleanTag(tag) { return _.snakeCase(tag); } - -// Regex used to parse date from file name -var dateRegEx = /(\d{4})-(\d{1,2})-(\d{1,2})-(.*)/; - // ----------------------------------------------------------------------------- // Use the filename to build a directory structure using the date // ----------------------------------------------------------------------------- -function filename2date(filePath){ - var result = {}; - var ext = path.extname(filePath); - var basename = path.basename(filePath, ext); - var match = dateRegEx.exec(basename); - if(match) { - var year = match[1]; - var month = match[2]; - var day = match[3]; - var basename = match[4]; - result.date = month + '-' + day + '-' + year, "MM-DD-YYYY"; - result.url = '/' + year + '/' + month + '/' + day + '/' + basename + '.html'; - if(!result.title){ - result.title = basename.replace(/_/g, ' '); +function filename2date(filePath) { + const result = {}; + const ext = path.extname(filePath); + const basename = path.basename(filePath, ext); + const match = dateRegEx.exec(basename); + if (match) { + const year = match[1]; + const month = match[2]; + const day = match[3]; + const name = match[4]; + result.date = `${month}-${day}-${year}`; + result.dateFormat = 'MM-DD-YYYY'; + result.url = `/${year}/${month}/${day}/${name}.html`; + if (!result.title) { + result.title = name.replace(/_/g, ' '); } } return result; } module.exports = { - cleanTag: cleanTag, - filename2date: filename2date -}; \ No newline at end of file + cleanTag, + filename2date +}; diff --git a/client/tools/build/webpack_utils.js b/client/tools/build/webpack_utils.js index 32dff8b..5374a98 100644 --- a/client/tools/build/webpack_utils.js +++ b/client/tools/build/webpack_utils.js @@ -1,40 +1,38 @@ -var _ = require("lodash"); -var path = require("path"); +const _ = require('lodash'); +const path = require('path'); // ----------------------------------------------------------------------------- // Finds the has value for a given entry point in the provided webpack stats // ----------------------------------------------------------------------------- -function getHashed(webpackStats, entryPoint, ext){ - var found = webpackStats.assetsByChunkName[entryPoint]; - if(_.isArray(found)){ // If there is an array of matching values we have to find the one with the right file extension. - return _.find(found, function(hashEntry){ - return path.extname(hashEntry).toLowerCase() === '.' + ext; - }); - } else { - return found; +function getHashed(webpackStats, entryPoint, ext) { + const found = webpackStats.assetsByChunkName[entryPoint]; + // If there is an array of matching values we have to find the one with the right file extension. + if (_.isArray(found)) { + return _.find(found, hashEntry => path.extname(hashEntry).toLowerCase() === `.${ext}`); } + return found; } // ----------------------------------------------------------------------------- // Changes webpack paths as needed. // ----------------------------------------------------------------------------- -function apply(html, webpackConfig, webpackStats, entries, cssEntries, buildSuffix){ - var result = html; - _.each(webpackConfig.entry, function(path, entry){ - if(_.has(entries, entry)){ - var newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'js'); +function apply(html, webpackConfig, webpackStats, entries, cssEntries, buildSuffix) { + let result = html; + _.each(webpackConfig.entry, (_entryPath, entry) => { + if (_.has(entries, entry)) { + const newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'js'); result = result.replace(entry + buildSuffix, newPath); - } else if(_.has(cssEntries, entry)){ - var newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'css'); - result = result.replace(entry + '.css', newPath); + } else if (_.has(cssEntries, entry)) { + const newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'css'); + result = result.replace(`${entry}.css`, newPath); } else { - console.log("Error, could not find entry: " + entry); + console.log(`Error, could not find entry: ${entry}`); } }); return result; } module.exports = { - apply: apply, - getHashed: getHashed -}; \ No newline at end of file + apply, + getHashed +}; From e1f48ddf370298b45b261f9cb1c6951e5c57a7b8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 8 Feb 2017 20:52:35 -0700 Subject: [PATCH 275/452] Updates package --- client/yarn.lock | 83 +++++++------ yarn.lock | 294 ----------------------------------------------- 2 files changed, 48 insertions(+), 329 deletions(-) diff --git a/client/yarn.lock b/client/yarn.lock index 7c0b87c..b742b4b 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -3,8 +3,8 @@ "@types/node@^6.0.46": - version "6.0.62" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.62.tgz#85222c077b54f25b57417bb708b9f877bda37f89" + version "6.0.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.63.tgz#e08acbbd5946e0e95990b1c76f3ce5b7882a48eb" "@types/q@^0.0.32": version "0.0.32" @@ -97,7 +97,7 @@ ansi-html@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" -ansi-regex@^2.0.0: +ansi-regex@*, ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -137,8 +137,8 @@ anymatch@^1.3.0: micromatch "^2.1.5" aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" + version "1.1.1" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" archive-type@^3.0.0: version "3.2.0" @@ -335,8 +335,8 @@ aws-sign2@~0.6.0: resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: version "6.22.0" @@ -1328,8 +1328,8 @@ caniuse-api@^1.5.2: lodash.uniq "^4.3.0" caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000617, caniuse-db@^1.0.30000618: - version "1.0.30000621" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000621.tgz#be8726af1a39315618a0f364998cf9c9a0431177" + version "1.0.30000622" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000622.tgz#9d9690b577384990a58e33ebb903a14da735e5fd" capture-stack-trace@^1.0.0: version "1.0.0" @@ -2212,8 +2212,8 @@ ejs@^2.5.5: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77" electron-to-chromium@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.1.tgz#63ac7579a1c5bedb296c8607621f2efc9a54b968" + version "1.2.2" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.2.tgz#e41bc9488c88e3cfa1e94bde28e8420d7d47c47c" emoji-regex@^6.1.0: version "6.1.0" @@ -2989,8 +2989,8 @@ gauge@~1.2.5: lodash.padstart "^4.1.0" gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" + version "2.7.3" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -2999,7 +2999,6 @@ gauge@~2.7.1: signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" - supports-color "^0.2.0" wide-align "^1.1.0" gaze@^1.0.0: @@ -3502,7 +3501,7 @@ imports-loader@0.7.0: loader-utils "^0.2.16" source-map "^0.5.6" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3753,7 +3752,7 @@ is-plain-obj@^1.0.0: is-posix-bracket@^0.1.0: version "0.1.1" - resolved "http://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + 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" @@ -4737,10 +4736,28 @@ node-fetch@^1.0.1: is-stream "^1.0.1" node-forge@^0.6.46: - version "0.6.48" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.48.tgz#6986ea43bdd3cadc47a19db97759055edf753c01" + version "0.6.49" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.49.tgz#f1ee95d5d74623938fe19d698aa5a26d54d2f60f" -node-gyp@^3.3.1, node-gyp@~3.4.0: +node-gyp@^3.3.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.5.0.tgz#a8fe5e611d079ec16348a3eb960e78e11c85274a" + 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 "2.x || 3.x || 4 || 5" + tar "^2.0.0" + which "1" + +node-gyp@~3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" dependencies: @@ -5018,7 +5035,7 @@ npm@^2.15.10: are-we-there-yet "~1.1.2" gauge "~1.2.5" -npmlog@^4.0.0, npmlog@^4.0.1: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: @@ -5749,11 +5766,11 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@6.2.0, qs@~6.2.0: +qs@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" -qs@6.2.1: +qs@6.2.1, qs@~6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" @@ -6106,8 +6123,8 @@ redux-devtools-dock-monitor@1.1.1: react-pure-render "^1.0.2" redux-devtools-instrument@^1.0.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.7.1.tgz#30a28b76ac7fcfd0b8d4295ab6178cfc85088f6c" + version "1.8.0" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.8.0.tgz#db1840ed3d8152af6792913698e3424c119de9aa" dependencies: lodash "^4.2.0" symbol-observable "^1.0.2" @@ -6161,7 +6178,7 @@ regenerator-transform@0.9.8: regex-cache@^0.4.2: version "0.4.3" - resolved "http://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" dependencies: is-equal-shallow "^0.1.3" is-primitive "^2.0.0" @@ -6346,11 +6363,11 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.x, resolve@^1.1.6: +resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.2.0: +resolve@^1.1.6, resolve@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" @@ -6473,8 +6490,8 @@ sax@1.1.5, sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.5.tgz#1da50a8d00cdecd59405659f5ff85349fe773743" sax@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" seek-bzip@^1.0.3: version "1.0.5" @@ -6929,10 +6946,6 @@ superagent@^3.4.1: qs "^6.1.0" readable-stream "^2.0.5" -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -7602,13 +7615,13 @@ xml2js@^0.4.17: sax ">=0.6.0" xmlbuilder "^4.1.0" -xmlbuilder@2.6.2, xmlbuilder@>=1.0.0, xmlbuilder@>=2.4.6: +xmlbuilder@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-2.6.2.tgz#f916f6d10d45dc171b1be2e6e673fb6e0cc35d0a" dependencies: lodash "~3.5.0" -xmlbuilder@^4.1.0: +xmlbuilder@>=1.0.0, xmlbuilder@>=2.4.6, xmlbuilder@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" dependencies: diff --git a/yarn.lock b/yarn.lock index 2518f79..cf509e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,6 @@ # yarn lockfile v1 -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -20,36 +16,10 @@ arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" - -async@^0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - -aws-sdk@^2.1.4, aws-sdk@^2.2.4: - version "2.9.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.9.0.tgz#f258dcc295b1e7eca49d3624abfbf5f7d644172c" - dependencies: - buffer "4.9.1" - crypto-browserify "1.0.9" - jmespath "0.15.0" - querystring "0.2.0" - sax "1.1.5" - url "0.10.3" - uuid "3.0.0" - xml2js "0.4.15" - xmlbuilder "2.6.2" - balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" -base64-js@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" - brace-expansion@^1.0.0: version "1.1.6" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" @@ -57,56 +27,10 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" -buffer@4.9.1: - 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" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cloudfront-tls@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cloudfront-tls/-/cloudfront-tls-1.0.0.tgz#e8451106ab112e247714d3f0bc38aa198a347f16" - dependencies: - async "^0.9.0" - aws-sdk "^2.1.4" - commander "^2.6.0" - -colors@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -commander@^2.6.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -console.table@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.7.0.tgz#5c074bc990529c679095300372fcc2ef620f0ade" - dependencies: - easy-table "0.3.0" - -crypto-browserify@1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" - -deep-diff@^0.3.0: - version "0.3.4" - resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.4.tgz#aac5c39952236abe5f037a2349060ba01b00ae48" - del@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -119,40 +43,10 @@ del@^2.2.2: pinkie-promise "^2.0.0" rimraf "^2.2.8" -dezalgo@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - dependencies: - asap "^2.0.0" - wrappy "1" - -dotenv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" - -easy-table@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-0.3.0.tgz#46f3b04418273a716c2ce8c52f1caca9d0241cb7" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -glob@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" - 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@^7.0.3, glob@^7.0.5: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" @@ -175,14 +69,6 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -210,111 +96,12 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -isarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -jmespath@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" - -lodash._basedifference@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" - dependencies: - lodash._baseindexof "^3.0.0" - lodash._cacheindexof "^3.0.0" - lodash._createcache "^3.0.0" - -lodash._baseflatten@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash._baseindexof@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - -lodash._cacheindexof@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - -lodash._createcache@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - dependencies: - lodash._getnative "^3.0.0" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash.difference@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-3.2.2.tgz#dc463fffe6619ab4af49a3c87ace6695a285dde6" - dependencies: - lodash._basedifference "^3.0.0" - lodash._baseflatten "^3.0.0" - lodash.restparam "^3.0.0" - -lodash.intersection@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-3.2.0.tgz#e5b3611298a1187247b99eeadb385a3da018c570" - dependencies: - lodash._baseindexof "^3.0.0" - lodash._cacheindexof "^3.0.0" - lodash._createcache "^3.0.0" - lodash.restparam "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash@~2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" - -lodash@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.5.0.tgz#19bb3f4d51278f0b8c818ed145c74ecf9fe40e6d" - -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - -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" - -mime@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" -object-assign@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" - object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -325,10 +112,6 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -351,89 +134,12 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -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" - rimraf@^2.2.8: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: glob "^7.0.5" -run-auto@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/run-auto/-/run-auto-1.1.3.tgz#c2d5163fec1ab78b6345cdd3992fce032f671f88" - dependencies: - dezalgo "^1.0.1" - -s3-diff@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/s3-diff/-/s3-diff-1.1.0.tgz#cf66700255ea214467534b41a8608e7be97e5be1" - dependencies: - aws-sdk "^2.2.4" - glob "^7.0.5" - lodash.difference "^3.2.2" - lodash.intersection "^3.2.0" - run-auto "^1.1.3" - -s3-website@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-2.1.0.tgz#9e2b9d4befa231dd423a17d6102345c2ef6b98af" - dependencies: - aws-sdk "^2.1.4" - cloudfront-tls "^1.0.0" - colors "^1.1.2" - commander "^2.6.0" - console.table "^0.7.0" - deep-diff "^0.3.0" - dotenv "^2.0.0" - glob "7.0.5" - log-update "^1.0.2" - merge-defaults "^0.2.1" - mime "^1.3.4" - object-assign "^2.0.0" - s3-diff "^1.1.0" - -sax@1.1.5, sax@>=0.6.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.5.tgz#1da50a8d00cdecd59405659f5ff85349fe773743" - -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -uuid@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -xml2js@0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.15.tgz#95cd03ff2dd144ec28bc6273bf2b2890c581ad0c" - dependencies: - sax ">=0.6.0" - xmlbuilder ">=2.4.6" - -xmlbuilder@2.6.2, xmlbuilder@>=2.4.6: - version "2.6.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-2.6.2.tgz#f916f6d10d45dc171b1be2e6e673fb6e0cc35d0a" - dependencies: - lodash "~3.5.0" From c9f1483c6b9516cf6c79dac12d7940abe45725f6 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 15 Mar 2017 13:33:50 -0600 Subject: [PATCH 276/452] Webpack2 (#14) * Starting webpack2 migration * First draft working Webpack 2 * Remove deprecated plugin. Change context to client dir * More updates for webpack2 * Removes unused karma config * More fixes for upgrade to webpack 2 * Updates read * Changes alignment * updates packages * Removes stats output * Removes file extension * Better output when yarn hot --- README.md | 3 + client/config/karma.js | 2 - client/config/webpack.config.js | 66 +- client/package.json | 98 +- client/tools/build/index.js | 2 +- client/webpack.hot.js | 44 +- client/yarn.lock | 1688 +++++++++++++++++++------------ 7 files changed, 1132 insertions(+), 771 deletions(-) diff --git a/README.md b/README.md index b345a50..8367839 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ Atomic Jolt uses this as application as a starting place for our [Ruby on Rails and React starter application](https://github.com/atomicjolt/react_rails_starter_app) and our [Firebase React starter appliction](https://github.com/atomicjolt/react_firebase_starter_app). +#Demo: +----------------------- +[React Client Starter App Demo](http://reactclientstarterapp.com.s3-website-us-east-1.amazonaws.com) #Getting Started: ----------------------- diff --git a/client/config/karma.js b/client/config/karma.js index f93bdb8..aa12ebe 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -18,8 +18,6 @@ module.exports = () => { port: 9876, files: [ - './specs_support/mocks/*.js', - './specs_support/spec_helper.js', // Use webpack to build each test individually. If changed here, change in preprocessors // './js/**/*.spec.js' './webpack.tests.js', // More performant but tests cannot be run individually diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index c92fd21..e91847a 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -33,9 +33,9 @@ module.exports = function webpackConfig(stage) { // Add test plugins as needed } - const babel = `babel?${babelPlugins}&${presets}`; + const babelLoader = `babel-loader?${babelPlugins}&${presets}`; - const jsLoaders = [babel]; + const jsLoaders = [babelLoader]; const cssLoaders = ['css-loader?importLoaders=1', 'postcss-loader']; @@ -70,9 +70,9 @@ module.exports = function webpackConfig(stage) { if (production) { plugins = [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"', __DEV__: false }), - new webpack.optimize.DedupePlugin(), - new webpack.optimize.UglifyJsPlugin(), - new webpack.optimize.OccurrenceOrderPlugin(), + new webpack.optimize.UglifyJsPlugin({ + sourceMap: 'cheap-source-map' + }), new webpack.optimize.AggressiveMergingPlugin(), new ChunkManifestPlugin({ filename: 'webpack-common-manifest.json', @@ -87,7 +87,7 @@ module.exports = function webpackConfig(stage) { plugins = [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), new webpack.HotModuleReplacementPlugin(), - new webpack.NoErrorsPlugin(), + new webpack.NoEmitOnErrorsPlugin(), extractCSS ]; } else { @@ -97,46 +97,42 @@ module.exports = function webpackConfig(stage) { ]; } - const loaders = [ - { test: /\.js$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.jsx?$/, loaders: jsLoaders, exclude: /node_modules/ }, - { test: /\.scss$/i, loader: extractCSS.extract(scssLoaders) }, - { test: /\.css$/i, loader: extractCSS.extract(cssLoaders) }, - { test: /\.less$/i, loader: extractCSS.extract(lessLoaders) }, - { test: /.*\.(gif|png|jpg|jpeg|svg)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, - { test: /.*\.(eot|woff2|woff|ttf)$/, loaders: ['url?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } + const rules = [ + { test: /\.js$/, use: jsLoaders, exclude: /node_modules/ }, + { test: /\.jsx?$/, use: jsLoaders, exclude: /node_modules/ }, + { test: /\.scss$/i, use: extractCSS.extract(scssLoaders) }, + { test: /\.css$/i, use: extractCSS.extract(cssLoaders) }, + { test: /\.less$/i, use: extractCSS.extract(lessLoaders) }, + { test: /.*\.(gif|png|jpg|jpeg|svg)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, + { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; return { - context : __dirname, - entry : entries, - output : { + context: path.resolve('../', __dirname), + entry: entries, + output: { publicPath, // Location where generated files will be output - path : production ? settings.prodOutput : settings.devOutput, - filename : production ? `[name]-[chunkhash]${settings.buildSuffix}` : `[name]${settings.buildSuffix}`, - chunkFilename : production ? `[id]-[chunkhash]${settings.buildSuffix}` : `[id]${settings.buildSuffix}`, - sourceMapFilename : 'debugging/[file].map', + path: production ? settings.prodOutput : settings.devOutput, + filename: production ? `[name]-[chunkhash]${settings.buildSuffix}` : `[name]${settings.buildSuffix}`, + chunkFilename: production ? `[id]-[chunkhash]${settings.buildSuffix}` : `[id]${settings.buildSuffix}`, + sourceMapFilename: 'debugging/[file].map', // http://webpack.github.io/docs/configuration.html#output-pathinfo - pathinfo : !production + pathinfo: !production }, resolve: { - extensions : ['', '.js', '.json', '.jsx'], - modulesDirectories : ['node_modules', 'vendor'] + extensions: ['.js', '.json', '.jsx'], + modules: ['node_modules'] }, - cache : true, - quiet : false, - noInfo : false, - debug : false, - outputPathinfo : !production, - devtool : production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool - stats : { colors: true }, + cache: true, + devtool: production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool + stats: { colors: true }, plugins, - module : { loaders }, - devServer : { + module: { rules }, + devServer: { stats: { - cached : false, - exclude : [/node_modules[\\/]react(-router)?[\\/]/] + cached: false, + exclude: [/node_modules[\\/]react(-router)?[\\/]/] } } }; diff --git a/client/package.json b/client/package.json index ffa560f..aa77bc9 100644 --- a/client/package.json +++ b/client/package.json @@ -3,98 +3,98 @@ "postinstall": "node node_modules/phantomjs-prebuilt/install.js" }, "dependencies": { - "babel": "6.5.2", - "babel-polyfill": "^6.20.0", - "babel-runtime": "^6.20.0", - "es6-promise": "^4.0.5", + "babel": "^6.23.0", + "babel-polyfill": "^6.23.0", + "babel-runtime": "^6.23.0", + "es6-promise": "^4.1.0", "lodash": "4.17.4", "react": "15.4.2", "react-dom": "15.4.2", - "react-proxy-loader": "0.3.4", - "react-redux": "^5.0.2", + "react-proxy-loader": "^0.3.5", + "react-redux": "^5.0.3", "react-router": "^3.0.2", "react-tap-event-plugin": "2.0.1", "redux": "3.6.0", - "superagent": "^3.4.1", + "superagent": "^3.5.0", "uuid": "3.0.1" }, "devDependencies": { - "autoprefixer": "^6.6.1", - "babel-core": "^6.21.0", + "autoprefixer": "^6.7.7", + "babel-core": "^6.24.0", "babel-eslint": "^7.1.1", - "babel-loader": "^6.2.10", - "babel-plugin-transform-class-properties": "^6.19.0", + "babel-loader": "^6.4.0", + "babel-plugin-transform-class-properties": "^6.23.0", "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-react-constant-elements": "^6.9.1", + "babel-plugin-transform-react-constant-elements": "^6.23.0", "babel-plugin-transform-react-inline-elements": "^6.8.0", - "babel-plugin-transform-react-remove-prop-types": "^0.3.1", - "babel-plugin-transform-runtime": "^6.15.0", - "babel-preset-es2015": "^6.18.0", - "babel-preset-react": "^6.16.0", + "babel-plugin-transform-react-remove-prop-types": "^0.3.2", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-preset-es2015": "^6.24.0", + "babel-preset-react": "^6.23.0", "babel-preset-stage-0": "^6.16.0", "chunk-manifest-webpack-plugin": "1.0.0", - "coveralls": "^2.11.15", - "css-loader": "0.26.1", + "coveralls": "^2.12.0", + "css-loader": "^0.27.3", "dotenv": "4.0.0", "ecstatic": "2.1.0", - "ejs": "^2.5.5", - "eslint": "^3.13.1", + "ejs": "^2.5.6", + "eslint": "^3.17.1", "eslint-config-airbnb": "^14.0.0", - "eslint-plugin-babel": "^4.0.0", + "eslint-plugin-babel": "^4.1.1", "eslint-plugin-import": "^2.2.0", "eslint-plugin-jsx-a11y": "^4.0.0", - "eslint-plugin-react": "^6.9.0", + "eslint-plugin-react": "^6.10.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", - "express": "^4.14.0", - "extract-text-webpack-plugin": "1.0.1", - "file-loader": "^0.10.0", + "express": "^4.15.2", + "extract-text-webpack-plugin": "^2.1.0", + "file-loader": "^0.10.1", "front-matter": "^2.1.1", - "fs-extra": "^2.0.0", - "html-minifier": "^3.3.1", - "html-truncate": "^1.2.1", - "imports-loader": "0.7.0", + "fs-extra": "^2.1.0", + "html-minifier": "^3.4.1", + "html-truncate": "^1.2.2", + "imports-loader": "^0.7.1", "istanbul": "0.4.5", - "istanbul-instrumenter-loader": "1.2.0", + "istanbul-instrumenter-loader": "^2.0.0", "jasmine": "^2.5.2", "jasmine-core": "2.5.2", - "karma": "^1.4.1", + "karma": "^1.5.0", "karma-chrome-launcher": "2.0.0", "karma-cli": "1.0.1", "karma-coverage": "1.1.1", - "karma-firefox-launcher": "1.0.0", + "karma-firefox-launcher": "^1.0.1", "karma-jasmine": "1.1.0", "karma-jasmine-ajax": "0.1.13", - "karma-phantomjs-launcher": "1.0.2", + "karma-phantomjs-launcher": "^1.0.4", "karma-sourcemap-loader": "0.3.7", - "karma-spec-reporter": "0.0.26", - "karma-webpack": "1.8.1", + "karma-spec-reporter": "^0.0.30", + "karma-webpack": "^2.0.3", "less": "2.7.2", - "less-loader": "2.2.3", + "less-loader": "^3.0.0", "marked": "^0.3.6", "minimist": "1.2.0", "node-sass": "^4.5.0", - "node-watch": "^0.4.1", + "node-watch": "^0.5.1", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", "phantomjs-prebuilt": "^2.1.14", - "postcss-load-config": "^1.1.0", - "postcss-loader": "^1.2.1", - "postcss-smart-import": "^0.6.7", + "postcss-load-config": "^1.2.0", + "postcss-loader": "^1.3.3", + "postcss-smart-import": "^0.6.10", "protractor": "^5.1.1", - "psi": "2.0.4", + "psi": "^3.0.0", "react-addons-test-utils": "^15.4.2", "react-hot-loader": "^3.0.0-beta.6", - "redbox-react": "^1.3.3", + "redbox-react": "^1.3.4", "redux-devtools": "^3.3.2", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.2.0", - "s3-website": "^2.1.0", - "sass-loader": "^5.0.1", - "style-loader": "0.13.1", - "url-loader": "0.5.7", - "webpack": "1.14.0", - "webpack-dev-middleware": "^1.9.0", - "webpack-hot-middleware": "^2.15.0" + "s3-website": "^3.0.0", + "sass-loader": "^6.0.3", + "style-loader": "^0.14.0", + "url-loader": "^0.5.8", + "webpack": "^2.2.1", + "webpack-dev-middleware": "^1.10.1", + "webpack-hot-middleware": "^2.17.1" } } diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 6792de8..666254d 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -45,7 +45,7 @@ function buildWebpackEntries(isHot) { console.log('webpack error', err); reject(err); } - // console.log("webpack", stats.toString({colors: true})); + // console.log('webpack', stats.toString({ colors: true })); resolve({ webpackConfig, webpackStats: stats.toJson() diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 7c79791..fd02d9d 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -1,24 +1,24 @@ -var release = false; -var express = require("express"); -var webpack = require("webpack"); -var webpackMiddleware = require("webpack-dev-middleware"); -var webpackHotMiddleware = require("webpack-hot-middleware"); -var settings = require("./config/settings.js"); -var webpackConfig = require("./config/webpack.config")("hot"); -var path = require("path"); -var app = express(); - -var build = require("./tools/build"); - -function launch(){ - - var compiler = webpack(webpackConfig); - var webpackMiddlewareInstance = webpackMiddleware(compiler, { +const express = require('express'); +const webpack = require('webpack'); +const webpackMiddleware = require('webpack-dev-middleware'); +const webpackHotMiddleware = require('webpack-hot-middleware'); +const settings = require('./config/settings'); +const webpackConfig = require('./config/webpack.config')('hot'); +const path = require('path'); +const build = require('./tools/build'); + +const app = express(); + +const localIp = '0.0.0.0'; + +function launch() { + + const compiler = webpack(webpackConfig); + const webpackMiddlewareInstance = webpackMiddleware(compiler, { noInfo: true, publicPath: webpackConfig.output.publicPath, watch: true, - noInfo: true, - headers: { "Access-Control-Allow-Origin": "*" } + headers: { 'Access-Control-Allow-Origin': '*' } }); app.use(express.static(settings.devOutput)); @@ -27,17 +27,17 @@ function launch(){ app.use(webpackHotMiddleware(compiler)); - app.get("*", function response(req, res) { + app.get('*', (req, res) => { res.sendFile(path.join(settings.devOutput, req.url)); }); - app.listen(settings.hotPort, "0.0.0.0", function(err) { + app.listen(settings.hotPort, localIp, (err) => { if (err) { console.log(err); return; } - console.log("Listening on: " + webpackConfig.output.publicPath); - console.log("Serving content from: " + settings.devOutput); + console.log(`Listening on: http://${localIp}:${settings.hotPort}${webpackConfig.output.publicPath}`); + console.log(`Serving content from: ${settings.devOutput}`); }); } diff --git a/client/yarn.lock b/client/yarn.lock index b742b4b..a4253bc 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -25,17 +25,23 @@ accepts@1.3.3, accepts@~1.3.3: mime-types "~2.1.11" 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-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@4.0.4: +acorn@4.0.4, acorn@^4.0.3, acorn@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" -acorn@^3.0.0, acorn@^3.0.4: +acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -58,11 +64,11 @@ agent-base@2: extend "~3.0.0" semver "~5.0.1" -ajv-keywords@^1.0.0: +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.11.2, ajv@^4.7.0: version "4.11.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" dependencies: @@ -89,15 +95,21 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-align@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" + dependencies: + string-width "^1.0.1" + ansi-escapes@^1.0.0, 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.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.6.tgz#bda8e33dd2ee1c20f54c08eb405713cbfc0ed80e" +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@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -243,6 +255,14 @@ asap@^2.0.0, asap@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + 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" @@ -279,7 +299,7 @@ async-some@~1.0.2: dependencies: dezalgo "^1.0.2" -async@1.x, async@^1.3.0, async@^1.4.0, async@^1.5.0, async@~1.5.2: +async@1.x, async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -287,9 +307,9 @@ async@^0.9.0, async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" +async@^2.0.1, async@^2.1.2, async@^2.1.5, async@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" dependencies: lodash "^4.14.0" @@ -297,15 +317,11 @@ async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" -async@~1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.4.2.tgz#6c9edcb11ced4f0dd2f2d40db0d49a109c088aab" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -autoprefixer@^6.3.1, autoprefixer@^6.6.1: +autoprefixer@^6.3.1: version "6.7.2" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.2.tgz#172ab07b998ae9b957530928a59a40be54a45023" dependencies: @@ -316,7 +332,18 @@ autoprefixer@^6.3.1, autoprefixer@^6.6.1: postcss "^5.2.11" postcss-value-parser "^3.2.3" -aws-sdk@^2.1.4, aws-sdk@^2.2.4: +autoprefixer@^6.7.7: + 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-sdk@^2.1.4, aws-sdk@^2.2.4, aws-sdk@^2.6.12: version "2.10.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.10.0.tgz#5acb2a213147c503915dbd3d0aa324a136fed25a" dependencies: @@ -346,19 +373,19 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.21.0, babel-core@^6.22.0: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" +babel-core@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" dependencies: babel-code-frame "^6.22.0" - babel-generator "^6.22.0" - babel-helpers "^6.22.0" - babel-messages "^6.22.0" - babel-register "^6.22.0" + babel-generator "^6.24.0" + babel-helpers "^6.23.0" + babel-messages "^6.23.0" + babel-register "^6.24.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.1" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" babylon "^6.11.0" convert-source-map "^1.1.0" debug "^2.1.1" @@ -380,7 +407,7 @@ babel-eslint@^7.1.1: babylon "^6.13.0" lodash.pickby "^4.6.0" -babel-generator@^6.18.0, babel-generator@^6.22.0: +babel-generator@^6.18.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" dependencies: @@ -392,6 +419,19 @@ babel-generator@^6.18.0, babel-generator@^6.22.0: lodash "^4.2.0" source-map "^0.5.0" +babel-generator@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.23.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + babel-helper-bindify-decorators@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" @@ -408,12 +448,12 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-helper-builder-react-jsx@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.22.0.tgz#aafb31913e47761fd4d0b6987756a144a65fca0d" +babel-helper-builder-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.23.0.tgz#d53fc8c996e0bc56d0de0fc4cc55a7138395ea4b" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" esutils "^2.0.0" lodash "^4.2.0" @@ -452,15 +492,15 @@ babel-helper-explode-class@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helper-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" +babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6" dependencies: babel-helper-get-function-arity "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babel-helper-get-function-arity@^6.22.0: version "6.22.0" @@ -512,19 +552,19 @@ babel-helper-replace-supers@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" +babel-helpers@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" -babel-loader@^6.2.10: - version "6.2.10" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.10.tgz#adefc2b242320cd5d15e65b31cea0e8b1b02d4b0" +babel-loader@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.0.tgz#e98c239662a22533b9e7a49594ef216d7635ea28" dependencies: find-cache-dir "^0.1.1" - loader-utils "^0.2.11" + loader-utils "^0.2.16" mkdirp "^0.5.1" object-assign "^4.0.1" @@ -534,6 +574,12 @@ babel-messages@^6.22.0: dependencies: babel-runtime "^6.22.0" +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" @@ -576,7 +622,7 @@ 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, babel-plugin-syntax-flow@^6.3.13: +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" @@ -620,14 +666,14 @@ babel-plugin-transform-class-constructor-call@^6.22.0: babel-runtime "^6.22.0" babel-template "^6.22.0" -babel-plugin-transform-class-properties@^6.19.0, babel-plugin-transform-class-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8" +babel-plugin-transform-class-properties@^6.22.0, babel-plugin-transform-class-properties@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.23.0" babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" babel-plugin-transform-decorators-legacy@^1.3.4: version "1.3.4" @@ -730,22 +776,22 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" +babel-plugin-transform-es2015-modules-amd@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz#a1911fb9b7ec7e05a43a63c5995007557bcf6a2e" dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.0" babel-runtime "^6.22.0" babel-template "^6.22.0" -babel-plugin-transform-es2015-modules-commonjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" +babel-plugin-transform-es2015-modules-commonjs@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.0.tgz#e921aefb72c2cc26cb03d107626156413222134f" dependencies: babel-plugin-transform-strict-mode "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-types "^6.23.0" babel-plugin-transform-es2015-modules-systemjs@^6.22.0: version "6.22.0" @@ -755,13 +801,13 @@ babel-plugin-transform-es2015-modules-systemjs@^6.22.0: babel-runtime "^6.22.0" babel-template "^6.22.0" -babel-plugin-transform-es2015-modules-umd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" +babel-plugin-transform-es2015-modules-umd@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz#fd5fa63521cae8d273927c3958afd7c067733450" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" babel-plugin-transform-es2015-object-super@^6.22.0: version "6.22.0" @@ -858,15 +904,15 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-constant-elements@^6.9.1: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.22.0.tgz#4af456f80d283e8be00f00f12852354defa08ee1" +babel-plugin-transform-react-constant-elements@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-react-display-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.22.0.tgz#077197520fa8562b8d3da4c3c4b0b1bdd7853f26" +babel-plugin-transform-react-display-name@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" dependencies: babel-runtime "^6.22.0" @@ -890,17 +936,17 @@ babel-plugin-transform-react-jsx-source@^6.22.0: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817" +babel-plugin-transform-react-jsx@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.23.0.tgz#23e892f7f2e759678eb5e4446a8f8e94e81b3470" dependencies: - babel-helper-builder-react-jsx "^6.22.0" + babel-helper-builder-react-jsx "^6.23.0" babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-remove-prop-types@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.3.1.tgz#e59f281d06617eb93453dbb066d3f737f3299326" +babel-plugin-transform-react-remove-prop-types@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.3.2.tgz#6da8d834c6d7ad8ab02f956509790cfaa01ffe19" babel-plugin-transform-regenerator@^6.22.0: version "6.22.0" @@ -908,9 +954,9 @@ babel-plugin-transform-regenerator@^6.22.0: dependencies: regenerator-transform "0.9.8" -babel-plugin-transform-runtime@^6.15.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.22.0.tgz#10968d760bbf6517243081eec778e10fa828551c" +babel-plugin-transform-runtime@^6.23.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" @@ -921,17 +967,17 @@ babel-plugin-transform-strict-mode@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-polyfill@^6.20.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b" +babel-polyfill@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" dependencies: babel-runtime "^6.22.0" core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-preset-es2015@^6.18.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" +babel-preset-es2015@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.0.tgz#c162d68b1932696e036cd3110dc1ccd303d2673a" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" @@ -944,10 +990,10 @@ babel-preset-es2015@^6.18.0: babel-plugin-transform-es2015-for-of "^6.22.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.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.0" babel-plugin-transform-es2015-modules-systemjs "^6.22.0" - babel-plugin-transform-es2015-modules-umd "^6.22.0" + babel-plugin-transform-es2015-modules-umd "^6.24.0" babel-plugin-transform-es2015-object-super "^6.22.0" babel-plugin-transform-es2015-parameters "^6.22.0" babel-plugin-transform-es2015-shorthand-properties "^6.22.0" @@ -958,17 +1004,22 @@ babel-preset-es2015@^6.18.0: babel-plugin-transform-es2015-unicode-regex "^6.22.0" babel-plugin-transform-regenerator "^6.22.0" -babel-preset-react@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165" +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-syntax-flow "^6.3.13" - babel-plugin-syntax-jsx "^6.3.13" babel-plugin-transform-flow-strip-types "^6.22.0" - babel-plugin-transform-react-display-name "^6.22.0" - babel-plugin-transform-react-jsx "^6.22.0" + +babel-preset-react@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.23.0.tgz#eb7cee4de98a3f94502c28565332da9819455195" + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.23.0" 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-preset-stage-0@^6.16.0: version "6.22.0" @@ -1005,11 +1056,11 @@ babel-preset-stage-3@^6.22.0: babel-plugin-transform-exponentiation-operator "^6.22.0" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" +babel-register@^6.24.0: + version "6.24.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" dependencies: - babel-core "^6.22.0" + babel-core "^6.24.0" babel-runtime "^6.22.0" core-js "^2.4.0" home-or-tmp "^2.0.0" @@ -1017,24 +1068,24 @@ babel-register@^6.22.0: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.6.1: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" +babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.6.1: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.3.0, babel-template@^6.7.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" +babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0, babel-template@^6.3.0, babel-template@^6.7.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: +babel-traverse@^6.15.0: version "6.22.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" dependencies: @@ -1048,7 +1099,21 @@ babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: +babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: + version "6.23.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.23.0" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.15.0, babel-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" dependencies: @@ -1057,9 +1122,18 @@ babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22 lodash "^4.2.0" to-fast-properties "^1.0.1" -babel@6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129" +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babel@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: version "6.15.0" @@ -1089,21 +1163,10 @@ 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, base64url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" -base64url@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-0.0.6.tgz#9597b36b330db1c42477322ea87ea8027499b82b" - -base64url@~1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-1.0.6.tgz#d64d375d68a7c640d912e2358d170dca5bb54681" - dependencies: - concat-stream "~1.4.7" - meow "~2.0.0" - bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -1154,13 +1217,17 @@ bluebird@^3.3.0: version "3.4.7" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" -body-parser@^1.12.4: - version "1.16.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.0.tgz#924a5e472c6229fb9d69b85a20d5f2532dec788b" +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + +body-parser@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.1.tgz#51540d045adfa7a0c6995a014bb6b1ed9b802329" dependencies: bytes "2.4.0" content-type "~1.0.2" - debug "2.6.0" + debug "2.6.1" depd "~1.1.0" http-errors "~1.5.1" iconv-lite "0.4.15" @@ -1175,15 +1242,16 @@ boom@2.x.x: dependencies: hoek "2.x.x" -boxen@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.3.1.tgz#a7d898243ae622f7abb6bb604d740a76c6a5461b" +boxen@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" dependencies: + ansi-align "^1.1.0" + camelcase "^4.0.0" chalk "^1.1.1" - filled-array "^1.0.0" - object-assign "^4.0.1" - repeating "^2.0.0" - string-width "^1.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^0.1.0" widest-line "^1.0.0" brace-expansion@^1.0.0: @@ -1207,12 +1275,55 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -browserify-aes@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + dependencies: + buffer-xor "^1.0.2" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + inherits "^2.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.0" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" + 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" @@ -1226,7 +1337,14 @@ browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.1: caniuse-db "^1.0.30000617" electron-to-chromium "^1.2.1" -buffer-equal-constant-time@^1.0.1: +browserslist@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.6.tgz#af98589ce6e7ab09618d29451faacb81220bd3ba" + dependencies: + caniuse-db "^1.0.30000631" + electron-to-chromium "^1.2.5" + +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" @@ -1243,7 +1361,11 @@ buffer-to-vinyl@^1.0.0: uuid "^2.0.1" vinyl "^1.0.0" -buffer@4.9.1, buffer@^4.9.0: +buffer-xor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@4.9.1, buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: @@ -1288,13 +1410,6 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" -camelcase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-1.0.0.tgz#bd1a11bf9b31a1ce493493a930de1a0baf4ad7ec" - dependencies: - camelcase "^1.0.1" - map-obj "^1.0.0" - camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1302,7 +1417,7 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" -camelcase@^1.0.1, camelcase@^1.0.2: +camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -1314,6 +1429,10 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +camelcase@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.0.0.tgz#8b0f90d44be5e281b903b9887349b92595ef07f2" + camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" @@ -1331,6 +1450,10 @@ caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000617, caniuse-db@^1.0.30000618: version "1.0.30000622" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000622.tgz#9d9690b577384990a58e33ebb903a14da735e5fd" +caniuse-db@^1.0.30000631, caniuse-db@^1.0.30000634: + version "1.0.30000635" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000635.tgz#ea159dfa062e00f25f97af3791baef93f17904a1" + 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" @@ -1388,7 +1511,7 @@ chmodr@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" -chokidar@^1.0.0, chokidar@^1.4.1: +chokidar@^1.4.1, chokidar@^1.4.3: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" dependencies: @@ -1413,6 +1536,12 @@ chunk-manifest-webpack-plugin@1.0.0: dependencies: webpack-core "^0.6.9" +cipher-base@^1.0.0, cipher-base@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + dependencies: + inherits "^2.0.1" + circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" @@ -1429,6 +1558,10 @@ clean-css@4.0.x: dependencies: source-map "0.5.x" +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + cli-color@~0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" @@ -1461,6 +1594,16 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +clone-deep@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" + dependencies: + for-own "^0.1.3" + is-plain-object "^2.0.1" + kind-of "^3.0.2" + lazy-cache "^1.0.3" + 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" @@ -1549,10 +1692,6 @@ colors@^1.1.0, colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -colors@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -1608,7 +1747,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.5.0: +concat-stream@1.5.0, concat-stream@^1.4.7: version "1.5.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" dependencies: @@ -1616,7 +1755,7 @@ concat-stream@1.5.0: readable-stream "~2.0.0" typedarray "~0.0.5" -concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: +concat-stream@^1.4.6, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1624,14 +1763,6 @@ concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@~1.4.7: - version "1.4.10" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.4.10.tgz#acc3bbf5602cb8cc980c6ac840fa7d8603e3ef36" - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.9" - typedarray "~0.0.5" - config-chain@~1.1.10: version "1.1.11" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" @@ -1639,26 +1770,23 @@ config-chain@~1.1.10: ini "^1.3.4" proto-list "~1.2.1" -configstore@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" +configstore@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" dependencies: - dot-prop "^3.0.0" + dot-prop "^4.1.0" graceful-fs "^4.1.2" mkdirp "^0.5.0" - object-assign "^4.0.1" - os-tmpdir "^1.0.0" - osenv "^0.1.0" - uuid "^2.0.1" + unique-string "^1.0.0" write-file-atomic "^1.1.2" - xdg-basedir "^2.0.0" + xdg-basedir "^3.0.0" -connect@^3.3.5: - version "3.5.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198" +connect@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.0.tgz#f09a4f7dcd17324b663b725c815bdb1c4158a46e" dependencies: - debug "~2.2.0" - finalhandler "0.5.0" + debug "2.6.1" + finalhandler "1.0.0" parseurl "~1.3.1" utils-merge "1.0.0" @@ -1733,9 +1861,9 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: parse-json "^2.2.0" require-from-string "^1.1.0" -coveralls@^2.11.15: - version "2.11.16" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.16.tgz#da9061265142ddee954f68379122be97be8ab4b1" +coveralls@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.12.0.tgz#b3d064108e29728385b56e42fc2d119f43e0e517" dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" @@ -1743,12 +1871,42 @@ coveralls@^2.11.15: minimist "1.2.0" request "2.79.0" -create-error-class@^3.0.1: +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.0, create-error-class@^3.0.1: 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.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^1.0.0" + sha.js "^2.3.6" + +create-hmac@^1.1.0, create-hmac@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" + dependencies: + create-hash "^1.1.0" + inherits "^2.0.1" + +cross-spawn-async@^2.1.1: + version "2.2.5" + resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + dependencies: + lru-cache "^4.0.0" + which "^1.2.8" + cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -1766,27 +1924,37 @@ crypto-browserify@1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" -crypto-browserify@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" +crypto-browserify@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" dependencies: - browserify-aes "0.4.0" - pbkdf2-compat "2.0.1" - ripemd160 "0.2.0" - sha.js "2.2.6" + 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" + +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-loader@0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.1.tgz#2ba7f20131b93597496b3e9bb500785a49cd29ea" +css-loader@^0.27.3: + version "0.27.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.27.3.tgz#69ab6f47b69bfb1b5acee61bac2aab14302ff0dc" dependencies: babel-code-frame "^6.11.0" css-selector-tokenizer "^0.7.0" cssnano ">=2.6.1 <4" - loader-utils "~0.2.2" + loader-utils "^1.0.2" lodash.camelcase "^4.3.0" object-assign "^4.0.1" postcss "^5.0.6" @@ -1794,7 +1962,7 @@ css-loader@0.26.1: postcss-modules-local-by-default "^1.0.1" postcss-modules-scope "^1.0.0" postcss-modules-values "^1.1.0" - source-list-map "^0.1.4" + source-list-map "^0.1.7" css-selector-tokenizer@^0.6.0: version "0.6.0" @@ -1905,9 +2073,9 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.0, debug@^2.1.1, debug@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" +debug@2, debug@2.6.1, debug@^2.1.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: ms "0.7.2" @@ -1923,6 +2091,12 @@ debug@2.3.3: dependencies: ms "0.7.2" +debug@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" + dependencies: + ms "0.7.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -1991,7 +2165,7 @@ decompress@^3.0.0: vinyl-assign "^1.0.1" vinyl-fs "^2.2.0" -deep-diff@^0.3.0: +deep-diff@^0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.4.tgz#aac5c39952236abe5f037a2349060ba01b00ae48" @@ -2040,10 +2214,17 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@~1.1.0: +depd@1.1.0, depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" +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" @@ -2065,6 +2246,14 @@ di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" +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" + difflib@~0.2.1: version "0.2.4" resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" @@ -2101,9 +2290,9 @@ dot-prop@^2.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" +dot-prop@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" dependencies: is-obj "^1.0.0" @@ -2153,6 +2342,10 @@ duplexer2@^0.1.4, duplexer2@~0.1.0: dependencies: readable-stream "^2.0.2" +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -2183,7 +2376,7 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -ecdsa-sig-formatter@^1.0.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: @@ -2207,14 +2400,30 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -ejs@^2.5.5: - version "2.5.5" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77" +ejs@^2.5.6: + version "2.5.6" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" electron-to-chromium@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.2.tgz#e41bc9488c88e3cfa1e94bde28e8420d7d47c47c" +electron-to-chromium@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.7.tgz#4f748061407e478c76256d04496972b71f647407" + +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" + emoji-regex@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.0.tgz#d14ef743a7dfa6eaf436882bd1920a4aed84dd94" @@ -2239,9 +2448,9 @@ end-of-stream@1.0.0, end-of-stream@^1.0.0: dependencies: once "~1.3.0" -engine.io-client@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.2.tgz#c38767547f2a7d184f5752f6f0ad501006703766" +engine.io-client@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" dependencies: component-emitter "1.2.1" component-inherit "0.0.3" @@ -2252,7 +2461,7 @@ engine.io-client@1.8.2: parsejson "0.0.3" parseqs "0.0.5" parseuri "0.0.5" - ws "1.1.1" + ws "1.1.2" xmlhttprequest-ssl "1.5.3" yeast "0.1.2" @@ -2267,24 +2476,25 @@ engine.io-parser@1.3.2: has-binary "0.1.7" wtf-8 "1.0.0" -engine.io@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.2.tgz#6b59be730b348c0125b0a4589de1c355abcf7a7e" +engine.io@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" 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.1" + ws "1.1.2" -enhanced-resolve@~0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" +enhanced-resolve@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" dependencies: graceful-fs "^4.1.2" - memory-fs "^0.2.0" - tapable "^0.1.8" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" ent@~2.2.0: version "2.2.0" @@ -2363,7 +2573,11 @@ es6-map@^0.1.3: es6-symbol "~3.1.0" event-emitter "~0.3.4" -es6-promise@^4.0.5, es6-promise@~4.0.3: +es6-promise@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0" + +es6-promise@~4.0.3: version "4.0.5" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" @@ -2446,9 +2660,9 @@ eslint-module-utils@^2.0.0: debug "2.2.0" pkg-dir "^1.0.0" -eslint-plugin-babel@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.0.1.tgz#77de74dabd67a6bef3b16bf258f5804e971e7349" +eslint-plugin-babel@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.1.tgz#ef285c87039b67beb3bbd227f5b0eed4fb376b87" eslint-plugin-import@^2.2.0: version "2.2.0" @@ -2476,17 +2690,19 @@ eslint-plugin-jsx-a11y@^4.0.0: jsx-ast-utils "^1.0.0" object-assign "^4.0.1" -eslint-plugin-react@^6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.9.0.tgz#54c2e9906b76f9d10142030bdc34e9d6840a0bb2" +eslint-plugin-react@^6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.0.tgz#9c48b48d101554b5355413e7c64238abde6ef1ef" dependencies: array.prototype.find "^2.0.1" doctrine "^1.2.2" + has "^1.0.1" jsx-ast-utils "^1.3.4" + object.assign "^4.0.4" -eslint@^3.13.1: - version "3.15.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.15.0.tgz#bdcc6a6c5ffe08160e7b93c066695362a91e30f2" +eslint@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.17.1.tgz#b80ae12d9c406d858406fccda627afce33ea10ea" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" @@ -2561,9 +2777,9 @@ esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" +etag@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" event-emitter@~0.3.4: version "0.3.4" @@ -2596,6 +2812,23 @@ eventsource-polyfill@^0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/eventsource-polyfill/-/eventsource-polyfill-0.9.6.tgz#10e0d187f111b167f28fdab918843ce7d818f13c" +evp_bytestokey@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" + dependencies: + create-hash "^1.1.1" + +execa@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" + dependencies: + cross-spawn-async "^2.1.1" + is-stream "^1.1.0" + npm-run-path "^1.0.0" + object-assign "^4.0.1" + path-key "^1.0.0" + strip-eof "^1.0.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -2631,9 +2864,9 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@^4.14.0: - version "4.14.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.14.1.tgz#646c237f766f148c2120aff073817b9e4d7e0d33" +express@^4.15.2: + version "4.15.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" dependencies: accepts "~1.3.3" array-flatten "1.1.1" @@ -2641,23 +2874,25 @@ express@^4.14.0: content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" - debug "~2.2.0" + debug "2.6.1" depd "~1.1.0" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.7.0" - finalhandler "0.5.1" - fresh "0.3.0" + etag "~1.8.0" + finalhandler "~1.0.0" + fresh "0.5.0" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.1" path-to-regexp "0.1.7" proxy-addr "~1.1.3" - qs "6.2.0" + qs "6.4.0" range-parser "~1.2.0" - send "0.14.2" - serve-static "~1.11.2" + send "0.15.1" + serve-static "1.12.1" + setprototypeof "1.0.3" + statuses "~1.3.1" type-is "~1.6.14" utils-merge "1.0.0" vary "~1.1.0" @@ -2678,12 +2913,13 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extract-text-webpack-plugin@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c" +extract-text-webpack-plugin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.0.tgz#69315b885f876dbf96d3819f6a9f1cca7aebf159" dependencies: - async "^1.5.0" - loader-utils "^0.2.3" + ajv "^4.11.2" + async "^2.1.2" + loader-utils "^1.0.2" webpack-sources "^0.1.0" extract-zip@~1.5.0: @@ -2746,11 +2982,11 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.0.tgz#bbe6db7474ac92c7f54fdc197cf547e98b6b8e12" +file-loader@^0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" dependencies: - loader-utils "~0.2.5" + loader-utils "^1.0.2" file-type@^3.1.0: version "3.9.0" @@ -2782,27 +3018,15 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -filled-array@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" - -finalhandler@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" - dependencies: - debug "~2.2.0" - escape-html "~1.0.3" - on-finished "~2.3.0" - statuses "~1.3.0" - unpipe "~1.0.0" - -finalhandler@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.1.tgz#2c400d8d4530935bc232549c5fa385ec07de6fcd" +finalhandler@1.0.0, finalhandler@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755" dependencies: - debug "~2.2.0" + debug "2.6.1" + encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" + parseurl "~1.3.1" statuses "~1.3.1" unpipe "~1.0.0" @@ -2838,11 +3062,11 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -for-in@^0.1.5: +for-in@^0.1.3, for-in@^0.1.5: version "0.1.6" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" -for-own@^0.1.4: +for-own@^0.1.3, for-own@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" dependencies: @@ -2864,7 +3088,7 @@ form-data@^2.1.1, form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -form-data@~1.0.0-rc3, form-data@~1.0.0-rc4: +form-data@~1.0.0-rc4: version "1.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" dependencies: @@ -2880,9 +3104,9 @@ forwarded@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" -fresh@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" +fresh@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" from@~0: version "0.1.3" @@ -2900,9 +3124,9 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" +fs-extra@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.0.tgz#122ac03cf15a84dd89c7a5b4edb42b1b46265dbe" dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -2971,13 +3195,6 @@ function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" -gapitoken@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/gapitoken/-/gapitoken-0.1.5.tgz#3577fcfb5426be3a7b8ebada92671229d8cc81ce" - dependencies: - jws "~3.0.0" - request "^2.54.0" - gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" @@ -3031,6 +3248,10 @@ get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +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.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -3078,17 +3299,6 @@ glob-stream@^5.3.2: to-absolute-glob "^0.1.1" unique-stream "^2.0.2" -glob@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" - 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@^5.0.15, glob@^5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -3167,16 +3377,14 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -google-auth-library@~0.9.7: - version "0.9.10" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.9.10.tgz#4993dc07bb4834b8ca0350213a6873a32c6051b9" +google-auth-library@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.10.0.tgz#6e15babee85fd1dd14d8d128a295b6838d52136e" dependencies: - async "~1.4.2" - gtoken "^1.1.0" - jws "~3.0.0" - lodash.noop "~3.0.0" - request "~2.74.0" - string-template "~0.2.0" + gtoken "^1.2.1" + jws "^3.1.4" + lodash.noop "^3.0.1" + request "^2.74.0" google-p12-pem@^0.1.0: version "0.1.1" @@ -3184,16 +3392,13 @@ google-p12-pem@^0.1.0: dependencies: node-forge "^0.6.46" -googleapis@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-7.1.0.tgz#1ca0c0c4ae90a68c5f3807609416c423a1f12c44" +googleapis@^16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-16.1.0.tgz#0f19f2d70572d918881a0f626e3b1a2fa8629576" dependencies: - async "~1.5.2" - gapitoken "~0.1.5" - google-auth-library "~0.9.7" - request "~2.72.0" + async "~2.1.4" + google-auth-library "~0.10.0" string-template "~1.0.0" - url "^0.11.0" got@^5.0.0: version "5.7.1" @@ -3215,7 +3420,23 @@ got@^5.0.0: unzip-response "^1.0.2" url-parse-lax "^1.0.0" -graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.6: +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -3223,7 +3444,7 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -gtoken@^1.1.0: +gtoken@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.1.tgz#90153a547c2fc1cd24a4d3d2ab3b5aba0a26897a" dependencies: @@ -3343,6 +3564,12 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + dependencies: + inherits "^2.0.1" + hasha@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" @@ -3380,6 +3607,14 @@ history@^3.0.0: query-string "^4.2.2" warning "^3.0.0" +hmac-drbg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5" + 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" @@ -3407,9 +3642,9 @@ html-entities@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" -html-minifier@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.3.1.tgz#dd38e60571537bf34a8171889c64fce73c45edad" +html-minifier@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.1.tgz#0bf3c54d7f116d500b78c51fc4246039922dc250" dependencies: camel-case "3.0.x" clean-css "4.0.x" @@ -3418,11 +3653,11 @@ html-minifier@^3.3.1: ncname "1.0.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "2.7.x" + uglify-js "2.8.x" -html-truncate@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.1.tgz#90a546b9429bec7aeb5d57a53547c317fbd6f5f3" +html-truncate@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.2.tgz#db2e331dcf1cba0bd432a507d16e988609f2575f" http-errors@~1.5.1: version "1.5.1" @@ -3432,6 +3667,15 @@ http-errors@~1.5.1: setprototypeof "1.0.2" statuses ">= 1.3.1 < 2" +http-errors@~1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" + dependencies: + depd "1.1.0" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + http-proxy@^1.13.0: version "1.16.2" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" @@ -3494,28 +3738,20 @@ image-size@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.1.tgz#28eea8548a4b1443480ddddc1e083ae54652439f" -imports-loader@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.0.tgz#468c04de8075941cfab28146c755c24cc1f36ccd" +imports-loader@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.7.1.tgz#f204b5f34702a32c1db7d48d89d5e867a0441253" dependencies: - loader-utils "^0.2.16" + loader-utils "^1.0.2" source-map "^0.5.6" -imurmurhash@*, imurmurhash@^0.1.4: +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@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-1.2.2.tgz#db99bcc583eb6abbb1e48dcbb1999a986041cb6b" - dependencies: - get-stdin "^4.0.1" - minimist "^1.1.0" - repeating "^1.1.0" +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" @@ -3581,10 +3817,6 @@ inquirer@^0.12.0: 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.0.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" @@ -3750,6 +3982,12 @@ 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.1" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.1.tgz#4d7ca539bc9db9b737b8acb612f2318ef92f294f" + dependencies: + isobject "^1.0.0" + 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" @@ -3784,7 +4022,7 @@ is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" -is-stream@^1.0.0, is-stream@^1.0.1: +is-stream@^1.0.0, 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" @@ -3838,6 +4076,10 @@ isexe@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isobject@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a" + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -3855,9 +4097,9 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-instrumenter-loader@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-1.2.0.tgz#bef469049b81b23581d0d4db37a271206033cc52" +istanbul-instrumenter-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz#e5492900ab0bba835efa8024cb00be9b3eea2700" dependencies: convert-source-map "^1.3.0" istanbul-lib-instrument "^1.1.3" @@ -3941,14 +4183,14 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" -js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: +js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@~3.7.0: +js-yaml@^3.5.1, js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" dependencies: @@ -3975,6 +4217,10 @@ json-diff@^0.3.1: difflib "~0.2.1" dreamopt "~0.6.0" +json-loader@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + json-parse-helpfulerror@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc" @@ -4031,20 +4277,22 @@ jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: dependencies: object-assign "^4.1.0" -jwa@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.0.2.tgz#fd79609f1e772e299dce8ddb76d00659dd83511f" +jwa@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" dependencies: - base64url "~0.0.4" - buffer-equal-constant-time "^1.0.1" - ecdsa-sig-formatter "^1.0.0" + 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.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.0.0.tgz#da5f267897dd4e9cf8137979db33fc54a3c05418" +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 "~1.0.4" - jwa "~1.0.0" + base64url "^2.0.0" + jwa "^1.1.4" + safe-buffer "^5.0.1" karma-chrome-launcher@2.0.0: version "2.0.0" @@ -4069,9 +4317,9 @@ karma-coverage@1.1.1: minimatch "^3.0.0" source-map "^0.5.1" -karma-firefox-launcher@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.0.tgz#e08af3ce42e39860c2952ea7b7eaa64d63508bdc" +karma-firefox-launcher@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz#ce58f47c2013a88156d55a5d61337c099cf5bb51" karma-jasmine-ajax@0.1.13: version "0.1.13" @@ -4083,9 +4331,9 @@ karma-jasmine@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" -karma-phantomjs-launcher@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.2.tgz#19e1041498fd75563ed86730a22c1fe579fa8fb1" +karma-phantomjs-launcher@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2" dependencies: lodash "^4.0.1" phantomjs-prebuilt "^2.1.7" @@ -4096,15 +4344,15 @@ karma-sourcemap-loader@0.3.7: dependencies: graceful-fs "^4.1.2" -karma-spec-reporter@0.0.26: - version "0.0.26" - resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.26.tgz#bf5561377dce1b63cf2c975c1af3e35f199e2265" +karma-spec-reporter@^0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.30.tgz#d10b5c8bb441cb1c6adf56785f89d395f2e9093a" dependencies: - colors "~0.6.0" + colors "^1.1.2" -karma-webpack@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-1.8.1.tgz#39d5fd2edeea3cc3ef5b405989b37d5b0e6a3b4e" +karma-webpack@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.3.tgz#39cebf5ca2580139b27f9ae69b78816b9c82fae6" dependencies: async "~0.9.0" loader-utils "^0.2.5" @@ -4112,16 +4360,16 @@ karma-webpack@1.8.1: source-map "^0.1.41" webpack-dev-middleware "^1.0.11" -karma@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-1.4.1.tgz#41981a71d54237606b0a3ea8c58c90773f41650e" +karma@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-1.5.0.tgz#9c4c14f0400bef2c04c8e8e6bff59371025cc009" dependencies: bluebird "^3.3.0" - body-parser "^1.12.4" + body-parser "^1.16.1" chokidar "^1.4.1" colors "^1.1.0" combine-lists "^1.0.0" - connect "^3.3.5" + connect "^3.6.0" core-js "^2.2.0" di "^0.0.1" dom-serialize "^2.2.0" @@ -4137,17 +4385,23 @@ karma@^1.4.1: optimist "^0.6.1" qjobs "^1.1.4" range-parser "^1.2.0" - rimraf "^2.3.3" + rimraf "^2.6.0" safe-buffer "^5.0.1" - socket.io "1.7.2" + socket.io "1.7.3" source-map "^0.5.3" - tmp "0.0.28" - useragent "^2.1.10" + tmp "0.0.31" + useragent "^2.1.12" kew@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" +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: version "3.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" @@ -4160,16 +4414,24 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -latest-version@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" +latest-version@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" dependencies: - package-json "^2.0.0" + package-json "^3.0.0" + +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" +lazy-req@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" + lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -4186,11 +4448,12 @@ lcov-parse@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" -less-loader@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-2.2.3.tgz#b6d8f8139c8493df09d992a93a00734b08f84528" +less-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-3.0.0.tgz#199f7f4a79ff8a195ab47649d71c6d7109da32b9" dependencies: - loader-utils "^0.2.5" + clone-deep "^0.2.4" + loader-utils "^1.0.2" less@2.7.2: version "2.7.2" @@ -4222,7 +4485,11 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5, loader-utils@~0.2.6: +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.16, loader-utils@^0.2.5: version "0.2.16" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" dependencies: @@ -4231,6 +4498,14 @@ loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.15, loader-utils@^0. json5 "^0.5.0" object-assign "^4.0.1" +loader-utils@^1.0.1, loader-utils@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.0.2.tgz#a9f923c865a974623391a8602d031137fad74830" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + lockfile@~1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" @@ -4389,7 +4664,7 @@ lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" -lodash.noop@~3.0.0: +lodash.noop@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c" @@ -4509,7 +4784,7 @@ lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" -lru-cache@^4.0.1, lru-cache@~4.0.1: +lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" dependencies: @@ -4540,18 +4815,7 @@ media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" -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.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" - -memory-fs@~0.4.1: +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: @@ -4573,15 +4837,6 @@ meow@^3.3.0, meow@^3.5.0, meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" -meow@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-2.0.0.tgz#8f530a8ecf5d40d3f4b4df93c3472900fba2a8f1" - dependencies: - camelcase-keys "^1.0.0" - indent-string "^1.1.0" - minimist "^1.1.0" - object-assign "^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" @@ -4620,6 +4875,13 @@ micromatch@^2.1.5, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@~1.26.0: version "1.26.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" @@ -4630,11 +4892,7 @@ mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, dependencies: mime-db "~1.26.0" -mime@1.2.x: - version "1.2.11" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" - -mime@1.3.4, mime@^1.2.11, mime@^1.3.4: +mime@1.3.4, mime@1.3.x, mime@^1.2.11, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" @@ -4644,6 +4902,14 @@ min-document@^2.19.0: 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.2, minimatch@~3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" @@ -4658,6 +4924,13 @@ minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +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" @@ -4776,16 +5049,16 @@ node-gyp@~3.4.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" +node-libs-browser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" dependencies: assert "^1.1.1" browserify-zlib "^0.1.4" - buffer "^4.9.0" + buffer "^4.3.0" console-browserify "^1.1.0" constants-browserify "^1.0.0" - crypto-browserify "3.3.0" + crypto-browserify "^3.11.0" domain-browser "^1.1.1" events "^1.0.0" https-browserify "0.0.1" @@ -4849,9 +5122,9 @@ node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" -node-watch@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.4.1.tgz#d0947d54a995f91135db4056b68722c6d7c322ad" +node-watch@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.1.tgz#f10553dcc9fbbac2d669fef4aa347bd7b0316755" "nopt@2 || 3", nopt@3.x, nopt@~3.0.6: version "3.0.6" @@ -4929,6 +5202,12 @@ npm-registry-client@~7.2.1: optionalDependencies: npmlog "~2.0.0 || ~3.1.0" +npm-run-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" + dependencies: + path-key "^1.0.0" + npm-shrinkwrap@6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npm-shrinkwrap/-/npm-shrinkwrap-6.0.2.tgz#0a4e269bcc64fdb1741a2c46c2b0457a0072d437" @@ -5068,10 +5347,6 @@ 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@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-1.0.0.tgz#e65dc8766d3b47b4b8307465c8311da030b070a6" - object-assign@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" @@ -5080,7 +5355,7 @@ object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" -object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.0, 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" @@ -5088,7 +5363,7 @@ 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.8: +object-keys@^1.0.10, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -5096,6 +5371,14 @@ object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" +object.assign@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -5176,18 +5459,18 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, 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.0, osenv@~0.1.3: +osenv@0, osenv@~0.1.3: 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" -package-json@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" +package-json@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" dependencies: - got "^5.0.0" + got "^6.7.1" registry-auth-token "^3.0.1" registry-url "^3.0.3" semver "^5.1.0" @@ -5202,6 +5485,16 @@ param-case@2.1.x: dependencies: no-case "^2.2.0" +parse-asn1@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23" + 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-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -5271,6 +5564,14 @@ path-is-inside@^1.0.1, path-is-inside@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-key@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" + +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" @@ -5289,9 +5590,11 @@ pause-stream@0.0.11: dependencies: through "~2.3" -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.9" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + dependencies: + create-hmac "^1.1.2" pend@~1.2.0: version "1.2.0" @@ -5402,37 +5705,37 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" -postcss-load-config@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.1.0.tgz#1c3c217608642448c03bebf3c32b1b28985293f9" +postcss-load-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" - postcss-load-options "^1.1.0" - postcss-load-plugins "^2.2.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" -postcss-load-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.1.0.tgz#e39215d154a19f69f9cb6052bffad4a82f09f354" +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" -postcss-load-plugins@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.2.0.tgz#84ef9cf36e637810ac5265e03f6d4c48ead83314" +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" dependencies: cosmiconfig "^2.1.1" object-assign "^4.1.0" -postcss-loader@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.2.2.tgz#bbf4e19a8cde85597e0c9bfd96015fe775a157ac" +postcss-loader@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.3.3.tgz#a621ea1fa29062a83972a46f54486771301916eb" dependencies: - loader-utils "^0.2.16" - object-assign "^4.1.0" - postcss "^5.2.9" - postcss-load-config "^1.1.0" + loader-utils "^1.0.2" + object-assign "^4.1.1" + postcss "^5.2.15" + postcss-load-config "^1.2.0" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -5565,11 +5868,11 @@ postcss-reduce-transforms@^1.0.3: postcss "^5.0.8" postcss-value-parser "^3.0.1" -postcss-scss@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.4.0.tgz#087c052c529b9270d9580bd1248a0f93d3b40d57" +postcss-scss@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.4.1.tgz#ad771b81f0f72f5f4845d08aa60f93557653d54c" dependencies: - postcss "^5.2.5" + postcss "^5.2.13" postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.2" @@ -5579,19 +5882,19 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-smart-import@^0.6.7: - version "0.6.7" - resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.6.7.tgz#653a69b524cb4a75533e7f6d17edaefb72dc68dd" +postcss-smart-import@^0.6.10: + version "0.6.10" + resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.6.10.tgz#4e6345cfbafc32c9ef5d6097e6a443738be3f4c0" dependencies: - babel-runtime "^6.20.0" + babel-runtime "^6.23.0" lodash "^4.17.4" - object-assign "^4.1.0" - postcss "^5.2.9" - postcss-scss "^0.4.0" + object-assign "^4.1.1" + postcss "^5.2.16" + postcss-scss "^0.4.1" postcss-value-parser "^3.3.0" promise-each "^2.2.0" read-cache "^1.0.0" - resolve "^1.2.0" + resolve "^1.3.2" sugarss "^0.2.0" postcss-svgo@^2.1.1: @@ -5623,9 +5926,18 @@ postcss-zindex@^2.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.11, postcss@^5.2.4, postcss@^5.2.5, postcss@^5.2.9: - version "5.2.12" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.12.tgz#6a2b15e35dd65634441bb0961fa796904c7890e0" +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.11, postcss@^5.2.13, postcss@^5.2.15, postcss@^5.2.4: + version "5.2.15" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.15.tgz#a9e8685e50e06cc5b3fdea5297273246c26f5b30" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^5.2.16: + version "5.2.16" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -5644,11 +5956,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -pretty-bytes@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" - dependencies: - number-is-nan "^1.0.0" +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" private@^0.1.6: version "0.1.7" @@ -5727,24 +6037,31 @@ pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -psi@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/psi/-/psi-2.0.4.tgz#79312479fb84df386bc2fca6a27d7282fc9c77f7" +psi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/psi/-/psi-3.0.0.tgz#113c451ec094f9b16331db02eeb5295b8776a8be" dependencies: chalk "^1.1.1" download "^4.4.1" - googleapis "^7.1.0" + googleapis "^16.1.0" humanize-url "^1.0.1" lodash "^4.5.1" meow "^3.5.0" - object-assign "^4.0.1" pify "^2.3.0" - pinkie-promise "^2.0.0" prepend-http "^1.0.3" - pretty-bytes "^3.0.1" - repeating "^2.0.0" + pretty-bytes "^4.0.2" sort-on "^1.2.2" - update-notifier "^0.6.0" + update-notifier "^2.0.0" + +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" punycode@1.3.2: version "1.3.2" @@ -5766,22 +6083,18 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" - qs@6.2.1, qs@~6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" +qs@6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + qs@^6.1.0, qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" -qs@~6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.1.0.tgz#ec1d1626b24278d99f0fdf4549e524e24eceeb26" - query-string@^4.1.0, query-string@^4.2.2: version "4.3.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.1.tgz#54baada6713eafc92be75c47a731f2ebd09cd11d" @@ -5804,6 +6117,10 @@ randomatic@^1.1.3: is-number "^2.0.2" kind-of "^3.0.2" +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" @@ -5880,11 +6197,11 @@ react-json-tree@^0.10.0: react-base16-styling "^0.4.1" react-pure-render "^1.0.2" -react-proxy-loader@0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/react-proxy-loader/-/react-proxy-loader-0.3.4.tgz#49dfeafa49d6637b0c7428ba7c0d39abb08094ca" +react-proxy-loader@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/react-proxy-loader/-/react-proxy-loader-0.3.5.tgz#eaeebc3950f9efad36b8bfc47cf58a9a8ca3432d" dependencies: - loader-utils "~0.2.6" + loader-utils "^1.0.2" react-proxy@^3.0.0-alpha.0: version "3.0.0-alpha.1" @@ -5896,9 +6213,9 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" -react-redux@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.2.tgz#3d9878f5f71c6fafcd45de1fbb162ea31f389814" +react-redux@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.3.tgz#86c3b68d56e74294a42e2a740ab66117ef6c019f" dependencies: hoist-non-react-statics "^1.0.3" invariant "^2.0.0" @@ -6079,9 +6396,9 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redbox-react@^1.2.5, redbox-react@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.3.tgz#63ec9c2cb9c620c46e2b9f8543b4898f1b787e41" +redbox-react@^1.2.5, redbox-react@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.4.tgz#3d882bb62cc7c8f6256279d12f05c6a5a96d24c6" dependencies: error-stack-parser "^1.3.6" object-assign "^4.0.1" @@ -6237,12 +6554,6 @@ repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" -repeating@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" - dependencies: - is-finite "^1.0.0" - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -6259,7 +6570,7 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@2, request@2.79.0, request@^2.54.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: +request@2, request@2.79.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -6284,32 +6595,6 @@ request@2, request@2.79.0, request@^2.54.0, request@^2.61.0, request@^2.72.0, re tunnel-agent "~0.4.1" uuid "^3.0.0" -request@~2.72.0: - version "2.72.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.72.0.tgz#0ce3a179512620b10441f14c82e21c12c0ddb4e1" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~1.0.0-rc3" - 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" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.1.0" - stringstream "~0.0.4" - tough-cookie "~2.2.0" - tunnel-agent "~0.4.1" - request@~2.74.0: version "2.74.0" resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" @@ -6363,13 +6648,15 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.x: +resolve@1.1.x, resolve@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" +resolve@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" + dependencies: + path-parse "^1.0.5" restore-cursor@^1.0.1: version "1.0.1" @@ -6388,15 +6675,21 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@~2.5.1, rimraf@~2.5.4: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" 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@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" run-async@^0.1.0: version "0.1.0" @@ -6432,22 +6725,24 @@ s3-diff@^1.1.0: lodash.intersection "^3.2.0" run-auto "^1.1.3" -s3-website@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-2.1.0.tgz#9e2b9d4befa231dd423a17d6102345c2ef6b98af" +s3-website@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-3.0.0.tgz#500b8af1c6f9158c4d93695ea181f9f4b44018a6" dependencies: - aws-sdk "^2.1.4" + aws-sdk "^2.6.12" cloudfront-tls "^1.0.0" colors "^1.1.2" - commander "^2.6.0" + commander "^2.9.0" console.table "^0.7.0" - deep-diff "^0.3.0" + deep-diff "^0.3.4" dotenv "^2.0.0" - glob "7.0.5" + glob "^7.1.1" + graceful-fs "^4.1.11" + lodash "^4.17.4" log-update "^1.0.2" merge-defaults "^0.2.1" mime "^1.3.4" - object-assign "^2.0.0" + object-assign "^4.1.0" s3-diff "^1.1.0" safe-buffer@^5.0.1: @@ -6466,12 +6761,13 @@ sass-graph@^2.1.1: lodash "^4.0.0" yargs "^4.7.1" -sass-loader@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-5.0.1.tgz#4aa82f44242abe62ed8fdcd28d6331a34ef27c2d" +sass-loader@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.3.tgz#33983b1f90d27ddab0e57d0dac403dce9bc7ecfd" dependencies: - async "^2.0.1" - loader-utils "^0.2.15" + async "^2.1.5" + clone-deep "^0.2.4" + loader-utils "^1.0.1" lodash.tail "^4.1.1" pify "^2.3.0" @@ -6540,32 +6836,32 @@ semver@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" -send@0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef" +send@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" dependencies: - debug "~2.2.0" + debug "2.6.1" depd "~1.1.0" destroy "~1.0.4" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.7.0" - fresh "0.3.0" - http-errors "~1.5.1" + etag "~1.8.0" + fresh "0.5.0" + http-errors "~1.6.1" mime "1.3.4" ms "0.7.2" on-finished "~2.3.0" range-parser "~1.2.0" statuses "~1.3.1" -serve-static@~1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.2.tgz#2cf9889bd4435a320cc36895c9aa57bd662e6ac7" +serve-static@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.14.2" + send "0.15.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -6583,9 +6879,15 @@ setprototypeof@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" -sha.js@2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +sha.js@^2.3.6: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" sha@~2.0.1: version "2.0.1" @@ -6594,6 +6896,15 @@ sha@~2.0.1: graceful-fs "^4.1.2" readable-stream "^2.0.2" +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" + shelljs@^0.7.5: version "0.7.6" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" @@ -6631,15 +6942,15 @@ socket.io-adapter@0.5.0: debug "2.3.3" socket.io-parser "2.3.1" -socket.io-client@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.2.tgz#39fdb0c3dd450e321b7e40cfd83612ec533dd644" +socket.io-client@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" dependencies: backo2 "1.0.2" component-bind "1.0.0" component-emitter "1.2.1" debug "2.3.3" - engine.io-client "1.8.2" + engine.io-client "1.8.3" has-binary "0.1.7" indexof "0.0.1" object-component "0.0.3" @@ -6656,16 +6967,16 @@ socket.io-parser@2.3.1: isarray "0.0.1" json3 "3.3.2" -socket.io@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.2.tgz#83bbbdf2e79263b378900da403e7843e05dc3b71" +socket.io@1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" dependencies: debug "2.3.3" - engine.io "1.8.2" + engine.io "1.8.3" has-binary "0.1.7" object-assign "4.1.0" socket.io-adapter "0.5.0" - socket.io-client "1.7.2" + socket.io-client "1.7.3" socket.io-parser "2.3.1" sort-keys@^1.0.0: @@ -6689,7 +7000,7 @@ sorted-object@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" -source-list-map@^0.1.4, source-list-map@~0.1.7: +source-list-map@^0.1.7, 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" @@ -6772,7 +7083,7 @@ stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" -"statuses@>= 1.3.1 < 2", statuses@~1.3.0, statuses@~1.3.1: +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" @@ -6828,7 +7139,7 @@ string-template@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96" -string-width@^1.0.1: +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: @@ -6889,6 +7200,10 @@ strip-dirs@^1.0.0: minimist "^1.1.0" sum-up "^1.0.1" +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" @@ -6913,11 +7228,11 @@ strip-url-auth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" -style-loader@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.1.tgz#468280efbc0473023cd3a6cd56e33b5a1d7fc3a9" +style-loader@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.14.0.tgz#e44fe69ef891513bb22fdd10c3167aaa99711164" dependencies: - loader-utils "^0.2.7" + loader-utils "^1.0.2" sugarss@^0.2.0: version "0.2.0" @@ -6931,9 +7246,9 @@ sum-up@^1.0.1: dependencies: chalk "^1.0.0" -superagent@^3.4.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.4.2.tgz#aa9a00f21720e230a6e7e9d7f07e0ab84509b833" +superagent@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.5.0.tgz#56872b8e1ee6de994035ada2e53266899af95a6d" dependencies: component-emitter "^1.2.0" cookiejar "^2.0.6" @@ -6983,9 +7298,9 @@ table@^3.7.8: 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.5, tapable@~0.2.5: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" tar-pack@~3.3.0: version "3.3.0" @@ -7017,6 +7332,12 @@ tar@^2.0.0, tar@~2.2.1: fstream "^1.0.2" inherits "2" +term-size@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" + dependencies: + execa "^0.4.0" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -7058,6 +7379,10 @@ timed-out@^3.0.0: version "3.1.3" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + timers-browserify@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" @@ -7068,18 +7393,18 @@ tmp@0.0.24: version "0.0.24" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" -tmp@0.0.28, tmp@0.0.x: - version "0.0.28" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" - dependencies: - os-tmpdir "~1.0.1" - tmp@0.0.30: version "0.0.30" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" dependencies: os-tmpdir "~1.0.1" +tmp@0.0.31, tmp@0.0.x: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + to-absolute-glob@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" @@ -7098,10 +7423,6 @@ to-fast-properties@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -tough-cookie@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.2.2.tgz#c83a1830f4e5ef0b93ef2a3488e724f8de016ac7" - tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" @@ -7118,6 +7439,10 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" @@ -7155,9 +7480,9 @@ ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@2.7.x, uglify-js@^2.6, uglify-js@~2.7.3: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" +uglify-js@2.8.x, uglify-js@^2.6, uglify-js@^2.7.5: + version "2.8.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.1.tgz#d3ef6ea2de6c2cae6903a83cc0446be2f1e2d338" dependencies: async "~0.2.6" source-map "~0.5.1" @@ -7201,6 +7526,12 @@ unique-stream@^2.0.2: json-stable-stringify "^1.0.0" through2-filter "^2.0.0" +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" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7209,16 +7540,22 @@ unzip-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" -update-notifier@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.6.3.tgz#776dec8daa13e962a341e8a1d98354306b67ae08" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +update-notifier@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" dependencies: - boxen "^0.3.1" + boxen "^1.0.0" chalk "^1.0.0" - configstore "^2.0.0" + configstore "^3.0.0" is-npm "^1.0.0" - latest-version "^2.0.0" + latest-version "^3.0.0" + lazy-req "^2.0.0" semver-diff "^2.0.0" + xdg-basedir "^3.0.0" upper-case@^1.1.1: version "1.1.3" @@ -7228,12 +7565,12 @@ url-join@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" -url-loader@0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.7.tgz#67e8779759f8000da74994906680c943a9b0925d" +url-loader@^0.5.8: + version "0.5.8" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.8.tgz#b9183b1801e0f847718673673040bc9dc1c715c5" dependencies: - loader-utils "0.2.x" - mime "1.2.x" + loader-utils "^1.0.2" + mime "1.3.x" url-parse-lax@^1.0.0: version "1.0.0" @@ -7261,7 +7598,7 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -useragent@^2.1.10: +useragent@^2.1.12: version "2.1.12" resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.12.tgz#aa7da6cdc48bdc37ba86790871a7321d64edbaa2" dependencies: @@ -7403,12 +7740,12 @@ warning@^3.0.0: 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" +watchpack@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" dependencies: - async "^0.9.0" - chokidar "^1.0.0" + async "^2.1.2" + chokidar "^1.4.3" graceful-fs "^4.1.2" wcwidth@^1.0.0: @@ -7440,57 +7777,62 @@ webdriver-manager@^12.0.1: semver "^5.3.0" xml2js "^0.4.17" -webpack-core@^0.6.9, webpack-core@~0.6.9: +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-dev-middleware@^1.0.11, webpack-dev-middleware@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.0.tgz#7d5be2651e692fddfafd8aaed177c16ff51f0eb8" +webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" dependencies: memory-fs "~0.4.1" mime "^1.3.4" path-is-absolute "^1.0.0" range-parser "^1.0.3" -webpack-hot-middleware@^2.15.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.16.1.tgz#ae209bcab2b9b672f1b0fdcf6c5c2a680ff118e1" +webpack-hot-middleware@^2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.17.1.tgz#0c8fbf6f93ff29c095d684b07ab6d6c0f2f951d7" dependencies: - ansi-html "0.0.6" + ansi-html "0.0.7" html-entities "^1.2.0" querystring "^0.2.0" strip-ansi "^3.0.0" -webpack-sources@^0.1.0: +webpack-sources@^0.1.0, webpack-sources@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd" dependencies: source-list-map "~0.1.7" source-map "~0.5.3" -webpack@1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823" +webpack@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.1.tgz#7bb1d72ae2087dd1a4af526afec15eed17dda475" 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" + acorn "^4.0.4" + acorn-dynamic-import "^2.0.0" + ajv "^4.7.0" + ajv-keywords "^1.1.1" + async "^2.1.2" + enhanced-resolve "^3.0.0" + interpret "^1.0.0" + json-loader "^0.5.4" + loader-runner "^2.3.0" + loader-utils "^0.2.16" + memory-fs "~0.4.1" mkdirp "~0.5.0" - node-libs-browser "^0.7.0" - optimist "~0.6.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" supports-color "^3.1.0" - tapable "~0.1.8" - uglify-js "~2.7.3" - watchpack "^0.2.1" - webpack-core "~0.6.9" + tapable "~0.2.5" + uglify-js "^2.7.5" + watchpack "^1.2.0" + webpack-sources "^0.1.4" + yargs "^6.0.0" whatwg-fetch@>=0.10.0: version "2.0.2" @@ -7504,7 +7846,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.9, which@~1.2.10, which@~1.2.11: +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: @@ -7573,9 +7915,9 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@1.1.1, ws@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" +ws@1.1.2, ws@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" dependencies: options ">=0.0.5" ultron "1.0.x" @@ -7584,11 +7926,9 @@ 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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" - dependencies: - os-homedir "^1.0.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" xml-char-classes@^1.0.0: version "1.0.0" @@ -7656,6 +7996,12 @@ yargs-parser@^2.4.1: 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@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" @@ -7675,6 +8021,24 @@ yargs@^4.7.1: 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@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From fe55a03a3b484152f77eff8f60f7a8ad26a98322 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 22 Mar 2017 17:30:23 -0600 Subject: [PATCH 277/452] Codesplitting (#15) * Adds webpack bundle size analyzer * Better source map config * Enables code splitting --- client/config/webpack.config.js | 53 ++++--- client/html/index.html | 2 + client/package.json | 2 + client/tools/build/content.js | 11 +- client/tools/build/index.js | 14 +- client/tools/build/production.js | 9 +- client/tools/build/webpack_utils.js | 36 ++--- client/yarn.lock | 238 ++++++++++++++++------------ 8 files changed, 205 insertions(+), 160 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index e91847a..80dde67 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -1,13 +1,16 @@ -const webpack = require('webpack'); -const path = require('path'); -const ExtractTextPlugin = require('extract-text-webpack-plugin'); -const ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); -const _ = require('lodash'); -const settings = require('./settings'); +const webpack = require('webpack'); +const path = require('path'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; +const AssetsPlugin = require('assets-webpack-plugin'); +const _ = require('lodash'); +const settings = require('./settings'); module.exports = function webpackConfig(stage) { const production = stage === 'production' || stage === 'staging'; + const outputPath = production ? settings.prodOutput : settings.devOutput; // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In developerment this will @@ -65,31 +68,45 @@ module.exports = function webpackConfig(stage) { const extractCSS = new ExtractTextPlugin(production ? '[name]-[chunkhash].css' : '[name].css'); - let plugins = []; + let plugins = [ + // Use to extract common code from multiple entry points into a single init.js + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks: module => module.context && module.context.indexOf('node_modules') !== -1 + }), + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + minChunks: Infinity + }) + ]; if (production) { - plugins = [ + plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"', __DEV__: false }), new webpack.optimize.UglifyJsPlugin({ - sourceMap: 'cheap-source-map' + sourceMap: true }), new webpack.optimize.AggressiveMergingPlugin(), new ChunkManifestPlugin({ filename: 'webpack-common-manifest.json', manfiestVariable: 'webpackBundleManifest' }), + new BundleAnalyzerPlugin({ + analyzerMode: 'static' + }), + // Generate webpack-assets.json to map path to assets generated with hashed names + new AssetsPlugin({ + path: outputPath + }), extractCSS - - // Use to extract common code from multiple entry points into a single init.js - // new webpack.optimize.CommonsChunkPlugin('init.js'); - ]; + ]); } else if (stage === 'hot') { - plugins = [ + plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), new webpack.HotModuleReplacementPlugin(), new webpack.NoEmitOnErrorsPlugin(), extractCSS - ]; + ]); } else { plugins = [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), @@ -113,10 +130,10 @@ module.exports = function webpackConfig(stage) { output: { publicPath, // Location where generated files will be output - path: production ? settings.prodOutput : settings.devOutput, + path: outputPath, filename: production ? `[name]-[chunkhash]${settings.buildSuffix}` : `[name]${settings.buildSuffix}`, chunkFilename: production ? `[id]-[chunkhash]${settings.buildSuffix}` : `[id]${settings.buildSuffix}`, - sourceMapFilename: 'debugging/[file].map', + sourceMapFilename: '[name].map', // http://webpack.github.io/docs/configuration.html#output-pathinfo pathinfo: !production }, @@ -125,7 +142,7 @@ module.exports = function webpackConfig(stage) { modules: ['node_modules'] }, cache: true, - devtool: production ? false : 'eval', // http://webpack.github.io/docs/configuration.html#devtool + devtool: production ? 'source-map' : 'cheap-module-source-map', // https://webpack.js.org/configuration/devtool/ stats: { colors: true }, plugins, module: { rules }, diff --git a/client/html/index.html b/client/html/index.html index f6b80d8..f446939 100644 --- a/client/html/index.html +++ b/client/html/index.html @@ -1,2 +1,4 @@
    + + \ No newline at end of file diff --git a/client/package.json b/client/package.json index aa77bc9..d5a10ad 100644 --- a/client/package.json +++ b/client/package.json @@ -19,6 +19,7 @@ "uuid": "3.0.1" }, "devDependencies": { + "assets-webpack-plugin": "^3.5.1", "autoprefixer": "^6.7.7", "babel-core": "^6.24.0", "babel-eslint": "^7.1.1", @@ -94,6 +95,7 @@ "style-loader": "^0.14.0", "url-loader": "^0.5.8", "webpack": "^2.2.1", + "webpack-bundle-analyzer": "^2.3.1", "webpack-dev-middleware": "^1.10.1", "webpack-hot-middleware": "^2.17.1" } diff --git a/client/tools/build/content.js b/client/tools/build/content.js index ca279bc..e747425 100644 --- a/client/tools/build/content.js +++ b/client/tools/build/content.js @@ -14,7 +14,7 @@ const ignoreFiles = ['.DS_Store']; // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -function buildContent(fullPath, webpackConfig, webpackStats, stage, options) { +function buildContent(fullPath, webpackAssets, stage, options) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -48,7 +48,7 @@ function buildContent(fullPath, webpackConfig, webpackStats, stage, options) { // Apply template data.content = html; // Pass in generated html html = templates.apply(data, fullPath, options.templateMap, options.templateDirs); - html = applyProduction(html, stage, webpackConfig, webpackStats, options); + html = applyProduction(html, stage, webpackAssets, options.buildSuffix); return { title, @@ -64,7 +64,7 @@ function buildContent(fullPath, webpackConfig, webpackStats, stage, options) { // ----------------------------------------------------------------------------- // build html and markdown files in a given directory // ----------------------------------------------------------------------------- -function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage, options) { +function buildContents(inputPath, outputPath, webpackAssets, stage, options) { let results = []; const files = fs.readdirSync(inputPath); files.forEach((fileName) => { @@ -76,15 +76,14 @@ function buildContents(inputPath, outputPath, webpackConfig, webpackStats, stage results = _.concat(results, buildContents( fullInputPath, outputPath, - webpackConfig, - webpackStats, + webpackAssets, stage, options )); } else { const ext = path.extname(fullInputPath); if (_.includes(options.buildExtensions, ext)) { - const page = buildContent(fullInputPath, webpackConfig, webpackStats, stage, options); + const page = buildContent(fullInputPath, webpackAssets, stage, options); let outFile = fileName; let outPath = outputPath; let inPath = inputPath; diff --git a/client/tools/build/index.js b/client/tools/build/index.js index 666254d..63cfd38 100644 --- a/client/tools/build/index.js +++ b/client/tools/build/index.js @@ -24,8 +24,6 @@ const options = { truncateSummaryAt : 1000, buildExtensions : ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) rootInputPath : inputPath, // Original input path - entries : settings.entries, // Webpack entry points - cssEntries : settings.cssEntries, // Webpack css entry points buildSuffix : settings.buildSuffix, // Webpack build suffix. ie _bundle.js templateData : {}, // Object that will be passed to every page as it is rendered templateMap : {}, // Used to specify specific templates on a per file basis @@ -80,11 +78,14 @@ function build(isHot) { // Build files console.log(`Building files in: ${inputPath}`); buildWebpackEntries(isHot).then((packResults) => { + let webpackAssets; + if (stage === 'production') { + webpackAssets = fs.readJsonSync(`${packResults.webpackConfig.output.path}/webpack-assets.json`); + } const pages = content.buildContents( inputPath, outputPath, - packResults.webpackConfig, - packResults.webpackStats, + webpackAssets, stage, options ); @@ -94,7 +95,7 @@ function build(isHot) { inputPath, outputPath, webpackConfig : packResults.webpackConfig, - webpackStats : packResults.webpackStats, + webpackAssets, stage, options }); @@ -115,8 +116,7 @@ function watch() { // Build the page const page = content.buildContent( filePath, - buildResults.webpackConfig, - buildResults.webpackStats, + buildResults.webpackAssets, buildResults.stage, buildResults.options ); diff --git a/client/tools/build/production.js b/client/tools/build/production.js index fadeaa0..bb84b88 100644 --- a/client/tools/build/production.js +++ b/client/tools/build/production.js @@ -1,18 +1,15 @@ const minify = require('html-minifier').minify; const webpackUtils = require('./webpack_utils'); -module.exports = function applyProduction(html, stage, webpackConfig, webpackStats, options) { +module.exports = function applyProduction(html, stage, webpackAssets, buildSuffix) { let productionHtml = html; if (stage === 'production') { productionHtml = webpackUtils.apply( html, - webpackConfig, - webpackStats, - options.entries, - options.cssEntries, - options.buildSuffix + webpackAssets, + buildSuffix ); return minify(productionHtml, { diff --git a/client/tools/build/webpack_utils.js b/client/tools/build/webpack_utils.js index 5374a98..5a469fa 100644 --- a/client/tools/build/webpack_utils.js +++ b/client/tools/build/webpack_utils.js @@ -1,38 +1,22 @@ const _ = require('lodash'); -const path = require('path'); - -// ----------------------------------------------------------------------------- -// Finds the has value for a given entry point in the provided webpack stats -// ----------------------------------------------------------------------------- -function getHashed(webpackStats, entryPoint, ext) { - const found = webpackStats.assetsByChunkName[entryPoint]; - // If there is an array of matching values we have to find the one with the right file extension. - if (_.isArray(found)) { - return _.find(found, hashEntry => path.extname(hashEntry).toLowerCase() === `.${ext}`); - } - return found; -} // ----------------------------------------------------------------------------- // Changes webpack paths as needed. // ----------------------------------------------------------------------------- -function apply(html, webpackConfig, webpackStats, entries, cssEntries, buildSuffix) { +function apply(html, webpackAssets, buildSuffix) { let result = html; - _.each(webpackConfig.entry, (_entryPath, entry) => { - if (_.has(entries, entry)) { - const newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'js'); - result = result.replace(entry + buildSuffix, newPath); - } else if (_.has(cssEntries, entry)) { - const newPath = webpackConfig.output.publicPath + getHashed(webpackStats, entry, 'css'); - result = result.replace(`${entry}.css`, newPath); - } else { - console.log(`Error, could not find entry: ${entry}`); - } + _.each(webpackAssets, (assets, name) => { + _.each(assets, (hashedName, ext) => { + if (ext === 'js') { + result = result.replace(`${name}${buildSuffix}`, hashedName); + } else { + result = result.replace(`${name}.${ext}`, hashedName); + } + }); }); return result; } module.exports = { - apply, - getHashed + apply }; diff --git a/client/yarn.lock b/client/yarn.lock index a4253bc..db43865 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -37,7 +37,7 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4, acorn@^4.0.3, acorn@^4.0.4: +acorn@4.0.4, acorn@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" @@ -45,6 +45,10 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +acorn@^4.0.11, acorn@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + adm-zip@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" @@ -281,6 +285,16 @@ assert@^1.1.1: dependencies: util "0.10.3" +assets-webpack-plugin@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/assets-webpack-plugin/-/assets-webpack-plugin-3.5.1.tgz#931ce0d66d42e88ed5e7f18d65522943c57a387d" + dependencies: + camelcase "^1.2.1" + escape-string-regexp "^1.0.3" + lodash.assign "^3.2.0" + lodash.merge "^3.3.2" + mkdirp "^0.5.1" + ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -321,18 +335,7 @@ 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.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.2.tgz#172ab07b998ae9b957530928a59a40be54a45023" - dependencies: - browserslist "^1.7.1" - caniuse-db "^1.0.30000618" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.11" - postcss-value-parser "^3.2.3" - -autoprefixer@^6.7.7: +autoprefixer@^6.3.1, autoprefixer@^6.7.7: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" dependencies: @@ -407,19 +410,7 @@ babel-eslint@^7.1.1: babylon "^6.13.0" lodash.pickby "^4.6.0" -babel-generator@^6.18.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" - dependencies: - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - -babel-generator@^6.24.0: +babel-generator@^6.18.0, babel-generator@^6.24.0: version "6.24.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" dependencies: @@ -568,13 +559,7 @@ babel-loader@^6.4.0: mkdirp "^0.5.1" object-assign "^4.0.1" -babel-messages@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" - dependencies: - babel-runtime "^6.22.0" - -babel-messages@^6.23.0: +babel-messages@^6.22.0, babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: @@ -1085,21 +1070,7 @@ babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0, babel-te babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.15.0: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: +babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: version "6.23.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" dependencies: @@ -1113,16 +1084,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.15.0, babel-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" - dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0: +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" dependencies: @@ -1330,14 +1292,7 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.1.tgz#cc9bd193979a2a4b09fdb3df6003fefe48ccefe1" - dependencies: - caniuse-db "^1.0.30000617" - electron-to-chromium "^1.2.1" - -browserslist@^1.7.6: +browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.6.tgz#af98589ce6e7ab09618d29451faacb81220bd3ba" dependencies: @@ -1417,7 +1372,7 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" -camelcase@^1.0.2: +camelcase@^1.0.2, camelcase@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -1446,11 +1401,7 @@ caniuse-api@^1.5.2: lodash.memoize "^4.1.0" lodash.uniq "^4.3.0" -caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000617, caniuse-db@^1.0.30000618: - version "1.0.30000622" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000622.tgz#9d9690b577384990a58e33ebb903a14da735e5fd" - -caniuse-db@^1.0.30000631, caniuse-db@^1.0.30000634: +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000631, caniuse-db@^1.0.30000634: version "1.0.30000635" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000635.tgz#ea159dfa062e00f25f97af3791baef93f17904a1" @@ -1747,7 +1698,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.5.0, concat-stream@^1.4.7: +concat-stream@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" dependencies: @@ -1755,7 +1706,7 @@ concat-stream@1.5.0, concat-stream@^1.4.7: readable-stream "~2.0.0" typedarray "~0.0.5" -concat-stream@^1.4.6, concat-stream@^1.5.2: +concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -2073,7 +2024,7 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.1, debug@^2.1.1: +debug@2, debug@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: @@ -2091,7 +2042,7 @@ debug@2.3.3: dependencies: ms "0.7.2" -debug@^2.2.0: +debug@^2.1.1, debug@^2.2.0: version "2.6.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" dependencies: @@ -2346,7 +2297,7 @@ duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" -duplexer@~0.1.1: +duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -2400,14 +2351,10 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -ejs@^2.5.6: +ejs@^2.5.5, ejs@^2.5.6: version "2.5.6" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" -electron-to-chromium@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.2.tgz#e41bc9488c88e3cfa1e94bde28e8420d7d47c47c" - electron-to-chromium@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.7.tgz#4f748061407e478c76256d04496972b71f647407" @@ -2611,7 +2558,7 @@ 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: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, 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" @@ -2864,7 +2811,7 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@^4.15.2: +express@^4.14.1, express@^4.15.2: version "4.15.2" resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" dependencies: @@ -3008,6 +2955,10 @@ filenamify@^1.0.1: strip-outer "^1.0.0" trim-repeated "^1.0.0" +filesize@^3.5.4: + version "3.5.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -3505,6 +3456,12 @@ gulplog@^1.0.0: dependencies: glogg "^1.0.0" +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + handlebars@^4.0.1: version "4.0.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" @@ -4183,14 +4140,14 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" -js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6: +js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@^3.5.1, js-yaml@~3.7.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: @@ -4514,6 +4471,21 @@ lodash-es@^4.2.0, lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + +lodash._arrayeach@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" @@ -4533,6 +4505,10 @@ lodash._baseflatten@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash._basefor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" + lodash._baseindexof@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" @@ -4545,10 +4521,22 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + lodash._cacheindexof@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + lodash._createcache@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" @@ -4579,6 +4567,14 @@ lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" +lodash.assign@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + 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" @@ -4648,6 +4644,18 @@ lodash.isequal@^4.0.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" +lodash.isplainobject@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" + dependencies: + lodash._basefor "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.keysin "^3.0.0" + +lodash.istypedarray@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" + lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -4656,10 +4664,33 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.keysin@^3.0.0: + version "3.0.8" + resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.memoize@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" +lodash.merge@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._createassigner "^3.0.0" + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.isplainobject "^3.0.0" + lodash.istypedarray "^3.0.0" + lodash.keys "^3.0.0" + lodash.keysin "^3.0.0" + lodash.toplainobject "^3.0.0" + lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" @@ -4713,6 +4744,13 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" +lodash.toplainobject@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keysin "^3.0.0" + lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -5408,7 +5446,7 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" -opener@~1.4.1: +opener@^1.4.2, opener@~1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.2.tgz#b32582080042af8680c389a499175b4c54fff523" @@ -5926,16 +5964,7 @@ postcss-zindex@^2.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.11, postcss@^5.2.13, postcss@^5.2.15, postcss@^5.2.4: - version "5.2.15" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.15.tgz#a9e8685e50e06cc5b3fdea5297273246c26f5b30" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^5.2.16: +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.13, postcss@^5.2.15, postcss@^5.2.16, postcss@^5.2.4: version "5.2.16" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" dependencies: @@ -7777,6 +7806,21 @@ webdriver-manager@^12.0.1: semver "^5.3.0" xml2js "^0.4.17" +webpack-bundle-analyzer@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.3.1.tgz#d97f8aadbcce68fc865c5787741d8549359a25cd" + dependencies: + acorn "^4.0.11" + chalk "^1.1.3" + commander "^2.9.0" + ejs "^2.5.5" + express "^4.14.1" + filesize "^3.5.4" + gzip-size "^3.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + opener "^1.4.2" + webpack-core@^0.6.9: version "0.6.9" resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" From f137f92b5688247529c573373b2b10204b4d884f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 24 Mar 2017 13:57:43 -0600 Subject: [PATCH 278/452] Adds phoenix socket --- client/package.json | 1 + client/yarn.lock | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/client/package.json b/client/package.json index d5a10ad..af3824a 100644 --- a/client/package.json +++ b/client/package.json @@ -8,6 +8,7 @@ "babel-runtime": "^6.23.0", "es6-promise": "^4.1.0", "lodash": "4.17.4", + "phoenix-socket": "^1.1.3", "react": "15.4.2", "react-dom": "15.4.2", "react-proxy-loader": "^0.3.5", diff --git a/client/yarn.lock b/client/yarn.lock index db43865..6915327 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -5652,6 +5652,10 @@ phantomjs-prebuilt@^2.1.14, phantomjs-prebuilt@^2.1.7: request-progress "~2.0.1" which "~1.2.10" +phoenix-socket@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/phoenix-socket/-/phoenix-socket-1.1.3.tgz#28f3f1e84cd4054b5e03b14e775ca7fc12b30e24" + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" From 0388a72d45081122a8a00054513fbae7df866189 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 12:12:53 -0600 Subject: [PATCH 279/452] Isolation (#16) * Restructured project to isolate clients * Removes old files * Removes old files * New build process * Updating build process * Working build process * Fix css * Refactor to let each app run on it's own port * Allow running one app at a time * Docs update. Working prod and hot builds. * Allow for building directly in build root * Fixed specs * Styling fixes * Don't declare twice * ignore vscode dir * Removes test file * Move superagent dependency --- .gitignore | 1 + README.md | 64 +- .../{js => apps/hello_world}/actions/jwt.js | 4 +- client/{js => apps/hello_world}/app.jsx | 8 +- .../hello_world}/assets/images/atomicjolt.jpg | Bin .../hello_world}/assets/images/atomicjolt.png | Bin .../hello_world}/assets/images/atomicjolt.svg | 0 .../components/common/not_found.jsx | 0 .../components/common/not_found.spec.jsx | 2 +- .../hello_world}/components/home.jsx | 0 .../hello_world}/components/home.spec.jsx | 2 +- .../hello_world}/components/layout/index.jsx | 0 .../components/layout/index.spec.jsx | 2 +- client/{js => apps/hello_world}/history.js | 0 client/{ => apps/hello_world}/html/404.html | 0 client/{ => apps/hello_world}/html/about.md | 0 .../hello_world}/html/crossdomain.xml | 0 client/{ => apps/hello_world}/html/humans.txt | 0 client/{ => apps/hello_world}/html/index.html | 2 +- .../html/layouts/application.html | 0 .../layouts/partials/_google_analytics.html | 0 .../html/layouts/partials/_head.html | 2 +- .../html/layouts/partials/_header.html | 0 client/{ => apps/hello_world}/html/robots.txt | 0 .../{js => apps/hello_world}/libs/assets.js | 2 +- .../hello_world}/libs/assets.spec.js | 0 .../{js => apps/hello_world}/loaders/jwt.js | 0 client/apps/hello_world/middleware/api.js | 6 + client/apps/hello_world/package.json | 20 + .../hello_world}/reducers/application.js | 0 .../hello_world}/reducers/application.spec.js | 0 .../hello_world}/reducers/index.js | 4 +- .../{js => apps/hello_world}/reducers/jwt.js | 0 .../hello_world}/reducers/jwt.spec.js | 0 client/{js => apps/hello_world}/routes.jsx | 0 .../apps/hello_world/store/configure_store.js | 12 + .../hello_world}/styles/.csscomb.json | 0 .../{ => apps/hello_world}/styles/.csslintrc | 0 .../hello_world}/styles/_defines.scss | 0 .../{ => apps/hello_world}/styles/styles.js | 0 .../{ => apps/hello_world}/styles/styles.less | 0 client/apps/hello_world/styles/styles.scss | 5 + client/apps/hello_world/yarn.lock | 250 ++++ client/build.js | 8 +- client/build_webpack.js | 3 - client/config/karma.js | 30 +- client/config/settings.js | 43 +- client/config/webpack.config.js | 87 +- client/js/store/configure_store.js | 35 - client/{js/libs => libs/api}/api.js | 0 client/{js/libs => libs/api}/api.spec.js | 0 client/libs/build/apps.js | 118 ++ client/{tools => libs}/build/content.js | 67 +- client/{tools => libs}/build/file.js | 24 +- client/libs/build/index.js | 141 ++ client/{tools => libs}/build/markdown.js | 0 client/{tools => libs}/build/production.js | 0 client/{tools => libs}/build/templates.js | 8 +- client/{tools => libs}/build/utils.js | 0 client/{tools => libs}/build/webpack_utils.js | 3 + client/{js => libs}/constants/error.js | 0 client/{js => libs}/constants/network.js | 0 client/{js => libs}/constants/wrapper.js | 0 client/{js => libs}/constants/wrapper.spec.js | 0 client/{js => libs}/dev/dev_tools.jsx | 0 client/{js => libs}/middleware/api.js | 2 +- client/{js => libs}/middleware/api.spec.js | 0 client/{js => libs}/reducers/settings.js | 0 client/{js => libs}/reducers/settings.spec.js | 0 client/libs/store/configure_store.js | 33 + .../store/configure_store.spec.js | 0 client/package.json | 23 +- client/server.js | 43 +- client/specs_support/helper.js | 19 +- client/styles/styles.scss | 1 - client/tools/build/index.js | 140 -- client/webpack.hot.js | 38 +- client/webpack.tests.js | 2 +- client/yarn.lock | 1158 ++++++++--------- package.json | 2 + yarn.lock | 4 +- 81 files changed, 1423 insertions(+), 995 deletions(-) rename client/{js => apps/hello_world}/actions/jwt.js (74%) rename client/{js => apps/hello_world}/app.jsx (89%) rename client/{ => apps/hello_world}/assets/images/atomicjolt.jpg (100%) rename client/{ => apps/hello_world}/assets/images/atomicjolt.png (100%) rename client/{ => apps/hello_world}/assets/images/atomicjolt.svg (100%) rename client/{js => apps/hello_world}/components/common/not_found.jsx (100%) rename client/{js => apps/hello_world}/components/common/not_found.spec.jsx (88%) rename client/{js => apps/hello_world}/components/home.jsx (100%) rename client/{js => apps/hello_world}/components/home.spec.jsx (89%) rename client/{js => apps/hello_world}/components/layout/index.jsx (100%) rename client/{js => apps/hello_world}/components/layout/index.spec.jsx (88%) rename client/{js => apps/hello_world}/history.js (100%) rename client/{ => apps/hello_world}/html/404.html (100%) rename client/{ => apps/hello_world}/html/about.md (100%) rename client/{ => apps/hello_world}/html/crossdomain.xml (100%) rename client/{ => apps/hello_world}/html/humans.txt (100%) rename client/{ => apps/hello_world}/html/index.html (70%) rename client/{ => apps/hello_world}/html/layouts/application.html (100%) rename client/{ => apps/hello_world}/html/layouts/partials/_google_analytics.html (100%) rename client/{ => apps/hello_world}/html/layouts/partials/_head.html (87%) rename client/{ => apps/hello_world}/html/layouts/partials/_header.html (100%) rename client/{ => apps/hello_world}/html/robots.txt (100%) rename client/{js => apps/hello_world}/libs/assets.js (51%) rename client/{js => apps/hello_world}/libs/assets.spec.js (100%) rename client/{js => apps/hello_world}/loaders/jwt.js (100%) create mode 100644 client/apps/hello_world/middleware/api.js create mode 100644 client/apps/hello_world/package.json rename client/{js => apps/hello_world}/reducers/application.js (100%) rename client/{js => apps/hello_world}/reducers/application.spec.js (100%) rename client/{js => apps/hello_world}/reducers/index.js (77%) rename client/{js => apps/hello_world}/reducers/jwt.js (100%) rename client/{js => apps/hello_world}/reducers/jwt.spec.js (100%) rename client/{js => apps/hello_world}/routes.jsx (100%) create mode 100644 client/apps/hello_world/store/configure_store.js rename client/{ => apps/hello_world}/styles/.csscomb.json (100%) rename client/{ => apps/hello_world}/styles/.csslintrc (100%) rename client/{ => apps/hello_world}/styles/_defines.scss (100%) rename client/{ => apps/hello_world}/styles/styles.js (100%) rename client/{ => apps/hello_world}/styles/styles.less (100%) create mode 100644 client/apps/hello_world/styles/styles.scss create mode 100644 client/apps/hello_world/yarn.lock delete mode 100644 client/build_webpack.js delete mode 100644 client/js/store/configure_store.js rename client/{js/libs => libs/api}/api.js (100%) rename client/{js/libs => libs/api}/api.spec.js (100%) create mode 100644 client/libs/build/apps.js rename client/{tools => libs}/build/content.js (60%) rename client/{tools => libs}/build/file.js (50%) create mode 100644 client/libs/build/index.js rename client/{tools => libs}/build/markdown.js (100%) rename client/{tools => libs}/build/production.js (100%) rename client/{tools => libs}/build/templates.js (93%) rename client/{tools => libs}/build/utils.js (100%) rename client/{tools => libs}/build/webpack_utils.js (85%) rename client/{js => libs}/constants/error.js (100%) rename client/{js => libs}/constants/network.js (100%) rename client/{js => libs}/constants/wrapper.js (100%) rename client/{js => libs}/constants/wrapper.spec.js (100%) rename client/{js => libs}/dev/dev_tools.jsx (100%) rename client/{js => libs}/middleware/api.js (96%) rename client/{js => libs}/middleware/api.spec.js (100%) rename client/{js => libs}/reducers/settings.js (100%) rename client/{js => libs}/reducers/settings.spec.js (100%) create mode 100644 client/libs/store/configure_store.js rename client/{js => libs}/store/configure_store.spec.js (100%) delete mode 100644 client/styles/styles.scss delete mode 100644 client/tools/build/index.js diff --git a/.gitignore b/.gitignore index cfbaa21..e15fdd3 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ secrets.js .idea/ *.iml .env +.vscode/ config/secrets.js s3_website.yml diff --git a/README.md b/README.md index 8367839..cc248fc 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,24 @@ Make sure to install git, npm and yarn before you start then: `yarn hot` -then visit http://localhost:8080 +then visit `http://localhost:8080` + +Note that this will start up a server for each application, incrementing the port by one for +each new application that is started. + +If you have multiple applications you can run them one at a time with the application name: + + `yarn hot hello_world` + +then `visit http://localhost:8080` # Using the React Client Starter App ----------------------- -Source code lives in the client directory. Modify html and js files in that directory to build your application. +The starter app is setup to serve multiple isolated client applications each with their own package.json. You will find +an example "hello world" application in client/apps/hello_world +Modify html and js files in that directory to build your application or copy paste that directory to build additional +applications. The build process will automatically add a new webpack entry point for each folder in that directory. ## React.js @@ -41,7 +53,10 @@ React code can be found in client/js. We use Redux and the React-Router. ## Html ----------- -All html files live in client/html. The build process will properly process ejs in any html files as well as process markdown for files that end in .md. All front matter in .md files will be available to the ejs templates. See about.md for an example. +All html files live in client/apps/[app name]/html. The build process will properly process ejs in any html files as well +as process markdown for files that end in .md. All front matter in .md files will be available to +the ejs templates and will be used when generating html. For example, you can set a custom layout for the html +file by setting `layout: custom_layout` in the front matter. See apps/hello_world/html/about.md for an example. ## Assets @@ -85,6 +100,49 @@ Inside the client directory run: `yarn upgrade-interactive` +#Scripts: +----------------------- +The following scripts are available for testing, building and deploying applications + +Run all tests: + `yarn test` + +Generate coverage report: + `yarn coverage` + +Run webpack hot reload server: + `yarn hot` + +Run reload server for a specific application: + `yarn hot [app name]` + +Serve production assets. Must run `yarn build` first: + `yarn live` + +Build development version including html pages: + `yarn build_dev` + +Only run the webpack build without generating html pages or subdirectories. This will output all results +directly into the build/dev directory + `yarn build_dev_pack` + +Build for production: + `yarn build` + +Only run the webpack build without generating html pages or subdirectories. This will output all results +directly into the build/prod directory + `yarn build_pack` + +After setting up .s3-website.json this will create a S3 bucket and set it as a website: + `yarn create` + +Release a production build to the S3 website bucket created by `yarn create` + `yarn release` + +Run a linter over the project: + `yarn lint` + + #Deploy to S3: ----------------------- diff --git a/client/js/actions/jwt.js b/client/apps/hello_world/actions/jwt.js similarity index 74% rename from client/js/actions/jwt.js rename to client/apps/hello_world/actions/jwt.js index 351c02f..8555764 100644 --- a/client/js/actions/jwt.js +++ b/client/apps/hello_world/actions/jwt.js @@ -1,5 +1,5 @@ -import wrapper from '../constants/wrapper'; -import Network from '../constants/network'; +import wrapper from '../../../libs/constants/wrapper'; +import Network from '../../../libs/constants/network'; // Local actions const actions = []; diff --git a/client/js/app.jsx b/client/apps/hello_world/app.jsx similarity index 89% rename from client/js/app.jsx rename to client/apps/hello_world/app.jsx index 2db3dd6..6b9bc72 100644 --- a/client/js/app.jsx +++ b/client/apps/hello_world/app.jsx @@ -4,11 +4,13 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from 'react-redux'; import injectTapEventPlugin from 'react-tap-event-plugin'; -import routes from './routes'; -import DevTools from './dev/dev_tools'; +import DevTools from '../../libs/dev/dev_tools'; +import { getInitialSettings } from '../../libs/reducers/settings'; import configureStore from './store/configure_store'; import jwt from './loaders/jwt'; -import { getInitialSettings } from './reducers/settings'; +import routes from './routes'; + +require('./styles/styles'); // Polyfill es6 promises for IE es6Promise.polyfill(); diff --git a/client/assets/images/atomicjolt.jpg b/client/apps/hello_world/assets/images/atomicjolt.jpg similarity index 100% rename from client/assets/images/atomicjolt.jpg rename to client/apps/hello_world/assets/images/atomicjolt.jpg diff --git a/client/assets/images/atomicjolt.png b/client/apps/hello_world/assets/images/atomicjolt.png similarity index 100% rename from client/assets/images/atomicjolt.png rename to client/apps/hello_world/assets/images/atomicjolt.png diff --git a/client/assets/images/atomicjolt.svg b/client/apps/hello_world/assets/images/atomicjolt.svg similarity index 100% rename from client/assets/images/atomicjolt.svg rename to client/apps/hello_world/assets/images/atomicjolt.svg diff --git a/client/js/components/common/not_found.jsx b/client/apps/hello_world/components/common/not_found.jsx similarity index 100% rename from client/js/components/common/not_found.jsx rename to client/apps/hello_world/components/common/not_found.jsx diff --git a/client/js/components/common/not_found.spec.jsx b/client/apps/hello_world/components/common/not_found.spec.jsx similarity index 88% rename from client/js/components/common/not_found.spec.jsx rename to client/apps/hello_world/components/common/not_found.spec.jsx index d00d6f6..d1b7be3 100644 --- a/client/js/components/common/not_found.spec.jsx +++ b/client/apps/hello_world/components/common/not_found.spec.jsx @@ -1,7 +1,7 @@ import React from 'react'; import TestUtils from 'react-addons-test-utils'; import NotFound from './not_found'; -import Stub from '../../../specs_support/stub'; +import Stub from '../../../../specs_support/stub'; describe('not found', () => { it('renders a "not found" message', () => { diff --git a/client/js/components/home.jsx b/client/apps/hello_world/components/home.jsx similarity index 100% rename from client/js/components/home.jsx rename to client/apps/hello_world/components/home.jsx diff --git a/client/js/components/home.spec.jsx b/client/apps/hello_world/components/home.spec.jsx similarity index 89% rename from client/js/components/home.spec.jsx rename to client/apps/hello_world/components/home.spec.jsx index 4c4f199..185ecf4 100644 --- a/client/js/components/home.spec.jsx +++ b/client/apps/hello_world/components/home.spec.jsx @@ -1,7 +1,7 @@ import React from 'react'; import TestUtils from 'react-addons-test-utils'; import { Provider } from 'react-redux'; -import Helper from '../../specs_support/helper'; +import Helper from '../../../specs_support/helper'; import Home from './home'; describe('home', () => { diff --git a/client/js/components/layout/index.jsx b/client/apps/hello_world/components/layout/index.jsx similarity index 100% rename from client/js/components/layout/index.jsx rename to client/apps/hello_world/components/layout/index.jsx diff --git a/client/js/components/layout/index.spec.jsx b/client/apps/hello_world/components/layout/index.spec.jsx similarity index 88% rename from client/js/components/layout/index.spec.jsx rename to client/apps/hello_world/components/layout/index.spec.jsx index e6e0056..87dfe0a 100644 --- a/client/js/components/layout/index.spec.jsx +++ b/client/apps/hello_world/components/layout/index.spec.jsx @@ -1,7 +1,7 @@ import React from 'react'; import TestUtils from 'react-addons-test-utils'; import { Provider } from 'react-redux'; -import Helper from '../../../specs_support/helper'; +import Helper from '../../../../specs_support/helper'; import Index from './index'; describe('index', () => { diff --git a/client/js/history.js b/client/apps/hello_world/history.js similarity index 100% rename from client/js/history.js rename to client/apps/hello_world/history.js diff --git a/client/html/404.html b/client/apps/hello_world/html/404.html similarity index 100% rename from client/html/404.html rename to client/apps/hello_world/html/404.html diff --git a/client/html/about.md b/client/apps/hello_world/html/about.md similarity index 100% rename from client/html/about.md rename to client/apps/hello_world/html/about.md diff --git a/client/html/crossdomain.xml b/client/apps/hello_world/html/crossdomain.xml similarity index 100% rename from client/html/crossdomain.xml rename to client/apps/hello_world/html/crossdomain.xml diff --git a/client/html/humans.txt b/client/apps/hello_world/html/humans.txt similarity index 100% rename from client/html/humans.txt rename to client/apps/hello_world/html/humans.txt diff --git a/client/html/index.html b/client/apps/hello_world/html/index.html similarity index 70% rename from client/html/index.html rename to client/apps/hello_world/html/index.html index f446939..5a7272d 100644 --- a/client/html/index.html +++ b/client/apps/hello_world/html/index.html @@ -1,4 +1,4 @@
    - \ No newline at end of file + \ No newline at end of file diff --git a/client/html/layouts/application.html b/client/apps/hello_world/html/layouts/application.html similarity index 100% rename from client/html/layouts/application.html rename to client/apps/hello_world/html/layouts/application.html diff --git a/client/html/layouts/partials/_google_analytics.html b/client/apps/hello_world/html/layouts/partials/_google_analytics.html similarity index 100% rename from client/html/layouts/partials/_google_analytics.html rename to client/apps/hello_world/html/layouts/partials/_google_analytics.html diff --git a/client/html/layouts/partials/_head.html b/client/apps/hello_world/html/layouts/partials/_head.html similarity index 87% rename from client/html/layouts/partials/_head.html rename to client/apps/hello_world/html/layouts/partials/_head.html index 94f1d3a..4cc277e 100644 --- a/client/html/layouts/partials/_head.html +++ b/client/apps/hello_world/html/layouts/partials/_head.html @@ -9,4 +9,4 @@ }; window.DEFAULT_JWT = {}; - + diff --git a/client/html/layouts/partials/_header.html b/client/apps/hello_world/html/layouts/partials/_header.html similarity index 100% rename from client/html/layouts/partials/_header.html rename to client/apps/hello_world/html/layouts/partials/_header.html diff --git a/client/html/robots.txt b/client/apps/hello_world/html/robots.txt similarity index 100% rename from client/html/robots.txt rename to client/apps/hello_world/html/robots.txt diff --git a/client/js/libs/assets.js b/client/apps/hello_world/libs/assets.js similarity index 51% rename from client/js/libs/assets.js rename to client/apps/hello_world/libs/assets.js index 17d1ec0..01dd683 100644 --- a/client/js/libs/assets.js +++ b/client/apps/hello_world/libs/assets.js @@ -1,3 +1,3 @@ // See http://webpack.github.io/docs/context.html#dynamic-requires -export default require.context('../../assets', true, /^\.\//); +export default require.context('../assets', true, /^\.\//); diff --git a/client/js/libs/assets.spec.js b/client/apps/hello_world/libs/assets.spec.js similarity index 100% rename from client/js/libs/assets.spec.js rename to client/apps/hello_world/libs/assets.spec.js diff --git a/client/js/loaders/jwt.js b/client/apps/hello_world/loaders/jwt.js similarity index 100% rename from client/js/loaders/jwt.js rename to client/apps/hello_world/loaders/jwt.js diff --git a/client/apps/hello_world/middleware/api.js b/client/apps/hello_world/middleware/api.js new file mode 100644 index 0000000..30af9b2 --- /dev/null +++ b/client/apps/hello_world/middleware/api.js @@ -0,0 +1,6 @@ +import Api from '../../../libs/middleware/api'; + +// This file just exports the default global api. If modifications are needed +// make the modifications in this file by extending the Api or copy pasting the +// code into this file. +export default Api; diff --git a/client/apps/hello_world/package.json b/client/apps/hello_world/package.json new file mode 100644 index 0000000..65b15ec --- /dev/null +++ b/client/apps/hello_world/package.json @@ -0,0 +1,20 @@ +{ + "dependencies": { + "babel": "^6.23.0", + "babel-polyfill": "^6.23.0", + "babel-runtime": "^6.23.0", + "es6-promise": "^4.1.0", + "lodash": "4.17.4", + "react": "15.4.2", + "react-dom": "15.4.2", + "react-proxy-loader": "^0.3.5", + "react-redux": "^5.0.3", + "react-router": "^3.0.2", + "react-tap-event-plugin": "2.0.1", + "redux": "3.6.0", + "uuid": "3.0.1" + }, + "devDependencies": { + "react-addons-test-utils": "^15.4.2" + } +} diff --git a/client/js/reducers/application.js b/client/apps/hello_world/reducers/application.js similarity index 100% rename from client/js/reducers/application.js rename to client/apps/hello_world/reducers/application.js diff --git a/client/js/reducers/application.spec.js b/client/apps/hello_world/reducers/application.spec.js similarity index 100% rename from client/js/reducers/application.spec.js rename to client/apps/hello_world/reducers/application.spec.js diff --git a/client/js/reducers/index.js b/client/apps/hello_world/reducers/index.js similarity index 77% rename from client/js/reducers/index.js rename to client/apps/hello_world/reducers/index.js index 7b76557..04e4b8b 100644 --- a/client/js/reducers/index.js +++ b/client/apps/hello_world/reducers/index.js @@ -1,7 +1,7 @@ import { combineReducers } from 'redux'; -import settings from './settings'; -import application from './application'; +import settings from '../../../libs/reducers/settings'; import jwt from './jwt'; +import application from './application'; const rootReducer = combineReducers({ settings, diff --git a/client/js/reducers/jwt.js b/client/apps/hello_world/reducers/jwt.js similarity index 100% rename from client/js/reducers/jwt.js rename to client/apps/hello_world/reducers/jwt.js diff --git a/client/js/reducers/jwt.spec.js b/client/apps/hello_world/reducers/jwt.spec.js similarity index 100% rename from client/js/reducers/jwt.spec.js rename to client/apps/hello_world/reducers/jwt.spec.js diff --git a/client/js/routes.jsx b/client/apps/hello_world/routes.jsx similarity index 100% rename from client/js/routes.jsx rename to client/apps/hello_world/routes.jsx diff --git a/client/apps/hello_world/store/configure_store.js b/client/apps/hello_world/store/configure_store.js new file mode 100644 index 0000000..698da58 --- /dev/null +++ b/client/apps/hello_world/store/configure_store.js @@ -0,0 +1,12 @@ +import configureStore from '../../../libs/store/configure_store'; +import rootReducer from '../reducers/index'; +import API from '../middleware/api'; + +const middleware = [API]; + +// This file just exports the default configure store. If modifications are needed +// make the modifications in this file by extending the configureStore +// or copy pasting the code into this file. +export default function(initialState) { + return configureStore(initialState, rootReducer, middleware); +} diff --git a/client/styles/.csscomb.json b/client/apps/hello_world/styles/.csscomb.json similarity index 100% rename from client/styles/.csscomb.json rename to client/apps/hello_world/styles/.csscomb.json diff --git a/client/styles/.csslintrc b/client/apps/hello_world/styles/.csslintrc similarity index 100% rename from client/styles/.csslintrc rename to client/apps/hello_world/styles/.csslintrc diff --git a/client/styles/_defines.scss b/client/apps/hello_world/styles/_defines.scss similarity index 100% rename from client/styles/_defines.scss rename to client/apps/hello_world/styles/_defines.scss diff --git a/client/styles/styles.js b/client/apps/hello_world/styles/styles.js similarity index 100% rename from client/styles/styles.js rename to client/apps/hello_world/styles/styles.js diff --git a/client/styles/styles.less b/client/apps/hello_world/styles/styles.less similarity index 100% rename from client/styles/styles.less rename to client/apps/hello_world/styles/styles.less diff --git a/client/apps/hello_world/styles/styles.scss b/client/apps/hello_world/styles/styles.scss new file mode 100644 index 0000000..0f16881 --- /dev/null +++ b/client/apps/hello_world/styles/styles.scss @@ -0,0 +1,5 @@ +@import "defines"; + +body { + text-align: center; +} diff --git a/client/apps/hello_world/yarn.lock b/client/apps/hello_world/yarn.lock new file mode 100644 index 0000000..6db7d86 --- /dev/null +++ b/client/apps/hello_world/yarn.lock @@ -0,0 +1,250 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +babel-polyfill@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-runtime@^6.22.0, babel-runtime@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" + +big.js@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + +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.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +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" + +es6-promise@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0" + +fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: + version "0.8.11" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.11.tgz#340b590b8a2278a01ef7467c07a16da9b753db24" + 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" + +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" + +hoist-non-react-statics@^1.0.3, 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" + +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +invariant@^2.0.0, invariant@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +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" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +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" + +lodash-es@^4.2.0, lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + +lodash@4.17.4, lodash@^4.2.0, lodash@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +query-string@^4.2.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +react-addons-test-utils@^15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" + dependencies: + fbjs "^0.8.4" + object-assign "^4.1.0" + +react-dom@15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f" + dependencies: + fbjs "^0.8.1" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +react-proxy-loader@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/react-proxy-loader/-/react-proxy-loader-0.3.5.tgz#eaeebc3950f9efad36b8bfc47cf58a9a8ca3432d" + dependencies: + loader-utils "^1.0.2" + +react-redux@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.3.tgz#86c3b68d56e74294a42e2a740ab66117ef6c019f" + dependencies: + hoist-non-react-statics "^1.0.3" + invariant "^2.0.0" + lodash "^4.2.0" + lodash-es "^4.2.0" + loose-envify "^1.1.0" + +react-router@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.3.tgz#e95304b2e418482e5ecff2699d2b8aae52d5f884" + dependencies: + history "^3.0.0" + hoist-non-react-statics "^1.2.0" + invariant "^2.2.1" + loose-envify "^1.2.0" + 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@15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef" + dependencies: + fbjs "^0.8.4" + loose-envify "^1.1.0" + object-assign "^4.1.0" + +redux@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.2" + +regenerator-runtime@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +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" + +symbol-observable@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + +ua-parser-js@^0.7.9: + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + +uuid@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +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" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" diff --git a/client/build.js b/client/build.js index 3cb8242..7abbac4 100644 --- a/client/build.js +++ b/client/build.js @@ -1,3 +1,7 @@ -const build = require('./tools/build'); +const argv = require('minimist')(process.argv.slice(2)); -build.build(false); +const apps = require('./libs/build/apps'); + +const stage = argv.release ? 'production' : 'development'; + +apps.buildApps(stage, argv.onlyPack); diff --git a/client/build_webpack.js b/client/build_webpack.js deleted file mode 100644 index c4c0b22..0000000 --- a/client/build_webpack.js +++ /dev/null @@ -1,3 +0,0 @@ -const build = require('./tools/build'); - -build.buildWebpackEntries(false); diff --git a/client/config/karma.js b/client/config/karma.js index aa12ebe..806247b 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -1,9 +1,24 @@ -// karma config info: http://karma-runner.github.io/0.12/config/configuration-file.html -const webpack = require('webpack'); -const webpackConfig = require('./webpack.config')('test'); +const _ = require('lodash'); + +const settings = require('./settings'); +const webpackConfigBuilder = require('./webpack.config'); +const apps = require('../libs/build/apps'); module.exports = () => { - const testConfig = { + + let plugins = []; + let module = {}; + let resolve = {}; + + _.each(settings.apps, (appPath, appName) => { + const webpackOptions = apps.buildWebpackOptions(appName, appPath, { stage: 'test', onlyPack: true }); + const webpackConfig = webpackConfigBuilder(webpackOptions); + plugins = _.union(plugins, webpackConfig.plugins); + module = _.merge({}, resolve, webpackConfig.module); + resolve = _.merge({}, resolve, webpackConfig.resolve); + }); + + return { // If browser does not capture in given timeout [ms], kill it captureTimeout: 60000, @@ -57,9 +72,9 @@ module.exports = () => { // Use istanbul-transformer post loader to generate code coverage report. webpack: { devtool : 'eval', - plugins : webpackConfig.plugins, - module : webpackConfig.module, - resolve : webpackConfig.resolve, + plugins, + module, + resolve, }, // Reduce the noise to the console @@ -76,5 +91,4 @@ module.exports = () => { file : 'coverage.info', }, }; - return testConfig; }; diff --git a/client/config/settings.js b/client/config/settings.js index 2f82726..384213d 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -1,8 +1,7 @@ -const info = require('../../package.json'); -const deployConfig = require('../../.s3-website.json'); -const path = require('path'); +const fs = require('fs-extra'); +const path = require('path'); -const clientAppPath = path.join(__dirname, '../'); +const deployConfig = require('../../.s3-website.json'); const devRelativeOutput = '/'; const prodRelativeOutput = '/'; @@ -25,12 +24,22 @@ require('dotenv').load({ path: path.join(__dirname, '../../.env') }); const hotPort = process.env.ASSETS_PORT || 8080; -module.exports = { - title : info.title, - author : info.author, - version : info.versions, - build : Date.now(), +// Get a list of all directories in the apps directory. +// These will be used to generate the entries for webpack +const appsDir = path.join(__dirname, '../apps/'); + +const names = fs.readdirSync(appsDir) + .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()); +const apps = names.reduce( + (result, file) => Object.assign({}, result, { + [file] : path.join(appsDir, file), + }) +, {}); + +const rootAppsPath = path.join(__dirname, '../../apps'); + +module.exports = { devRelativeOutput, prodRelativeOutput, @@ -45,14 +54,16 @@ module.exports = { buildSuffix: '_bundle.js', - staticDir: `${clientAppPath}static`, - - entries: { - app: `${clientAppPath}js/app.jsx` - }, + apps, - cssEntries: { - styles: `${clientAppPath}styles/styles.js` + // Options for building html files + htmlOptions: { + truncateSummaryAt : 1000, + buildExtensions : ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) + templateDirs : ['layouts'], + templateData : {}, // Object that will be passed to every page as it is rendered + templateMap : {}, // Used to specify specific templates on a per file basis + rootAppsPath } }; diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 80dde67..21d9e32 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -5,19 +5,40 @@ const ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const AssetsPlugin = require('assets-webpack-plugin'); const _ = require('lodash'); -const settings = require('./settings'); -module.exports = function webpackConfig(stage) { - - const production = stage === 'production' || stage === 'staging'; - const outputPath = production ? settings.prodOutput : settings.devOutput; +// +// Generates a webpack config file based on options. +// Options: +// appName: The name of the application i.e. hello_world +// appPath: The path to the application. i.e. client/apps/hello_world +// buildSuffix: The suffix to append onto the end of the build. i.e. _bundle.js +// stage: +// 'production' +// 'staging' (Will result in same output as production but will output to /staging) +// 'hot' (Development mode with hot reload) +// 'test' +// +// Production related values - applicable when stage is set to 'production' or 'staging' +// prodOutput +// prodAssetsUrl +// devRelativeOutput +// +// Development +// devOutput +// devAssetsUrl +// devRelativeOutput +// +module.exports = function webpackConfig(options) { + + const production = options.stage === 'production' || options.stage === 'staging'; + const outputPath = production ? options.prodOutput : options.devOutput; // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In developerment this will // point to whatever public url is serving dev assets. const publicPath = production ? - settings.prodAssetsUrl + settings.prodRelativeOutput : - settings.devAssetsUrl + settings.devRelativeOutput; + options.prodAssetsUrl + options.prodRelativeOutput : + options.devAssetsUrl + options.devRelativeOutput; let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. @@ -30,9 +51,9 @@ module.exports = function webpackConfig(stage) { if (production) { babelPlugins += ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement babelPlugins += ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code - } else if (stage === 'hot') { + } else if (options.stage === 'hot') { babelPlugins += ',plugins[]=react-hot-loader/babel'; - } else if (stage === 'test') { + } else if (options.stage === 'test') { // Add test plugins as needed } @@ -48,24 +69,6 @@ module.exports = function webpackConfig(stage) { const lessLoaders = cssLoaders.slice(0); lessLoaders.push('less-loader'); - let entries = _.cloneDeep(settings.entries); - - const cssEntries = settings.cssEntries; - _.each(cssEntries, (_stylePath, name) => { - entries[name] = cssEntries[name]; - }); - - if (stage === 'hot') { - entries = _.reduce(entries, (result, entry, key) => { - result[key] = [ - 'eventsource-polyfill', - `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true`, - entry - ]; - return result; - }, {}); - } - const extractCSS = new ExtractTextPlugin(production ? '[name]-[chunkhash].css' : '[name].css'); let plugins = [ @@ -92,15 +95,17 @@ module.exports = function webpackConfig(stage) { manfiestVariable: 'webpackBundleManifest' }), new BundleAnalyzerPlugin({ - analyzerMode: 'static' + analyzerMode: 'static', + openAnalyzer: false }), // Generate webpack-assets.json to map path to assets generated with hashed names new AssetsPlugin({ - path: outputPath + path: outputPath, + fullPath: false }), extractCSS ]); - } else if (stage === 'hot') { + } else if (options.stage === 'hot') { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), new webpack.HotModuleReplacementPlugin(), @@ -124,22 +129,34 @@ module.exports = function webpackConfig(stage) { { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; + const entryPath = `${options.appPath}/app.jsx`; + const entry = { [options.appName]: entryPath }; + + if (options.stage === 'hot') { + // Add hot reload to entry + entry[options.appName] = [ + 'eventsource-polyfill', + `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true`, + entryPath + ]; + } + return { - context: path.resolve('../', __dirname), - entry: entries, + context: path.resolve('../apps', __dirname), + entry, output: { publicPath, // Location where generated files will be output path: outputPath, - filename: production ? `[name]-[chunkhash]${settings.buildSuffix}` : `[name]${settings.buildSuffix}`, - chunkFilename: production ? `[id]-[chunkhash]${settings.buildSuffix}` : `[id]${settings.buildSuffix}`, + filename: production ? `[name]-[chunkhash]${options.buildSuffix}` : `[name]${options.buildSuffix}`, + chunkFilename: production ? `[id]-[chunkhash]${options.buildSuffix}` : `[id]${options.buildSuffix}`, sourceMapFilename: '[name].map', // http://webpack.github.io/docs/configuration.html#output-pathinfo pathinfo: !production }, resolve: { extensions: ['.js', '.json', '.jsx'], - modules: ['node_modules'] + modules: ['node_modules', `${options.appPath}/node_modules`] }, cache: true, devtool: production ? 'source-map' : 'cheap-module-source-map', // https://webpack.js.org/configuration/devtool/ diff --git a/client/js/store/configure_store.js b/client/js/store/configure_store.js deleted file mode 100644 index 693b1de..0000000 --- a/client/js/store/configure_store.js +++ /dev/null @@ -1,35 +0,0 @@ -import { createStore, applyMiddleware, compose } from 'redux'; -import { persistState } from 'redux-devtools'; -import rootReducer from '../reducers'; -import DevTools from '../dev/dev_tools'; -import API from '../middleware/api'; - -const middleware = [API]; - -let enhancers = [ - applyMiddleware(...middleware) -]; - -// In production, we want to use just the middleware. -// In development, we want to use some store enhancers from redux-devtools. -// UglifyJS will eliminate the dead code depending on the build environment. -if (__DEV__) { - enhancers = [ - ...enhancers, - DevTools.instrument(), - persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)) - ]; -} - -export default function(initialState) { - const store = compose(...enhancers)(createStore)(rootReducer, initialState); - - if (__DEV__ && module.hot) { - module.hot.accept( - '../reducers', - () => store.replaceReducer(rootReducer) - ); - } - - return store; -} diff --git a/client/js/libs/api.js b/client/libs/api/api.js similarity index 100% rename from client/js/libs/api.js rename to client/libs/api/api.js diff --git a/client/js/libs/api.spec.js b/client/libs/api/api.spec.js similarity index 100% rename from client/js/libs/api.spec.js rename to client/libs/api/api.spec.js diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js new file mode 100644 index 0000000..d6355b1 --- /dev/null +++ b/client/libs/build/apps.js @@ -0,0 +1,118 @@ +const fs = require('fs-extra'); +const _ = require('lodash'); +const path = require('path'); + +const settings = require('../../config/settings'); +const build = require('./index'); +const file = require('./file'); + +let launchPort = settings.hotPort; + +// ----------------------------------------------------------------------------- +// Root of the build directory where apps will be written +// ----------------------------------------------------------------------------- +function rootBuildPath(stage) { + return stage === 'production' ? settings.prodOutput : settings.devOutput; +} + +// ----------------------------------------------------------------------------- +// Generates webpack options that can be provided to webpackConfigBuilder +// ----------------------------------------------------------------------------- +function buildWebpackOptions(appName, appPath, options) { + return { + stage: options.stage, + appName, + appPath, + buildSuffix: settings.buildSuffix, + prodOutput: options.onlyPack ? settings.prodOutput : path.join(settings.prodOutput, appName), + prodAssetsUrl: settings.prodAssetsUrl, + devOutput: options.onlyPack ? settings.devOutput : path.join(settings.devOutput, appName), + devAssetsUrl: settings.devAssetsUrl, + devRelativeOutput: settings.devRelativeOutput + }; +} + +// ----------------------------------------------------------------------------- +// Iterate through all applications calling the callback with the webpackOptions +// ----------------------------------------------------------------------------- +function iterateApps(options, cb) { + _.each(settings.apps, (appPath, appName) => { + cb(buildWebpackOptions(appName, appPath, options)); + }); +} + +// ----------------------------------------------------------------------------- +// build a home page that links to each application +// ----------------------------------------------------------------------------- +function buildHome(outputPath) { + console.log('Building default home page with links to all apps'); + const links = _.map(settings.apps, (appPath, appName) => + `
    ${appName}` + ); + const home = `${links.join('')}`; + file.write(path.join(outputPath, 'index.html'), home); +} + +// ----------------------------------------------------------------------------- +// Wrapper to provide values for launching a webpack server +// ----------------------------------------------------------------------------- +function launchHotWrapper(launchCallback, webpackOptions) { + const servePath = path.join(settings.devOutput, webpackOptions.appName); + launchCallback(webpackOptions, launchPort, servePath); + launchPort += 1; +} + +// ----------------------------------------------------------------------------- +// Build a single app +// ----------------------------------------------------------------------------- +function buildAppParts(webpackOptions, onlyPack) { + if (onlyPack) { + build.buildWebpackEntries(webpackOptions).then(() => { + console.log(`Finished Javascript for ${webpackOptions.appName}`); + }); + } else { + const outputPath = rootBuildPath(webpackOptions.stage); + build.build(outputPath, webpackOptions, settings.htmlOptions).then((result) => { + console.log(`Finished Javascript for ${webpackOptions.appName}.`); + console.log(`Built ${result.pages.length} pages.`); + }); + } +} + +// ----------------------------------------------------------------------------- +// Build a single app +// ----------------------------------------------------------------------------- +function buildApp(appName, stage, onlyPack, launchCallback) { + const appPath = _.find(settings.apps, (p, name) => appName === name); + const webpackOptions = buildWebpackOptions(appName, appPath, { stage, onlyPack }); + buildAppParts(webpackOptions, onlyPack); + if (launchCallback) { + launchHotWrapper(launchCallback, webpackOptions); + } +} + +// ----------------------------------------------------------------------------- +// Build all apps +// ----------------------------------------------------------------------------- +function buildApps(stage, onlyPack, launchCallback) { + // Delete everything in the output path + fs.emptydir(rootBuildPath(stage), () => { + + iterateApps({ stage, onlyPack }, (webpackOptions) => { + buildAppParts(webpackOptions, onlyPack, launchCallback); + if (launchCallback) { + launchHotWrapper(launchCallback, webpackOptions); + } + }); + + if (!onlyPack) { + buildHome(rootBuildPath(stage)); + } + }); +} + +module.exports = { + buildApp, + buildApps, + buildWebpackOptions +}; diff --git a/client/tools/build/content.js b/client/libs/build/content.js similarity index 60% rename from client/tools/build/content.js rename to client/libs/build/content.js index e747425..359661d 100644 --- a/client/tools/build/content.js +++ b/client/libs/build/content.js @@ -11,10 +11,25 @@ const file = require('./file'); const ignoreFiles = ['.DS_Store']; +// ----------------------------------------------------------------------------- +// Generate the output file name and path +// ----------------------------------------------------------------------------- +function outFilePath(page, outputPath, fullInputPath, originalInputPath) { + let out = path.join(outputPath, fullInputPath.replace(originalInputPath, '')); + if (page && page.destination && page.destination.length > 0) { + if (_.endsWith(page.destination, '/')) { + out = path.join(outputPath, page.destination, 'index.html'); + } else { + out = page.destination; + } + } + return out; +} + // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -function buildContent(fullPath, webpackAssets, stage, options) { +function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, options) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -47,8 +62,8 @@ function buildContent(fullPath, webpackAssets, stage, options) { // Apply template data.content = html; // Pass in generated html - html = templates.apply(data, fullPath, options.templateMap, options.templateDirs); - html = applyProduction(html, stage, webpackAssets, options.buildSuffix); + html = templates.apply(data, fullPath, options.templateMap, templateDirs); + html = applyProduction(html, stage, webpackAssets, buildSuffix); return { title, @@ -64,42 +79,51 @@ function buildContent(fullPath, webpackAssets, stage, options) { // ----------------------------------------------------------------------------- // build html and markdown files in a given directory // ----------------------------------------------------------------------------- -function buildContents(inputPath, outputPath, webpackAssets, stage, options) { +function buildContents( + originalInputPath, + inputPath, + outputPath, + webpackAssets, + stage, + buildSuffix, + templateDirs, + options) { + let results = []; const files = fs.readdirSync(inputPath); + files.forEach((fileName) => { const fullInputPath = path.join(inputPath, fileName); - const doOutput = options.templateDirs.indexOf(fullInputPath) < 0 && // Ignore template dirs + const doOutput = templateDirs.indexOf(fullInputPath) < 0 && // Ignore template dirs !_.includes(ignoreFiles, fileName); if (doOutput) { if (fs.statSync(fullInputPath).isDirectory()) { results = _.concat(results, buildContents( + originalInputPath, fullInputPath, outputPath, webpackAssets, stage, + buildSuffix, + templateDirs, options )); } else { + const ext = path.extname(fullInputPath); if (_.includes(options.buildExtensions, ext)) { - const page = buildContent(fullInputPath, webpackAssets, stage, options); - let outFile = fileName; - let outPath = outputPath; - let inPath = inputPath; - if (page.destination && page.destination.length > 0) { - if (_.endsWith(page.destination, '/')) { - outPath = path.join(outPath, page.destination); - outFile = 'index.html'; - } else { - outFile = page.destination; - } - inPath = ''; - } - page.outputFilePath = file.write(inPath, outPath, outFile, page.html, options); + const page = buildContent( + fullInputPath, + templateDirs, + webpackAssets, + stage, + buildSuffix, + options); + page.outputFilePath = file.write( + outFilePath(page, outputPath, fullInputPath, originalInputPath), page.html, options); results.push(page); } else { - file.copy(inputPath, outputPath, fileName, options); + file.copy(fullInputPath, outFilePath(null, outputPath, fullInputPath, originalInputPath)); } } } @@ -109,5 +133,6 @@ function buildContents(inputPath, outputPath, webpackAssets, stage, options) { module.exports = { buildContent, - buildContents + buildContents, + outFilePath }; diff --git a/client/tools/build/file.js b/client/libs/build/file.js similarity index 50% rename from client/tools/build/file.js rename to client/libs/build/file.js index 98372ba..4c5673c 100644 --- a/client/tools/build/file.js +++ b/client/libs/build/file.js @@ -1,25 +1,23 @@ const path = require('path'); -const fs = require('fs-extra'); +const fs = require('fs-extra'); // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- -function makeOutputFilePath(inputPath, outputPath, fileName, options, cb) { - const relPath = inputPath.replace(options.rootInputPath, ''); // build relative path for output file - const out = path.join(outputPath, relPath, fileName); - const dir = path.dirname(out); +function makeOutputFilePath(filePath, cb) { + const dir = path.dirname(filePath); fs.mkdirs(dir, {}, () => { - cb(out); + cb(filePath); }); - return out; + return filePath; } // ----------------------------------------------------------------------------- // write file // ----------------------------------------------------------------------------- -function write(inputPath, outputPath, fileName, content, options) { - return makeOutputFilePath(inputPath, outputPath, fileName, options, (out) => { - fs.writeFile(out, content, (err) => { +function write(outFilePath, content) { + return makeOutputFilePath(outFilePath, () => { + fs.writeFile(outFilePath, content, (err) => { if (err) { console.log(err); } }); }); @@ -28,9 +26,9 @@ function write(inputPath, outputPath, fileName, content, options) { // ----------------------------------------------------------------------------- // copy file // ----------------------------------------------------------------------------- -function copy(inputPath, outputPath, fileName, options) { - return makeOutputFilePath(inputPath, outputPath, fileName, options, (out) => { - fs.copy(path.join(inputPath, fileName), out, (err) => { +function copy(src, dest) { + return makeOutputFilePath(dest, () => { + fs.copy(src, dest, (err) => { if (err) { console.log(err); } }); }); diff --git a/client/libs/build/index.js b/client/libs/build/index.js new file mode 100644 index 0000000..0e7b3a4 --- /dev/null +++ b/client/libs/build/index.js @@ -0,0 +1,141 @@ +const path = require('path'); +const fs = require('fs-extra'); +const _ = require('lodash'); +const webpack = require('webpack'); +const nodeWatch = require('node-watch'); + +const file = require('./file'); +const content = require('./content'); + +// Settings +const webpackConfigBuilder = require('../../config/webpack.config'); + +// ----------------------------------------------------------------------------- +// run webpack to build entries +// ----------------------------------------------------------------------------- +function buildWebpackEntries(webpackOptions) { + return new Promise((resolve, reject) => { + const webpackConfig = webpackConfigBuilder(webpackOptions); + if (webpackOptions.stage !== 'hot') { + const bundler = webpack(webpackConfig); + const bundle = (err, stats) => { + if (err) { + console.log('webpack error', err); + reject(err); + } + // console.log('webpack', stats.toString({ colors: true })); + resolve({ + webpackConfig, + webpackStats: stats.toJson() + }); + }; + bundler.run(bundle); + } else { + resolve({ + webpackConfig, + webpackStats: null + }); + } + }); +} + +// ----------------------------------------------------------------------------- +// main build +// ----------------------------------------------------------------------------- +function build(rootBuildPath, webpackOptions, htmlOptions) { + + return new Promise((resolve) => { + + // Copy static files to build directory + try { + const staticDir = `${webpackOptions.appPath}/static`; + console.log(`Copying static files in ${staticDir}`); + fs.copySync(staticDir, rootBuildPath); + } catch (err) { + // No static dir. Do nothing + } + + // Webpack build + console.log(`Webpacking ${webpackOptions.appName}`); + + buildWebpackEntries(webpackOptions).then((packResults) => { + let webpackAssets = null; + const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/webpack-assets.json`; + if (fs.existsSync(webpackAssetsFilePath)) { + webpackAssets = fs.readJsonSync(webpackAssetsFilePath); + } + + // Build html + console.log(`Building html for ${webpackOptions.appName}`); + const inputPath = path.join(webpackOptions.appPath, 'html'); + const templateDirs = _.map(htmlOptions.templateDirs, + templateDir => path.join(inputPath, templateDir) + ); + + const pages = content.buildContents( + inputPath, + inputPath, + path.join(rootBuildPath, webpackOptions.appName), + webpackAssets, + webpackOptions.stage, + webpackOptions.buildSuffix, + templateDirs, + htmlOptions + ); + + resolve({ + webpackConfig : packResults.webpackConfig, + webpackAssets, + pages, + }); + }); + + }); +} + +// ----------------------------------------------------------------------------- +// watch +// ----------------------------------------------------------------------------- +function appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults) { + + // Watch for content to change + nodeWatch(webpackOptions.appPath, { recursive: true }, (evt, filePath) => { + + const templateDirs = _.map(htmlOptions.templateDirs, + templateDir => path.join(webpackOptions.appPath, 'html', templateDir) + ); + + const outputPath = path.join(rootBuildPath, webpackOptions.appName); + const originalInputPath = path.join(webpackOptions.appPath, 'html'); + + // Build the page + const page = content.buildContent( + filePath, + templateDirs, + buildResults.webpackAssets, + webpackOptions.stage, + htmlOptions + ); + + page.outputFilePath = file.write( + content.outFilePath(page, outputPath, filePath, originalInputPath), + page.html + ); + + }); +} + +function watch(rootBuildPath, webpackOptions, htmlOptions) { + return new Promise((resolve) => { + build(rootBuildPath, webpackOptions, htmlOptions).then((buildResults) => { + appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults); + resolve(); + }); + }); +} + +module.exports = { + watch, + build, + buildWebpackEntries +}; diff --git a/client/tools/build/markdown.js b/client/libs/build/markdown.js similarity index 100% rename from client/tools/build/markdown.js rename to client/libs/build/markdown.js diff --git a/client/tools/build/production.js b/client/libs/build/production.js similarity index 100% rename from client/tools/build/production.js rename to client/libs/build/production.js diff --git a/client/tools/build/templates.js b/client/libs/build/templates.js similarity index 93% rename from client/tools/build/templates.js rename to client/libs/build/templates.js index 4b76943..8e7872a 100644 --- a/client/tools/build/templates.js +++ b/client/libs/build/templates.js @@ -1,7 +1,7 @@ -const fs = require('fs'); -const path = require('path'); -const _ = require('lodash'); -const ejs = require('ejs'); +const fs = require('fs'); +const path = require('path'); +const _ = require('lodash'); +const ejs = require('ejs'); const utils = require('./utils'); diff --git a/client/tools/build/utils.js b/client/libs/build/utils.js similarity index 100% rename from client/tools/build/utils.js rename to client/libs/build/utils.js diff --git a/client/tools/build/webpack_utils.js b/client/libs/build/webpack_utils.js similarity index 85% rename from client/tools/build/webpack_utils.js rename to client/libs/build/webpack_utils.js index 5a469fa..6930580 100644 --- a/client/tools/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -5,6 +5,9 @@ const _ = require('lodash'); // ----------------------------------------------------------------------------- function apply(html, webpackAssets, buildSuffix) { let result = html; + if (!webpackAssets) { + throw new Error('Invalid webpack assets. Unable to build production.'); + } _.each(webpackAssets, (assets, name) => { _.each(assets, (hashedName, ext) => { if (ext === 'js') { diff --git a/client/js/constants/error.js b/client/libs/constants/error.js similarity index 100% rename from client/js/constants/error.js rename to client/libs/constants/error.js diff --git a/client/js/constants/network.js b/client/libs/constants/network.js similarity index 100% rename from client/js/constants/network.js rename to client/libs/constants/network.js diff --git a/client/js/constants/wrapper.js b/client/libs/constants/wrapper.js similarity index 100% rename from client/js/constants/wrapper.js rename to client/libs/constants/wrapper.js diff --git a/client/js/constants/wrapper.spec.js b/client/libs/constants/wrapper.spec.js similarity index 100% rename from client/js/constants/wrapper.spec.js rename to client/libs/constants/wrapper.spec.js diff --git a/client/js/dev/dev_tools.jsx b/client/libs/dev/dev_tools.jsx similarity index 100% rename from client/js/dev/dev_tools.jsx rename to client/libs/dev/dev_tools.jsx diff --git a/client/js/middleware/api.js b/client/libs/middleware/api.js similarity index 96% rename from client/js/middleware/api.js rename to client/libs/middleware/api.js index 99e4876..e63fb5b 100644 --- a/client/js/middleware/api.js +++ b/client/libs/middleware/api.js @@ -1,4 +1,4 @@ -import api from '../libs/api'; +import api from '../api/api'; import { DONE } from '../constants/wrapper'; const API = store => next => (action) => { diff --git a/client/js/middleware/api.spec.js b/client/libs/middleware/api.spec.js similarity index 100% rename from client/js/middleware/api.spec.js rename to client/libs/middleware/api.spec.js diff --git a/client/js/reducers/settings.js b/client/libs/reducers/settings.js similarity index 100% rename from client/js/reducers/settings.js rename to client/libs/reducers/settings.js diff --git a/client/js/reducers/settings.spec.js b/client/libs/reducers/settings.spec.js similarity index 100% rename from client/js/reducers/settings.spec.js rename to client/libs/reducers/settings.spec.js diff --git a/client/libs/store/configure_store.js b/client/libs/store/configure_store.js new file mode 100644 index 0000000..4817cfd --- /dev/null +++ b/client/libs/store/configure_store.js @@ -0,0 +1,33 @@ +import { createStore, applyMiddleware, compose } from 'redux'; +import { persistState } from 'redux-devtools'; + +import DevTools from '../dev/dev_tools'; + +export default function(initialState, rootReducer, middleware) { + + let enhancers = [ + applyMiddleware(...middleware) + ]; + + // In production, we want to use just the middleware. + // In development, we want to use some store enhancers from redux-devtools. + // UglifyJS will eliminate the dead code depending on the build environment. + if (__DEV__) { + enhancers = [ + ...enhancers, + DevTools.instrument(), + persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)) + ]; + } + + const store = compose(...enhancers)(createStore)(rootReducer, initialState); + + if (__DEV__ && module.hot) { + module.hot.accept( + rootReducer, + () => store.replaceReducer(rootReducer) + ); + } + + return store; +} diff --git a/client/js/store/configure_store.spec.js b/client/libs/store/configure_store.spec.js similarity index 100% rename from client/js/store/configure_store.spec.js rename to client/libs/store/configure_store.spec.js diff --git a/client/package.json b/client/package.json index af3824a..7947887 100644 --- a/client/package.json +++ b/client/package.json @@ -1,23 +1,9 @@ { "scripts": { - "postinstall": "node node_modules/phantomjs-prebuilt/install.js" + "postinstall": "node node_modules/phantomjs-prebuilt/install.js && cd ./apps/hello_world && yarn" }, - "dependencies": { - "babel": "^6.23.0", - "babel-polyfill": "^6.23.0", - "babel-runtime": "^6.23.0", - "es6-promise": "^4.1.0", - "lodash": "4.17.4", - "phoenix-socket": "^1.1.3", - "react": "15.4.2", - "react-dom": "15.4.2", - "react-proxy-loader": "^0.3.5", - "react-redux": "^5.0.3", - "react-router": "^3.0.2", - "react-tap-event-plugin": "2.0.1", - "redux": "3.6.0", - "superagent": "^3.5.0", - "uuid": "3.0.1" + "dependencies": { + "superagent": "^3.5.0" }, "devDependencies": { "assets-webpack-plugin": "^3.5.1", @@ -73,6 +59,7 @@ "karma-webpack": "^2.0.3", "less": "2.7.2", "less-loader": "^3.0.0", + "lodash": "^4.17.4", "marked": "^0.3.6", "minimist": "1.2.0", "node-sass": "^4.5.0", @@ -85,9 +72,7 @@ "postcss-smart-import": "^0.6.10", "protractor": "^5.1.1", "psi": "^3.0.0", - "react-addons-test-utils": "^15.4.2", "react-hot-loader": "^3.0.0-beta.6", - "redbox-react": "^1.3.4", "redux-devtools": "^3.3.2", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.2.0", diff --git a/client/server.js b/client/server.js index 7ccce24..5ac4504 100644 --- a/client/server.js +++ b/client/server.js @@ -1,23 +1,32 @@ -var release = false; -var express = require("express"); -var settings = require("./config/settings.js"); -var path = require("path"); -var app = express(); +const path = require('path'); +const express = require('express'); +const settings = require('./config/settings'); +const app = express(); +const argv = require('minimist')(process.argv.slice(2)); -app.use(express.static(settings.prodOutput)); +const appName = argv._[0]; -app.get("*", function response(req, res) { - res.sendFile(path.join(settings.prodOutput, req.url)); -}); +function launch(servePath) { + app.use(express.static(servePath)); -app.listen(settings.hotPort, "0.0.0.0", function(err) { - if (err) { - console.log(err); - return; - } - console.log("Listening on: " + settings.hotPort); - console.log("Serving content from: " + settings.prodOutput); -}); + app.get('*', (req, res) => { + res.sendFile(path.join(servePath, req.url)); + }); + app.listen(settings.hotPort, '0.0.0.0', (err) => { + if (err) { + console.log(err); + return; + } + console.log(`Listening on: ${settings.hotPort}`); + console.log(`Serving content from: ${servePath}`); + }); +} + +if (appName) { + launch(path.join(settings.prodOutput, appName)); +} else { + launch(settings.prodOutput); +} diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index 23f862c..8144350 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -1,5 +1,9 @@ -import _ from 'lodash'; -import configureStore from '../js/store/configure_store'; +import _ from 'lodash'; +import { combineReducers } from 'redux'; + +import API from '../libs/middleware/api'; +import settings from '../libs/reducers/settings'; +import configureStore from '../libs/store/configure_store'; export default class Helper { @@ -13,15 +17,18 @@ export default class Helper { } // Create a real store that can be used for testing - static makeStore(settings) { + static makeStore(initial) { const initialState = { - jwt: 'fake_jwt_token', settings: _.assign({ csrf: 'csrf_token', apiUrl: 'http://www.example.com' - }, settings) + }, initial) }; - return configureStore(initialState); + const rootReducer = combineReducers({ + settings, + }); + const middleware = [API]; + return configureStore(initialState, rootReducer, middleware); } static testPayload() { diff --git a/client/styles/styles.scss b/client/styles/styles.scss deleted file mode 100644 index de9807e..0000000 --- a/client/styles/styles.scss +++ /dev/null @@ -1 +0,0 @@ -@import '_defines'; diff --git a/client/tools/build/index.js b/client/tools/build/index.js deleted file mode 100644 index 63cfd38..0000000 --- a/client/tools/build/index.js +++ /dev/null @@ -1,140 +0,0 @@ -const path = require('path'); -const fs = require('fs-extra'); -const webpack = require('webpack'); -const nodeWatch = require('node-watch'); - -const file = require('./file'); -const content = require('./content'); - -// Settings -const webpackConfigBuilder = require('../../config/webpack.config'); -const settings = require('../../config/settings'); - -const argv = require('minimist')(process.argv.slice(2)); - -const release = argv.release; -const stage = release ? 'production' : 'development'; - -const inputPath = path.join(__dirname, '../../html'); -const templateDirs = [path.join(inputPath, 'layouts')]; -const outputPath = stage === 'production' ? settings.prodOutput : settings.devOutput; - - -const options = { - truncateSummaryAt : 1000, - buildExtensions : ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) - rootInputPath : inputPath, // Original input path - buildSuffix : settings.buildSuffix, // Webpack build suffix. ie _bundle.js - templateData : {}, // Object that will be passed to every page as it is rendered - templateMap : {}, // Used to specify specific templates on a per file basis - templateDirs // Directories to look in for template -}; - -// ----------------------------------------------------------------------------- -// run webpack to build entry points -// ----------------------------------------------------------------------------- -function buildWebpackEntries(isHot) { - return new Promise((resolve, reject) => { - const webpackConfig = webpackConfigBuilder(stage); - if (!isHot) { - const bundler = webpack(webpackConfig); - const bundle = (err, stats) => { - if (err) { - console.log('webpack error', err); - reject(err); - } - // console.log('webpack', stats.toString({ colors: true })); - resolve({ - webpackConfig, - webpackStats: stats.toJson() - }); - }; - bundler.run(bundle); - } else { - resolve(webpackConfig, null); - } - }); -} - - -// ----------------------------------------------------------------------------- -// main build -// ----------------------------------------------------------------------------- -function build(isHot) { - return new Promise((resolve) => { - - // Delete everything in the output path - fs.emptydir(outputPath, () => { - - // Copy static files to build directory - try { - // const stats = fs.statSync(settings.staticDir); - console.log(`Copying static files in ${settings.staticDir}`); - fs.copySync(settings.staticDir, outputPath); - } catch (err) { - // No static dir. Do nothing - } - - // Build files - console.log(`Building files in: ${inputPath}`); - buildWebpackEntries(isHot).then((packResults) => { - let webpackAssets; - if (stage === 'production') { - webpackAssets = fs.readJsonSync(`${packResults.webpackConfig.output.path}/webpack-assets.json`); - } - const pages = content.buildContents( - inputPath, - outputPath, - webpackAssets, - stage, - options - ); - - resolve({ - pages, - inputPath, - outputPath, - webpackConfig : packResults.webpackConfig, - webpackAssets, - stage, - options - }); - }); - }); - }); -} - -// ----------------------------------------------------------------------------- -// watch -// ----------------------------------------------------------------------------- -function watch() { - return new Promise((resolve) => { - build(true).then((buildResults) => { - - // Watch content - nodeWatch(buildResults.inputPath, (filePath) => { - // Build the page - const page = content.buildContent( - filePath, - buildResults.webpackAssets, - buildResults.stage, - buildResults.options - ); - page.outputFilePath = file.write( - buildResults.inputPath, - buildResults.outputPath, - path.basename(filePath), - page.html, - buildResults.options - ); - }); - resolve(); - }); - }); -} - -module.exports = { - watch, - build, - buildWebpackEntries -}; diff --git a/client/webpack.hot.js b/client/webpack.hot.js index fd02d9d..bfea96b 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -1,17 +1,21 @@ -const express = require('express'); -const webpack = require('webpack'); -const webpackMiddleware = require('webpack-dev-middleware'); +const express = require('express'); +const webpack = require('webpack'); +const webpackMiddleware = require('webpack-dev-middleware'); const webpackHotMiddleware = require('webpack-hot-middleware'); -const settings = require('./config/settings'); -const webpackConfig = require('./config/webpack.config')('hot'); -const path = require('path'); -const build = require('./tools/build'); +const path = require('path'); +const argv = require('minimist')(process.argv.slice(2)); -const app = express(); +const webpackConfigBuilder = require('./config/webpack.config'); +const clientApps = require('./libs/build/apps'); + +const app = express(); const localIp = '0.0.0.0'; +const appName = argv._[0]; + +function launch(webpackOptions, port, servePath) { -function launch() { + const webpackConfig = webpackConfigBuilder(webpackOptions); const compiler = webpack(webpackConfig); const webpackMiddlewareInstance = webpackMiddleware(compiler, { @@ -21,24 +25,28 @@ function launch() { headers: { 'Access-Control-Allow-Origin': '*' } }); - app.use(express.static(settings.devOutput)); + app.use(express.static(servePath)); app.use(webpackMiddlewareInstance); app.use(webpackHotMiddleware(compiler)); app.get('*', (req, res) => { - res.sendFile(path.join(settings.devOutput, req.url)); + res.sendFile(path.join(servePath, req.url)); }); - app.listen(settings.hotPort, localIp, (err) => { + app.listen(port, localIp, (err) => { if (err) { console.log(err); return; } - console.log(`Listening on: http://${localIp}:${settings.hotPort}${webpackConfig.output.publicPath}`); - console.log(`Serving content from: ${settings.devOutput}`); + console.log(`Listening on: http://${localIp}:${port}`); + console.log(`Serving content from: ${servePath}`); }); } -build.watch().then(launch); +if (appName) { + clientApps.buildApp(appName, 'hot', false, launch); +} else { + clientApps.buildApps('hot', false, launch); +} diff --git a/client/webpack.tests.js b/client/webpack.tests.js index 2348c81..9d78546 100644 --- a/client/webpack.tests.js +++ b/client/webpack.tests.js @@ -4,7 +4,7 @@ // Create a Webpack require context so we can dynamically require our // project's modules. Exclude test files in this context. -const context = require.context('./js', true, /\.spec\.jsx?$/); +const context = require.context('./apps', true, /\.spec\.jsx?$/); // Extract the module ids that Webpack uses to track modules. const projectModuleIds = context.keys().map(module => diff --git a/client/yarn.lock b/client/yarn.lock index 6915327..8b158c0 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -3,16 +3,16 @@ "@types/node@^6.0.46": - version "6.0.63" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.63.tgz#e08acbbd5946e0e95990b1c76f3ce5b7882a48eb" + version "6.0.68" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.68.tgz#0c43b6b8b9445feb86a0fbd3457e3f4bc591e66d" "@types/q@^0.0.32": version "0.0.32" resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" "@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39": - version "2.53.39" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.39.tgz#15ff93392c339abd39d6d3a04e715faa9a263cf3" + version "2.53.42" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz#74cb77fb6052edaff2a8984ddafd88d419f25cac" abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" @@ -37,7 +37,7 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4, acorn@^4.0.4: +acorn@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" @@ -45,7 +45,7 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.11, acorn@^4.0.3: +acorn@^4.0.11, acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" @@ -72,9 +72,9 @@ 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.11.2, ajv@^4.7.0: - version "4.11.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" +ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1: + version "4.11.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -87,10 +87,6 @@ align-text@^0.1.1, align-text@^0.1.3: longest "^1.0.1" repeat-string "^1.5.2" -almost-equal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd" - 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" @@ -215,13 +211,6 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" -array-index@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-index/-/array-index-1.0.0.tgz#ec56a749ee103e4e08c790b9c353df16055b97f9" - dependencies: - debug "^2.2.0" - es6-symbol "^3.0.2" - array-slice@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" @@ -271,14 +260,14 @@ 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-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" @@ -321,16 +310,18 @@ async@^0.9.0, async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.1, async@^2.1.2, async@^2.1.5, async@~2.1.4: +async@^2.0.1, async@^2.1.2, async@^2.1.5: + version "2.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.2.0.tgz#c324eba010a237e4fbd55a12dee86367d5c0ef32" + dependencies: + lodash "^4.14.0" + +async@~2.1.4: version "2.1.5" resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" dependencies: lodash "^4.14.0" -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -347,8 +338,8 @@ autoprefixer@^6.3.1, autoprefixer@^6.7.7: postcss-value-parser "^3.2.3" aws-sdk@^2.1.4, aws-sdk@^2.2.4, aws-sdk@^2.6.12: - version "2.10.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.10.0.tgz#5acb2a213147c503915dbd3d0aa324a136fed25a" + version "2.32.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.32.0.tgz#9fe278b2ec1b12fddd1afeb74439581cdc2e5990" dependencies: buffer "4.9.1" crypto-browserify "1.0.9" @@ -401,14 +392,13 @@ babel-core@^6.24.0: source-map "^0.5.0" babel-eslint@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2" + version "7.2.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.1.tgz#079422eb73ba811e3ca0865ce87af29327f8c52f" dependencies: - babel-code-frame "^6.16.0" - babel-traverse "^6.15.0" - babel-types "^6.15.0" - babylon "^6.13.0" - lodash.pickby "^4.6.0" + babel-code-frame "^6.22.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.16.1" babel-generator@^6.18.0, babel-generator@^6.24.0: version "6.24.0" @@ -457,13 +447,13 @@ babel-helper-call-delegate@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helper-define-map@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" +babel-helper-define-map@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.23.0.tgz#1444f960c9691d69a2ced6a205315f8fd00804e7" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" lodash "^4.2.0" babel-helper-explode-assignable-expression@^6.22.0: @@ -507,12 +497,12 @@ babel-helper-hoist-variables@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-helper-optimise-call-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" +babel-helper-optimise-call-expression@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.23.0.tgz#f3ee7eed355b4282138b33d02b78369e470622f5" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.23.0" babel-helper-regex@^6.22.0: version "6.22.0" @@ -532,16 +522,16 @@ babel-helper-remap-async-to-generator@^6.22.0: babel-traverse "^6.22.0" babel-types "^6.22.0" -babel-helper-replace-supers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" +babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" dependencies: - babel-helper-optimise-call-expression "^6.22.0" - babel-messages "^6.22.0" + babel-helper-optimise-call-expression "^6.23.0" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babel-helpers@^6.23.0: version "6.23.0" @@ -551,15 +541,15 @@ babel-helpers@^6.23.0: babel-template "^6.23.0" babel-loader@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.0.tgz#e98c239662a22533b9e7a49594ef216d7635ea28" + version "6.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" dependencies: find-cache-dir "^0.1.1" loader-utils "^0.2.16" mkdirp "^0.5.1" object-assign "^4.0.1" -babel-messages@^6.22.0, babel-messages@^6.23.0: +babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: @@ -698,28 +688,28 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz#e48895cf0b375be148cd7c8879b422707a053b51" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" lodash "^4.2.0" babel-plugin-transform-es2015-classes@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.23.0.tgz#49b53f326202a2fd1b3bbaa5e2edd8a4f78643c1" dependencies: - babel-helper-define-map "^6.22.0" - babel-helper-function-name "^6.22.0" - babel-helper-optimise-call-expression "^6.22.0" - babel-helper-replace-supers "^6.22.0" - babel-messages "^6.22.0" + babel-helper-define-map "^6.23.0" + babel-helper-function-name "^6.23.0" + babel-helper-optimise-call-expression "^6.23.0" + babel-helper-replace-supers "^6.23.0" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.22.0" @@ -729,8 +719,8 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0: babel-template "^6.22.0" babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" + 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" @@ -742,8 +732,8 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-types "^6.22.0" babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" + 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" @@ -779,12 +769,12 @@ babel-plugin-transform-es2015-modules-commonjs@^6.24.0: babel-types "^6.23.0" babel-plugin-transform-es2015-modules-systemjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz#ae3469227ffac39b0310d90fec73bfdc4f6317b0" dependencies: babel-helper-hoist-variables "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.23.0" babel-plugin-transform-es2015-modules-umd@^6.24.0: version "6.24.0" @@ -802,15 +792,15 @@ babel-plugin-transform-es2015-object-super@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-parameters@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b" dependencies: babel-helper-call-delegate "^6.22.0" babel-helper-get-function-arity "^6.22.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.23.0" + babel-traverse "^6.23.0" + babel-types "^6.23.0" babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.22.0" @@ -840,8 +830,8 @@ babel-plugin-transform-es2015-template-literals@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" + 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" @@ -883,8 +873,8 @@ babel-plugin-transform-function-bind@^6.22.0: babel-runtime "^6.22.0" babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc" + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.22.0" @@ -952,14 +942,6 @@ babel-plugin-transform-strict-mode@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.22.0" -babel-polyfill@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" - dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - babel-preset-es2015@^6.24.0: version "6.24.0" resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.0.tgz#c162d68b1932696e036cd3110dc1ccd303d2673a" @@ -1070,7 +1052,7 @@ babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0, babel-te babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: +babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: version "6.23.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" dependencies: @@ -1084,7 +1066,7 @@ babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-tr invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" dependencies: @@ -1093,13 +1075,9 @@ babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22 lodash "^4.2.0" to-fast-properties "^1.0.1" -babel@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" - -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: + version "6.16.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" backo2@1.0.2: version "1.0.2" @@ -1176,25 +1154,25 @@ blocking-proxy@0.0.5: minimist "^1.2.0" bluebird@^3.3.0: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" body-parser@^1.16.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.16.1.tgz#51540d045adfa7a0c6995a014bb6b1ed9b802329" + version "1.17.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" dependencies: bytes "2.4.0" content-type "~1.0.2" debug "2.6.1" depd "~1.1.0" - http-errors "~1.5.1" + http-errors "~1.6.1" iconv-lite "0.4.15" on-finished "~2.3.0" - qs "6.2.1" + qs "6.4.0" raw-body "~2.2.0" type-is "~1.6.14" @@ -1275,8 +1253,8 @@ browserify-rsa@^4.0.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" + version "4.0.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.3.tgz#b41d5330ba52d5c67855773e273dd3cf14a7e497" dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -1293,11 +1271,11 @@ browserify-zlib@^0.1.4: pako "~0.2.0" browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.6.tgz#af98589ce6e7ab09618d29451faacb81220bd3ba" + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" dependencies: - caniuse-db "^1.0.30000631" - electron-to-chromium "^1.2.5" + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" buffer-equal-constant-time@1.0.1: version "1.0.1" @@ -1340,6 +1318,10 @@ builtins@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/builtins/-/builtins-0.0.7.tgz#355219cd6cf18dbe7c01cc7fd2dce765cfdc549a" +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" @@ -1401,9 +1383,9 @@ caniuse-api@^1.5.2: lodash.memoize "^4.1.0" lodash.uniq "^4.3.0" -caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000631, caniuse-db@^1.0.30000634: - version "1.0.30000635" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000635.tgz#ea159dfa062e00f25f97af3791baef93f17904a1" +caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000641" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000641.tgz#4810fc75fbb3f5b3bd75c2d6a94d894a7c709873" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1420,6 +1402,10 @@ 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" + caw@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/caw/-/caw-1.2.0.tgz#ffb226fe7efc547288dc62ee3e97073c212d1034" @@ -1498,14 +1484,14 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" clap@^1.0.9: - version "1.1.2" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.2.tgz#316545bf22229225a2cecaa6824cd2f56a9709ed" + version "1.1.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" dependencies: chalk "^1.1.3" clean-css@4.0.x: - version "4.0.5" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.5.tgz#6a48c30dad03ebe425d209fc282baa53d36c92ca" + version "4.0.10" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.10.tgz#6be448d6ba8c767654ebe11f158b97a887cb713f" dependencies: source-map "0.5.x" @@ -1607,15 +1593,8 @@ color-convert@^1.3.0: color-name "^1.1.1" color-name@^1.0.0, color-name@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" - -color-space@^1.14.3: - version "1.14.7" - resolved "https://registry.yarnpkg.com/color-space/-/color-space-1.14.7.tgz#b7f5a31779427bb25f9927a69410d80c2eaaa71b" - dependencies: - husl "^5.0.0" - mumath "^3.0.0" + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" color-string@^0.3.0: version "0.3.0" @@ -1774,8 +1753,8 @@ content-type@~1.0.2: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" + version "1.4.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" cookie-signature@1.0.6: version "1.0.6" @@ -1789,10 +1768,6 @@ cookiejar@^2.0.6: version "2.1.0" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898" -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - core-js@^2.2.0, core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -1973,8 +1948,8 @@ cssesc@^0.1.0: postcss-zindex "^2.0.1" csso@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.1.tgz#4f8d91a156f2f1c2aebb40b8fb1b5eb83d94d3b9" + 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" @@ -1989,15 +1964,15 @@ custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" -d@^0.1.1, d@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" dependencies: - es5-ext "~0.10.2" + es5-ext "^0.10.9" damerau-levenshtein@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.3.tgz#ae4f4ce0b62acae10ff63a01bb08f652f5213af2" + version "1.0.4" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" dashdash@^1.12.0: version "1.14.1" @@ -2024,13 +1999,13 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" +debug@2, debug@2.6.3, debug@^2.1.1, debug@^2.2.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: ms "0.7.2" -debug@2.2.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: @@ -2042,9 +2017,9 @@ debug@2.3.3: dependencies: ms "0.7.2" -debug@^2.1.1, debug@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" +debug@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: ms "0.7.2" @@ -2218,6 +2193,13 @@ doctrine@1.5.0, doctrine@^1.2.2: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + dom-serialize@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" @@ -2355,9 +2337,9 @@ ejs@^2.5.5, ejs@^2.5.6: version "2.5.6" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" -electron-to-chromium@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.7.tgz#4f748061407e478c76256d04496972b71f647407" +electron-to-chromium@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.8.tgz#22c2e6200d350da27d6050db7e3f6f85d18cf4ed" elliptic@^6.0.0: version "6.4.0" @@ -2372,8 +2354,8 @@ elliptic@^6.0.0: minimalistic-crypto-utils "^1.0.0" emoji-regex@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.0.tgz#d14ef743a7dfa6eaf436882bd1920a4aed84dd94" + version "6.4.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.4.1.tgz#77486fe9cd45421d260a6238b88d721e2fad2050" emojis-list@^2.0.0: version "2.1.0" @@ -2383,12 +2365,6 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" -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.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" @@ -2454,8 +2430,8 @@ errno@^0.1.1, errno@^0.1.3: prr "~0.0.0" error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" @@ -2494,65 +2470,61 @@ es5-ext@0.8.x: version "0.8.2" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" -es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: - version "0.10.12" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" +es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.15" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" dependencies: es6-iterator "2" es6-symbol "~3.1" -es6-iterator@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" +es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" dependencies: - d "^0.1.1" - es5-ext "^0.10.7" - es6-symbol "3" + d "1" + es5-ext "^0.10.14" + es6-symbol "^3.1" es6-map@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-set "~0.1.3" - es6-symbol "~3.1.0" - event-emitter "~0.3.4" - -es6-promise@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0" + 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@~4.0.3: version "4.0.5" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" -es6-set@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" +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 "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-symbol "3" - event-emitter "~0.3.4" + 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, es6-symbol@^3.0.2, es6-symbol@~3.1, es6-symbol@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" +es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: - d "~0.1.1" - es5-ext "~0.10.11" + d "1" + es5-ext "~0.10.14" es6-weak-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" dependencies: - d "^0.1.1" - es5-ext "^0.10.8" - es6-iterator "2" - es6-symbol "3" + 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" @@ -2583,8 +2555,8 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-airbnb-base@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.0.tgz#dc9b3ec70b8c74dcbe6d6257c9da3992c39ca2ca" + version "11.1.2" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.2.tgz#259209a7678bf693e31cbe8f953f206b6aa7ccc3" eslint-config-airbnb@^14.0.0: version "14.1.0" @@ -2638,8 +2610,8 @@ eslint-plugin-jsx-a11y@^4.0.0: object-assign "^4.0.1" eslint-plugin-react@^6.10.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.0.tgz#9c48b48d101554b5355413e7c64238abde6ef1ef" + version "6.10.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" dependencies: array.prototype.find "^2.0.1" doctrine "^1.2.2" @@ -2648,16 +2620,17 @@ eslint-plugin-react@^6.10.0: object.assign "^4.0.4" eslint@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.17.1.tgz#b80ae12d9c406d858406fccda627afce33ea10ea" + version "3.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" - concat-stream "^1.4.6" + concat-stream "^1.5.2" debug "^2.1.1" - doctrine "^1.2.2" + 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" @@ -2701,6 +2674,12 @@ esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +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.1.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" @@ -2712,7 +2691,7 @@ estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.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" @@ -2728,12 +2707,12 @@ etag@~1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" -event-emitter@~0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" +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 "~0.1.1" - es5-ext "~0.10.7" + d "1" + es5-ext "~0.10.14" event-stream@3.3.4: version "3.3.4" @@ -2897,18 +2876,6 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" -fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: - version "0.8.9" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.9.tgz#180247fbd347dcc9004517b904f865400a0c8f14" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" @@ -2969,7 +2936,7 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@1.0.0, finalhandler@~1.0.0: +finalhandler@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755" dependencies: @@ -2981,6 +2948,18 @@ finalhandler@1.0.0, finalhandler@~1.0.0: statuses "~1.3.1" unpipe "~1.0.0" +finalhandler@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" + dependencies: + debug "2.6.3" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.1" + statuses "~1.3.1" + unpipe "~1.0.0" + find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" @@ -3013,15 +2992,19 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -for-in@^0.1.3, for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" +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.3, for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: - for-in "^0.1.5" + for-in "^1.0.1" foreach@^2.0.5: version "2.0.5" @@ -3060,8 +3043,8 @@ fresh@0.5.0: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" from@~0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" front-matter@^2.1.1: version "2.1.2" @@ -3076,8 +3059,8 @@ fs-access@^1.0.0: null-check "^1.0.0" fs-extra@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.0.tgz#122ac03cf15a84dd89c7a5b4edb42b1b46265dbe" + version "2.1.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -3091,16 +3074,16 @@ fs-extra@~1.0.0: klaw "^1.0.0" fs-vacuum@~1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.9.tgz#4f90193ab8ea02890995bcd4e804659a5d366b2d" + version "1.2.10" + resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" dependencies: graceful-fs "^4.1.2" path-is-inside "^1.0.1" rimraf "^2.5.2" fs-write-stream-atomic@~1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.8.tgz#e49aaddf288f87d46ff9e882f216a13abc40778b" + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -3112,13 +3095,13 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.0.17" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" + version "1.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.29" -fstream-ignore@^1.0.0, fstream-ignore@~1.0.5: +fstream-ignore@^1.0.0, fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: @@ -3133,9 +3116,9 @@ fstream-npm@~1.1.1: fstream-ignore "^1.0.0" inherits "2" -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: + 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" @@ -3260,16 +3243,6 @@ glob@^5.0.15, glob@^5.0.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^6.0.0: - 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.0.6, glob@^7.1.1, glob@~7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" @@ -3300,8 +3273,8 @@ global@^4.3.0: process "~0.5.1" globals@^9.0.0, globals@^9.14.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" globby@^5.0.0: version "5.0.0" @@ -3396,8 +3369,8 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" gtoken@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.1.tgz#90153a547c2fc1cd24a4d3d2ab3b5aba0a26897a" + version "1.2.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.2.tgz#172776a1a9d96ac09fc22a00f5be83cee6de8820" dependencies: google-p12-pem "^0.1.0" jws "^3.0.0" @@ -3472,6 +3445,10 @@ handlebars@^4.0.1: optionalDependencies: uglify-js "^2.6" +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" @@ -3481,6 +3458,13 @@ har-validator@~2.0.6: 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" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -3555,15 +3539,6 @@ he@^0.5.0: version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" -history@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/history/-/history-3.2.1.tgz#71c7497f4e6090363d19a6713bb52a1bfcdd99aa" - dependencies: - invariant "^2.2.1" - loose-envify "^1.2.0" - query-string "^4.2.2" - warning "^3.0.0" - hmac-drbg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5" @@ -3576,10 +3551,6 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoist-non-react-statics@^1.0.3, 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" - 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" @@ -3600,8 +3571,8 @@ html-entities@^1.2.0: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" html-minifier@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.1.tgz#0bf3c54d7f116d500b78c51fc4246039922dc250" + version "3.4.2" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.2.tgz#31896baaf735c1d95f7a0b7291f9dc36c0720752" dependencies: camel-case "3.0.x" clean-css "4.0.x" @@ -3616,14 +3587,6 @@ html-truncate@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.2.tgz#db2e331dcf1cba0bd432a507d16e988609f2575f" -http-errors@~1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" - dependencies: - inherits "2.0.3" - setprototypeof "1.0.2" - statuses ">= 1.3.1 < 2" - http-errors@~1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" @@ -3667,11 +3630,7 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -husl@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/husl/-/husl-5.0.3.tgz#ee272aaff1bebe40df3588ed007b70de7e679788" - -iconv-lite@0.4.15, iconv-lite@~0.4.13: +iconv-lite@0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" @@ -3688,8 +3647,8 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" ignore@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.2.tgz#1c51e1ef53bab6ddc15db4d9ac4ec139eceb3410" + version "3.2.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.6.tgz#26e8da0644be0bb4cb39516f6c79f0e0f4ffe48c" image-size@~0.5.0: version "0.5.1" @@ -3744,17 +3703,17 @@ ini@^1.3.4, ini@~1.3.0, ini@~1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" init-package-json@~1.9.4: - version "1.9.4" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.4.tgz#b4053d0b40f0cf842a41966937cb3dc0f534e856" + version "1.9.5" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.5.tgz#7d4d64a264dc76c1f1f557cbbe824978bf10cd09" dependencies: - glob "^6.0.0" + glob "^7.1.1" npm-package-arg "^4.0.0" promzard "^0.3.0" read "~1.0.1" read-package-json "1 || 2" semver "2.x || 3.x || 4 || 5" validate-npm-package-license "^3.0.1" - validate-npm-package-name "^2.0.1" + validate-npm-package-name "^3.0.0" inquirer@^0.12.0: version "0.12.0" @@ -3778,7 +3737,7 @@ interpret@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: +invariant@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -3788,9 +3747,9 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ipaddr.js@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" +ipaddr.js@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" is-absolute-url@^2.0.0: version "2.1.0" @@ -3813,8 +3772,8 @@ is-binary-path@^1.0.0: binary-extensions "^1.0.0" is-buffer@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" is-builtin-module@^1.0.0: version "1.0.0" @@ -3889,8 +3848,8 @@ is-gzip@^1.0.0: resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" + version "2.16.0" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" @@ -3962,8 +3921,10 @@ is-redirect@^1.0.0: resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" is-regex@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" is-relative@^0.1.0: version "0.1.3" @@ -4029,9 +3990,9 @@ isbinaryfile@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" isobject@^1.0.0: version "1.0.2" @@ -4043,13 +4004,6 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4063,20 +4017,20 @@ istanbul-instrumenter-loader@^2.0.0: loader-utils "^0.2.16" object-assign "^4.1.0" -istanbul-lib-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" +istanbul-lib-coverage@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz#87a0c015b6910651cb3b184814dfb339337e25e1" istanbul-lib-instrument@^1.1.3: - version "1.4.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e" + version "1.7.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.0.tgz#b8e0dc25709bb44e17336ab47b7bb5c97c23f659" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.13.0" - istanbul-lib-coverage "^1.0.0" + istanbul-lib-coverage "^1.0.2" semver "^5.3.0" istanbul@0.4.5, istanbul@^0.4.0: @@ -4155,8 +4109,8 @@ js-yaml@~3.7.0: esprima "^2.6.0" jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsesc@^1.3.0: version "1.3.0" @@ -4221,9 +4175,10 @@ jsonpointer@^4.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" dependencies: + assert-plus "1.0.0" extsprintf "1.0.2" json-schema "0.2.3" verror "1.3.6" @@ -4372,10 +4327,10 @@ klaw@^1.0.0: graceful-fs "^4.1.9" latest-version@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" dependencies: - package-json "^3.0.0" + package-json "^4.0.0" lazy-cache@^0.2.3: version "0.2.7" @@ -4447,8 +4402,8 @@ loader-runner@^2.3.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" loader-utils@^0.2.16, loader-utils@^0.2.5: - version "0.2.16" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" + 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" @@ -4456,8 +4411,8 @@ loader-utils@^0.2.16, loader-utils@^0.2.5: object-assign "^4.0.1" loader-utils@^1.0.1, loader-utils@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.0.2.tgz#a9f923c865a974623391a8602d031137fad74830" + 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" @@ -4467,10 +4422,6 @@ lockfile@~1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" -lodash-es@^4.2.0, lodash-es@^4.2.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" - lodash._arraycopy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" @@ -4711,10 +4662,6 @@ lodash.padstart@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" -lodash.pickby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" - lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -4755,14 +4702,14 @@ lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@4.17.4, lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + lodash@~2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" @@ -4797,7 +4744,7 @@ 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.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -4811,8 +4758,8 @@ loud-rejection@^1.0.0: signal-exit "^3.0.0" lower-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb" + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" lowercase-keys@^1.0.0: version "1.0.0" @@ -4920,15 +4867,15 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.26.0: - version "1.26.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: - version "2.1.14" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: - mime-db "~1.26.0" + mime-db "~1.27.0" mime@1.3.4, mime@1.3.x, mime@^1.2.11, mime@^1.3.4: version "1.3.4" @@ -5005,12 +4952,6 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" -mumath@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.3.tgz#262e10fcc10699f7050dc707575d39db5c903181" - dependencies: - almost-equal "^1.1.0" - mute-stream@0.0.5, mute-stream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" @@ -5039,20 +4980,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - node-forge@^0.6.46: version "0.6.49" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.49.tgz#f1ee95d5d74623938fe19d698aa5a26d54d2f60f" -node-gyp@^3.3.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.5.0.tgz#a8fe5e611d079ec16348a3eb960e78e11c85274a" +node-gyp@^3.3.1, node-gyp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6" dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -5064,26 +4998,7 @@ node-gyp@^3.3.1: osenv "0" request "2" rimraf "2" - semver "2.x || 3.x || 4 || 5" - tar "^2.0.0" - which "1" - -node-gyp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.4.0.tgz#dda558393b3ecbbe24c9e6b8703c71194c63fa36" - 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" - osenv "0" - path-array "^1.0.0" - request "2" - rimraf "2" - semver "2.x || 3.x || 4 || 5" + semver "~5.3.0" tar "^2.0.0" which "1" @@ -5116,22 +5031,22 @@ node-libs-browser@^2.0.0: vm-browserify "0.0.4" node-pre-gyp@^0.6.29: - version "0.6.33" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9" + version "0.6.34" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.1" - rc "~1.1.6" - request "^2.79.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" + 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-sass@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.0.tgz#532e37bad0ce587348c831535dbc98ea4289508b" + version "4.5.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.1.tgz#e8e119fe3c8213ad7e56ca618dd231e9e8b30f5b" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5148,7 +5063,7 @@ node-sass@^4.5.0: nan "^2.3.2" node-gyp "^3.3.1" npmlog "^4.0.0" - request "^2.61.0" + request "^2.79.0" sass-graph "^2.1.1" stdout-stream "^1.4.0" @@ -5157,12 +5072,12 @@ node-status-codes@^1.0.0: resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" node-uuid@~1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" + version "1.4.8" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" node-watch@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.1.tgz#f10553dcc9fbbac2d669fef4aa347bd7b0316755" + version "0.5.2" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.2.tgz#948d72ec5fe74b488332cd1087fa180e9c24825b" "nopt@2 || 3", nopt@3.x, nopt@~3.0.6: version "3.0.6" @@ -5170,6 +5085,13 @@ node-watch@^0.5.1: 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" + nopt@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.1.2.tgz#6cccd977b80132a07731d6e8ce58c2c8303cf9af" @@ -5181,8 +5103,8 @@ normalize-git-url@~3.0.2: resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + version "2.3.6" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -5198,8 +5120,8 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" normalize-url@^1.0.0, normalize-url@^1.4.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.0.tgz#c2bb50035edee62cd81edb2d45da68dc25e3423e" + 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" @@ -5271,8 +5193,8 @@ npm-user-validate@~0.1.5: resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b" npm@^2.15.10: - version "2.15.11" - resolved "https://registry.yarnpkg.com/npm/-/npm-2.15.11.tgz#350588fba9cd8d384cf9a6e8dc0fef0f94992b7c" + version "2.15.12" + resolved "https://registry.yarnpkg.com/npm/-/npm-2.15.12.tgz#df7c3ed5a277c3f9d4b5d819b05311d10a200ae6" dependencies: abbrev "~1.0.9" ansi "~0.3.1" @@ -5306,7 +5228,7 @@ npm@^2.15.10: lru-cache "~4.0.1" minimatch "~3.0.3" mkdirp "~0.5.1" - node-gyp "~3.4.0" + node-gyp "~3.6.0" nopt "~3.0.6" normalize-git-url "~3.0.2" normalize-package-data "~2.3.5" @@ -5344,15 +5266,7 @@ npm@^2.15.10: wrappy "~1.0.2" write-file-atomic "~1.1.4" -"npmlog@0 || 1 || 2 || 3", "npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: @@ -5361,6 +5275,14 @@ npm@^2.15.10: gauge "~2.7.1" set-blocking "~2.0.0" +"npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + null-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" @@ -5436,7 +5358,7 @@ once@1.x, once@^1.3.0, once@^1.3.3, once@~1.4.0: dependencies: wrappy "1" -once@~1.3.0, once@~1.3.3: +once@~1.3.0: version "1.3.3" resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" dependencies: @@ -5447,8 +5369,8 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" opener@^1.4.2, opener@~1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.2.tgz#b32582080042af8680c389a499175b4c54fff523" + version "1.4.3" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" optimist@^0.6.1, optimist@~0.6.0: version "0.6.1" @@ -5497,16 +5419,16 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, 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.3: +osenv@0, osenv@^0.1.4, osenv@~0.1.3: 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" -package-json@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" +package-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.0.tgz#f3c9dc8738f5b59304d54d2cfb3f91d08fdd7998" dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -5518,14 +5440,14 @@ pako@~0.2.0: resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" param-case@2.1.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a" + 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.0.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23" + 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" @@ -5574,12 +5496,6 @@ parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" -path-array@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271" - dependencies: - array-index "^1.0.0" - path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" @@ -5638,6 +5554,10 @@ 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" + phantomjs-prebuilt@^2.1.14, phantomjs-prebuilt@^2.1.7: version "2.1.14" resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" @@ -5652,10 +5572,6 @@ phantomjs-prebuilt@^2.1.14, phantomjs-prebuilt@^2.1.7: request-progress "~2.0.1" which "~1.2.10" -phoenix-socket@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/phoenix-socket/-/phoenix-socket-1.1.3.tgz#28f3f1e84cd4054b5e03b14e775ca7fc12b30e24" - pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -5716,8 +5632,8 @@ postcss-discard-comments@^2.0.4: postcss "^5.0.14" postcss-discard-duplicates@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.0.2.tgz#02be520e91571ffb10738766a981d5770989bb32" + 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" @@ -5794,8 +5710,8 @@ postcss-merge-longhand@^2.0.1: postcss "^5.0.4" postcss-merge-rules@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.1.tgz#5e5640020ce43cddd343c73bba91c9a358d1fe0f" + 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" @@ -5917,8 +5833,8 @@ postcss-scss@^0.4.1: postcss "^5.2.13" postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.2.tgz#3d70f5adda130da51c7c0c2fc023f56b1374fe08" + 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" @@ -6056,11 +5972,11 @@ protractor@^5.1.1: webdriver-manager "^12.0.1" proxy-addr@~1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" + version "1.1.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" dependencies: forwarded "~0.1.0" - ipaddr.js "1.2.0" + ipaddr.js "1.3.0" prr@~0.0.0: version "0.0.0" @@ -6116,21 +6032,21 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@6.2.1, qs@~6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" - -qs@6.4.0: +qs@6.4.0, qs@^6.1.0, qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" -qs@^6.1.0, qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +qs@~6.2.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" -query-string@^4.1.0, query-string@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.1.tgz#54baada6713eafc92be75c47a731f2ebd09cd11d" +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +query-string@^4.1.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -6166,28 +6082,20 @@ raw-body@~2.2.0: iconv-lite "0.4.15" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" +rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" - strip-json-comments "~1.0.4" - -react-addons-test-utils@^15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" - dependencies: - fbjs "^0.8.4" - object-assign "^4.1.0" + strip-json-comments "~2.0.1" -react-base16-styling@^0.4.1: - version "0.4.7" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.4.7.tgz#a3eaf884a0adfc1896455f6302ff75de72e51a2e" +react-base16-styling@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.5.3.tgz#3858f24e9c4dd8cbd3f702f3f74d581ca2917269" dependencies: base16 "^1.0.0" - color-space "^1.14.3" lodash.curry "^4.0.1" lodash.flow "^3.3.0" pure-color "^1.2.0" @@ -6203,14 +6111,6 @@ react-dock@^0.2.1: lodash.debounce "^3.1.1" object-assign "^4.0.1" -react-dom@15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f" - dependencies: - fbjs "^0.8.1" - loose-envify "^1.1.0" - object-assign "^4.1.0" - react-hot-loader@^3.0.0-beta.6: version "3.0.0-beta.6" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4" @@ -6223,18 +6123,11 @@ react-hot-loader@^3.0.0-beta.6: source-map "^0.4.4" react-json-tree@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.1.tgz#7f9eab36abf8adf329c7e5ad4091f5987bcbd5de" + version "0.10.7" + resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.7.tgz#1f6cd1b1b7dc01f9745b7a30ffabe2c880d04d4c" dependencies: babel-runtime "^6.6.1" - react-base16-styling "^0.4.1" - react-pure-render "^1.0.2" - -react-proxy-loader@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/react-proxy-loader/-/react-proxy-loader-0.3.5.tgz#eaeebc3950f9efad36b8bfc47cf58a9a8ca3432d" - dependencies: - loader-utils "^1.0.2" + react-base16-styling "^0.5.1" react-proxy@^3.0.0-alpha.0: version "3.0.0-alpha.1" @@ -6246,40 +6139,6 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" -react-redux@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.3.tgz#86c3b68d56e74294a42e2a740ab66117ef6c019f" - dependencies: - hoist-non-react-statics "^1.0.3" - invariant "^2.0.0" - lodash "^4.2.0" - lodash-es "^4.2.0" - loose-envify "^1.1.0" - -react-router@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.2.tgz#5a19156678810e01d81901f9c0fef63284b8a514" - dependencies: - history "^3.0.0" - hoist-non-react-statics "^1.2.0" - invariant "^2.2.1" - loose-envify "^1.2.0" - 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@15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef" - dependencies: - fbjs "^0.8.4" - loose-envify "^1.1.0" - object-assign "^4.1.0" - read-all-stream@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" @@ -6307,10 +6166,10 @@ read-installed@~4.0.3: graceful-fs "^4.1.2" "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.4.tgz#61ed1b2256ea438d8008895090be84b8e799c853" + version "2.0.5" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.5.tgz#f93a64e641529df68a08c64de46389e8a3f88845" dependencies: - glob "^6.0.0" + glob "^7.1.1" json-parse-helpfulerror "^1.0.2" normalize-package-data "^2.0.0" optionalDependencies: @@ -6337,9 +6196,9 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" +"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: + version "2.2.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -6378,7 +6237,7 @@ readable-stream@~2.0.0, readable-stream@~2.0.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@~2.1.4, readable-stream@~2.1.5: +readable-stream@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" dependencies: @@ -6429,7 +6288,7 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redbox-react@^1.2.5, redbox-react@^1.3.4: +redbox-react@^1.2.5: version "1.3.4" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.4.tgz#3d882bb62cc7c8f6256279d12f05c6a5a96d24c6" dependencies: @@ -6501,22 +6360,13 @@ redux-devtools@^3.3.2: lodash "^4.2.0" redux-devtools-instrument "^1.0.1" -redux@3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.2" - regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" + version "0.10.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" regenerator-transform@0.9.8: version "0.9.8" @@ -6603,7 +6453,7 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@2, request@2.79.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: +request@2, request@2.79.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -6628,6 +6478,33 @@ request@2, request@2.79.0, request@^2.61.0, request@^2.72.0, request@^2.74.0, re tunnel-agent "~0.4.1" uuid "^3.0.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.74.0: version "2.74.0" resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" @@ -6708,13 +6585,13 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" -rimraf@~2.5.1, rimraf@~2.5.4: +rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -6759,8 +6636,8 @@ s3-diff@^1.1.0: run-auto "^1.1.3" s3-website@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-3.0.0.tgz#500b8af1c6f9158c4d93695ea181f9f4b44018a6" + version "3.0.1" + resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-3.0.1.tgz#bbd3dd66ffcfdb83f0967183d1a9a142c7a05bf0" dependencies: aws-sdk "^2.6.12" cloudfront-tls "^1.0.0" @@ -6904,14 +6781,10 @@ set-immediate-shim@^1.0.0, 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: +setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" -setprototypeof@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" - setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" @@ -6939,8 +6812,8 @@ shallow-clone@^0.1.2: mixin-object "^2.0.1" shelljs@^0.7.5: - version "0.7.6" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" + version "0.7.7" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -7037,11 +6910,15 @@ source-list-map@^0.1.7, 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-list-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4" + source-map-support@^0.4.2, source-map-support@~0.4.0: - version "0.4.11" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" + version "0.4.14" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" dependencies: - source-map "^0.5.3" + source-map "^0.5.6" source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" @@ -7094,8 +6971,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" + version "1.11.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7243,10 +7120,6 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - 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" @@ -7262,8 +7135,8 @@ strip-url-auth@^1.0.0: resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" style-loader@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.14.0.tgz#e44fe69ef891513bb22fdd10c3167aaa99711164" + version "0.14.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.14.1.tgz#27b9b6c9822adf8c4748e02a1efae229405d79a5" dependencies: loader-utils "^1.0.2" @@ -7280,8 +7153,8 @@ sum-up@^1.0.1: chalk "^1.0.0" superagent@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.5.0.tgz#56872b8e1ee6de994035ada2e53266899af95a6d" + version "3.5.2" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.5.2.tgz#3361a3971567504c351063abeaae0faa23dbf3f8" dependencies: component-emitter "^1.2.0" cookiejar "^2.0.6" @@ -7335,18 +7208,18 @@ tapable@^0.2.5, tapable@~0.2.5: version "0.2.6" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 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" + 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-stream@^1.1.1: version "1.5.2" @@ -7357,7 +7230,7 @@ tar-stream@^1.1.1: readable-stream "^2.0.0" xtend "^4.0.0" -tar@^2.0.0, tar@~2.2.1: +tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -7488,6 +7361,12 @@ tunnel-agent@^0.4.0, tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -7509,24 +7388,20 @@ typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" - -uglify-js@2.8.x, uglify-js@^2.6, uglify-js@^2.7.5: - version "2.8.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.1.tgz#d3ef6ea2de6c2cae6903a83cc0446be2f1e2d338" +uglify-js@2.8.x, uglify-js@^2.6, uglify-js@^2.8.5: + version "2.8.16" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.16.tgz#d286190b6eefc6fd65eb0ecac6551e0b0e8839a4" dependencies: - async "~0.2.6" source-map "~0.5.1" - uglify-to-browserify "~1.0.0" yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uid-number@0.0.6, uid-number@~0.0.6: +uid-number@0.0.6, uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -7632,8 +7507,8 @@ user-home@^2.0.0: os-homedir "^1.0.0" useragent@^2.1.12: - version "2.1.12" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.12.tgz#aa7da6cdc48bdc37ba86790871a7321d64edbaa2" + version "2.1.13" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" dependencies: lru-cache "2.2.x" tmp "0.0.x" @@ -7660,14 +7535,14 @@ uuid@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" -uuid@3.0.1, uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" @@ -7679,15 +7554,21 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@~3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -validate-npm-package-name@^2.0.1, validate-npm-package-name@~2.2.2: +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + dependencies: + builtins "^1.0.3" + +validate-npm-package-name@~2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-2.2.2.tgz#f65695b22f7324442019a3c7fa39a6e7fd299085" dependencies: builtins "0.0.7" vary@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" + version "1.1.1" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" vendors@^1.0.0: version "1.0.1" @@ -7767,13 +7648,7 @@ ware@^1.2.0: dependencies: wrap-fn "^0.1.0" -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@^1.2.0: +watchpack@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" dependencies: @@ -7795,8 +7670,8 @@ webdriver-js-extender@^1.0.0: selenium-webdriver "^2.53.2" webdriver-manager@^12.0.1: - version "12.0.2" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.2.tgz#9bc541e975b18de8bf7f6ad163b69488169e8914" + version "12.0.4" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.4.tgz#658e431c805bc3a7e6bf74bc819475884e6d4861" dependencies: adm-zip "^0.4.7" chalk "^1.1.1" @@ -7850,16 +7725,23 @@ webpack-hot-middleware@^2.17.1: querystring "^0.2.0" strip-ansi "^3.0.0" -webpack-sources@^0.1.0, webpack-sources@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd" +webpack-sources@^0.1.0: + version "0.1.5" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750" dependencies: source-list-map "~0.1.7" source-map "~0.5.3" +webpack-sources@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + webpack@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.1.tgz#7bb1d72ae2087dd1a4af526afec15eed17dda475" + version "2.3.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.2.tgz#7d521e6f0777a3a58985c69425263fdfe977b458" dependencies: acorn "^4.0.4" acorn-dynamic-import "^2.0.0" @@ -7877,15 +7759,11 @@ webpack@^2.2.1: source-map "^0.5.3" supports-color "^3.1.0" tapable "~0.2.5" - uglify-js "^2.7.5" - watchpack "^1.2.0" - webpack-sources "^0.1.4" + uglify-js "^2.8.5" + watchpack "^1.3.1" + webpack-sources "^0.2.3" yargs "^6.0.0" -whatwg-fetch@>=0.10.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" - whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -7895,10 +7773,10 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" which@1, which@^1.1.1, which@^1.2.1, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: - isexe "^1.1.1" + isexe "^2.0.0" wide-align@^1.1.0: version "1.1.0" @@ -8034,8 +7912,8 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" yallist@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" + 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" diff --git a/package.json b/package.json index d084813..a9f437d 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "hot": "cd ./client && node webpack.hot.js", "live": "cd ./client && node server.js", "build_dev": "cd ./client && node ./build.js", + "build_dev_pack": "cd ./client && node ./build.js --onlyPack", "build": "cd ./client && node ./build.js --release", + "build_pack": "cd ./client && node ./build.js --release --onlyPack", "create": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js create", "release": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js deploy", "lint": "cd ./client && eslint js" diff --git a/yarn.lock b/yarn.lock index cf509e9..f93b959 100644 --- a/yarn.lock +++ b/yarn.lock @@ -135,8 +135,8 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" rimraf@^2.2.8: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" From d3f688fdd0dc9e3d2492a448bea9ef06803663a7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 13:05:19 -0600 Subject: [PATCH 280/452] yarn through all the client apps --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 7947887..2377d5d 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "scripts": { - "postinstall": "node node_modules/phantomjs-prebuilt/install.js && cd ./apps/hello_world && yarn" + "postinstall": "for dir in apps/*; do pushd \"$dir\" || continue; yarn; popd; done" }, "dependencies": { "superagent": "^3.5.0" From ae77e1cc859725ef6adeb26fe33ca84565e1a811 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 14:13:13 -0600 Subject: [PATCH 281/452] Update node version for travis. Adds additional modules to be cached --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index bc26d5b..f7aba5d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,9 @@ dist: trusty cache: directories: + - node_modules - client/node_modules + - client/apps/hello_world/node_modules branches: only: @@ -14,8 +16,8 @@ branches: before_install: - cp .env.example .env - cp client/ci.karma.conf.js client/karma.conf.js - - nvm install 6.9.1 - - nvm use 6.9.1 + - nvm install 7.5.0 + - nvm use 7.5.0 - npm install -g yarn install: From 827e97bd3b7d650b44103843020afc16779e420c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 14:49:37 -0600 Subject: [PATCH 282/452] ignore .coveralls.yml --- .gitignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index e15fdd3..1bc5148 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ secrets.js config/secrets.js s3_website.yml +.coveralls.yml ## Environment normalisation: /.bundle @@ -26,6 +27,3 @@ s3_website.yml node_modules npm-debug.log /build - - - From 446966b78aa95b6ce710ed86c99c84dbcdc764d7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 14:57:46 -0600 Subject: [PATCH 283/452] Logging for travis config --- client/ci.karma.conf.js | 1 + 1 file changed, 1 insertion(+) diff --git a/client/ci.karma.conf.js b/client/ci.karma.conf.js index 359b09f..30f4cd0 100644 --- a/client/ci.karma.conf.js +++ b/client/ci.karma.conf.js @@ -11,5 +11,6 @@ module.exports = (config) => { }, }; testConfig.browsers = ['Chrome_travis_ci']; + console.log(testConfig) config.set(testConfig); }; From a0335c73d9497e2fb29c055b7800f65198d47adb Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 17:19:46 -0600 Subject: [PATCH 284/452] Fixes for tests --- client/ci.karma.conf.js | 1 - client/config/karma.js | 16 ++++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/client/ci.karma.conf.js b/client/ci.karma.conf.js index 30f4cd0..359b09f 100644 --- a/client/ci.karma.conf.js +++ b/client/ci.karma.conf.js @@ -11,6 +11,5 @@ module.exports = (config) => { }, }; testConfig.browsers = ['Chrome_travis_ci']; - console.log(testConfig) config.set(testConfig); }; diff --git a/client/config/karma.js b/client/config/karma.js index 806247b..1903bab 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -6,16 +6,16 @@ const apps = require('../libs/build/apps'); module.exports = () => { - let plugins = []; - let module = {}; - let resolve = {}; + const webpackOptions = apps.buildWebpackOptions('fakeAppName', 'fakeAppPath', { stage: 'test', onlyPack: true }); + const webpackConfig = webpackConfigBuilder(webpackOptions); + const plugins = webpackConfig.plugins; + const module = webpackConfig.module; + const resolve = webpackConfig.resolve; _.each(settings.apps, (appPath, appName) => { - const webpackOptions = apps.buildWebpackOptions(appName, appPath, { stage: 'test', onlyPack: true }); - const webpackConfig = webpackConfigBuilder(webpackOptions); - plugins = _.union(plugins, webpackConfig.plugins); - module = _.merge({}, resolve, webpackConfig.module); - resolve = _.merge({}, resolve, webpackConfig.resolve); + const appWebpackOptions = apps.buildWebpackOptions(appName, appPath, { stage: 'test', onlyPack: true }); + const appWebpackConfig = webpackConfigBuilder(appWebpackOptions); + resolve.modules = _.union(resolve.modules, appWebpackConfig.resolve.modules); }); return { From 29c3006bdfc06693cc55ad10e0069a94eb63fd8a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 17:26:02 -0600 Subject: [PATCH 285/452] Adding all dependencies to the top level --- client/package.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 2377d5d..d3b5dc7 100644 --- a/client/package.json +++ b/client/package.json @@ -3,7 +3,20 @@ "postinstall": "for dir in apps/*; do pushd \"$dir\" || continue; yarn; popd; done" }, "dependencies": { - "superagent": "^3.5.0" + "superagent": "^3.5.0", + "babel": "^6.23.0", + "babel-polyfill": "^6.23.0", + "babel-runtime": "^6.23.0", + "es6-promise": "^4.1.0", + "lodash": "4.17.4", + "react": "15.4.2", + "react-dom": "15.4.2", + "react-proxy-loader": "^0.3.5", + "react-redux": "^5.0.3", + "react-router": "^3.0.2", + "react-tap-event-plugin": "2.0.1", + "redux": "3.6.0", + "uuid": "3.0.1" }, "devDependencies": { "assets-webpack-plugin": "^3.5.1", From edadb48e218ec6192bf87dbfb041b749155c6bb6 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 17:30:04 -0600 Subject: [PATCH 286/452] Adding react test utils --- client/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/client/package.json b/client/package.json index d3b5dc7..183e5e8 100644 --- a/client/package.json +++ b/client/package.json @@ -86,6 +86,7 @@ "protractor": "^5.1.1", "psi": "^3.0.0", "react-hot-loader": "^3.0.0-beta.6", + "react-addons-test-utils": "^15.4.2", "redux-devtools": "^3.3.2", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.2.0", From 9a67503db53e7d62174d0577c029dabb1df5b547 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 17:36:01 -0600 Subject: [PATCH 287/452] Adds install for phantom --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 183e5e8..cfd9512 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "scripts": { - "postinstall": "for dir in apps/*; do pushd \"$dir\" || continue; yarn; popd; done" + "postinstall": "for dir in apps/*; do pushd \"$dir\" || continue; yarn; popd; done && node node_modules/phantomjs-prebuilt/install.js" }, "dependencies": { "superagent": "^3.5.0", From 8fb72271dfa0d8d44c17501fd478fcd82abbe4d0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 19:46:58 -0600 Subject: [PATCH 288/452] Removes pushd and popd --- client/package.json | 17 +-------- client/yarn.lock | 92 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 77 insertions(+), 32 deletions(-) diff --git a/client/package.json b/client/package.json index cfd9512..c369814 100644 --- a/client/package.json +++ b/client/package.json @@ -1,22 +1,9 @@ { "scripts": { - "postinstall": "for dir in apps/*; do pushd \"$dir\" || continue; yarn; popd; done && node node_modules/phantomjs-prebuilt/install.js" + "postinstall": "node node_modules/phantomjs-prebuilt/install.js && for dir in apps/*; do cd \"$dir\" || continue; yarn; cd ..; done" }, "dependencies": { - "superagent": "^3.5.0", - "babel": "^6.23.0", - "babel-polyfill": "^6.23.0", - "babel-runtime": "^6.23.0", - "es6-promise": "^4.1.0", - "lodash": "4.17.4", - "react": "15.4.2", - "react-dom": "15.4.2", - "react-proxy-loader": "^0.3.5", - "react-redux": "^5.0.3", - "react-router": "^3.0.2", - "react-tap-event-plugin": "2.0.1", - "redux": "3.6.0", - "uuid": "3.0.1" + "superagent": "^3.5.0" }, "devDependencies": { "assets-webpack-plugin": "^3.5.1", diff --git a/client/yarn.lock b/client/yarn.lock index 8b158c0..b1df860 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -109,7 +109,7 @@ 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: +ansi-regex@*, ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -338,8 +338,8 @@ autoprefixer@^6.3.1, autoprefixer@^6.7.7: postcss-value-parser "^3.2.3" aws-sdk@^2.1.4, aws-sdk@^2.2.4, aws-sdk@^2.6.12: - version "2.32.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.32.0.tgz#9fe278b2ec1b12fddd1afeb74439581cdc2e5990" + version "2.34.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.34.0.tgz#bf96fb617aa0e1d8728760ca7f00d46d0d9c685c" dependencies: buffer "4.9.1" crypto-browserify "1.0.9" @@ -1253,8 +1253,8 @@ browserify-rsa@^4.0.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.3.tgz#b41d5330ba52d5c67855773e273dd3cf14a7e497" + 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" @@ -1384,8 +1384,8 @@ caniuse-api@^1.5.2: lodash.uniq "^4.3.0" caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000641" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000641.tgz#4810fc75fbb3f5b3bd75c2d6a94d894a7c709873" + version "1.0.30000644" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000644.tgz#9d7eccf1ef1d11cbd6741b9fb390f9923ff42261" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1753,8 +1753,8 @@ content-type@~1.0.2: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3" + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" cookie-signature@1.0.6: version "1.0.6" @@ -1768,6 +1768,10 @@ cookiejar@^2.0.6: version "2.1.0" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898" +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + core-js@^2.2.0, core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -2338,8 +2342,8 @@ ejs@^2.5.5, ejs@^2.5.6: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" electron-to-chromium@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.8.tgz#22c2e6200d350da27d6050db7e3f6f85d18cf4ed" + version "1.3.2" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab" elliptic@^6.0.0: version "6.4.0" @@ -2365,6 +2369,12 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +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.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" @@ -2876,6 +2886,18 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" +fbjs@^0.8.4: + version "0.8.11" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.11.tgz#340b590b8a2278a01ef7467c07a16da9b753db24" + 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" @@ -3630,7 +3652,7 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -iconv-lite@0.4.15: +iconv-lite@0.4.15, iconv-lite@~0.4.13: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" @@ -3661,7 +3683,7 @@ imports-loader@^0.7.1: loader-utils "^1.0.2" source-map "^0.5.6" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4004,6 +4026,13 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4980,6 +5009,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@^1.0.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-forge@^0.6.46: version "0.6.49" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.49.tgz#f1ee95d5d74623938fe19d698aa5a26d54d2f60f" @@ -6091,6 +6127,13 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-addons-test-utils@^15.4.2: + version "15.4.2" + resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" + dependencies: + fbjs "^0.8.4" + object-assign "^4.1.0" + react-base16-styling@^0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.5.3.tgz#3858f24e9c4dd8cbd3f702f3f74d581ca2917269" @@ -6781,7 +6824,7 @@ set-immediate-shim@^1.0.0, 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.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -7388,9 +7431,13 @@ typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +ua-parser-js@^0.7.9: + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + uglify-js@2.8.x, uglify-js@^2.6, uglify-js@^2.8.5: - version "2.8.16" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.16.tgz#d286190b6eefc6fd65eb0ecac6551e0b0e8839a4" + version "2.8.18" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.18.tgz#925d14bae48ab62d1883b41afe6e2261662adb8e" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -7764,6 +7811,10 @@ webpack@^2.2.1: webpack-sources "^0.2.3" yargs "^6.0.0" +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" @@ -7841,13 +7892,20 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@1.1.2, ws@^1.0.1: +ws@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" dependencies: options ">=0.0.5" ultron "1.0.x" +ws@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + wtf-8@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" From 368d11cef98de89a3ff559366ace63a8ec90c8dd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 20:00:02 -0600 Subject: [PATCH 289/452] changes source maps in dev --- client/config/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 21d9e32..a0ab7ff 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -159,7 +159,7 @@ module.exports = function webpackConfig(options) { modules: ['node_modules', `${options.appPath}/node_modules`] }, cache: true, - devtool: production ? 'source-map' : 'cheap-module-source-map', // https://webpack.js.org/configuration/devtool/ + devtool: production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ stats: { colors: true }, plugins, module: { rules }, From 6da1ebfb53935d578f3634e2eeaf2b28f3a2f221 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 28 Mar 2017 20:24:58 -0600 Subject: [PATCH 290/452] Only apply markdown to .md and .markdown files --- client/apps/hello_world/html/about.md | 2 +- client/config/settings.js | 11 ++++++----- client/libs/build/content.js | 11 +++++++---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/client/apps/hello_world/html/about.md b/client/apps/hello_world/html/about.md index 4afb96b..2d28a7e 100644 --- a/client/apps/hello_world/html/about.md +++ b/client/apps/hello_world/html/about.md @@ -11,4 +11,4 @@ tags: --- About Us --------------- -<%= tags %> \ No newline at end of file +<%= metadata.tags %> \ No newline at end of file diff --git a/client/config/settings.js b/client/config/settings.js index 384213d..117310c 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -58,11 +58,12 @@ module.exports = { // Options for building html files htmlOptions: { - truncateSummaryAt : 1000, - buildExtensions : ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) - templateDirs : ['layouts'], - templateData : {}, // Object that will be passed to every page as it is rendered - templateMap : {}, // Used to specify specific templates on a per file basis + truncateSummaryAt: 1000, + buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) + markdownExtensions: ['.md', '.markdown'], // file types to process markdown + templateDirs: ['layouts'], + templateData: {}, // Object that will be passed to every page as it is rendered + templateMap: {}, // Used to specify specific templates on a per file basis rootAppsPath } diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 359661d..efe463c 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -29,7 +29,7 @@ function outFilePath(page, outputPath, fullInputPath, originalInputPath) { // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, options) { +function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, ext, options) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -44,15 +44,17 @@ function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, let html = parsed.body; - // Parse any markdown in the resulting html - html = marked(html); - try { // Allow ejs code in content html = ejs.compile(html, { cache : false, filename : fullPath })(data); + + // Parse any markdown in the resulting html + if (_.includes(options.markdownExtensions, ext)) { + html = marked(html); + } } catch (err) { console.log(`Unable to compile html from ${fullPath}`); console.log(err); @@ -118,6 +120,7 @@ function buildContents( webpackAssets, stage, buildSuffix, + ext, options); page.outputFilePath = file.write( outFilePath(page, outputPath, fullInputPath, originalInputPath), page.html, options); From d50ee95e68186f8cd659efe3d19686ac844f4f65 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 29 Mar 2017 15:46:23 -0600 Subject: [PATCH 291/452] Adds app name to manifest and assets output --- client/config/webpack.config.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index a0ab7ff..4bef2f3 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -91,7 +91,7 @@ module.exports = function webpackConfig(options) { }), new webpack.optimize.AggressiveMergingPlugin(), new ChunkManifestPlugin({ - filename: 'webpack-common-manifest.json', + filename: `${options.appName}-webpack-common-manifest.json`, manfiestVariable: 'webpackBundleManifest' }), new BundleAnalyzerPlugin({ @@ -101,7 +101,8 @@ module.exports = function webpackConfig(options) { // Generate webpack-assets.json to map path to assets generated with hashed names new AssetsPlugin({ path: outputPath, - fullPath: false + fullPath: false, + filename: `${options.appName}-webpack-assets.json` }), extractCSS ]); From ae56be80c3d72a6c781ac339660a22ec27707075 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 29 Mar 2017 22:03:59 -0600 Subject: [PATCH 292/452] Fixes launching multiple hot servers --- client/build.js | 3 ++- client/libs/build/apps.js | 2 +- client/libs/build/index.js | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/client/build.js b/client/build.js index 7abbac4..c7e6d98 100644 --- a/client/build.js +++ b/client/build.js @@ -2,6 +2,7 @@ const argv = require('minimist')(process.argv.slice(2)); const apps = require('./libs/build/apps'); -const stage = argv.release ? 'production' : 'development'; +//const stage = argv.release ? 'production' : 'development'; +const stage = 'production'; apps.buildApps(stage, argv.onlyPack); diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index d6355b1..11a05f3 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -6,7 +6,7 @@ const settings = require('../../config/settings'); const build = require('./index'); const file = require('./file'); -let launchPort = settings.hotPort; +let launchPort = parseInt(settings.hotPort, 10); // ----------------------------------------------------------------------------- // Root of the build directory where apps will be written diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 0e7b3a4..14acc46 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -60,7 +60,7 @@ function build(rootBuildPath, webpackOptions, htmlOptions) { buildWebpackEntries(webpackOptions).then((packResults) => { let webpackAssets = null; - const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/webpack-assets.json`; + const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${webpackOptions.appName}-webpack-assets.json`; if (fs.existsSync(webpackAssetsFilePath)) { webpackAssets = fs.readJsonSync(webpackAssetsFilePath); } From 92b5abccf5df51b5196e2ddcd365ec25c704381d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 30 Mar 2017 15:21:31 -0600 Subject: [PATCH 293/452] Make live serve the same as hot --- client/libs/build/apps.js | 16 ---------------- client/server.js | 13 +++++++++---- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 11a05f3..b06e1e9 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -41,18 +41,6 @@ function iterateApps(options, cb) { }); } -// ----------------------------------------------------------------------------- -// build a home page that links to each application -// ----------------------------------------------------------------------------- -function buildHome(outputPath) { - console.log('Building default home page with links to all apps'); - const links = _.map(settings.apps, (appPath, appName) => - `${appName}` - ); - const home = `${links.join('')}`; - file.write(path.join(outputPath, 'index.html'), home); -} - // ----------------------------------------------------------------------------- // Wrapper to provide values for launching a webpack server // ----------------------------------------------------------------------------- @@ -104,10 +92,6 @@ function buildApps(stage, onlyPack, launchCallback) { launchHotWrapper(launchCallback, webpackOptions); } }); - - if (!onlyPack) { - buildHome(rootBuildPath(stage)); - } }); } diff --git a/client/server.js b/client/server.js index 5ac4504..1658440 100644 --- a/client/server.js +++ b/client/server.js @@ -1,4 +1,5 @@ const path = require('path'); +const _ = require('lodash'); const express = require('express'); const settings = require('./config/settings'); @@ -8,7 +9,7 @@ const argv = require('minimist')(process.argv.slice(2)); const appName = argv._[0]; -function launch(servePath) { +function launch(servePath, port) { app.use(express.static(servePath)); app.get('*', (req, res) => { @@ -20,13 +21,17 @@ function launch(servePath) { console.log(err); return; } - console.log(`Listening on: ${settings.hotPort}`); + console.log(`Listening on: ${port}`); console.log(`Serving content from: ${servePath}`); }); } if (appName) { - launch(path.join(settings.prodOutput, appName)); + launch(path.join(settings.prodOutput, appName), settings.hotPort); } else { - launch(settings.prodOutput); + let startPort = settings.hotPort; + _.each(settings.apps, (p, name) => { + launch(path.join(settings.prodOutput, name), startPort); + startPort += 1; + }); } From 72fd1302d5ae29dcc961b7bc0e77e534aa971f76 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 30 Mar 2017 15:27:40 -0600 Subject: [PATCH 294/452] Fixes live port error --- client/server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/server.js b/client/server.js index 1658440..8881a07 100644 --- a/client/server.js +++ b/client/server.js @@ -16,7 +16,7 @@ function launch(servePath, port) { res.sendFile(path.join(servePath, req.url)); }); - app.listen(settings.hotPort, '0.0.0.0', (err) => { + app.listen(port, '0.0.0.0', (err) => { if (err) { console.log(err); return; @@ -29,7 +29,7 @@ function launch(servePath, port) { if (appName) { launch(path.join(settings.prodOutput, appName), settings.hotPort); } else { - let startPort = settings.hotPort; + let startPort = parseInt(settings.hotPort, 10); _.each(settings.apps, (p, name) => { launch(path.join(settings.prodOutput, name), startPort); startPort += 1; From be22b7a0e9cbf4ba702537c27ad9a196fabcb75b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 30 Mar 2017 19:28:34 -0600 Subject: [PATCH 295/452] Fixes yarn call in apps dir --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index c369814..e6a8ca8 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "scripts": { - "postinstall": "node node_modules/phantomjs-prebuilt/install.js && for dir in apps/*; do cd \"$dir\" || continue; yarn; cd ..; done" + "postinstall": "node node_modules/phantomjs-prebuilt/install.js && for dir in apps/*; do cd \"$dir\" || continue; yarn; cd ..; cd ..; done" }, "dependencies": { "superagent": "^3.5.0" From 78dd9311fc2efa187162d908d7fe291ed3dddf23 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 30 Mar 2017 22:00:58 -0600 Subject: [PATCH 296/452] Removes test --- client/build.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/build.js b/client/build.js index c7e6d98..7abbac4 100644 --- a/client/build.js +++ b/client/build.js @@ -2,7 +2,6 @@ const argv = require('minimist')(process.argv.slice(2)); const apps = require('./libs/build/apps'); -//const stage = argv.release ? 'production' : 'development'; +const stage = argv.release ? 'production' : 'development'; -const stage = 'production'; apps.buildApps(stage, argv.onlyPack); From 28e74ea1de0e7c07aad7842747e9ba75b330d070 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 30 Mar 2017 22:03:08 -0600 Subject: [PATCH 297/452] remove unused import --- client/libs/build/apps.js | 1 - 1 file changed, 1 deletion(-) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index b06e1e9..fee21e9 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -4,7 +4,6 @@ const path = require('path'); const settings = require('../../config/settings'); const build = require('./index'); -const file = require('./file'); let launchPort = parseInt(settings.hotPort, 10); From 270c4179cba54dfac451e4b4f2fb9475444f7e62 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 31 Mar 2017 11:47:45 -0600 Subject: [PATCH 298/452] Pass options to build process instead of individual args. --- client/build.js | 4 +++- client/libs/build/apps.js | 15 +++++++-------- client/webpack.hot.js | 5 +++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/client/build.js b/client/build.js index 7abbac4..abe7022 100644 --- a/client/build.js +++ b/client/build.js @@ -4,4 +4,6 @@ const apps = require('./libs/build/apps'); const stage = argv.release ? 'production' : 'development'; -apps.buildApps(stage, argv.onlyPack); +const options = { stage, onlyPack: argv.onlyPack }; + +apps.buildApps(options); diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index fee21e9..25d3b01 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -69,10 +69,10 @@ function buildAppParts(webpackOptions, onlyPack) { // ----------------------------------------------------------------------------- // Build a single app // ----------------------------------------------------------------------------- -function buildApp(appName, stage, onlyPack, launchCallback) { +function buildApp(appName, options, launchCallback) { const appPath = _.find(settings.apps, (p, name) => appName === name); - const webpackOptions = buildWebpackOptions(appName, appPath, { stage, onlyPack }); - buildAppParts(webpackOptions, onlyPack); + const webpackOptions = buildWebpackOptions(appName, appPath, options); + buildAppParts(webpackOptions, options.onlyPack); if (launchCallback) { launchHotWrapper(launchCallback, webpackOptions); } @@ -81,12 +81,11 @@ function buildApp(appName, stage, onlyPack, launchCallback) { // ----------------------------------------------------------------------------- // Build all apps // ----------------------------------------------------------------------------- -function buildApps(stage, onlyPack, launchCallback) { +function buildApps(options, launchCallback) { // Delete everything in the output path - fs.emptydir(rootBuildPath(stage), () => { - - iterateApps({ stage, onlyPack }, (webpackOptions) => { - buildAppParts(webpackOptions, onlyPack, launchCallback); + fs.emptydir(rootBuildPath(options.stage), () => { + iterateApps(options, (webpackOptions) => { + buildAppParts(webpackOptions, options.onlyPack); if (launchCallback) { launchHotWrapper(launchCallback, webpackOptions); } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index bfea96b..94c9859 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -45,8 +45,9 @@ function launch(webpackOptions, port, servePath) { }); } +const options = { stage: 'hot', onlyPack: false }; if (appName) { - clientApps.buildApp(appName, 'hot', false, launch); + clientApps.buildApp(appName, options, launch); } else { - clientApps.buildApps('hot', false, launch); + clientApps.buildApps(options, launch); } From 1525104a26853bb324b418678a68e80cd44dd431 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 31 Mar 2017 12:07:42 -0600 Subject: [PATCH 299/452] Fixes prodRelativeOutput --- client/config/webpack.config.js | 4 ++-- client/libs/build/apps.js | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 4bef2f3..08d9f55 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -37,8 +37,8 @@ module.exports = function webpackConfig(options) { // localhost or a local domain. In production this could be a CDN. In developerment this will // point to whatever public url is serving dev assets. const publicPath = production ? - options.prodAssetsUrl + options.prodRelativeOutput : - options.devAssetsUrl + options.devRelativeOutput; + path.join(options.prodAssetsUrl, options.prodRelativeOutput) : + path.join(options.devAssetsUrl, options.devRelativeOutput); let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 25d3b01..69fc4be 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -25,6 +25,7 @@ function buildWebpackOptions(appName, appPath, options) { buildSuffix: settings.buildSuffix, prodOutput: options.onlyPack ? settings.prodOutput : path.join(settings.prodOutput, appName), prodAssetsUrl: settings.prodAssetsUrl, + prodRelativeOutput: settings.prodRelativeOutput, devOutput: options.onlyPack ? settings.devOutput : path.join(settings.devOutput, appName), devAssetsUrl: settings.devAssetsUrl, devRelativeOutput: settings.devRelativeOutput From cd10b37d4ebe77068bef47019349f67fe554f6d2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 31 Mar 2017 17:13:51 -0600 Subject: [PATCH 300/452] Extract function for copying static files --- client/libs/build/index.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 14acc46..7efbba9 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -39,6 +39,19 @@ function buildWebpackEntries(webpackOptions) { }); } +// ----------------------------------------------------------------------------- +// copy over static files to build directory +// ----------------------------------------------------------------------------- +function buildStatic(rootBuildPath, appPath) { + try { + const staticDir = `${appPath}/static`; + console.log(`Copying static files in ${staticDir}`); + fs.copySync(staticDir, rootBuildPath); + } catch (err) { + // No static dir. Do nothing + } +} + // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- @@ -47,13 +60,7 @@ function build(rootBuildPath, webpackOptions, htmlOptions) { return new Promise((resolve) => { // Copy static files to build directory - try { - const staticDir = `${webpackOptions.appPath}/static`; - console.log(`Copying static files in ${staticDir}`); - fs.copySync(staticDir, rootBuildPath); - } catch (err) { - // No static dir. Do nothing - } + buildStatic(rootBuildPath, webpackOptions.appPath); // Webpack build console.log(`Webpacking ${webpackOptions.appName}`); From fd206fbed0a55e43f6a492b37b030bfc09085594 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 31 Mar 2017 17:58:51 -0600 Subject: [PATCH 301/452] Pass port to webpack for hmr --- client/config/settings.js | 2 +- client/config/webpack.config.js | 3 +- client/libs/build/apps.js | 29 ++++++----- client/package.json | 20 ++++---- client/webpack.hot.js | 7 +-- client/yarn.lock | 88 ++++++++++++++++----------------- 6 files changed, 76 insertions(+), 73 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 117310c..ba9437b 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -47,7 +47,7 @@ module.exports = { prodOutput, // Dev urls - devAssetsUrl: process.env.ASSETS_URL || '', + devAssetsUrl: (process.env.ASSETS_URL || '').split(':')[0], // For legacy settings. ASSETS_URL used to contain port but going forward it shouldn't prodAssetsUrl, hotPort, diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 08d9f55..331bc5c 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -135,9 +135,10 @@ module.exports = function webpackConfig(options) { if (options.stage === 'hot') { // Add hot reload to entry + const hmrPath = `{publicPath}:${options.port}`; entry[options.appName] = [ 'eventsource-polyfill', - `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true`, + `webpack-hot-middleware/client?path=${hmrPath}__webpack_hmr&timeout=20000&reload=true`, entryPath ]; } diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 69fc4be..ab8ad95 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -5,7 +5,8 @@ const path = require('path'); const settings = require('../../config/settings'); const build = require('./index'); -let launchPort = parseInt(settings.hotPort, 10); +// Start at one less than the desired port so we can increment and then return +let port = parseInt(settings.hotPort, 10) - 1; // ----------------------------------------------------------------------------- // Root of the build directory where apps will be written @@ -18,6 +19,7 @@ function rootBuildPath(stage) { // Generates webpack options that can be provided to webpackConfigBuilder // ----------------------------------------------------------------------------- function buildWebpackOptions(appName, appPath, options) { + port += 1; return { stage: options.stage, appName, @@ -28,7 +30,8 @@ function buildWebpackOptions(appName, appPath, options) { prodRelativeOutput: settings.prodRelativeOutput, devOutput: options.onlyPack ? settings.devOutput : path.join(settings.devOutput, appName), devAssetsUrl: settings.devAssetsUrl, - devRelativeOutput: settings.devRelativeOutput + devRelativeOutput: settings.devRelativeOutput, + port }; } @@ -36,8 +39,10 @@ function buildWebpackOptions(appName, appPath, options) { // Iterate through all applications calling the callback with the webpackOptions // ----------------------------------------------------------------------------- function iterateApps(options, cb) { - _.each(settings.apps, (appPath, appName) => { - cb(buildWebpackOptions(appName, appPath, options)); + return _.map(settings.apps, (appPath, appName) => { + const webpackOptions = buildWebpackOptions(appName, appPath, options); + cb(webpackOptions); + return webpackOptions; }); } @@ -46,8 +51,7 @@ function iterateApps(options, cb) { // ----------------------------------------------------------------------------- function launchHotWrapper(launchCallback, webpackOptions) { const servePath = path.join(settings.devOutput, webpackOptions.appName); - launchCallback(webpackOptions, launchPort, servePath); - launchPort += 1; + launchCallback(webpackOptions, servePath); } // ----------------------------------------------------------------------------- @@ -84,13 +88,12 @@ function buildApp(appName, options, launchCallback) { // ----------------------------------------------------------------------------- function buildApps(options, launchCallback) { // Delete everything in the output path - fs.emptydir(rootBuildPath(options.stage), () => { - iterateApps(options, (webpackOptions) => { - buildAppParts(webpackOptions, options.onlyPack); - if (launchCallback) { - launchHotWrapper(launchCallback, webpackOptions); - } - }); + fs.emptyDirSync(rootBuildPath(options.stage)); + return iterateApps(options, (webpackOptions) => { + buildAppParts(webpackOptions, options.onlyPack); + if (launchCallback) { + launchHotWrapper(launchCallback, webpackOptions); + } }); } diff --git a/client/package.json b/client/package.json index e6a8ca8..7df725a 100644 --- a/client/package.json +++ b/client/package.json @@ -2,8 +2,8 @@ "scripts": { "postinstall": "node node_modules/phantomjs-prebuilt/install.js && for dir in apps/*; do cd \"$dir\" || continue; yarn; cd ..; cd ..; done" }, - "dependencies": { - "superagent": "^3.5.0" + "dependencies": { + "superagent": "^3.5.0" }, "devDependencies": { "assets-webpack-plugin": "^3.5.1", @@ -21,12 +21,12 @@ "babel-preset-react": "^6.23.0", "babel-preset-stage-0": "^6.16.0", "chunk-manifest-webpack-plugin": "1.0.0", - "coveralls": "^2.12.0", - "css-loader": "^0.27.3", + "coveralls": "^2.13.0", + "css-loader": "^0.28.0", "dotenv": "4.0.0", "ecstatic": "2.1.0", "ejs": "^2.5.6", - "eslint": "^3.17.1", + "eslint": "^3.19.0", "eslint-config-airbnb": "^14.0.0", "eslint-plugin-babel": "^4.1.1", "eslint-plugin-import": "^2.2.0", @@ -36,7 +36,7 @@ "eventsource-polyfill": "^0.9.6", "express": "^4.15.2", "extract-text-webpack-plugin": "^2.1.0", - "file-loader": "^0.10.1", + "file-loader": "^0.11.0", "front-matter": "^2.1.1", "fs-extra": "^2.1.0", "html-minifier": "^3.4.1", @@ -58,11 +58,11 @@ "karma-spec-reporter": "^0.0.30", "karma-webpack": "^2.0.3", "less": "2.7.2", - "less-loader": "^3.0.0", + "less-loader": "^4.0.3", "lodash": "^4.17.4", "marked": "^0.3.6", "minimist": "1.2.0", - "node-sass": "^4.5.0", + "node-sass": "^4.5.2", "node-watch": "^0.5.1", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", @@ -72,14 +72,14 @@ "postcss-smart-import": "^0.6.10", "protractor": "^5.1.1", "psi": "^3.0.0", - "react-hot-loader": "^3.0.0-beta.6", "react-addons-test-utils": "^15.4.2", + "react-hot-loader": "^3.0.0-beta.6", "redux-devtools": "^3.3.2", "redux-devtools-dock-monitor": "1.1.1", "redux-devtools-log-monitor": "1.2.0", "s3-website": "^3.0.0", "sass-loader": "^6.0.3", - "style-loader": "^0.14.0", + "style-loader": "^0.16.1", "url-loader": "^0.5.8", "webpack": "^2.2.1", "webpack-bundle-analyzer": "^2.3.1", diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 94c9859..3e0e124 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -13,7 +13,7 @@ const app = express(); const localIp = '0.0.0.0'; const appName = argv._[0]; -function launch(webpackOptions, port, servePath) { +function launch(webpackOptions, servePath) { const webpackConfig = webpackConfigBuilder(webpackOptions); @@ -35,12 +35,12 @@ function launch(webpackOptions, port, servePath) { res.sendFile(path.join(servePath, req.url)); }); - app.listen(port, localIp, (err) => { + app.listen(webpackOptions.port, localIp, (err) => { if (err) { console.log(err); return; } - console.log(`Listening on: http://${localIp}:${port}`); + console.log(`Listening on: http://${localIp}:${webpackOptions.port}`); console.log(`Serving content from: ${servePath}`); }); } @@ -51,3 +51,4 @@ if (appName) { } else { clientApps.buildApps(options, launch); } +//const webpackConfigs = clientApps.buildApps(options, launch); diff --git a/client/yarn.lock b/client/yarn.lock index b1df860..dfbba84 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -109,7 +109,7 @@ 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@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1553,6 +1553,10 @@ clone@^1.0.0, clone@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" +clone@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + cloudfront-tls@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cloudfront-tls/-/cloudfront-tls-1.0.0.tgz#e8451106ab112e247714d3f0bc38aa198a347f16" @@ -1677,7 +1681,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.5.0: +concat-stream@1.5.0, concat-stream@^1.4.7: version "1.5.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" dependencies: @@ -1685,7 +1689,7 @@ concat-stream@1.5.0: readable-stream "~2.0.0" typedarray "~0.0.5" -concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: +concat-stream@^1.4.6, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1791,9 +1795,9 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: parse-json "^2.2.0" require-from-string "^1.1.0" -coveralls@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.12.0.tgz#b3d064108e29728385b56e42fc2d119f43e0e517" +coveralls@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.0.tgz#df933876e8c6f478efb04f4d3ab70dc96b7e5a8e" dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" @@ -1877,9 +1881,9 @@ 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-loader@^0.27.3: - version "0.27.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.27.3.tgz#69ab6f47b69bfb1b5acee61bac2aab14302ff0dc" +css-loader@^0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.0.tgz#417cfa9789f8cde59a30ccbf3e4da7a806889bad" dependencies: babel-code-frame "^6.11.0" css-selector-tokenizer "^0.7.0" @@ -2629,9 +2633,9 @@ eslint-plugin-react@^6.10.0: jsx-ast-utils "^1.3.4" object.assign "^4.0.4" -eslint@^3.17.1: - version "3.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.18.0.tgz#647e985c4ae71502d20ac62c109f66d5104c8a4b" +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" @@ -2918,9 +2922,9 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" +file-loader@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.0.tgz#af018f39c44617305f1ee92f850c7a65a4331616" dependencies: loader-utils "^1.0.2" @@ -3683,7 +3687,7 @@ imports-loader@^0.7.1: loader-utils "^1.0.2" source-map "^0.5.6" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4389,12 +4393,13 @@ lcov-parse@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" -less-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-3.0.0.tgz#199f7f4a79ff8a195ab47649d71c6d7109da32b9" +less-loader@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.3.tgz#d1e6462ca2f090c11248455e14b8dda4616d0521" dependencies: - clone-deep "^0.2.4" - loader-utils "^1.0.2" + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^2.3.0" less@2.7.2: version "2.7.2" @@ -4439,7 +4444,7 @@ loader-utils@^0.2.16, loader-utils@^0.2.5: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.1, loader-utils@^1.0.2: +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -5080,9 +5085,9 @@ node-pre-gyp@^0.6.29: tar "^2.2.1" tar-pack "^3.4.0" -node-sass@^4.5.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.1.tgz#e8e119fe3c8213ad7e56ca618dd231e9e8b30f5b" +node-sass@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.2.tgz#4012fa2bd129b1d6365117e88d9da0500d99da64" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5302,7 +5307,15 @@ npm@^2.15.10: wrappy "~1.0.2" write-file-atomic "~1.1.4" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + +npmlog@^4.0.0, npmlog@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: @@ -5311,14 +5324,6 @@ npm@^2.15.10: gauge "~2.7.1" set-blocking "~2.0.0" -"npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - null-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" @@ -7177,9 +7182,9 @@ strip-url-auth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" -style-loader@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.14.1.tgz#27b9b6c9822adf8c4748e02a1efae229405d79a5" +style-loader@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.16.1.tgz#50e325258d4e78421dd9680636b41e8661595d10" dependencies: loader-utils "^1.0.2" @@ -7892,20 +7897,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@1.1.2: +ws@1.1.2, ws@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" dependencies: options ">=0.0.5" ultron "1.0.x" -ws@^1.0.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" - dependencies: - options ">=0.0.5" - ultron "1.0.x" - wtf-8@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" From 2ff876aca1482755f8bb794076b5bf1854611da1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 1 Apr 2017 10:21:43 -0600 Subject: [PATCH 302/452] Pass port into webpack config to enable hmr --- .env.example | 4 ++-- client/config/settings.js | 2 +- client/config/webpack.config.js | 7 +++---- client/libs/build/apps.js | 16 +++++++--------- client/webpack.hot.js | 31 ++++++++++++++++++++++--------- package.json | 1 + 6 files changed, 36 insertions(+), 25 deletions(-) diff --git a/.env.example b/.env.example index 8ee2270..c17ba81 100644 --- a/.env.example +++ b/.env.example @@ -16,11 +16,11 @@ ASSETS_PORT=8080 # build and serve assets from a specific url - the webpack server's url. # Use localhost -# ASSETS_URL=http://0.0.0.0:8080 +# ASSETS_URL=http://0.0.0.0 # Use a local domain. # Change /etc/hosts (on a mac) and add sites.dev and rcsassets.sites.dev. Each entry will need to point to 127.0.0.1 -# ASSETS_URL=http://rcsassets.sites.dev:8080 +# ASSETS_URL=http://rcsassets.sites.dev # Use ngrok: (you will need to start ngrok and point it at 8080 or a different port if you change it.) # ASSETS_URL=https://rcsassets.ngrok.io diff --git a/client/config/settings.js b/client/config/settings.js index ba9437b..4e3c77d 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -47,7 +47,7 @@ module.exports = { prodOutput, // Dev urls - devAssetsUrl: (process.env.ASSETS_URL || '').split(':')[0], // For legacy settings. ASSETS_URL used to contain port but going forward it shouldn't + devAssetsUrl: process.env.ASSETS_URL, prodAssetsUrl, hotPort, diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 331bc5c..881b63f 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -37,8 +37,8 @@ module.exports = function webpackConfig(options) { // localhost or a local domain. In production this could be a CDN. In developerment this will // point to whatever public url is serving dev assets. const publicPath = production ? - path.join(options.prodAssetsUrl, options.prodRelativeOutput) : - path.join(options.devAssetsUrl, options.devRelativeOutput); + options.prodAssetsUrl + options.prodRelativeOutput : + `${options.devAssetsUrl}:${options.port}${options.devRelativeOutput}`; let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. @@ -135,10 +135,9 @@ module.exports = function webpackConfig(options) { if (options.stage === 'hot') { // Add hot reload to entry - const hmrPath = `{publicPath}:${options.port}`; entry[options.appName] = [ 'eventsource-polyfill', - `webpack-hot-middleware/client?path=${hmrPath}__webpack_hmr&timeout=20000&reload=true`, + `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true`, entryPath ]; } diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index ab8ad95..97b648a 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -31,7 +31,8 @@ function buildWebpackOptions(appName, appPath, options) { devOutput: options.onlyPack ? settings.devOutput : path.join(settings.devOutput, appName), devAssetsUrl: settings.devAssetsUrl, devRelativeOutput: settings.devRelativeOutput, - port + port, + servePath: path.join(settings.devOutput, appName) }; } @@ -50,8 +51,9 @@ function iterateApps(options, cb) { // Wrapper to provide values for launching a webpack server // ----------------------------------------------------------------------------- function launchHotWrapper(launchCallback, webpackOptions) { - const servePath = path.join(settings.devOutput, webpackOptions.appName); - launchCallback(webpackOptions, servePath); + if (launchCallback) { + launchCallback(webpackOptions); + } } // ----------------------------------------------------------------------------- @@ -78,9 +80,7 @@ function buildApp(appName, options, launchCallback) { const appPath = _.find(settings.apps, (p, name) => appName === name); const webpackOptions = buildWebpackOptions(appName, appPath, options); buildAppParts(webpackOptions, options.onlyPack); - if (launchCallback) { - launchHotWrapper(launchCallback, webpackOptions); - } + launchHotWrapper(launchCallback, webpackOptions); } // ----------------------------------------------------------------------------- @@ -91,9 +91,7 @@ function buildApps(options, launchCallback) { fs.emptyDirSync(rootBuildPath(options.stage)); return iterateApps(options, (webpackOptions) => { buildAppParts(webpackOptions, options.onlyPack); - if (launchCallback) { - launchHotWrapper(launchCallback, webpackOptions); - } + launchHotWrapper(launchCallback, webpackOptions); }); } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 3e0e124..26b4c0c 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -1,9 +1,11 @@ +const _ = require('lodash'); const express = require('express'); const webpack = require('webpack'); const webpackMiddleware = require('webpack-dev-middleware'); const webpackHotMiddleware = require('webpack-hot-middleware'); const path = require('path'); const argv = require('minimist')(process.argv.slice(2)); +const settings = require('./config/settings'); const webpackConfigBuilder = require('./config/webpack.config'); const clientApps = require('./libs/build/apps'); @@ -12,8 +14,9 @@ const app = express(); const localIp = '0.0.0.0'; const appName = argv._[0]; +const hotPack = argv.hotPack; -function launch(webpackOptions, servePath) { +function setupMiddleware(webpackOptions) { const webpackConfig = webpackConfigBuilder(webpackOptions); @@ -25,30 +28,40 @@ function launch(webpackOptions, servePath) { headers: { 'Access-Control-Allow-Origin': '*' } }); - app.use(express.static(servePath)); - + app.use(express.static(webpackOptions.servePath)); app.use(webpackMiddlewareInstance); - app.use(webpackHotMiddleware(compiler)); - app.get('*', (req, res) => { - res.sendFile(path.join(servePath, req.url)); + res.sendFile(path.join(webpackOptions.servePath, req.url)); }); +} - app.listen(webpackOptions.port, localIp, (err) => { +function runServer(port, servePath) { + app.listen(port, localIp, (err) => { if (err) { console.log(err); return; } - console.log(`Listening on: http://${localIp}:${webpackOptions.port}`); + console.log(`Listening on: http://${localIp}:${port}`); console.log(`Serving content from: ${servePath}`); }); } +function launch(webpackOptions) { + setupMiddleware(webpackOptions); + runServer(webpackOptions.port, webpackOptions.servePath); +} + const options = { stage: 'hot', onlyPack: false }; if (appName) { clientApps.buildApp(appName, options, launch); +} else if (hotPack) { + options.onlyPack = true; + const webpackConfigs = clientApps.buildApps(options, null); + _.each(webpackConfigs, (webpackOptions) => { + setupMiddleware(webpackOptions); + }); + runServer(settings.hotPort, settings.devOutput); } else { clientApps.buildApps(options, launch); } -//const webpackConfigs = clientApps.buildApps(options, launch); diff --git a/package.json b/package.json index a9f437d..b7979e6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "test": "cd ./client && ./node_modules/karma/bin/karma start", "coverage": "cat ./coverage/**/coverage.info | ./client/node_modules/coveralls/bin/coveralls.js", "hot": "cd ./client && node webpack.hot.js", + "hot_pack": "cd ./client && node webpack.hot.js --hotPack", "live": "cd ./client && node server.js", "build_dev": "cd ./client && node ./build.js", "build_dev_pack": "cd ./client && node ./build.js --onlyPack", From 0b4094ec1cb7e96a6508da4dfdc95b8ed3f19bc4 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 2 Apr 2017 22:18:10 -0600 Subject: [PATCH 303/452] Pass entry file name as well as path --- client/config/karma.js | 6 +++--- client/config/settings.js | 6 +++++- client/config/webpack.config.js | 6 +++--- client/libs/build/apps.js | 12 ++++++------ client/libs/build/index.js | 10 +++++----- client/server.js | 2 +- 6 files changed, 23 insertions(+), 19 deletions(-) diff --git a/client/config/karma.js b/client/config/karma.js index 1903bab..c26be60 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -6,14 +6,14 @@ const apps = require('../libs/build/apps'); module.exports = () => { - const webpackOptions = apps.buildWebpackOptions('fakeAppName', 'fakeAppPath', { stage: 'test', onlyPack: true }); + const webpackOptions = apps.buildWebpackOptions('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, { stage: 'test', onlyPack: true }); const webpackConfig = webpackConfigBuilder(webpackOptions); const plugins = webpackConfig.plugins; const module = webpackConfig.module; const resolve = webpackConfig.resolve; - _.each(settings.apps, (appPath, appName) => { - const appWebpackOptions = apps.buildWebpackOptions(appName, appPath, { stage: 'test', onlyPack: true }); + _.each(settings.apps, (app, appName) => { + const appWebpackOptions = apps.buildWebpackOptions(appName, app, { stage: 'test', onlyPack: true }); const appWebpackConfig = webpackConfigBuilder(appWebpackOptions); resolve.modules = _.union(resolve.modules, appWebpackConfig.resolve.modules); }); diff --git a/client/config/settings.js b/client/config/settings.js index 4e3c77d..73b85e1 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -31,9 +31,13 @@ const appsDir = path.join(__dirname, '../apps/'); const names = fs.readdirSync(appsDir) .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()); +const entryFile = 'app.jsx'; const apps = names.reduce( (result, file) => Object.assign({}, result, { - [file] : path.join(appsDir, file), + [file] : { + path: path.join(appsDir, file), + file: entryFile, + } }) , {}); diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 881b63f..9a9e73b 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -10,7 +10,7 @@ const _ = require('lodash'); // Generates a webpack config file based on options. // Options: // appName: The name of the application i.e. hello_world -// appPath: The path to the application. i.e. client/apps/hello_world +// app: An object containing the path and file name of the entry i.e. path: client/apps/hello_world, file: app.jsx // buildSuffix: The suffix to append onto the end of the build. i.e. _bundle.js // stage: // 'production' @@ -130,7 +130,7 @@ module.exports = function webpackConfig(options) { { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; - const entryPath = `${options.appPath}/app.jsx`; + const entryPath = path.join(options.app.path, options.app.file); const entry = { [options.appName]: entryPath }; if (options.stage === 'hot') { @@ -157,7 +157,7 @@ module.exports = function webpackConfig(options) { }, resolve: { extensions: ['.js', '.json', '.jsx'], - modules: ['node_modules', `${options.appPath}/node_modules`] + modules: ['node_modules', `${options.app.path}/node_modules`] }, cache: true, devtool: production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 97b648a..c70d450 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -18,12 +18,12 @@ function rootBuildPath(stage) { // ----------------------------------------------------------------------------- // Generates webpack options that can be provided to webpackConfigBuilder // ----------------------------------------------------------------------------- -function buildWebpackOptions(appName, appPath, options) { +function buildWebpackOptions(appName, app, options) { port += 1; return { stage: options.stage, appName, - appPath, + app, buildSuffix: settings.buildSuffix, prodOutput: options.onlyPack ? settings.prodOutput : path.join(settings.prodOutput, appName), prodAssetsUrl: settings.prodAssetsUrl, @@ -40,8 +40,8 @@ function buildWebpackOptions(appName, appPath, options) { // Iterate through all applications calling the callback with the webpackOptions // ----------------------------------------------------------------------------- function iterateApps(options, cb) { - return _.map(settings.apps, (appPath, appName) => { - const webpackOptions = buildWebpackOptions(appName, appPath, options); + return _.map(settings.apps, (app, appName) => { + const webpackOptions = buildWebpackOptions(appName, app, options); cb(webpackOptions); return webpackOptions; }); @@ -77,8 +77,8 @@ function buildAppParts(webpackOptions, onlyPack) { // Build a single app // ----------------------------------------------------------------------------- function buildApp(appName, options, launchCallback) { - const appPath = _.find(settings.apps, (p, name) => appName === name); - const webpackOptions = buildWebpackOptions(appName, appPath, options); + const app = _.find(settings.apps, (e, name) => appName === name); + const webpackOptions = buildWebpackOptions(appName, app, options); buildAppParts(webpackOptions, options.onlyPack); launchHotWrapper(launchCallback, webpackOptions); } diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 7efbba9..55ba4b3 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -60,7 +60,7 @@ function build(rootBuildPath, webpackOptions, htmlOptions) { return new Promise((resolve) => { // Copy static files to build directory - buildStatic(rootBuildPath, webpackOptions.appPath); + buildStatic(rootBuildPath, webpackOptions.app.path); // Webpack build console.log(`Webpacking ${webpackOptions.appName}`); @@ -74,7 +74,7 @@ function build(rootBuildPath, webpackOptions, htmlOptions) { // Build html console.log(`Building html for ${webpackOptions.appName}`); - const inputPath = path.join(webpackOptions.appPath, 'html'); + const inputPath = path.join(webpackOptions.app.path, 'html'); const templateDirs = _.map(htmlOptions.templateDirs, templateDir => path.join(inputPath, templateDir) ); @@ -106,14 +106,14 @@ function build(rootBuildPath, webpackOptions, htmlOptions) { function appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults) { // Watch for content to change - nodeWatch(webpackOptions.appPath, { recursive: true }, (evt, filePath) => { + nodeWatch(webpackOptions.app.path, { recursive: true }, (evt, filePath) => { const templateDirs = _.map(htmlOptions.templateDirs, - templateDir => path.join(webpackOptions.appPath, 'html', templateDir) + templateDir => path.join(webpackOptions.app.path, 'html', templateDir) ); const outputPath = path.join(rootBuildPath, webpackOptions.appName); - const originalInputPath = path.join(webpackOptions.appPath, 'html'); + const originalInputPath = path.join(webpackOptions.app.path, 'html'); // Build the page const page = content.buildContent( diff --git a/client/server.js b/client/server.js index 8881a07..a285e97 100644 --- a/client/server.js +++ b/client/server.js @@ -30,7 +30,7 @@ if (appName) { launch(path.join(settings.prodOutput, appName), settings.hotPort); } else { let startPort = parseInt(settings.hotPort, 10); - _.each(settings.apps, (p, name) => { + _.each(settings.apps, (entry, name) => { launch(path.join(settings.prodOutput, name), startPort); startPort += 1; }); From 8a87499bf7448c8525f5a95482adf284b9ab1cd0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 3 Apr 2017 17:13:11 -0600 Subject: [PATCH 304/452] Add path when including hot pack option --- client/webpack.hot.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 26b4c0c..beaf7b5 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -59,7 +59,12 @@ if (appName) { options.onlyPack = true; const webpackConfigs = clientApps.buildApps(options, null); _.each(webpackConfigs, (webpackOptions) => { - setupMiddleware(webpackOptions); + setupMiddleware(_.merge({}, + webpackOptions, + { + devRelativeOutput: `/${webpackOptions.appName}` + } + )); }); runServer(settings.hotPort, settings.devOutput); } else { From 20fabc322bcc3983bdba45a3ad86263118498f7b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 3 Apr 2017 17:58:24 -0600 Subject: [PATCH 305/452] Updates packages --- client/package.json | 6 +++--- client/yarn.lock | 40 ++++++++++++++++++++-------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/client/package.json b/client/package.json index 7df725a..e22afab 100644 --- a/client/package.json +++ b/client/package.json @@ -36,7 +36,7 @@ "eventsource-polyfill": "^0.9.6", "express": "^4.15.2", "extract-text-webpack-plugin": "^2.1.0", - "file-loader": "^0.11.0", + "file-loader": "^0.11.1", "front-matter": "^2.1.1", "fs-extra": "^2.1.0", "html-minifier": "^3.4.1", @@ -81,9 +81,9 @@ "sass-loader": "^6.0.3", "style-loader": "^0.16.1", "url-loader": "^0.5.8", - "webpack": "^2.2.1", + "webpack": "^2.3.3", "webpack-bundle-analyzer": "^2.3.1", "webpack-dev-middleware": "^1.10.1", - "webpack-hot-middleware": "^2.17.1" + "webpack-hot-middleware": "^2.18.0" } } diff --git a/client/yarn.lock b/client/yarn.lock index dfbba84..9df362c 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1681,7 +1681,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@1.5.0, concat-stream@^1.4.7: +concat-stream@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" dependencies: @@ -1689,7 +1689,7 @@ concat-stream@1.5.0, concat-stream@^1.4.7: readable-stream "~2.0.0" typedarray "~0.0.5" -concat-stream@^1.4.6, concat-stream@^1.5.2: +concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -2922,9 +2922,9 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.0.tgz#af018f39c44617305f1ee92f850c7a65a4331616" +file-loader@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.1.tgz#6b328ee1234a729e4e47d36375dd6d35c0e1db84" dependencies: loader-utils "^1.0.2" @@ -5307,15 +5307,7 @@ npm@^2.15.10: wrappy "~1.0.2" write-file-atomic "~1.1.4" -"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - -npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" dependencies: @@ -5324,6 +5316,14 @@ npmlog@^4.0.0, npmlog@^4.0.2: gauge "~2.7.1" set-blocking "~2.0.0" +"npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + dependencies: + ansi "~0.3.1" + are-we-there-yet "~1.1.2" + gauge "~1.2.5" + null-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" @@ -7768,9 +7768,9 @@ webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.10.1: path-is-absolute "^1.0.0" range-parser "^1.0.3" -webpack-hot-middleware@^2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.17.1.tgz#0c8fbf6f93ff29c095d684b07ab6d6c0f2f951d7" +webpack-hot-middleware@^2.18.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.18.0.tgz#a16bb535b83a6ac94a78ac5ebce4f3059e8274d3" dependencies: ansi-html "0.0.7" html-entities "^1.2.0" @@ -7791,9 +7791,9 @@ webpack-sources@^0.2.3: source-list-map "^1.1.1" source-map "~0.5.3" -webpack@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.2.tgz#7d521e6f0777a3a58985c69425263fdfe977b458" +webpack@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.3.tgz#eecc083c18fb7bf958ea4f40b57a6640c5a0cc78" dependencies: acorn "^4.0.4" acorn-dynamic-import "^2.0.0" From b95174657456c5b86444d53814bf5c79eb4c3e08 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 4 Apr 2017 09:32:17 -0600 Subject: [PATCH 306/452] removes unused variable --- client/config/settings.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 73b85e1..890007e 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -41,8 +41,6 @@ const apps = names.reduce( }) , {}); -const rootAppsPath = path.join(__dirname, '../../apps'); - module.exports = { devRelativeOutput, prodRelativeOutput, @@ -68,7 +66,7 @@ module.exports = { templateDirs: ['layouts'], templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis - rootAppsPath + appsDir } }; From d2c952a699eb047d0676ee24c3c3195feaf27d5e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 4 Apr 2017 15:57:10 -0600 Subject: [PATCH 307/452] Refactoring webpack build options --- client/config/karma.js | 5 +-- client/config/webpack.config.js | 46 ++++++++------------------ client/libs/build/apps.js | 48 +++++----------------------- client/libs/build/index.js | 10 +++--- client/libs/build/webpack_options.js | 37 +++++++++++++++++++++ client/webpack.hot.js | 8 ++--- 6 files changed, 70 insertions(+), 84 deletions(-) create mode 100644 client/libs/build/webpack_options.js diff --git a/client/config/karma.js b/client/config/karma.js index c26be60..3097685 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -3,17 +3,18 @@ const _ = require('lodash'); const settings = require('./settings'); const webpackConfigBuilder = require('./webpack.config'); const apps = require('../libs/build/apps'); +const buildWebpackOptions = require('../libs/build/webpack_options'); module.exports = () => { - const webpackOptions = apps.buildWebpackOptions('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, { stage: 'test', onlyPack: true }); + const webpackOptions = buildWebpackOptions('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, settings.hotPort, { stage: 'test', onlyPack: true }); const webpackConfig = webpackConfigBuilder(webpackOptions); const plugins = webpackConfig.plugins; const module = webpackConfig.module; const resolve = webpackConfig.resolve; _.each(settings.apps, (app, appName) => { - const appWebpackOptions = apps.buildWebpackOptions(appName, app, { stage: 'test', onlyPack: true }); + const appWebpackOptions = buildWebpackOptions(appName, app, settings.hotPort, { stage: 'test', onlyPack: true }); const appWebpackConfig = webpackConfigBuilder(appWebpackOptions); resolve.modules = _.union(resolve.modules, appWebpackConfig.resolve.modules); }); diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 9a9e73b..58aab68 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -10,36 +10,16 @@ const _ = require('lodash'); // Generates a webpack config file based on options. // Options: // appName: The name of the application i.e. hello_world -// app: An object containing the path and file name of the entry i.e. path: client/apps/hello_world, file: app.jsx +// app: An object containing the path and file name of the entry +// i.e. path: client/apps/hello_world, file: app.jsx // buildSuffix: The suffix to append onto the end of the build. i.e. _bundle.js // stage: // 'production' // 'staging' (Will result in same output as production but will output to /staging) // 'hot' (Development mode with hot reload) // 'test' -// -// Production related values - applicable when stage is set to 'production' or 'staging' -// prodOutput -// prodAssetsUrl -// devRelativeOutput -// -// Development -// devOutput -// devAssetsUrl -// devRelativeOutput -// module.exports = function webpackConfig(options) { - const production = options.stage === 'production' || options.stage === 'staging'; - const outputPath = production ? options.prodOutput : options.devOutput; - - // Public path indicates where the assets will be served from. In dev this will likely be - // localhost or a local domain. In production this could be a CDN. In developerment this will - // point to whatever public url is serving dev assets. - const publicPath = production ? - options.prodAssetsUrl + options.prodRelativeOutput : - `${options.devAssetsUrl}:${options.port}${options.devRelativeOutput}`; - let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. ',plugins[]=transform-class-properties'; // Allows class instance fields and class static properties. @@ -48,7 +28,7 @@ module.exports = function webpackConfig(options) { ',presets[]=es2015' + // Include all plugins needed to handle es2015 syntax ',presets[]=stage-0'; // Enables experimental ES features. - if (production) { + if (options.production) { babelPlugins += ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement babelPlugins += ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code } else if (options.stage === 'hot') { @@ -69,7 +49,7 @@ module.exports = function webpackConfig(options) { const lessLoaders = cssLoaders.slice(0); lessLoaders.push('less-loader'); - const extractCSS = new ExtractTextPlugin(production ? '[name]-[chunkhash].css' : '[name].css'); + const extractCSS = new ExtractTextPlugin(options.production ? '[name]-[chunkhash].css' : '[name].css'); let plugins = [ // Use to extract common code from multiple entry points into a single init.js @@ -83,7 +63,7 @@ module.exports = function webpackConfig(options) { }) ]; - if (production) { + if (options.production) { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"', __DEV__: false }), new webpack.optimize.UglifyJsPlugin({ @@ -100,7 +80,7 @@ module.exports = function webpackConfig(options) { }), // Generate webpack-assets.json to map path to assets generated with hashed names new AssetsPlugin({ - path: outputPath, + path: options.appOutputPath, fullPath: false, filename: `${options.appName}-webpack-assets.json` }), @@ -137,7 +117,7 @@ module.exports = function webpackConfig(options) { // Add hot reload to entry entry[options.appName] = [ 'eventsource-polyfill', - `webpack-hot-middleware/client?path=${publicPath}__webpack_hmr&timeout=20000&reload=true`, + `webpack-hot-middleware/client?path=${options.publicPath}__webpack_hmr&timeout=20000&reload=true`, entryPath ]; } @@ -146,21 +126,21 @@ module.exports = function webpackConfig(options) { context: path.resolve('../apps', __dirname), entry, output: { - publicPath, + publicPath: options.publicPath, // Location where generated files will be output - path: outputPath, - filename: production ? `[name]-[chunkhash]${options.buildSuffix}` : `[name]${options.buildSuffix}`, - chunkFilename: production ? `[id]-[chunkhash]${options.buildSuffix}` : `[id]${options.buildSuffix}`, + path: options.appOutputPath, + filename: options.production ? `[name]-[chunkhash]${options.buildSuffix}` : `[name]${options.buildSuffix}`, + chunkFilename: options.production ? `[id]-[chunkhash]${options.buildSuffix}` : `[id]${options.buildSuffix}`, sourceMapFilename: '[name].map', // http://webpack.github.io/docs/configuration.html#output-pathinfo - pathinfo: !production + pathinfo: !options.production }, resolve: { extensions: ['.js', '.json', '.jsx'], modules: ['node_modules', `${options.app.path}/node_modules`] }, cache: true, - devtool: production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ + devtool: options.production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ stats: { colors: true }, plugins, module: { rules }, diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index c70d450..4f9320d 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -1,47 +1,18 @@ const fs = require('fs-extra'); const _ = require('lodash'); -const path = require('path'); const settings = require('../../config/settings'); const build = require('./index'); - -// Start at one less than the desired port so we can increment and then return -let port = parseInt(settings.hotPort, 10) - 1; - -// ----------------------------------------------------------------------------- -// Root of the build directory where apps will be written -// ----------------------------------------------------------------------------- -function rootBuildPath(stage) { - return stage === 'production' ? settings.prodOutput : settings.devOutput; -} - -// ----------------------------------------------------------------------------- -// Generates webpack options that can be provided to webpackConfigBuilder -// ----------------------------------------------------------------------------- -function buildWebpackOptions(appName, app, options) { - port += 1; - return { - stage: options.stage, - appName, - app, - buildSuffix: settings.buildSuffix, - prodOutput: options.onlyPack ? settings.prodOutput : path.join(settings.prodOutput, appName), - prodAssetsUrl: settings.prodAssetsUrl, - prodRelativeOutput: settings.prodRelativeOutput, - devOutput: options.onlyPack ? settings.devOutput : path.join(settings.devOutput, appName), - devAssetsUrl: settings.devAssetsUrl, - devRelativeOutput: settings.devRelativeOutput, - port, - servePath: path.join(settings.devOutput, appName) - }; -} +const buildWebpackOptions = require('./webpack_options'); // ----------------------------------------------------------------------------- // Iterate through all applications calling the callback with the webpackOptions // ----------------------------------------------------------------------------- function iterateApps(options, cb) { + let port = parseInt(settings.hotPort, 10); return _.map(settings.apps, (app, appName) => { - const webpackOptions = buildWebpackOptions(appName, app, options); + const webpackOptions = buildWebpackOptions(appName, app, port, options); + port += 1; cb(webpackOptions); return webpackOptions; }); @@ -65,8 +36,7 @@ function buildAppParts(webpackOptions, onlyPack) { console.log(`Finished Javascript for ${webpackOptions.appName}`); }); } else { - const outputPath = rootBuildPath(webpackOptions.stage); - build.build(outputPath, webpackOptions, settings.htmlOptions).then((result) => { + build.build(webpackOptions, settings.htmlOptions).then((result) => { console.log(`Finished Javascript for ${webpackOptions.appName}.`); console.log(`Built ${result.pages.length} pages.`); }); @@ -78,7 +48,7 @@ function buildAppParts(webpackOptions, onlyPack) { // ----------------------------------------------------------------------------- function buildApp(appName, options, launchCallback) { const app = _.find(settings.apps, (e, name) => appName === name); - const webpackOptions = buildWebpackOptions(appName, app, options); + const webpackOptions = buildWebpackOptions(appName, app, settings.hotPort, options); buildAppParts(webpackOptions, options.onlyPack); launchHotWrapper(launchCallback, webpackOptions); } @@ -87,9 +57,8 @@ function buildApp(appName, options, launchCallback) { // Build all apps // ----------------------------------------------------------------------------- function buildApps(options, launchCallback) { - // Delete everything in the output path - fs.emptyDirSync(rootBuildPath(options.stage)); return iterateApps(options, (webpackOptions) => { + fs.emptyDirSync(webpackOptions.appOutputPath); buildAppParts(webpackOptions, options.onlyPack); launchHotWrapper(launchCallback, webpackOptions); }); @@ -97,6 +66,5 @@ function buildApps(options, launchCallback) { module.exports = { buildApp, - buildApps, - buildWebpackOptions + buildApps }; diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 55ba4b3..8db3643 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -42,11 +42,11 @@ function buildWebpackEntries(webpackOptions) { // ----------------------------------------------------------------------------- // copy over static files to build directory // ----------------------------------------------------------------------------- -function buildStatic(rootBuildPath, appPath) { +function buildStatic(outputPath, appPath) { try { const staticDir = `${appPath}/static`; console.log(`Copying static files in ${staticDir}`); - fs.copySync(staticDir, rootBuildPath); + fs.copySync(staticDir, outputPath); } catch (err) { // No static dir. Do nothing } @@ -55,12 +55,12 @@ function buildStatic(rootBuildPath, appPath) { // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- -function build(rootBuildPath, webpackOptions, htmlOptions) { +function build(webpackOptions, htmlOptions) { return new Promise((resolve) => { // Copy static files to build directory - buildStatic(rootBuildPath, webpackOptions.app.path); + buildStatic(webpackOptions.appOutputPath, webpackOptions.app.path); // Webpack build console.log(`Webpacking ${webpackOptions.appName}`); @@ -82,7 +82,7 @@ function build(rootBuildPath, webpackOptions, htmlOptions) { const pages = content.buildContents( inputPath, inputPath, - path.join(rootBuildPath, webpackOptions.appName), + webpackOptions.appOutputPath, webpackAssets, webpackOptions.stage, webpackOptions.buildSuffix, diff --git a/client/libs/build/webpack_options.js b/client/libs/build/webpack_options.js new file mode 100644 index 0000000..08ad58b --- /dev/null +++ b/client/libs/build/webpack_options.js @@ -0,0 +1,37 @@ +const path = require('path'); + +const settings = require('../../config/settings'); + +// ----------------------------------------------------------------------------- +// Generates webpack options that can be provided to webpackConfigBuilder +// ----------------------------------------------------------------------------- +module.exports = function buildWebpackOptions(appName, app, port, options) { + const production = options.stage === 'production' || options.stage === 'staging'; + + let rootOutputPath = settings.devOutput; + let appOutputPath = options.onlyPack ? + settings.devOutput : path.join(settings.devOutput, appName); + // Public path indicates where the assets will be served from. In dev this will likely be + // localhost or a local domain. In production this could be a CDN. In developerment this will + // point to whatever public url is serving dev assets. + let publicPath = `${settings.devAssetsUrl}:${port}${settings.devRelativeOutput}`; + + if (production) { + rootOutputPath = settings.prodOutput; + appOutputPath = options.onlyPack ? + settings.prodOutput : path.join(settings.prodOutput, appName); + publicPath = settings.prodAssetsUrl + settings.prodRelativeOutput; + } + + return { + stage: options.stage, + appName, + app, + buildSuffix: settings.buildSuffix, + port, + production, + appOutputPath, + rootOutputPath, + publicPath + }; +}; diff --git a/client/webpack.hot.js b/client/webpack.hot.js index beaf7b5..57b3abd 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -28,11 +28,11 @@ function setupMiddleware(webpackOptions) { headers: { 'Access-Control-Allow-Origin': '*' } }); - app.use(express.static(webpackOptions.servePath)); + app.use(express.static(webpackOptions.appOutputPath)); app.use(webpackMiddlewareInstance); app.use(webpackHotMiddleware(compiler)); app.get('*', (req, res) => { - res.sendFile(path.join(webpackOptions.servePath, req.url)); + res.sendFile(path.join(webpackOptions.appOutputPath, req.url)); }); } @@ -49,7 +49,7 @@ function runServer(port, servePath) { function launch(webpackOptions) { setupMiddleware(webpackOptions); - runServer(webpackOptions.port, webpackOptions.servePath); + runServer(webpackOptions.port, webpackOptions.appOutputPath); } const options = { stage: 'hot', onlyPack: false }; @@ -62,7 +62,7 @@ if (appName) { setupMiddleware(_.merge({}, webpackOptions, { - devRelativeOutput: `/${webpackOptions.appName}` + publicPath: `/${webpackOptions.appName}` } )); }); From 38500fbc55568d3d5af81fb4943a893e5c1fde9a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 4 Apr 2017 17:48:39 -0500 Subject: [PATCH 308/452] Better names and update travis to get tests to run --- .travis.yml | 4 ++-- client/libs/build/content.js | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index f7aba5d..ed34b80 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,8 +16,8 @@ branches: before_install: - cp .env.example .env - cp client/ci.karma.conf.js client/karma.conf.js - - nvm install 7.5.0 - - nvm use 7.5.0 + - nvm install 7.8.0 + - nvm use 7.8.0 - npm install -g yarn install: diff --git a/client/libs/build/content.js b/client/libs/build/content.js index efe463c..b0fb35c 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -29,7 +29,7 @@ function outFilePath(page, outputPath, fullInputPath, originalInputPath) { // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, ext, options) { +function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, ext, htmlOptions) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -40,7 +40,7 @@ function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, title, metadata, url: destination - }, options.templateData); + }, htmlOptions.templateData); let html = parsed.body; @@ -52,7 +52,7 @@ function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, })(data); // Parse any markdown in the resulting html - if (_.includes(options.markdownExtensions, ext)) { + if (_.includes(htmlOptions.markdownExtensions, ext)) { html = marked(html); } } catch (err) { @@ -64,7 +64,7 @@ function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, // Apply template data.content = html; // Pass in generated html - html = templates.apply(data, fullPath, options.templateMap, templateDirs); + html = templates.apply(data, fullPath, htmlOptions.templateMap, templateDirs); html = applyProduction(html, stage, webpackAssets, buildSuffix); return { @@ -89,7 +89,7 @@ function buildContents( stage, buildSuffix, templateDirs, - options) { + htmlOptions) { let results = []; const files = fs.readdirSync(inputPath); @@ -108,12 +108,12 @@ function buildContents( stage, buildSuffix, templateDirs, - options + htmlOptions )); } else { const ext = path.extname(fullInputPath); - if (_.includes(options.buildExtensions, ext)) { + if (_.includes(htmlOptions.buildExtensions, ext)) { const page = buildContent( fullInputPath, templateDirs, @@ -121,9 +121,9 @@ function buildContents( stage, buildSuffix, ext, - options); + htmlOptions); page.outputFilePath = file.write( - outFilePath(page, outputPath, fullInputPath, originalInputPath), page.html, options); + outFilePath(page, outputPath, fullInputPath, originalInputPath), page.html, htmlOptions); results.push(page); } else { file.copy(fullInputPath, outFilePath(null, outputPath, fullInputPath, originalInputPath)); From faaab5a0df1713787d73df828dfac1ca9ddc9a2c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 4 Apr 2017 17:56:18 -0500 Subject: [PATCH 309/452] Use older version of node for travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ed34b80..5a8d13c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,8 +16,8 @@ branches: before_install: - cp .env.example .env - cp client/ci.karma.conf.js client/karma.conf.js - - nvm install 7.8.0 - - nvm use 7.8.0 + - nvm install 6.9.1 + - nvm use 6.9.1 - npm install -g yarn install: From 21eba8a73394b665b0ef782c1f13196b53fc4401 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 4 Apr 2017 21:35:01 -0500 Subject: [PATCH 310/452] Move template dirs into apps --- client/config/settings.js | 25 ++++++++++++------------- client/libs/build/index.js | 20 ++++++++++---------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 890007e..98429e6 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -28,18 +28,18 @@ const hotPort = process.env.ASSETS_PORT || 8080; // These will be used to generate the entries for webpack const appsDir = path.join(__dirname, '../apps/'); -const names = fs.readdirSync(appsDir) - .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()); - -const entryFile = 'app.jsx'; -const apps = names.reduce( - (result, file) => Object.assign({}, result, { - [file] : { - path: path.join(appsDir, file), - file: entryFile, - } - }) -, {}); +const apps = fs.readdirSync(appsDir) + .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()) + .reduce( + (result, appName) => Object.assign({}, result, { + [appName] : { + path: path.join(appsDir, appName), + file: 'app.jsx', + htmlPath: 'html', + templateDirs: ['layouts'] + } + }) + , {}); module.exports = { devRelativeOutput, @@ -63,7 +63,6 @@ module.exports = { truncateSummaryAt: 1000, buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) markdownExtensions: ['.md', '.markdown'], // file types to process markdown - templateDirs: ['layouts'], templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis appsDir diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 8db3643..83f2861 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -10,6 +10,13 @@ const content = require('./content'); // Settings const webpackConfigBuilder = require('../../config/webpack.config'); +// ----------------------------------------------------------------------------- +// Helper function to generate full template paths for the given app +// ----------------------------------------------------------------------------- +function templateDirs(app){ + return _.map(app.templateDirs, templateDir => path.join(app.path, app.htmlPath, templateDir)); +} + // ----------------------------------------------------------------------------- // run webpack to build entries // ----------------------------------------------------------------------------- @@ -75,9 +82,6 @@ function build(webpackOptions, htmlOptions) { // Build html console.log(`Building html for ${webpackOptions.appName}`); const inputPath = path.join(webpackOptions.app.path, 'html'); - const templateDirs = _.map(htmlOptions.templateDirs, - templateDir => path.join(inputPath, templateDir) - ); const pages = content.buildContents( inputPath, @@ -86,7 +90,7 @@ function build(webpackOptions, htmlOptions) { webpackAssets, webpackOptions.stage, webpackOptions.buildSuffix, - templateDirs, + templateDirs(webpackOptions.app), htmlOptions ); @@ -108,17 +112,13 @@ function appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults) { // Watch for content to change nodeWatch(webpackOptions.app.path, { recursive: true }, (evt, filePath) => { - const templateDirs = _.map(htmlOptions.templateDirs, - templateDir => path.join(webpackOptions.app.path, 'html', templateDir) - ); - const outputPath = path.join(rootBuildPath, webpackOptions.appName); - const originalInputPath = path.join(webpackOptions.app.path, 'html'); + const originalInputPath = path.join(webpackOptions.app.path, webpackOptions.app.htmlPath); // Build the page const page = content.buildContent( filePath, - templateDirs, + templateDirs(webpackOptions.app), buildResults.webpackAssets, webpackOptions.stage, htmlOptions From a7542456b8b0f6f5a368945fd8083ca37d53adbe Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 4 Apr 2017 21:45:06 -0500 Subject: [PATCH 311/452] move value --- client/config/settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 98429e6..fad4865 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -42,6 +42,8 @@ const apps = fs.readdirSync(appsDir) , {}); module.exports = { + apps, + devRelativeOutput, prodRelativeOutput, @@ -56,8 +58,6 @@ module.exports = { buildSuffix: '_bundle.js', - apps, - // Options for building html files htmlOptions: { truncateSummaryAt: 1000, From 5e899f628a8376f4d5b4deb58ad8c729924f3797 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 4 Apr 2017 22:03:42 -0500 Subject: [PATCH 312/452] fixes indents, use settings --- client/config/settings.js | 9 +++++---- client/libs/build/index.js | 12 ++++++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index fad4865..1669dd7 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -60,11 +60,12 @@ module.exports = { // Options for building html files htmlOptions: { - truncateSummaryAt: 1000, - buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) + truncateSummaryAt: 1000, + buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) markdownExtensions: ['.md', '.markdown'], // file types to process markdown - templateData: {}, // Object that will be passed to every page as it is rendered - templateMap: {}, // Used to specify specific templates on a per file basis + templateDirs: [] + templateData: {}, // Object that will be passed to every page as it is rendered + templateMap: {}, // Used to specify specific templates on a per file basis appsDir } diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 83f2861..4306c25 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -81,7 +81,7 @@ function build(webpackOptions, htmlOptions) { // Build html console.log(`Building html for ${webpackOptions.appName}`); - const inputPath = path.join(webpackOptions.app.path, 'html'); + const inputPath = path.join(webpackOptions.app.path, webpackOptions.app.htmlPath); const pages = content.buildContents( inputPath, @@ -112,7 +112,6 @@ function appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults) { // Watch for content to change nodeWatch(webpackOptions.app.path, { recursive: true }, (evt, filePath) => { - const outputPath = path.join(rootBuildPath, webpackOptions.appName); const originalInputPath = path.join(webpackOptions.app.path, webpackOptions.app.htmlPath); // Build the page @@ -124,6 +123,15 @@ function appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults) { htmlOptions ); + page.outputFilePath = file.write( + content.outFilePath( + page, + webpackOptions.appOutputPath, + filePath, + originalInputPath), + page.html + ); + page.outputFilePath = file.write( content.outFilePath(page, outputPath, filePath, originalInputPath), page.html From 3fa91d9de8b4adb20a47e5589168127f45aa2be1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 5 Apr 2017 00:34:32 -0400 Subject: [PATCH 313/452] Removes extra code --- client/libs/build/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 4306c25..e172ab2 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -132,11 +132,6 @@ function appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults) { page.html ); - page.outputFilePath = file.write( - content.outFilePath(page, outputPath, filePath, originalInputPath), - page.html - ); - }); } From f4617e43890b857f940a3f4b6bbb7bd64a0ca3bd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 5 Apr 2017 00:44:37 -0400 Subject: [PATCH 314/452] Fix missing comma --- client/config/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/settings.js b/client/config/settings.js index 1669dd7..3ad6cd6 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -63,7 +63,7 @@ module.exports = { truncateSummaryAt: 1000, buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) markdownExtensions: ['.md', '.markdown'], // file types to process markdown - templateDirs: [] + templateDirs: [], templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis appsDir From 4b0a60ef92caca40e583acc35757d8b5dd4ac825 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 5 Apr 2017 23:43:28 -0400 Subject: [PATCH 315/452] Moving more params into options object --- client/config/settings.js | 1 + client/libs/build/content.js | 80 +++++++++++++++----------- client/libs/build/index.js | 85 +++++++++++----------------- client/libs/build/webpack_options.js | 11 +++- 4 files changed, 93 insertions(+), 84 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 3ad6cd6..e171366 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -36,6 +36,7 @@ const apps = fs.readdirSync(appsDir) path: path.join(appsDir, appName), file: 'app.jsx', htmlPath: 'html', + staticPath: 'static', templateDirs: ['layouts'] } }) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index b0fb35c..0939377 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -14,8 +14,8 @@ const ignoreFiles = ['.DS_Store']; // ----------------------------------------------------------------------------- // Generate the output file name and path // ----------------------------------------------------------------------------- -function outFilePath(page, outputPath, fullInputPath, originalInputPath) { - let out = path.join(outputPath, fullInputPath.replace(originalInputPath, '')); +function outFilePath(page, outputPath, inputFilePath, originalInputPath) { + let out = path.join(outputPath, inputFilePath.replace(originalInputPath, '')); if (page && page.destination && page.destination.length > 0) { if (_.endsWith(page.destination, '/')) { out = path.join(outputPath, page.destination, 'index.html'); @@ -29,7 +29,7 @@ function outFilePath(page, outputPath, fullInputPath, originalInputPath) { // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, ext, htmlOptions) { +function buildContent(fullPath, webpackOptions, webpackAssets, ext, htmlOptions) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -64,8 +64,8 @@ function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, // Apply template data.content = html; // Pass in generated html - html = templates.apply(data, fullPath, htmlOptions.templateMap, templateDirs); - html = applyProduction(html, stage, webpackAssets, buildSuffix); + html = templates.apply(data, fullPath, htmlOptions.templateMap, webpackOptions.templateDirs); + html = applyProduction(html, webpackOptions.stage, webpackAssets, webpackOptions.buildSuffix); return { title, @@ -78,55 +78,70 @@ function buildContent(fullPath, templateDirs, webpackAssets, stage, buildSuffix, } +// ----------------------------------------------------------------------------- +// responsible for writing out html content after it's built or copying static files +// ----------------------------------------------------------------------------- +function writeContent( + originalInputPath, + inputFilePath, + webpackAssets, + webpackOptions, + htmlOptions) { + const ext = path.extname(inputFilePath); + if (_.includes(htmlOptions.buildExtensions, ext)) { + const page = buildContent( + inputFilePath, + webpackOptions, + webpackAssets, + ext, + htmlOptions); + const out = outFilePath(page, webpackOptions.appOutputPath, inputFilePath, originalInputPath); + page.outputFilePath = file.write( + out, page.html, htmlOptions); + return page; + } + const out = outFilePath(null, webpackOptions.appOutputPath, inputFilePath, originalInputPath); + file.copy(inputFilePath, out); + return null; +} + // ----------------------------------------------------------------------------- // build html and markdown files in a given directory // ----------------------------------------------------------------------------- function buildContents( originalInputPath, inputPath, - outputPath, + webpackOptions, webpackAssets, - stage, - buildSuffix, - templateDirs, htmlOptions) { let results = []; const files = fs.readdirSync(inputPath); files.forEach((fileName) => { - const fullInputPath = path.join(inputPath, fileName); - const doOutput = templateDirs.indexOf(fullInputPath) < 0 && // Ignore template dirs + const inputFilePath = path.join(inputPath, fileName); + + // Ignore template dirs + const doOutput = webpackOptions.templateDirs.indexOf(inputFilePath) < 0 && !_.includes(ignoreFiles, fileName); if (doOutput) { - if (fs.statSync(fullInputPath).isDirectory()) { + if (fs.statSync(inputFilePath).isDirectory()) { results = _.concat(results, buildContents( originalInputPath, - fullInputPath, - outputPath, + inputFilePath, + webpackOptions, webpackAssets, - stage, - buildSuffix, - templateDirs, htmlOptions )); } else { - - const ext = path.extname(fullInputPath); - if (_.includes(htmlOptions.buildExtensions, ext)) { - const page = buildContent( - fullInputPath, - templateDirs, - webpackAssets, - stage, - buildSuffix, - ext, - htmlOptions); - page.outputFilePath = file.write( - outFilePath(page, outputPath, fullInputPath, originalInputPath), page.html, htmlOptions); + const page = writeContent( + originalInputPath, + inputFilePath, + webpackAssets, + webpackOptions, + htmlOptions); + if (page) { results.push(page); - } else { - file.copy(fullInputPath, outFilePath(null, outputPath, fullInputPath, originalInputPath)); } } } @@ -137,5 +152,6 @@ function buildContents( module.exports = { buildContent, buildContents, + writeContent, outFilePath }; diff --git a/client/libs/build/index.js b/client/libs/build/index.js index e172ab2..29c6991 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -10,13 +10,6 @@ const content = require('./content'); // Settings const webpackConfigBuilder = require('../../config/webpack.config'); -// ----------------------------------------------------------------------------- -// Helper function to generate full template paths for the given app -// ----------------------------------------------------------------------------- -function templateDirs(app){ - return _.map(app.templateDirs, templateDir => path.join(app.path, app.htmlPath, templateDir)); -} - // ----------------------------------------------------------------------------- // run webpack to build entries // ----------------------------------------------------------------------------- @@ -49,11 +42,10 @@ function buildWebpackEntries(webpackOptions) { // ----------------------------------------------------------------------------- // copy over static files to build directory // ----------------------------------------------------------------------------- -function buildStatic(outputPath, appPath) { +function buildStatic(staticInputPath, outputPath) { try { - const staticDir = `${appPath}/static`; - console.log(`Copying static files in ${staticDir}`); - fs.copySync(staticDir, outputPath); + console.log(`Copying static files in ${staticInputPath}`); + fs.copySync(staticInputPath, outputPath); } catch (err) { // No static dir. Do nothing } @@ -67,7 +59,8 @@ function build(webpackOptions, htmlOptions) { return new Promise((resolve) => { // Copy static files to build directory - buildStatic(webpackOptions.appOutputPath, webpackOptions.app.path); + const staticInputPath = path.join(webpackOptions.app.path, webpackOptions.app.staticPath); + buildStatic(staticInputPath, webpackOptions.appOutputPath); // Webpack build console.log(`Webpacking ${webpackOptions.appName}`); @@ -81,19 +74,19 @@ function build(webpackOptions, htmlOptions) { // Build html console.log(`Building html for ${webpackOptions.appName}`); - const inputPath = path.join(webpackOptions.app.path, webpackOptions.app.htmlPath); + const htmlInputPath = path.join(webpackOptions.app.path, webpackOptions.app.htmlPath); const pages = content.buildContents( - inputPath, - inputPath, - webpackOptions.appOutputPath, + htmlInputPath, + htmlInputPath, + webpackOptions, webpackAssets, - webpackOptions.stage, - webpackOptions.buildSuffix, - templateDirs(webpackOptions.app), htmlOptions ); + //watchStatic(staticInputPath); + //watchHtml(htmlInputPath, webpackAssets, webpackOptions, htmlOptions); + resolve({ webpackConfig : packResults.webpackConfig, webpackAssets, @@ -105,47 +98,37 @@ function build(webpackOptions, htmlOptions) { } // ----------------------------------------------------------------------------- -// watch +// watchStatic +// Used to copy over static files if they change // ----------------------------------------------------------------------------- -function appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults) { - - // Watch for content to change - nodeWatch(webpackOptions.app.path, { recursive: true }, (evt, filePath) => { +function watchStatic(staticInputPath) { + nodeWatch(staticInputPath, { recursive: true }, (evt, filePath) => { + fs.copySync(filePath, webpackOptions.appOutputPath); + }); +} - const originalInputPath = path.join(webpackOptions.app.path, webpackOptions.app.htmlPath); +// ----------------------------------------------------------------------------- +// watchHtml +// Used to rebuild html or templates if files change. +// ----------------------------------------------------------------------------- +function watchHtml(htmlInputPath, webpackAssets, webpackOptions, htmlOptions) { - // Build the page - const page = content.buildContent( - filePath, - templateDirs(webpackOptions.app), - buildResults.webpackAssets, + // Watch for content to change + nodeWatch(htmlInputPath, { recursive: true }, (evt, fullInputPath) => { + content.writeContent( + htmlInputPath, + webpackOptions.appOutputPath, + fullInputPath, + webpackAssets, webpackOptions.stage, - htmlOptions - ); - - page.outputFilePath = file.write( - content.outFilePath( - page, - webpackOptions.appOutputPath, - filePath, - originalInputPath), - page.html - ); - - }); -} + buildSuffix, + templateDirs, + htmlOptions); -function watch(rootBuildPath, webpackOptions, htmlOptions) { - return new Promise((resolve) => { - build(rootBuildPath, webpackOptions, htmlOptions).then((buildResults) => { - appWatch(rootBuildPath, webpackOptions, htmlOptions, buildResults); - resolve(); - }); }); } module.exports = { - watch, build, buildWebpackEntries }; diff --git a/client/libs/build/webpack_options.js b/client/libs/build/webpack_options.js index 08ad58b..02fc296 100644 --- a/client/libs/build/webpack_options.js +++ b/client/libs/build/webpack_options.js @@ -1,7 +1,15 @@ +const _ = require('lodash'); const path = require('path'); const settings = require('../../config/settings'); +// ----------------------------------------------------------------------------- +// Helper function to generate full template paths for the given app +// ----------------------------------------------------------------------------- +function templateDirs(app){ + return _.map(app.templateDirs, templateDir => path.join(app.path, app.htmlPath, templateDir)); +} + // ----------------------------------------------------------------------------- // Generates webpack options that can be provided to webpackConfigBuilder // ----------------------------------------------------------------------------- @@ -32,6 +40,7 @@ module.exports = function buildWebpackOptions(appName, app, port, options) { production, appOutputPath, rootOutputPath, - publicPath + publicPath, + templateDirs: templateDirs(app) }; }; From 3e248947767f3169c403d925e52e2a95093764f1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 5 Apr 2017 23:53:57 -0400 Subject: [PATCH 316/452] Use build options instead of webpack options. --- client/config/karma.js | 6 +-- client/libs/build/apps.js | 8 ++-- .../{webpack_options.js => build_options.js} | 5 ++- client/libs/build/content.js | 45 +++++++++---------- client/libs/build/index.js | 37 ++++++++------- 5 files changed, 49 insertions(+), 52 deletions(-) rename client/libs/build/{webpack_options.js => build_options.js} (92%) diff --git a/client/config/karma.js b/client/config/karma.js index 3097685..e8556d2 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -3,18 +3,18 @@ const _ = require('lodash'); const settings = require('./settings'); const webpackConfigBuilder = require('./webpack.config'); const apps = require('../libs/build/apps'); -const buildWebpackOptions = require('../libs/build/webpack_options'); +const buildOptions = require('../libs/build/build_options'); module.exports = () => { - const webpackOptions = buildWebpackOptions('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, settings.hotPort, { stage: 'test', onlyPack: true }); + const webpackOptions = buildOptions('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, settings.hotPort, { stage: 'test', onlyPack: true }); const webpackConfig = webpackConfigBuilder(webpackOptions); const plugins = webpackConfig.plugins; const module = webpackConfig.module; const resolve = webpackConfig.resolve; _.each(settings.apps, (app, appName) => { - const appWebpackOptions = buildWebpackOptions(appName, app, settings.hotPort, { stage: 'test', onlyPack: true }); + const appWebpackOptions = buildOptions(appName, app, settings.hotPort, { stage: 'test', onlyPack: true }); const appWebpackConfig = webpackConfigBuilder(appWebpackOptions); resolve.modules = _.union(resolve.modules, appWebpackConfig.resolve.modules); }); diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 4f9320d..93bea88 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -3,7 +3,7 @@ const _ = require('lodash'); const settings = require('../../config/settings'); const build = require('./index'); -const buildWebpackOptions = require('./webpack_options'); +const buildOptions = require('./build_options'); // ----------------------------------------------------------------------------- // Iterate through all applications calling the callback with the webpackOptions @@ -11,7 +11,7 @@ const buildWebpackOptions = require('./webpack_options'); function iterateApps(options, cb) { let port = parseInt(settings.hotPort, 10); return _.map(settings.apps, (app, appName) => { - const webpackOptions = buildWebpackOptions(appName, app, port, options); + const webpackOptions = buildOptions(appName, app, port, options); port += 1; cb(webpackOptions); return webpackOptions; @@ -36,7 +36,7 @@ function buildAppParts(webpackOptions, onlyPack) { console.log(`Finished Javascript for ${webpackOptions.appName}`); }); } else { - build.build(webpackOptions, settings.htmlOptions).then((result) => { + build.build(webpackOptions).then((result) => { console.log(`Finished Javascript for ${webpackOptions.appName}.`); console.log(`Built ${result.pages.length} pages.`); }); @@ -48,7 +48,7 @@ function buildAppParts(webpackOptions, onlyPack) { // ----------------------------------------------------------------------------- function buildApp(appName, options, launchCallback) { const app = _.find(settings.apps, (e, name) => appName === name); - const webpackOptions = buildWebpackOptions(appName, app, settings.hotPort, options); + const webpackOptions = buildOptions(appName, app, settings.hotPort, options); buildAppParts(webpackOptions, options.onlyPack); launchHotWrapper(launchCallback, webpackOptions); } diff --git a/client/libs/build/webpack_options.js b/client/libs/build/build_options.js similarity index 92% rename from client/libs/build/webpack_options.js rename to client/libs/build/build_options.js index 02fc296..d635796 100644 --- a/client/libs/build/webpack_options.js +++ b/client/libs/build/build_options.js @@ -13,7 +13,7 @@ function templateDirs(app){ // ----------------------------------------------------------------------------- // Generates webpack options that can be provided to webpackConfigBuilder // ----------------------------------------------------------------------------- -module.exports = function buildWebpackOptions(appName, app, port, options) { +module.exports = function buildOptions(appName, app, port, options) { const production = options.stage === 'production' || options.stage === 'staging'; let rootOutputPath = settings.devOutput; @@ -41,6 +41,7 @@ module.exports = function buildWebpackOptions(appName, app, port, options) { appOutputPath, rootOutputPath, publicPath, - templateDirs: templateDirs(app) + templateDirs: templateDirs(app), + htmlOptions: settings.htmlOptions }; }; diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 0939377..0f80e7f 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -29,7 +29,7 @@ function outFilePath(page, outputPath, inputFilePath, originalInputPath) { // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -function buildContent(fullPath, webpackOptions, webpackAssets, ext, htmlOptions) { +function buildContent(fullPath, buildOptions, webpackAssets, ext) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -40,7 +40,7 @@ function buildContent(fullPath, webpackOptions, webpackAssets, ext, htmlOptions) title, metadata, url: destination - }, htmlOptions.templateData); + }, buildOptions.htmlOptions.templateData); let html = parsed.body; @@ -52,7 +52,7 @@ function buildContent(fullPath, webpackOptions, webpackAssets, ext, htmlOptions) })(data); // Parse any markdown in the resulting html - if (_.includes(htmlOptions.markdownExtensions, ext)) { + if (_.includes(buildOptions.htmlOptions.markdownExtensions, ext)) { html = marked(html); } } catch (err) { @@ -64,8 +64,11 @@ function buildContent(fullPath, webpackOptions, webpackAssets, ext, htmlOptions) // Apply template data.content = html; // Pass in generated html - html = templates.apply(data, fullPath, htmlOptions.templateMap, webpackOptions.templateDirs); - html = applyProduction(html, webpackOptions.stage, webpackAssets, webpackOptions.buildSuffix); + html = templates.apply(data, + fullPath, + buildOptions.htmlOptions.templateMap, + buildOptions.templateDirs); + html = applyProduction(html, buildOptions.stage, webpackAssets, buildOptions.buildSuffix); return { title, @@ -85,22 +88,19 @@ function writeContent( originalInputPath, inputFilePath, webpackAssets, - webpackOptions, - htmlOptions) { + buildOptions) { const ext = path.extname(inputFilePath); - if (_.includes(htmlOptions.buildExtensions, ext)) { + if (_.includes(buildOptions.htmlOptions.buildExtensions, ext)) { const page = buildContent( inputFilePath, - webpackOptions, + buildOptions, webpackAssets, - ext, - htmlOptions); - const out = outFilePath(page, webpackOptions.appOutputPath, inputFilePath, originalInputPath); - page.outputFilePath = file.write( - out, page.html, htmlOptions); + ext); + const out = outFilePath(page, buildOptions.appOutputPath, inputFilePath, originalInputPath); + page.outputFilePath = file.write(out, page.html); return page; } - const out = outFilePath(null, webpackOptions.appOutputPath, inputFilePath, originalInputPath); + const out = outFilePath(null, buildOptions.appOutputPath, inputFilePath, originalInputPath); file.copy(inputFilePath, out); return null; } @@ -111,9 +111,8 @@ function writeContent( function buildContents( originalInputPath, inputPath, - webpackOptions, - webpackAssets, - htmlOptions) { + buildOptions, + webpackAssets) { let results = []; const files = fs.readdirSync(inputPath); @@ -122,24 +121,22 @@ function buildContents( const inputFilePath = path.join(inputPath, fileName); // Ignore template dirs - const doOutput = webpackOptions.templateDirs.indexOf(inputFilePath) < 0 && + const doOutput = buildOptions.templateDirs.indexOf(inputFilePath) < 0 && !_.includes(ignoreFiles, fileName); if (doOutput) { if (fs.statSync(inputFilePath).isDirectory()) { results = _.concat(results, buildContents( originalInputPath, inputFilePath, - webpackOptions, - webpackAssets, - htmlOptions + buildOptions, + webpackAssets )); } else { const page = writeContent( originalInputPath, inputFilePath, webpackAssets, - webpackOptions, - htmlOptions); + buildOptions); if (page) { results.push(page); } diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 29c6991..9206a10 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -13,10 +13,10 @@ const webpackConfigBuilder = require('../../config/webpack.config'); // ----------------------------------------------------------------------------- // run webpack to build entries // ----------------------------------------------------------------------------- -function buildWebpackEntries(webpackOptions) { +function buildWebpackEntries(buildOptions) { return new Promise((resolve, reject) => { - const webpackConfig = webpackConfigBuilder(webpackOptions); - if (webpackOptions.stage !== 'hot') { + const webpackConfig = webpackConfigBuilder(buildOptions); + if (buildOptions.stage !== 'hot') { const bundler = webpack(webpackConfig); const bundle = (err, stats) => { if (err) { @@ -54,38 +54,37 @@ function buildStatic(staticInputPath, outputPath) { // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- -function build(webpackOptions, htmlOptions) { +function build(buildOptions) { return new Promise((resolve) => { // Copy static files to build directory - const staticInputPath = path.join(webpackOptions.app.path, webpackOptions.app.staticPath); - buildStatic(staticInputPath, webpackOptions.appOutputPath); + const staticInputPath = path.join(buildOptions.app.path, buildOptions.app.staticPath); + buildStatic(staticInputPath, buildOptions.appOutputPath); // Webpack build - console.log(`Webpacking ${webpackOptions.appName}`); + console.log(`Webpacking ${buildOptions.appName}`); - buildWebpackEntries(webpackOptions).then((packResults) => { + buildWebpackEntries(buildOptions).then((packResults) => { let webpackAssets = null; - const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${webpackOptions.appName}-webpack-assets.json`; + const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${buildOptions.appName}-webpack-assets.json`; if (fs.existsSync(webpackAssetsFilePath)) { webpackAssets = fs.readJsonSync(webpackAssetsFilePath); } // Build html - console.log(`Building html for ${webpackOptions.appName}`); - const htmlInputPath = path.join(webpackOptions.app.path, webpackOptions.app.htmlPath); + console.log(`Building html for ${buildOptions.appName}`); + const htmlInputPath = path.join(buildOptions.app.path, buildOptions.app.htmlPath); const pages = content.buildContents( htmlInputPath, htmlInputPath, - webpackOptions, - webpackAssets, - htmlOptions + buildOptions, + webpackAssets ); //watchStatic(staticInputPath); - //watchHtml(htmlInputPath, webpackAssets, webpackOptions, htmlOptions); + //watchHtml(htmlInputPath, webpackAssets, buildOptions, htmlOptions); resolve({ webpackConfig : packResults.webpackConfig, @@ -103,7 +102,7 @@ function build(webpackOptions, htmlOptions) { // ----------------------------------------------------------------------------- function watchStatic(staticInputPath) { nodeWatch(staticInputPath, { recursive: true }, (evt, filePath) => { - fs.copySync(filePath, webpackOptions.appOutputPath); + fs.copySync(filePath, buildOptions.appOutputPath); }); } @@ -111,16 +110,16 @@ function watchStatic(staticInputPath) { // watchHtml // Used to rebuild html or templates if files change. // ----------------------------------------------------------------------------- -function watchHtml(htmlInputPath, webpackAssets, webpackOptions, htmlOptions) { +function watchHtml(htmlInputPath, webpackAssets, buildOptions, htmlOptions) { // Watch for content to change nodeWatch(htmlInputPath, { recursive: true }, (evt, fullInputPath) => { content.writeContent( htmlInputPath, - webpackOptions.appOutputPath, + buildOptions.appOutputPath, fullInputPath, webpackAssets, - webpackOptions.stage, + buildOptions.stage, buildSuffix, templateDirs, htmlOptions); From a4c8d6fc71a53a68e28e9e32495c1487f0c3c455 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 6 Apr 2017 08:31:06 -0400 Subject: [PATCH 317/452] Fixes html watch code --- client/libs/build/content.js | 4 +--- client/libs/build/index.js | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 0f80e7f..e8fd667 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -147,8 +147,6 @@ function buildContents( } module.exports = { - buildContent, buildContents, - writeContent, - outFilePath + writeContent }; diff --git a/client/libs/build/index.js b/client/libs/build/index.js index 9206a10..be63b90 100644 --- a/client/libs/build/index.js +++ b/client/libs/build/index.js @@ -45,7 +45,7 @@ function buildWebpackEntries(buildOptions) { function buildStatic(staticInputPath, outputPath) { try { console.log(`Copying static files in ${staticInputPath}`); - fs.copySync(staticInputPath, outputPath); + fs.copy(staticInputPath, outputPath); } catch (err) { // No static dir. Do nothing } @@ -83,8 +83,11 @@ function build(buildOptions) { webpackAssets ); - //watchStatic(staticInputPath); - //watchHtml(htmlInputPath, webpackAssets, buildOptions, htmlOptions); + if (buildOptions.stage == 'hot') { + watchStatic(staticInputPath, buildOptions); + watchHtml(htmlInputPath, webpackAssets, buildOptions); + // TODO figure out how to watch template files - requires rebuild of all html + } resolve({ webpackConfig : packResults.webpackConfig, @@ -100,8 +103,10 @@ function build(buildOptions) { // watchStatic // Used to copy over static files if they change // ----------------------------------------------------------------------------- -function watchStatic(staticInputPath) { +function watchStatic(staticInputPath, buildOptions) { + console.log(`Watching static files in ${staticInputPath}`); nodeWatch(staticInputPath, { recursive: true }, (evt, filePath) => { + console.log(`Change in static file ${filePath}`); fs.copySync(filePath, buildOptions.appOutputPath); }); } @@ -110,20 +115,15 @@ function watchStatic(staticInputPath) { // watchHtml // Used to rebuild html or templates if files change. // ----------------------------------------------------------------------------- -function watchHtml(htmlInputPath, webpackAssets, buildOptions, htmlOptions) { - - // Watch for content to change +function watchHtml(htmlInputPath, webpackAssets, buildOptions) { + console.log(`Watching html files in ${htmlInputPath}`); nodeWatch(htmlInputPath, { recursive: true }, (evt, fullInputPath) => { + console.log(`Change in html file ${fullInputPath}`); content.writeContent( htmlInputPath, - buildOptions.appOutputPath, fullInputPath, webpackAssets, - buildOptions.stage, - buildSuffix, - templateDirs, - htmlOptions); - + buildOptions); }); } From 438d46ae25e062136cff932414e217b75df56af8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 6 Apr 2017 23:25:06 -0400 Subject: [PATCH 318/452] Renaming webpackOptions to buildOptions. Decoupling launch. --- client/libs/build/apps.js | 52 +++++++++++++++++---------------------- client/webpack.hot.js | 31 ++++++++++++----------- 2 files changed, 39 insertions(+), 44 deletions(-) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 93bea88..9892e9d 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -3,41 +3,31 @@ const _ = require('lodash'); const settings = require('../../config/settings'); const build = require('./index'); -const buildOptions = require('./build_options'); +const buildOptionsGenerator = require('./build_options'); // ----------------------------------------------------------------------------- -// Iterate through all applications calling the callback with the webpackOptions +// Iterate through all applications calling the callback with the buildOptions // ----------------------------------------------------------------------------- -function iterateApps(options, cb) { +function allAppBuildOptions(options) { let port = parseInt(settings.hotPort, 10); return _.map(settings.apps, (app, appName) => { - const webpackOptions = buildOptions(appName, app, port, options); + const buildOptions = buildOptionsGenerator(appName, app, port, options); port += 1; - cb(webpackOptions); - return webpackOptions; + return buildOptions; }); } -// ----------------------------------------------------------------------------- -// Wrapper to provide values for launching a webpack server -// ----------------------------------------------------------------------------- -function launchHotWrapper(launchCallback, webpackOptions) { - if (launchCallback) { - launchCallback(webpackOptions); - } -} - // ----------------------------------------------------------------------------- // Build a single app // ----------------------------------------------------------------------------- -function buildAppParts(webpackOptions, onlyPack) { +function buildAppParts(buildOptions, onlyPack) { if (onlyPack) { - build.buildWebpackEntries(webpackOptions).then(() => { - console.log(`Finished Javascript for ${webpackOptions.appName}`); + return build.buildWebpackEntries(buildOptions).then(() => { + console.log(`Finished Javascript for ${buildOptions.appName}`); }); } else { - build.build(webpackOptions).then((result) => { - console.log(`Finished Javascript for ${webpackOptions.appName}.`); + return build.build(buildOptions).then((result) => { + console.log(`Finished Javascript for ${buildOptions.appName}.`); console.log(`Built ${result.pages.length} pages.`); }); } @@ -46,21 +36,25 @@ function buildAppParts(webpackOptions, onlyPack) { // ----------------------------------------------------------------------------- // Build a single app // ----------------------------------------------------------------------------- -function buildApp(appName, options, launchCallback) { +function buildApp(appName, options) { const app = _.find(settings.apps, (e, name) => appName === name); - const webpackOptions = buildOptions(appName, app, settings.hotPort, options); - buildAppParts(webpackOptions, options.onlyPack); - launchHotWrapper(launchCallback, webpackOptions); + const buildOptions = buildOptionsGenerator(appName, app, settings.hotPort, options); + return { + buildOptions, + buildPromise: buildAppParts(buildOptions, options.onlyPack) + }; } // ----------------------------------------------------------------------------- // Build all apps // ----------------------------------------------------------------------------- -function buildApps(options, launchCallback) { - return iterateApps(options, (webpackOptions) => { - fs.emptyDirSync(webpackOptions.appOutputPath); - buildAppParts(webpackOptions, options.onlyPack); - launchHotWrapper(launchCallback, webpackOptions); +function buildApps(options) { + return _.map(allAppBuildOptions(options), (buildOptions) => { + fs.emptyDirSync(buildOptions.appOutputPath); + return { + buildOptions, + buildPromise: buildAppParts(buildOptions, options.onlyPack) + }; }); } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 57b3abd..4491a97 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -16,9 +16,9 @@ const localIp = '0.0.0.0'; const appName = argv._[0]; const hotPack = argv.hotPack; -function setupMiddleware(webpackOptions) { +function setupMiddleware(buildOptions) { - const webpackConfig = webpackConfigBuilder(webpackOptions); + const webpackConfig = webpackConfigBuilder(buildOptions); const compiler = webpack(webpackConfig); const webpackMiddlewareInstance = webpackMiddleware(compiler, { @@ -28,11 +28,11 @@ function setupMiddleware(webpackOptions) { headers: { 'Access-Control-Allow-Origin': '*' } }); - app.use(express.static(webpackOptions.appOutputPath)); + app.use(express.static(buildOptions.appOutputPath)); app.use(webpackMiddlewareInstance); app.use(webpackHotMiddleware(compiler)); app.get('*', (req, res) => { - res.sendFile(path.join(webpackOptions.appOutputPath, req.url)); + res.sendFile(path.join(buildOptions.appOutputPath, req.url)); }); } @@ -47,26 +47,27 @@ function runServer(port, servePath) { }); } -function launch(webpackOptions) { - setupMiddleware(webpackOptions); - runServer(webpackOptions.port, webpackOptions.appOutputPath); +function launch(buildOptions) { + setupMiddleware(buildOptions); + runServer(buildOptions.port, buildOptions.appOutputPath); } const options = { stage: 'hot', onlyPack: false }; if (appName) { - clientApps.buildApp(appName, options, launch); + const result = clientApps.buildApp(appName, options); + launch(result.buildOptions); } else if (hotPack) { options.onlyPack = true; - const webpackConfigs = clientApps.buildApps(options, null); - _.each(webpackConfigs, (webpackOptions) => { + const results = clientApps.buildApps(options); + _.each(results, (result) => { setupMiddleware(_.merge({}, - webpackOptions, - { - publicPath: `/${webpackOptions.appName}` - } + result.buildOptions, + { publicPath: `/${result.buildOptions.appName}` } )); }); runServer(settings.hotPort, settings.devOutput); } else { - clientApps.buildApps(options, launch); + _.each(clientApps.buildApps(options), (result) => { + launch(result.buildOptions); + }); } From 0786db95b5460a62a911e8e2e6f2417bdf0d4d87 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 7 Apr 2017 22:50:01 -0400 Subject: [PATCH 319/452] Rename file --- client/libs/build/apps.js | 2 +- client/libs/build/{index.js => build.js} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename client/libs/build/{index.js => build.js} (100%) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 9892e9d..df8dbde 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -2,7 +2,7 @@ const fs = require('fs-extra'); const _ = require('lodash'); const settings = require('../../config/settings'); -const build = require('./index'); +const build = require('./build'); const buildOptionsGenerator = require('./build_options'); // ----------------------------------------------------------------------------- diff --git a/client/libs/build/index.js b/client/libs/build/build.js similarity index 100% rename from client/libs/build/index.js rename to client/libs/build/build.js From e9f31412fc96171660ae454eb660fdd4455b5443 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 7 Apr 2017 22:59:59 -0400 Subject: [PATCH 320/452] Use consistent names in tests --- client/config/karma.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/config/karma.js b/client/config/karma.js index e8556d2..cdee394 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -3,19 +3,19 @@ const _ = require('lodash'); const settings = require('./settings'); const webpackConfigBuilder = require('./webpack.config'); const apps = require('../libs/build/apps'); -const buildOptions = require('../libs/build/build_options'); +const buildOptionsGenerator = require('../libs/build/build_options'); module.exports = () => { - const webpackOptions = buildOptions('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, settings.hotPort, { stage: 'test', onlyPack: true }); - const webpackConfig = webpackConfigBuilder(webpackOptions); + const buildOptions = buildOptionsGenerator('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, settings.hotPort, { stage: 'test', onlyPack: true }); + const webpackConfig = webpackConfigBuilder(buildOptions); const plugins = webpackConfig.plugins; const module = webpackConfig.module; const resolve = webpackConfig.resolve; _.each(settings.apps, (app, appName) => { - const appWebpackOptions = buildOptions(appName, app, settings.hotPort, { stage: 'test', onlyPack: true }); - const appWebpackConfig = webpackConfigBuilder(appWebpackOptions); + const appbuildOptions = buildOptionsGenerator(appName, app, settings.hotPort, { stage: 'test', onlyPack: true }); + const appWebpackConfig = webpackConfigBuilder(appbuildOptions); resolve.modules = _.union(resolve.modules, appWebpackConfig.resolve.modules); }); From 53d5dc2e00602379a54a00469f28d8b31a1c8767 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 7 Apr 2017 23:02:22 -0400 Subject: [PATCH 321/452] Refactor appOutputPath into just outputPath --- client/libs/build/apps.js | 2 +- client/libs/build/build.js | 4 ++-- client/libs/build/content.js | 4 ++-- client/webpack.hot.js | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index df8dbde..db10344 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -50,7 +50,7 @@ function buildApp(appName, options) { // ----------------------------------------------------------------------------- function buildApps(options) { return _.map(allAppBuildOptions(options), (buildOptions) => { - fs.emptyDirSync(buildOptions.appOutputPath); + fs.emptyDirSync(buildOptions.outputPath); return { buildOptions, buildPromise: buildAppParts(buildOptions, options.onlyPack) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index be63b90..ef62fd5 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -60,7 +60,7 @@ function build(buildOptions) { // Copy static files to build directory const staticInputPath = path.join(buildOptions.app.path, buildOptions.app.staticPath); - buildStatic(staticInputPath, buildOptions.appOutputPath); + buildStatic(staticInputPath, buildOptions.outputPath); // Webpack build console.log(`Webpacking ${buildOptions.appName}`); @@ -107,7 +107,7 @@ function watchStatic(staticInputPath, buildOptions) { console.log(`Watching static files in ${staticInputPath}`); nodeWatch(staticInputPath, { recursive: true }, (evt, filePath) => { console.log(`Change in static file ${filePath}`); - fs.copySync(filePath, buildOptions.appOutputPath); + fs.copySync(filePath, buildOptions.outputPath); }); } diff --git a/client/libs/build/content.js b/client/libs/build/content.js index e8fd667..4451bf9 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -96,11 +96,11 @@ function writeContent( buildOptions, webpackAssets, ext); - const out = outFilePath(page, buildOptions.appOutputPath, inputFilePath, originalInputPath); + const out = outFilePath(page, buildOptions.outputPath, inputFilePath, originalInputPath); page.outputFilePath = file.write(out, page.html); return page; } - const out = outFilePath(null, buildOptions.appOutputPath, inputFilePath, originalInputPath); + const out = outFilePath(null, buildOptions.outputPath, inputFilePath, originalInputPath); file.copy(inputFilePath, out); return null; } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 4491a97..a649265 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -28,11 +28,11 @@ function setupMiddleware(buildOptions) { headers: { 'Access-Control-Allow-Origin': '*' } }); - app.use(express.static(buildOptions.appOutputPath)); + app.use(express.static(buildOptions.outputPath)); app.use(webpackMiddlewareInstance); app.use(webpackHotMiddleware(compiler)); app.get('*', (req, res) => { - res.sendFile(path.join(buildOptions.appOutputPath, req.url)); + res.sendFile(path.join(buildOptions.outputPath, req.url)); }); } @@ -49,7 +49,7 @@ function runServer(port, servePath) { function launch(buildOptions) { setupMiddleware(buildOptions); - runServer(buildOptions.port, buildOptions.appOutputPath); + runServer(buildOptions.port, buildOptions.outputPath); } const options = { stage: 'hot', onlyPack: false }; From 0bea17036a859106ab2ff7c07c8fc553849b6c95 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 7 Apr 2017 23:14:14 -0400 Subject: [PATCH 322/452] Change the rest of the output names --- client/config/webpack.config.js | 4 ++-- client/libs/build/build_options.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 58aab68..4a119fe 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -80,7 +80,7 @@ module.exports = function webpackConfig(options) { }), // Generate webpack-assets.json to map path to assets generated with hashed names new AssetsPlugin({ - path: options.appOutputPath, + path: options.outputPath, fullPath: false, filename: `${options.appName}-webpack-assets.json` }), @@ -128,7 +128,7 @@ module.exports = function webpackConfig(options) { output: { publicPath: options.publicPath, // Location where generated files will be output - path: options.appOutputPath, + path: options.outputPath, filename: options.production ? `[name]-[chunkhash]${options.buildSuffix}` : `[name]${options.buildSuffix}`, chunkFilename: options.production ? `[id]-[chunkhash]${options.buildSuffix}` : `[id]${options.buildSuffix}`, sourceMapFilename: '[name].map', diff --git a/client/libs/build/build_options.js b/client/libs/build/build_options.js index d635796..b92e5f4 100644 --- a/client/libs/build/build_options.js +++ b/client/libs/build/build_options.js @@ -17,7 +17,7 @@ module.exports = function buildOptions(appName, app, port, options) { const production = options.stage === 'production' || options.stage === 'staging'; let rootOutputPath = settings.devOutput; - let appOutputPath = options.onlyPack ? + let outputPath = options.onlyPack ? settings.devOutput : path.join(settings.devOutput, appName); // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In developerment this will @@ -26,7 +26,7 @@ module.exports = function buildOptions(appName, app, port, options) { if (production) { rootOutputPath = settings.prodOutput; - appOutputPath = options.onlyPack ? + outputPath = options.onlyPack ? settings.prodOutput : path.join(settings.prodOutput, appName); publicPath = settings.prodAssetsUrl + settings.prodRelativeOutput; } @@ -38,7 +38,7 @@ module.exports = function buildOptions(appName, app, port, options) { buildSuffix: settings.buildSuffix, port, production, - appOutputPath, + outputPath, rootOutputPath, publicPath, templateDirs: templateDirs(app), From cbae60dcc42b4104a74e144d9341030b31b7a273 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 8 Apr 2017 08:54:37 -0400 Subject: [PATCH 323/452] Fixes lint errors --- client/libs/build/apps.js | 9 +++--- client/libs/build/build.js | 60 ++++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 36 deletions(-) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index db10344..0b2b912 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -25,12 +25,11 @@ function buildAppParts(buildOptions, onlyPack) { return build.buildWebpackEntries(buildOptions).then(() => { console.log(`Finished Javascript for ${buildOptions.appName}`); }); - } else { - return build.build(buildOptions).then((result) => { - console.log(`Finished Javascript for ${buildOptions.appName}.`); - console.log(`Built ${result.pages.length} pages.`); - }); } + return build.build(buildOptions).then((result) => { + console.log(`Finished Javascript for ${buildOptions.appName}.`); + console.log(`Built ${result.pages.length} pages.`); + }); } // ----------------------------------------------------------------------------- diff --git a/client/libs/build/build.js b/client/libs/build/build.js index ef62fd5..1b44b3a 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -1,10 +1,8 @@ const path = require('path'); const fs = require('fs-extra'); -const _ = require('lodash'); const webpack = require('webpack'); const nodeWatch = require('node-watch'); -const file = require('./file'); const content = require('./content'); // Settings @@ -51,6 +49,34 @@ function buildStatic(staticInputPath, outputPath) { } } +// ----------------------------------------------------------------------------- +// watchStatic +// Used to copy over static files if they change +// ----------------------------------------------------------------------------- +function watchStatic(staticInputPath, buildOptions) { + console.log(`Watching static files in ${staticInputPath}`); + nodeWatch(staticInputPath, { recursive: true }, (evt, filePath) => { + console.log(`Change in static file ${filePath}`); + fs.copySync(filePath, buildOptions.outputPath); + }); +} + +// ----------------------------------------------------------------------------- +// watchHtml +// Used to rebuild html or templates if files change. +// ----------------------------------------------------------------------------- +function watchHtml(htmlInputPath, webpackAssets, buildOptions) { + console.log(`Watching html files in ${htmlInputPath}`); + nodeWatch(htmlInputPath, { recursive: true }, (evt, fullInputPath) => { + console.log(`Change in html file ${fullInputPath}`); + content.writeContent( + htmlInputPath, + fullInputPath, + webpackAssets, + buildOptions); + }); +} + // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- @@ -83,7 +109,7 @@ function build(buildOptions) { webpackAssets ); - if (buildOptions.stage == 'hot') { + if (buildOptions.stage === 'hot') { watchStatic(staticInputPath, buildOptions); watchHtml(htmlInputPath, webpackAssets, buildOptions); // TODO figure out how to watch template files - requires rebuild of all html @@ -99,34 +125,6 @@ function build(buildOptions) { }); } -// ----------------------------------------------------------------------------- -// watchStatic -// Used to copy over static files if they change -// ----------------------------------------------------------------------------- -function watchStatic(staticInputPath, buildOptions) { - console.log(`Watching static files in ${staticInputPath}`); - nodeWatch(staticInputPath, { recursive: true }, (evt, filePath) => { - console.log(`Change in static file ${filePath}`); - fs.copySync(filePath, buildOptions.outputPath); - }); -} - -// ----------------------------------------------------------------------------- -// watchHtml -// Used to rebuild html or templates if files change. -// ----------------------------------------------------------------------------- -function watchHtml(htmlInputPath, webpackAssets, buildOptions) { - console.log(`Watching html files in ${htmlInputPath}`); - nodeWatch(htmlInputPath, { recursive: true }, (evt, fullInputPath) => { - console.log(`Change in html file ${fullInputPath}`); - content.writeContent( - htmlInputPath, - fullInputPath, - webpackAssets, - buildOptions); - }); -} - module.exports = { build, buildWebpackEntries From 31f890ae77977ae6a3eee3ff45382d4fec0f93c1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 9 Apr 2017 08:41:08 -0400 Subject: [PATCH 324/452] Fixes promises returned when building apps. --- client/libs/build/apps.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 0b2b912..a0d17a0 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -22,14 +22,18 @@ function allAppBuildOptions(options) { // ----------------------------------------------------------------------------- function buildAppParts(buildOptions, onlyPack) { if (onlyPack) { - return build.buildWebpackEntries(buildOptions).then(() => { + const buildPromise = build.buildWebpackEntries(buildOptions); + buildPromise.then(() => { console.log(`Finished Javascript for ${buildOptions.appName}`); }); + return buildPromise; } - return build.build(buildOptions).then((result) => { + const buildPromise = build.build(buildOptions); + buildPromise.then((result) => { console.log(`Finished Javascript for ${buildOptions.appName}.`); console.log(`Built ${result.pages.length} pages.`); }); + return buildPromise; } // ----------------------------------------------------------------------------- From d3c196efcec611449dc870a9996fcb3a3eaddb28 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 9 Apr 2017 09:02:49 -0400 Subject: [PATCH 325/452] Extract html build function --- client/libs/build/build.js | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 1b44b3a..5868faf 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -77,6 +77,22 @@ function watchHtml(htmlInputPath, webpackAssets, buildOptions) { }); } +function buildHtml(htmlInputPath, buildOptions, webpackAssets) { + + const pages = content.buildContents( + htmlInputPath, + htmlInputPath, + buildOptions, + webpackAssets + ); + + if (buildOptions.stage === 'hot') { + watchHtml(htmlInputPath, webpackAssets, buildOptions); + } + + return pages; +} + // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- @@ -87,6 +103,9 @@ function build(buildOptions) { // Copy static files to build directory const staticInputPath = path.join(buildOptions.app.path, buildOptions.app.staticPath); buildStatic(staticInputPath, buildOptions.outputPath); + if (buildOptions.stage === 'hot') { + watchStatic(staticInputPath, buildOptions); + } // Webpack build console.log(`Webpacking ${buildOptions.appName}`); @@ -102,18 +121,7 @@ function build(buildOptions) { console.log(`Building html for ${buildOptions.appName}`); const htmlInputPath = path.join(buildOptions.app.path, buildOptions.app.htmlPath); - const pages = content.buildContents( - htmlInputPath, - htmlInputPath, - buildOptions, - webpackAssets - ); - - if (buildOptions.stage === 'hot') { - watchStatic(staticInputPath, buildOptions); - watchHtml(htmlInputPath, webpackAssets, buildOptions); - // TODO figure out how to watch template files - requires rebuild of all html - } + const pages = buildHtml(htmlInputPath, buildOptions, webpackAssets); resolve({ webpackConfig : packResults.webpackConfig, @@ -127,5 +135,6 @@ function build(buildOptions) { module.exports = { build, + buildHtml, buildWebpackEntries }; From 6514284bbe304266b5ea091c3fd3565dbd960cff Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 9 Apr 2017 23:19:23 -0400 Subject: [PATCH 326/452] Fix lint error --- client/libs/build/build_options.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/libs/build/build_options.js b/client/libs/build/build_options.js index b92e5f4..21fb5c1 100644 --- a/client/libs/build/build_options.js +++ b/client/libs/build/build_options.js @@ -6,7 +6,7 @@ const settings = require('../../config/settings'); // ----------------------------------------------------------------------------- // Helper function to generate full template paths for the given app // ----------------------------------------------------------------------------- -function templateDirs(app){ +function templateDirs(app) { return _.map(app.templateDirs, templateDir => path.join(app.path, app.htmlPath, templateDir)); } From 905cdba52abb4cce6bb48cbf4f95252e2a8cb516 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 10:26:20 -0400 Subject: [PATCH 327/452] Move template dir and data into apps --- client/config/settings.js | 7 +++---- client/libs/build/build_options.js | 2 ++ client/libs/build/content.js | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index e171366..320c17a 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -37,7 +37,9 @@ const apps = fs.readdirSync(appsDir) file: 'app.jsx', htmlPath: 'html', staticPath: 'static', - templateDirs: ['layouts'] + templateDirs: ['layouts'], + templateData: {}, // Object that will be passed to every page as it is rendered + templateMap: {}, // Used to specify specific templates on a per file basis } }) , {}); @@ -64,9 +66,6 @@ module.exports = { truncateSummaryAt: 1000, buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) markdownExtensions: ['.md', '.markdown'], // file types to process markdown - templateDirs: [], - templateData: {}, // Object that will be passed to every page as it is rendered - templateMap: {}, // Used to specify specific templates on a per file basis appsDir } diff --git a/client/libs/build/build_options.js b/client/libs/build/build_options.js index 21fb5c1..de42168 100644 --- a/client/libs/build/build_options.js +++ b/client/libs/build/build_options.js @@ -41,6 +41,8 @@ module.exports = function buildOptions(appName, app, port, options) { outputPath, rootOutputPath, publicPath, + templateMap: app.templateMap, + templateData: app.templateData, templateDirs: templateDirs(app), htmlOptions: settings.htmlOptions }; diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 4451bf9..6bfbace 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -40,7 +40,7 @@ function buildContent(fullPath, buildOptions, webpackAssets, ext) { title, metadata, url: destination - }, buildOptions.htmlOptions.templateData); + }, buildOptions.templateData); let html = parsed.body; @@ -66,7 +66,7 @@ function buildContent(fullPath, buildOptions, webpackAssets, ext) { data.content = html; // Pass in generated html html = templates.apply(data, fullPath, - buildOptions.htmlOptions.templateMap, + buildOptions.templateMap, buildOptions.templateDirs); html = applyProduction(html, buildOptions.stage, webpackAssets, buildOptions.buildSuffix); From 597c0d01269d0b702988240aaab1b8716ec672f3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 11:25:11 -0400 Subject: [PATCH 328/452] Remove unused value --- client/config/settings.js | 1 - 1 file changed, 1 deletion(-) diff --git a/client/config/settings.js b/client/config/settings.js index 320c17a..4063b67 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -66,7 +66,6 @@ module.exports = { truncateSummaryAt: 1000, buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) markdownExtensions: ['.md', '.markdown'], // file types to process markdown - appsDir } }; From 5334bb29dd8ca0c735079161919719d70a244aa9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 13:33:28 -0400 Subject: [PATCH 329/452] Move template dirs into settings --- client/config/settings.js | 36 +++++++++++++++++++----------- client/libs/build/build_options.js | 10 +-------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 4063b67..8a9e1b6 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -1,5 +1,6 @@ const fs = require('fs-extra'); const path = require('path'); +const _ = require('lodash'); const deployConfig = require('../../.s3-website.json'); @@ -28,21 +29,30 @@ const hotPort = process.env.ASSETS_PORT || 8080; // These will be used to generate the entries for webpack const appsDir = path.join(__dirname, '../apps/'); +// ----------------------------------------------------------------------------- +// Helper function to generate full template paths for the given app +// ----------------------------------------------------------------------------- +function templateDirs(app, dirs) { + return _.map(dirs, templateDir => path.join(app.path, app.htmlPath, templateDir)); +} + +function appSettings(appName) { + const app = { + path: path.join(appsDir, appName), + file: 'app.jsx', + htmlPath: 'html', + staticPath: 'static', + templateData: {}, // Object that will be passed to every page as it is rendered + templateMap: {}, // Used to specify specific templates on a per file basis + }; + app.templateDirs = templateDirs(app, ['layouts']); + return { + [appName] : app + }; +} const apps = fs.readdirSync(appsDir) .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()) - .reduce( - (result, appName) => Object.assign({}, result, { - [appName] : { - path: path.join(appsDir, appName), - file: 'app.jsx', - htmlPath: 'html', - staticPath: 'static', - templateDirs: ['layouts'], - templateData: {}, // Object that will be passed to every page as it is rendered - templateMap: {}, // Used to specify specific templates on a per file basis - } - }) - , {}); + .reduce((result, appName) => _.merge(result, appSettings(appName)), {}); module.exports = { apps, diff --git a/client/libs/build/build_options.js b/client/libs/build/build_options.js index de42168..1d2368e 100644 --- a/client/libs/build/build_options.js +++ b/client/libs/build/build_options.js @@ -1,15 +1,7 @@ -const _ = require('lodash'); const path = require('path'); const settings = require('../../config/settings'); -// ----------------------------------------------------------------------------- -// Helper function to generate full template paths for the given app -// ----------------------------------------------------------------------------- -function templateDirs(app) { - return _.map(app.templateDirs, templateDir => path.join(app.path, app.htmlPath, templateDir)); -} - // ----------------------------------------------------------------------------- // Generates webpack options that can be provided to webpackConfigBuilder // ----------------------------------------------------------------------------- @@ -43,7 +35,7 @@ module.exports = function buildOptions(appName, app, port, options) { publicPath, templateMap: app.templateMap, templateData: app.templateData, - templateDirs: templateDirs(app), + templateDirs: app.templateDirs, htmlOptions: settings.htmlOptions }; }; From 0288b910cf38166078be25355672aa5f27c4dea3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 15:40:04 -0400 Subject: [PATCH 330/452] Transition to just using app for settings --- client/build.js | 8 +-- client/config/settings.js | 94 +++++++++++++++++++++--------- client/config/webpack.config.js | 50 ++++++++-------- client/libs/build/apps.js | 39 +++++-------- client/libs/build/build.js | 63 +++++++++----------- client/libs/build/build_options.js | 41 ------------- client/libs/build/content.js | 35 +++++------ client/server.js | 17 +++--- client/webpack.hot.js | 38 ++++++------ 9 files changed, 180 insertions(+), 205 deletions(-) delete mode 100644 client/libs/build/build_options.js diff --git a/client/build.js b/client/build.js index abe7022..7f0e351 100644 --- a/client/build.js +++ b/client/build.js @@ -1,9 +1,9 @@ -const argv = require('minimist')(process.argv.slice(2)); - const apps = require('./libs/build/apps'); -const stage = argv.release ? 'production' : 'development'; +const argv = require('minimist')(process.argv.slice(2)); -const options = { stage, onlyPack: argv.onlyPack }; +const stage = argv.release ? 'production' : 'development'; +const port = parseInt(process.env.ASSETS_PORT, 10) || 8080; +const options = { port, stage, onlyPack: argv.onlyPack }; apps.buildApps(options); diff --git a/client/config/settings.js b/client/config/settings.js index 8a9e1b6..2e13b25 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -4,6 +4,8 @@ const _ = require('lodash'); const deployConfig = require('../../.s3-website.json'); +const hotPort = parseInt(process.env.ASSETS_PORT, 10) || 8080; + const devRelativeOutput = '/'; const prodRelativeOutput = '/'; @@ -17,65 +19,101 @@ const prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); // https://s3.amazonaws.com/' + deployConfig.domain; const prodAssetsUrl = `https://s3.amazonaws.com/${deployConfig.domain}`; +const devAssetsUrl = process.env.ASSETS_URL; // There is a warning if the .env file is missing // This is fine in a production setting, where settings // are loaded from the env and not from a file require('dotenv').load({ path: path.join(__dirname, '../../.env') }); -const hotPort = process.env.ASSETS_PORT || 8080; - // Get a list of all directories in the apps directory. // These will be used to generate the entries for webpack const appsDir = path.join(__dirname, '../apps/'); +const buildSuffix = '_bundle.js'; + +const htmlOptions = { // Options for building html files + truncateSummaryAt: 1000, + buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) + markdownExtensions: ['.md', '.markdown'], // file types to process markdown +}; + // ----------------------------------------------------------------------------- // Helper function to generate full template paths for the given app // ----------------------------------------------------------------------------- function templateDirs(app, dirs) { - return _.map(dirs, templateDir => path.join(app.path, app.htmlPath, templateDir)); + return _.map(dirs, templateDir => path.join(app.htmlPath, templateDir)); } -function appSettings(appName) { +function appSettings(name, port, options) { + + const production = options.stage === 'production' || options.stage === 'staging'; + let rootOutputPath = devOutput; + let outputPath = options.onlyPack ? + devOutput : path.join(devOutput, name); + // Public path indicates where the assets will be served from. In dev this will likely be + // localhost or a local domain. In production this could be a CDN. In developerment this will + // point to whatever public url is serving dev assets. + let publicPath = `${devAssetsUrl}:${port}${devRelativeOutput}`; + + if (production) { + rootOutputPath = prodOutput; + outputPath = options.onlyPack ? + prodOutput : path.join(prodOutput, name); + publicPath = prodAssetsUrl + prodRelativeOutput; + } + + const appPath = path.join(appsDir, name); + const htmlPath = path.join(appPath, 'html'); + const staticPath = path.join(appPath, 'static'); + const app = { - path: path.join(appsDir, appName), + name, + path: appPath, file: 'app.jsx', - htmlPath: 'html', - staticPath: 'static', + htmlPath, + staticPath, templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis + stage: options.stage, + buildSuffix, + port, + production, + outputPath, + rootOutputPath, + publicPath, + htmlOptions, }; + app.templateDirs = templateDirs(app, ['layouts']); return { - [appName] : app + [name] : app }; } -const apps = fs.readdirSync(appsDir) - .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()) - .reduce((result, appName) => _.merge(result, appSettings(appName)), {}); - -module.exports = { - apps, +const paths = { devRelativeOutput, prodRelativeOutput, - devOutput, prodOutput, - - // Dev urls - devAssetsUrl: process.env.ASSETS_URL, prodAssetsUrl, + devAssetsUrl, + appsDir, +}; - hotPort, - - buildSuffix: '_bundle.js', - - // Options for building html files - htmlOptions: { - truncateSummaryAt: 1000, - buildExtensions: ['.html', '.htm', '.md', '.markdown'], // file types to build (others will just be copied) - markdownExtensions: ['.md', '.markdown'], // file types to process markdown - } +function apps(options) { + let port = options.port; + return fs.readdirSync(appsDir) + .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()) + .reduce((result, appName) => { + const app = appSettings(appName, port, options); + port = options.appPerPort ? port + 1 : options.port; + return _.merge(result, app); + }, {}); +} +module.exports = { + paths, + hotPort, + apps }; diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 4a119fe..69952a5 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -7,9 +7,9 @@ const AssetsPlugin = require('assets-webpack-plugin'); const _ = require('lodash'); // -// Generates a webpack config file based on options. -// Options: -// appName: The name of the application i.e. hello_world +// Generates a webpack config file based on an app. +// app: +// name: The name of the application i.e. hello_world // app: An object containing the path and file name of the entry // i.e. path: client/apps/hello_world, file: app.jsx // buildSuffix: The suffix to append onto the end of the build. i.e. _bundle.js @@ -18,7 +18,7 @@ const _ = require('lodash'); // 'staging' (Will result in same output as production but will output to /staging) // 'hot' (Development mode with hot reload) // 'test' -module.exports = function webpackConfig(options) { +module.exports = function webpackConfig(app) { let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. @@ -28,12 +28,12 @@ module.exports = function webpackConfig(options) { ',presets[]=es2015' + // Include all plugins needed to handle es2015 syntax ',presets[]=stage-0'; // Enables experimental ES features. - if (options.production) { + if (app.production) { babelPlugins += ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement babelPlugins += ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code - } else if (options.stage === 'hot') { + } else if (app.stage === 'hot') { babelPlugins += ',plugins[]=react-hot-loader/babel'; - } else if (options.stage === 'test') { + } else if (app.stage === 'test') { // Add test plugins as needed } @@ -49,7 +49,7 @@ module.exports = function webpackConfig(options) { const lessLoaders = cssLoaders.slice(0); lessLoaders.push('less-loader'); - const extractCSS = new ExtractTextPlugin(options.production ? '[name]-[chunkhash].css' : '[name].css'); + const extractCSS = new ExtractTextPlugin(app.production ? '[name]-[chunkhash].css' : '[name].css'); let plugins = [ // Use to extract common code from multiple entry points into a single init.js @@ -63,7 +63,7 @@ module.exports = function webpackConfig(options) { }) ]; - if (options.production) { + if (app.production) { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"', __DEV__: false }), new webpack.optimize.UglifyJsPlugin({ @@ -71,7 +71,7 @@ module.exports = function webpackConfig(options) { }), new webpack.optimize.AggressiveMergingPlugin(), new ChunkManifestPlugin({ - filename: `${options.appName}-webpack-common-manifest.json`, + filename: `${app.name}-webpack-common-manifest.json`, manfiestVariable: 'webpackBundleManifest' }), new BundleAnalyzerPlugin({ @@ -80,13 +80,13 @@ module.exports = function webpackConfig(options) { }), // Generate webpack-assets.json to map path to assets generated with hashed names new AssetsPlugin({ - path: options.outputPath, + path: app.outputPath, fullPath: false, - filename: `${options.appName}-webpack-assets.json` + filename: `${app.name}-webpack-assets.json` }), extractCSS ]); - } else if (options.stage === 'hot') { + } else if (app.stage === 'hot') { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), new webpack.HotModuleReplacementPlugin(), @@ -110,14 +110,14 @@ module.exports = function webpackConfig(options) { { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; - const entryPath = path.join(options.app.path, options.app.file); - const entry = { [options.appName]: entryPath }; + const entryPath = path.join(app.path, app.file); + const entry = { [app.name]: entryPath }; - if (options.stage === 'hot') { + if (app.stage === 'hot') { // Add hot reload to entry - entry[options.appName] = [ + entry[app.name] = [ 'eventsource-polyfill', - `webpack-hot-middleware/client?path=${options.publicPath}__webpack_hmr&timeout=20000&reload=true`, + `webpack-hot-middleware/client?path=${app.publicPath}__webpack_hmr&timeout=20000&reload=true`, entryPath ]; } @@ -126,21 +126,21 @@ module.exports = function webpackConfig(options) { context: path.resolve('../apps', __dirname), entry, output: { - publicPath: options.publicPath, + publicPath: app.publicPath, // Location where generated files will be output - path: options.outputPath, - filename: options.production ? `[name]-[chunkhash]${options.buildSuffix}` : `[name]${options.buildSuffix}`, - chunkFilename: options.production ? `[id]-[chunkhash]${options.buildSuffix}` : `[id]${options.buildSuffix}`, + path: app.outputPath, + filename: app.production ? `[name]-[chunkhash]${app.buildSuffix}` : `[name]${app.buildSuffix}`, + chunkFilename: app.production ? `[id]-[chunkhash]${app.buildSuffix}` : `[id]${app.buildSuffix}`, sourceMapFilename: '[name].map', // http://webpack.github.io/docs/configuration.html#output-pathinfo - pathinfo: !options.production + pathinfo: !app.production }, resolve: { extensions: ['.js', '.json', '.jsx'], - modules: ['node_modules', `${options.app.path}/node_modules`] + modules: ['node_modules', `${app.path}/node_modules`] }, cache: true, - devtool: options.production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ + devtool: app.production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ stats: { colors: true }, plugins, module: { rules }, diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index a0d17a0..2c73d9e 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -3,34 +3,21 @@ const _ = require('lodash'); const settings = require('../../config/settings'); const build = require('./build'); -const buildOptionsGenerator = require('./build_options'); - -// ----------------------------------------------------------------------------- -// Iterate through all applications calling the callback with the buildOptions -// ----------------------------------------------------------------------------- -function allAppBuildOptions(options) { - let port = parseInt(settings.hotPort, 10); - return _.map(settings.apps, (app, appName) => { - const buildOptions = buildOptionsGenerator(appName, app, port, options); - port += 1; - return buildOptions; - }); -} // ----------------------------------------------------------------------------- // Build a single app // ----------------------------------------------------------------------------- -function buildAppParts(buildOptions, onlyPack) { +function buildAppParts(app, onlyPack) { if (onlyPack) { - const buildPromise = build.buildWebpackEntries(buildOptions); + const buildPromise = build.buildWebpackEntries(app); buildPromise.then(() => { - console.log(`Finished Javascript for ${buildOptions.appName}`); + console.log(`Finished Javascript for ${app.name}`); }); return buildPromise; } - const buildPromise = build.build(buildOptions); + const buildPromise = build.build(app); buildPromise.then((result) => { - console.log(`Finished Javascript for ${buildOptions.appName}.`); + console.log(`Finished Javascript for ${app.name}.`); console.log(`Built ${result.pages.length} pages.`); }); return buildPromise; @@ -40,11 +27,11 @@ function buildAppParts(buildOptions, onlyPack) { // Build a single app // ----------------------------------------------------------------------------- function buildApp(appName, options) { - const app = _.find(settings.apps, (e, name) => appName === name); - const buildOptions = buildOptionsGenerator(appName, app, settings.hotPort, options); + const app = _.find(settings.apps(options).apps, (e, name) => appName === name); + fs.emptyDirSync(app.outputPath); return { - buildOptions, - buildPromise: buildAppParts(buildOptions, options.onlyPack) + app, + buildPromise: buildAppParts(app, options.onlyPack) }; } @@ -52,11 +39,11 @@ function buildApp(appName, options) { // Build all apps // ----------------------------------------------------------------------------- function buildApps(options) { - return _.map(allAppBuildOptions(options), (buildOptions) => { - fs.emptyDirSync(buildOptions.outputPath); + return _.map(settings.apps(options), (app) => { + fs.emptyDirSync(app.outputPath); return { - buildOptions, - buildPromise: buildAppParts(buildOptions, options.onlyPack) + app, + buildPromise: buildAppParts(app, options.onlyPack) }; }); } diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 5868faf..1e919d8 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -11,10 +11,10 @@ const webpackConfigBuilder = require('../../config/webpack.config'); // ----------------------------------------------------------------------------- // run webpack to build entries // ----------------------------------------------------------------------------- -function buildWebpackEntries(buildOptions) { +function buildWebpackEntries(app) { return new Promise((resolve, reject) => { - const webpackConfig = webpackConfigBuilder(buildOptions); - if (buildOptions.stage !== 'hot') { + const webpackConfig = webpackConfigBuilder(app); + if (app.stage !== 'hot') { const bundler = webpack(webpackConfig); const bundle = (err, stats) => { if (err) { @@ -40,10 +40,10 @@ function buildWebpackEntries(buildOptions) { // ----------------------------------------------------------------------------- // copy over static files to build directory // ----------------------------------------------------------------------------- -function buildStatic(staticInputPath, outputPath) { +function buildStatic(app) { try { - console.log(`Copying static files in ${staticInputPath}`); - fs.copy(staticInputPath, outputPath); + console.log(`Copying static files in ${app.staticPath}`); + fs.copy(app.staticPath, app.outputPath); } catch (err) { // No static dir. Do nothing } @@ -53,11 +53,11 @@ function buildStatic(staticInputPath, outputPath) { // watchStatic // Used to copy over static files if they change // ----------------------------------------------------------------------------- -function watchStatic(staticInputPath, buildOptions) { - console.log(`Watching static files in ${staticInputPath}`); - nodeWatch(staticInputPath, { recursive: true }, (evt, filePath) => { +function watchStatic(app) { + console.log(`Watching static files in ${app.staticPath}`); + nodeWatch(app.staticPath, { recursive: true }, (evt, filePath) => { console.log(`Change in static file ${filePath}`); - fs.copySync(filePath, buildOptions.outputPath); + fs.copySync(filePath, app.outputPath); }); } @@ -65,29 +65,27 @@ function watchStatic(staticInputPath, buildOptions) { // watchHtml // Used to rebuild html or templates if files change. // ----------------------------------------------------------------------------- -function watchHtml(htmlInputPath, webpackAssets, buildOptions) { - console.log(`Watching html files in ${htmlInputPath}`); - nodeWatch(htmlInputPath, { recursive: true }, (evt, fullInputPath) => { +function watchHtml(webpackAssets, app) { + console.log(`Watching html files in ${app.htmlPath}`); + nodeWatch(app.htmlPath, { recursive: true }, (evt, fullInputPath) => { console.log(`Change in html file ${fullInputPath}`); content.writeContent( - htmlInputPath, + app.htmlPath, fullInputPath, webpackAssets, - buildOptions); + app); }); } -function buildHtml(htmlInputPath, buildOptions, webpackAssets) { - +function buildHtml(app, webpackAssets) { const pages = content.buildContents( - htmlInputPath, - htmlInputPath, - buildOptions, + app.htmlPath, + app, webpackAssets ); - if (buildOptions.stage === 'hot') { - watchHtml(htmlInputPath, webpackAssets, buildOptions); + if (app.stage === 'hot') { + watchHtml(webpackAssets, app); } return pages; @@ -96,32 +94,29 @@ function buildHtml(htmlInputPath, buildOptions, webpackAssets) { // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- -function build(buildOptions) { +function build(app) { return new Promise((resolve) => { // Copy static files to build directory - const staticInputPath = path.join(buildOptions.app.path, buildOptions.app.staticPath); - buildStatic(staticInputPath, buildOptions.outputPath); - if (buildOptions.stage === 'hot') { - watchStatic(staticInputPath, buildOptions); + buildStatic(app); + if (app.stage === 'hot') { + watchStatic(app); } // Webpack build - console.log(`Webpacking ${buildOptions.appName}`); + console.log(`Webpacking ${app.name}`); - buildWebpackEntries(buildOptions).then((packResults) => { + buildWebpackEntries(app).then((packResults) => { let webpackAssets = null; - const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${buildOptions.appName}-webpack-assets.json`; + const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${app.name}-webpack-assets.json`; if (fs.existsSync(webpackAssetsFilePath)) { webpackAssets = fs.readJsonSync(webpackAssetsFilePath); } // Build html - console.log(`Building html for ${buildOptions.appName}`); - const htmlInputPath = path.join(buildOptions.app.path, buildOptions.app.htmlPath); - - const pages = buildHtml(htmlInputPath, buildOptions, webpackAssets); + console.log(`Building html for ${app.name}`); + const pages = buildHtml(app, webpackAssets); resolve({ webpackConfig : packResults.webpackConfig, diff --git a/client/libs/build/build_options.js b/client/libs/build/build_options.js deleted file mode 100644 index 1d2368e..0000000 --- a/client/libs/build/build_options.js +++ /dev/null @@ -1,41 +0,0 @@ -const path = require('path'); - -const settings = require('../../config/settings'); - -// ----------------------------------------------------------------------------- -// Generates webpack options that can be provided to webpackConfigBuilder -// ----------------------------------------------------------------------------- -module.exports = function buildOptions(appName, app, port, options) { - const production = options.stage === 'production' || options.stage === 'staging'; - - let rootOutputPath = settings.devOutput; - let outputPath = options.onlyPack ? - settings.devOutput : path.join(settings.devOutput, appName); - // Public path indicates where the assets will be served from. In dev this will likely be - // localhost or a local domain. In production this could be a CDN. In developerment this will - // point to whatever public url is serving dev assets. - let publicPath = `${settings.devAssetsUrl}:${port}${settings.devRelativeOutput}`; - - if (production) { - rootOutputPath = settings.prodOutput; - outputPath = options.onlyPack ? - settings.prodOutput : path.join(settings.prodOutput, appName); - publicPath = settings.prodAssetsUrl + settings.prodRelativeOutput; - } - - return { - stage: options.stage, - appName, - app, - buildSuffix: settings.buildSuffix, - port, - production, - outputPath, - rootOutputPath, - publicPath, - templateMap: app.templateMap, - templateData: app.templateData, - templateDirs: app.templateDirs, - htmlOptions: settings.htmlOptions - }; -}; diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 6bfbace..f59cad9 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -29,7 +29,7 @@ function outFilePath(page, outputPath, inputFilePath, originalInputPath) { // ----------------------------------------------------------------------------- // build a single file // ----------------------------------------------------------------------------- -function buildContent(fullPath, buildOptions, webpackAssets, ext) { +function buildContent(fullPath, app, webpackAssets, ext) { const content = fs.readFileSync(fullPath, 'utf8'); const parsed = frontMatter(content); const metadata = parsed.attributes; @@ -40,7 +40,7 @@ function buildContent(fullPath, buildOptions, webpackAssets, ext) { title, metadata, url: destination - }, buildOptions.templateData); + }, app.templateData); let html = parsed.body; @@ -52,7 +52,7 @@ function buildContent(fullPath, buildOptions, webpackAssets, ext) { })(data); // Parse any markdown in the resulting html - if (_.includes(buildOptions.htmlOptions.markdownExtensions, ext)) { + if (_.includes(app.htmlOptions.markdownExtensions, ext)) { html = marked(html); } } catch (err) { @@ -66,9 +66,9 @@ function buildContent(fullPath, buildOptions, webpackAssets, ext) { data.content = html; // Pass in generated html html = templates.apply(data, fullPath, - buildOptions.templateMap, - buildOptions.templateDirs); - html = applyProduction(html, buildOptions.stage, webpackAssets, buildOptions.buildSuffix); + app.templateMap, + app.templateDirs); + html = applyProduction(html, app.stage, webpackAssets, app.buildSuffix); return { title, @@ -85,22 +85,21 @@ function buildContent(fullPath, buildOptions, webpackAssets, ext) { // responsible for writing out html content after it's built or copying static files // ----------------------------------------------------------------------------- function writeContent( - originalInputPath, inputFilePath, webpackAssets, - buildOptions) { + app) { const ext = path.extname(inputFilePath); - if (_.includes(buildOptions.htmlOptions.buildExtensions, ext)) { + if (_.includes(app.htmlOptions.buildExtensions, ext)) { const page = buildContent( inputFilePath, - buildOptions, + app, webpackAssets, ext); - const out = outFilePath(page, buildOptions.outputPath, inputFilePath, originalInputPath); + const out = outFilePath(page, app.outputPath, inputFilePath, app.htmlPath); page.outputFilePath = file.write(out, page.html); return page; } - const out = outFilePath(null, buildOptions.outputPath, inputFilePath, originalInputPath); + const out = outFilePath(null, app.outputPath, inputFilePath, app.htmlPath); file.copy(inputFilePath, out); return null; } @@ -109,9 +108,8 @@ function writeContent( // build html and markdown files in a given directory // ----------------------------------------------------------------------------- function buildContents( - originalInputPath, inputPath, - buildOptions, + app, webpackAssets) { let results = []; @@ -121,22 +119,21 @@ function buildContents( const inputFilePath = path.join(inputPath, fileName); // Ignore template dirs - const doOutput = buildOptions.templateDirs.indexOf(inputFilePath) < 0 && + const doOutput = app.templateDirs.indexOf(inputFilePath) < 0 && !_.includes(ignoreFiles, fileName); if (doOutput) { if (fs.statSync(inputFilePath).isDirectory()) { results = _.concat(results, buildContents( - originalInputPath, + app.htmlPath, inputFilePath, - buildOptions, + app, webpackAssets )); } else { const page = writeContent( - originalInputPath, inputFilePath, webpackAssets, - buildOptions); + app); if (page) { results.push(page); } diff --git a/client/server.js b/client/server.js index a285e97..6bb981a 100644 --- a/client/server.js +++ b/client/server.js @@ -4,19 +4,19 @@ const express = require('express'); const settings = require('./config/settings'); -const app = express(); +const serverApp = express(); const argv = require('minimist')(process.argv.slice(2)); -const appName = argv._[0]; +const appName = _.trim(argv._[0]); function launch(servePath, port) { - app.use(express.static(servePath)); + serverApp.use(express.static(servePath)); - app.get('*', (req, res) => { + serverApp.get('*', (req, res) => { res.sendFile(path.join(servePath, req.url)); }); - app.listen(port, '0.0.0.0', (err) => { + serverApp.listen(port, '0.0.0.0', (err) => { if (err) { console.log(err); return; @@ -29,9 +29,8 @@ function launch(servePath, port) { if (appName) { launch(path.join(settings.prodOutput, appName), settings.hotPort); } else { - let startPort = parseInt(settings.hotPort, 10); - _.each(settings.apps, (entry, name) => { - launch(path.join(settings.prodOutput, name), startPort); - startPort += 1; + const options = { stage: 'production', onlyPack: false, port: settings.hotPort }; + _.each(settings.apps(options), (app) => { + launch(app.outputPath, app.port); }); } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index a649265..b2f2daa 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -10,15 +10,15 @@ const settings = require('./config/settings'); const webpackConfigBuilder = require('./config/webpack.config'); const clientApps = require('./libs/build/apps'); -const app = express(); +const serverApp = express(); const localIp = '0.0.0.0'; -const appName = argv._[0]; +const appName = _.trim(argv._[0]); const hotPack = argv.hotPack; -function setupMiddleware(buildOptions) { +function setupMiddleware(app) { - const webpackConfig = webpackConfigBuilder(buildOptions); + const webpackConfig = webpackConfigBuilder(app); const compiler = webpack(webpackConfig); const webpackMiddlewareInstance = webpackMiddleware(compiler, { @@ -28,16 +28,16 @@ function setupMiddleware(buildOptions) { headers: { 'Access-Control-Allow-Origin': '*' } }); - app.use(express.static(buildOptions.outputPath)); - app.use(webpackMiddlewareInstance); - app.use(webpackHotMiddleware(compiler)); - app.get('*', (req, res) => { - res.sendFile(path.join(buildOptions.outputPath, req.url)); + serverApp.use(express.static(app.outputPath)); + serverApp.use(webpackMiddlewareInstance); + serverApp.use(webpackHotMiddleware(compiler)); + serverApp.get('*', (req, res) => { + res.sendFile(path.join(app.outputPath, req.url)); }); } function runServer(port, servePath) { - app.listen(port, localIp, (err) => { + serverApp.listen(port, localIp, (err) => { if (err) { console.log(err); return; @@ -47,27 +47,27 @@ function runServer(port, servePath) { }); } -function launch(buildOptions) { - setupMiddleware(buildOptions); - runServer(buildOptions.port, buildOptions.outputPath); +function launch(app) { + setupMiddleware(app); + runServer(app.port, app.outputPath); } -const options = { stage: 'hot', onlyPack: false }; +const options = { stage: 'hot', onlyPack: false, port: settings.hotPort }; if (appName) { const result = clientApps.buildApp(appName, options); - launch(result.buildOptions); + launch(result.app); } else if (hotPack) { options.onlyPack = true; const results = clientApps.buildApps(options); _.each(results, (result) => { setupMiddleware(_.merge({}, - result.buildOptions, - { publicPath: `/${result.buildOptions.appName}` } + result.app, + { publicPath: `/${appName}` } )); }); - runServer(settings.hotPort, settings.devOutput); + runServer(settings.hotPort, settings.path.devOutput); } else { _.each(clientApps.buildApps(options), (result) => { - launch(result.buildOptions); + launch(result.app); }); } From 4c30db95252080541c643ce6e2f5c47187ec1319 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 16:03:10 -0400 Subject: [PATCH 331/452] fixes tests --- client/config/karma.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/client/config/karma.js b/client/config/karma.js index cdee394..1102f1b 100644 --- a/client/config/karma.js +++ b/client/config/karma.js @@ -2,21 +2,21 @@ const _ = require('lodash'); const settings = require('./settings'); const webpackConfigBuilder = require('./webpack.config'); -const apps = require('../libs/build/apps'); -const buildOptionsGenerator = require('../libs/build/build_options'); module.exports = () => { + let plugins = []; + let module = {}; + let resolve = {}; - const buildOptions = buildOptionsGenerator('fake', { file: 'fakeAppName', path: 'fakeAppPath' }, settings.hotPort, { stage: 'test', onlyPack: true }); - const webpackConfig = webpackConfigBuilder(buildOptions); - const plugins = webpackConfig.plugins; - const module = webpackConfig.module; - const resolve = webpackConfig.resolve; - - _.each(settings.apps, (app, appName) => { - const appbuildOptions = buildOptionsGenerator(appName, app, settings.hotPort, { stage: 'test', onlyPack: true }); - const appWebpackConfig = webpackConfigBuilder(appbuildOptions); - resolve.modules = _.union(resolve.modules, appWebpackConfig.resolve.modules); + const options = { + port: settings.hotPort, + stage: 'test' + }; + _.each(settings.apps(options), (app) => { + const webpackConfig = webpackConfigBuilder(app); + plugins = _.union(plugins, webpackConfig.plugins); + module = _.merge(module, webpackConfig.module); + resolve = _.merge(resolve, webpackConfig.resolve); }); return { From 1145e38289bba0992d08cc794d0f2717f46046e1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 15:45:45 -0700 Subject: [PATCH 332/452] Refactor more code into smaller functions --- client/config/settings.js | 63 +++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 2e13b25..2bd4191 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -38,6 +38,19 @@ const htmlOptions = { // Options for building html files markdownExtensions: ['.md', '.markdown'], // file types to process markdown }; +// ----------------------------------------------------------------------------- +// Main paths for the application. Includes production and development paths. +// ----------------------------------------------------------------------------- +const paths = { + devRelativeOutput, + prodRelativeOutput, + devOutput, + prodOutput, + prodAssetsUrl, + devAssetsUrl, + appsDir, +}; + // ----------------------------------------------------------------------------- // Helper function to generate full template paths for the given app // ----------------------------------------------------------------------------- @@ -45,9 +58,18 @@ function templateDirs(app, dirs) { return _.map(dirs, templateDir => path.join(app.htmlPath, templateDir)); } -function appSettings(name, port, options) { +// ----------------------------------------------------------------------------- +// Helper to determine if we should do a production build or not +// ----------------------------------------------------------------------------- +function isProduction(stage) { + return stage === 'production' || stage === 'staging'; +} + +// ----------------------------------------------------------------------------- +// Generates the main paths used for output +// ----------------------------------------------------------------------------- +function outputPaths(name, port, options) { - const production = options.stage === 'production' || options.stage === 'staging'; let rootOutputPath = devOutput; let outputPath = options.onlyPack ? devOutput : path.join(devOutput, name); @@ -56,18 +78,30 @@ function appSettings(name, port, options) { // point to whatever public url is serving dev assets. let publicPath = `${devAssetsUrl}:${port}${devRelativeOutput}`; - if (production) { + if (isProduction(options.stage)) { rootOutputPath = prodOutput; outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, name); publicPath = prodAssetsUrl + prodRelativeOutput; } + return { + rootOutputPath, + outputPath, + publicPath + }; +} + +// ----------------------------------------------------------------------------- +// Generate all settings needed for a given application +// ----------------------------------------------------------------------------- +function appSettings(name, port, options) { + const appPath = path.join(appsDir, name); const htmlPath = path.join(appPath, 'html'); const staticPath = path.join(appPath, 'static'); - const app = { + const app = _.merge({ name, path: appPath, file: 'app.jsx', @@ -78,12 +112,9 @@ function appSettings(name, port, options) { stage: options.stage, buildSuffix, port, - production, - outputPath, - rootOutputPath, - publicPath, + production: isProduction(options.stage), htmlOptions, - }; + }, outputPaths(name, port, options)); app.templateDirs = templateDirs(app, ['layouts']); return { @@ -91,16 +122,9 @@ function appSettings(name, port, options) { }; } -const paths = { - devRelativeOutput, - prodRelativeOutput, - devOutput, - prodOutput, - prodAssetsUrl, - devAssetsUrl, - appsDir, -}; - +// ----------------------------------------------------------------------------- +// Generates an app setting for all applications found in the client directory +// ----------------------------------------------------------------------------- function apps(options) { let port = options.port; return fs.readdirSync(appsDir) @@ -115,5 +139,6 @@ function apps(options) { module.exports = { paths, hotPort, + outputPaths, apps }; From 112cb6b7bca33a0150263ddbc927714868971c83 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 16:14:33 -0700 Subject: [PATCH 333/452] load env sooner --- client/config/settings.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 2bd4191..d0f62a3 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -2,8 +2,14 @@ const fs = require('fs-extra'); const path = require('path'); const _ = require('lodash'); +// There is a warning if the .env file is missing +// This is fine in a production setting, where settings +// are loaded from the env and not from a file +require('dotenv').load({ path: path.join(__dirname, '../../.env') }); + const deployConfig = require('../../.s3-website.json'); + const hotPort = parseInt(process.env.ASSETS_PORT, 10) || 8080; const devRelativeOutput = '/'; @@ -21,11 +27,6 @@ const prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); const prodAssetsUrl = `https://s3.amazonaws.com/${deployConfig.domain}`; const devAssetsUrl = process.env.ASSETS_URL; -// There is a warning if the .env file is missing -// This is fine in a production setting, where settings -// are loaded from the env and not from a file -require('dotenv').load({ path: path.join(__dirname, '../../.env') }); - // Get a list of all directories in the apps directory. // These will be used to generate the entries for webpack const appsDir = path.join(__dirname, '../apps/'); From f37a2dbc0c20c30482af6838d7260ebae2f7f249 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 11 Apr 2017 16:24:07 -0700 Subject: [PATCH 334/452] Fixes call to buildContents --- client/libs/build/content.js | 1 - 1 file changed, 1 deletion(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index f59cad9..0b0fa51 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -124,7 +124,6 @@ function buildContents( if (doOutput) { if (fs.statSync(inputFilePath).isDirectory()) { results = _.concat(results, buildContents( - app.htmlPath, inputFilePath, app, webpackAssets From a0c5c08985e1145452c740e223c12fffc1d5a50c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 12 Apr 2017 16:31:23 -0600 Subject: [PATCH 335/452] Removes extra whitespace --- client/apps/hello_world/app.jsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/client/apps/hello_world/app.jsx b/client/apps/hello_world/app.jsx index 6b9bc72..624942c 100644 --- a/client/apps/hello_world/app.jsx +++ b/client/apps/hello_world/app.jsx @@ -1,14 +1,15 @@ import 'babel-polyfill'; -import es6Promise from 'es6-promise'; -import React from 'react'; -import ReactDOM from 'react-dom'; -import { Provider } from 'react-redux'; -import injectTapEventPlugin from 'react-tap-event-plugin'; -import DevTools from '../../libs/dev/dev_tools'; +import es6Promise from 'es6-promise'; +import React from 'react'; +import ReactDOM from 'react-dom'; +import PropTypes from 'prop-types'; +import { Provider } from 'react-redux'; +import injectTapEventPlugin from 'react-tap-event-plugin'; +import DevTools from '../../libs/dev/dev_tools'; import { getInitialSettings } from '../../libs/reducers/settings'; -import configureStore from './store/configure_store'; -import jwt from './loaders/jwt'; -import routes from './routes'; +import configureStore from './store/configure_store'; +import jwt from './loaders/jwt'; +import routes from './routes'; require('./styles/styles'); From c30652f42ac2fcb6369f7d4ca502bc0727ef68c0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 12 Apr 2017 16:31:58 -0600 Subject: [PATCH 336/452] Update to latest react --- client/apps/hello_world/app.jsx | 2 +- .../components/common/not_found.spec.jsx | 2 +- .../apps/hello_world/components/home.spec.jsx | 2 +- .../hello_world/components/layout/index.jsx | 3 +- .../components/layout/index.spec.jsx | 2 +- client/apps/hello_world/history.js | 2 +- client/apps/hello_world/package.json | 10 +- client/apps/hello_world/yarn.lock | 60 +- client/package.json | 27 +- client/specs_support/stub.jsx | 3 +- client/specs_support/utils.js | 2 +- client/yarn.lock | 913 +++++++++--------- yarn.lock | 4 +- 13 files changed, 547 insertions(+), 485 deletions(-) diff --git a/client/apps/hello_world/app.jsx b/client/apps/hello_world/app.jsx index 624942c..9800379 100644 --- a/client/apps/hello_world/app.jsx +++ b/client/apps/hello_world/app.jsx @@ -25,7 +25,7 @@ injectTapEventPlugin(); class Root extends React.PureComponent { static propTypes = { - store: React.PropTypes.object.isRequired, + store: PropTypes.object.isRequired, }; render() { diff --git a/client/apps/hello_world/components/common/not_found.spec.jsx b/client/apps/hello_world/components/common/not_found.spec.jsx index d1b7be3..577df9c 100644 --- a/client/apps/hello_world/components/common/not_found.spec.jsx +++ b/client/apps/hello_world/components/common/not_found.spec.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import NotFound from './not_found'; import Stub from '../../../../specs_support/stub'; diff --git a/client/apps/hello_world/components/home.spec.jsx b/client/apps/hello_world/components/home.spec.jsx index 185ecf4..209bb73 100644 --- a/client/apps/hello_world/components/home.spec.jsx +++ b/client/apps/hello_world/components/home.spec.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import { Provider } from 'react-redux'; import Helper from '../../../specs_support/helper'; import Home from './home'; diff --git a/client/apps/hello_world/components/layout/index.jsx b/client/apps/hello_world/components/layout/index.jsx index 4aa2d2a..f9bcfc3 100644 --- a/client/apps/hello_world/components/layout/index.jsx +++ b/client/apps/hello_world/components/layout/index.jsx @@ -1,9 +1,10 @@ import React from 'react'; +import PropTypes from 'prop-types'; export default class Index extends React.Component { static propTypes = { - children: React.PropTypes.node, + children: PropTypes.node, }; static defaultProps = { diff --git a/client/apps/hello_world/components/layout/index.spec.jsx b/client/apps/hello_world/components/layout/index.spec.jsx index 87dfe0a..85dbda6 100644 --- a/client/apps/hello_world/components/layout/index.spec.jsx +++ b/client/apps/hello_world/components/layout/index.spec.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import { Provider } from 'react-redux'; import Helper from '../../../../specs_support/helper'; import Index from './index'; diff --git a/client/apps/hello_world/history.js b/client/apps/hello_world/history.js index 2953d5f..193cbd5 100644 --- a/client/apps/hello_world/history.js +++ b/client/apps/hello_world/history.js @@ -1,4 +1,4 @@ -import { hashHistory } from 'react-router'; +import { hashHistory } from 'react-router'; // Uncomment these lines if you would like to remove // the query key from your uri's when using hash history. diff --git a/client/apps/hello_world/package.json b/client/apps/hello_world/package.json index 65b15ec..1af8f22 100644 --- a/client/apps/hello_world/package.json +++ b/client/apps/hello_world/package.json @@ -5,16 +5,14 @@ "babel-runtime": "^6.23.0", "es6-promise": "^4.1.0", "lodash": "4.17.4", - "react": "15.4.2", - "react-dom": "15.4.2", + "prop-types": "^15.5.8", + "react": "^15.5.4", + "react-dom": "^15.5.4", "react-proxy-loader": "^0.3.5", - "react-redux": "^5.0.3", + "react-redux": "^5.0.4", "react-router": "^3.0.2", "react-tap-event-plugin": "2.0.1", "redux": "3.6.0", "uuid": "3.0.1" - }, - "devDependencies": { - "react-addons-test-utils": "^15.4.2" } } diff --git a/client/apps/hello_world/yarn.lock b/client/apps/hello_world/yarn.lock index 6db7d86..f0237a8 100644 --- a/client/apps/hello_world/yarn.lock +++ b/client/apps/hello_world/yarn.lock @@ -37,6 +37,13 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +create-react-class@^15.5.1: + version "15.5.2" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.2.tgz#6a8758348df660b88326a0e764d569f274aad681" + dependencies: + fbjs "^0.8.9" + object-assign "^4.1.1" + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -51,9 +58,9 @@ es6-promise@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0" -fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.6: - version "0.8.11" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.11.tgz#340b590b8a2278a01ef7467c07a16da9b753db24" +fbjs@^0.8.6, fbjs@^0.8.9: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -134,7 +141,7 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -object-assign@^4.1.0: +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" @@ -144,6 +151,12 @@ promise@^7.1.1: dependencies: asap "~2.0.3" +prop-types@^15.0.0, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@~15.5.7: + version "15.5.8" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" + dependencies: + fbjs "^0.8.9" + query-string@^4.2.2: version "4.3.2" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" @@ -151,20 +164,14 @@ query-string@^4.2.2: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -react-addons-test-utils@^15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" - dependencies: - fbjs "^0.8.4" - object-assign "^4.1.0" - -react-dom@15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.4.2.tgz#015363f05b0a1fd52ae9efdd3a0060d90695208f" +react-dom@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da" dependencies: - fbjs "^0.8.1" + fbjs "^0.8.9" loose-envify "^1.1.0" object-assign "^4.1.0" + prop-types "~15.5.7" react-proxy-loader@^0.3.5: version "0.3.5" @@ -172,24 +179,28 @@ react-proxy-loader@^0.3.5: dependencies: loader-utils "^1.0.2" -react-redux@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.3.tgz#86c3b68d56e74294a42e2a740ab66117ef6c019f" +react-redux@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.4.tgz#1563babadcfb2672f57f9ceaa439fb16bf85d55b" dependencies: + create-react-class "^15.5.1" hoist-non-react-statics "^1.0.3" invariant "^2.0.0" lodash "^4.2.0" lodash-es "^4.2.0" loose-envify "^1.1.0" + prop-types "^15.0.0" react-router@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.3.tgz#e95304b2e418482e5ecff2699d2b8aae52d5f884" + version "3.0.5" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.5.tgz#c3b7873758045a8bbc9562aef4ff4bc8cce7c136" 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: @@ -198,13 +209,14 @@ react-tap-event-plugin@2.0.1: dependencies: fbjs "^0.8.6" -react@15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.4.2.tgz#41f7991b26185392ba9bae96c8889e7e018397ef" +react@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" dependencies: - fbjs "^0.8.4" + fbjs "^0.8.9" loose-envify "^1.1.0" object-assign "^4.1.0" + prop-types "^15.5.7" redux@3.6.0: version "3.6.0" diff --git a/client/package.json b/client/package.json index e22afab..9e811fd 100644 --- a/client/package.json +++ b/client/package.json @@ -8,18 +8,18 @@ "devDependencies": { "assets-webpack-plugin": "^3.5.1", "autoprefixer": "^6.7.7", - "babel-core": "^6.24.0", - "babel-eslint": "^7.1.1", + "babel-core": "^6.24.1", + "babel-eslint": "^7.2.2", "babel-loader": "^6.4.0", - "babel-plugin-transform-class-properties": "^6.23.0", + "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.23.0", "babel-plugin-transform-react-inline-elements": "^6.8.0", - "babel-plugin-transform-react-remove-prop-types": "^0.3.2", + "babel-plugin-transform-react-remove-prop-types": "^0.3.3", "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-es2015": "^6.24.0", - "babel-preset-react": "^6.23.0", - "babel-preset-stage-0": "^6.16.0", + "babel-preset-es2015": "^6.24.1", + "babel-preset-react": "^6.24.1", + "babel-preset-stage-0": "^6.24.1", "chunk-manifest-webpack-plugin": "1.0.0", "coveralls": "^2.13.0", "css-loader": "^0.28.0", @@ -39,14 +39,14 @@ "file-loader": "^0.11.1", "front-matter": "^2.1.1", "fs-extra": "^2.1.0", - "html-minifier": "^3.4.1", + "html-minifier": "^3.4.3", "html-truncate": "^1.2.2", "imports-loader": "^0.7.1", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "^2.0.0", "jasmine": "^2.5.2", "jasmine-core": "2.5.2", - "karma": "^1.5.0", + "karma": "^1.6.0", "karma-chrome-launcher": "2.0.0", "karma-cli": "1.0.1", "karma-coverage": "1.1.1", @@ -55,7 +55,7 @@ "karma-jasmine-ajax": "0.1.13", "karma-phantomjs-launcher": "^1.0.4", "karma-sourcemap-loader": "0.3.7", - "karma-spec-reporter": "^0.0.30", + "karma-spec-reporter": "^0.0.31", "karma-webpack": "^2.0.3", "less": "2.7.2", "less-loader": "^4.0.3", @@ -69,10 +69,11 @@ "phantomjs-prebuilt": "^2.1.14", "postcss-load-config": "^1.2.0", "postcss-loader": "^1.3.3", - "postcss-smart-import": "^0.6.10", + "postcss-smart-import": "^0.6.11", + "prop-types": "^15.5.8", "protractor": "^5.1.1", "psi": "^3.0.0", - "react-addons-test-utils": "^15.4.2", + "react": "^15.5.4", "react-hot-loader": "^3.0.0-beta.6", "redux-devtools": "^3.3.2", "redux-devtools-dock-monitor": "1.1.1", @@ -82,7 +83,7 @@ "style-loader": "^0.16.1", "url-loader": "^0.5.8", "webpack": "^2.3.3", - "webpack-bundle-analyzer": "^2.3.1", + "webpack-bundle-analyzer": "^2.4.0", "webpack-dev-middleware": "^1.10.1", "webpack-hot-middleware": "^2.18.0" } diff --git a/client/specs_support/stub.jsx b/client/specs_support/stub.jsx index 1b51410..aa73ee3 100644 --- a/client/specs_support/stub.jsx +++ b/client/specs_support/stub.jsx @@ -1,8 +1,9 @@ import React from 'react'; +import PropTypes from 'prop-types'; export default class Stub extends React.PureComponent { static propTypes = { - children: React.PropTypes.object.isRequired, + children: PropTypes.object.isRequired, } render() { diff --git a/client/specs_support/utils.js b/client/specs_support/utils.js index 6c61567..fb2170d 100644 --- a/client/specs_support/utils.js +++ b/client/specs_support/utils.js @@ -1,4 +1,4 @@ -import TestUtils from 'react-addons-test-utils'; +import TestUtils from 'react-dom/test-utils'; import _ from 'lodash'; export default { diff --git a/client/yarn.lock b/client/yarn.lock index 9df362c..4cacb2d 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -37,18 +37,18 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" - acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.11, acorn@^4.0.3, acorn@^4.0.4: +acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" +acorn@^5.0.1, acorn@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + adm-zip@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" @@ -73,8 +73,8 @@ ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1: - version "4.11.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" + version "4.11.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.6.tgz#947e93049790942b2a2d60a8289b28924d39f987" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -230,8 +230,8 @@ array-unique@^0.2.1: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" array.prototype.find@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.3.tgz#08c3ec33e32ec4bab362a2958e686ae92f59271d" + version "2.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" dependencies: define-properties "^1.1.2" es-abstract "^1.7.0" @@ -311,8 +311,8 @@ async@^0.9.0, async@~0.9.0: resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" async@^2.0.1, async@^2.1.2, async@^2.1.5: - version "2.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.2.0.tgz#c324eba010a237e4fbd55a12dee86367d5c0ef32" + version "2.3.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" dependencies: lodash "^4.14.0" @@ -338,18 +338,18 @@ autoprefixer@^6.3.1, autoprefixer@^6.7.7: postcss-value-parser "^3.2.3" aws-sdk@^2.1.4, aws-sdk@^2.2.4, aws-sdk@^2.6.12: - version "2.34.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.34.0.tgz#bf96fb617aa0e1d8728760ca7f00d46d0d9c685c" + version "2.41.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.41.0.tgz#930c15ae7ef4532bb8912c4c36a18b0023fd74c2" dependencies: buffer "4.9.1" crypto-browserify "1.0.9" jmespath "0.15.0" querystring "0.2.0" - sax "1.1.5" + sax "1.2.1" url "0.10.3" - uuid "3.0.0" - xml2js "0.4.15" - xmlbuilder "2.6.2" + uuid "3.0.1" + xml2js "0.4.17" + xmlbuilder "4.2.1" aws-sign2@~0.6.0: version "0.6.0" @@ -367,19 +367,19 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.0.tgz#8f36a0a77f5c155aed6f920b844d23ba56742a02" +babel-core@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" dependencies: babel-code-frame "^6.22.0" - babel-generator "^6.24.0" - babel-helpers "^6.23.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" babel-messages "^6.23.0" - babel-register "^6.24.0" + babel-register "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" babylon "^6.11.0" convert-source-map "^1.1.0" debug "^2.1.1" @@ -391,154 +391,153 @@ babel-core@^6.24.0: slash "^1.0.0" source-map "^0.5.0" -babel-eslint@^7.1.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.1.tgz#079422eb73ba811e3ca0865ce87af29327f8c52f" +babel-eslint@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.2.tgz#0da2cbe6554fd0fb069f19674f2db2f9c59270ff" dependencies: babel-code-frame "^6.22.0" babel-traverse "^6.23.1" babel-types "^6.23.0" babylon "^6.16.1" -babel-generator@^6.18.0, babel-generator@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56" +babel-generator@^6.18.0, babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" dependencies: babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.23.0" + babel-types "^6.24.1" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" source-map "^0.5.0" trim-right "^1.0.1" -babel-helper-bindify-decorators@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" +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.22.0" + babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-builder-react-jsx@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.23.0.tgz#d53fc8c996e0bc56d0de0fc4cc55a7138395ea4b" +babel-helper-builder-react-jsx@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz#0ad7917e33c8d751e646daca4e77cc19377d2cbc" dependencies: babel-runtime "^6.22.0" - babel-types "^6.23.0" + babel-types "^6.24.1" esutils "^2.0.0" - lodash "^4.2.0" -babel-helper-call-delegate@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" +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.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-define-map@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.23.0.tgz#1444f960c9691d69a2ced6a205315f8fd00804e7" +babel-helper-define-map@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" dependencies: - babel-helper-function-name "^6.23.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.23.0" + babel-types "^6.24.1" lodash "^4.2.0" -babel-helper-explode-assignable-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" +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.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-explode-class@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b" +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" dependencies: - babel-helper-bindify-decorators "^6.22.0" + babel-helper-bindify-decorators "^6.24.1" babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6" +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.22.0" + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-get-function-arity@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" +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.22.0" + babel-types "^6.24.1" -babel-helper-hoist-variables@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" +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.22.0" + babel-types "^6.24.1" -babel-helper-optimise-call-expression@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.23.0.tgz#f3ee7eed355b4282138b33d02b78369e470622f5" +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.23.0" + babel-types "^6.24.1" -babel-helper-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" +babel-helper-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" lodash "^4.2.0" -babel-helper-remap-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" +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.22.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-replace-supers@^6.22.0, babel-helper-replace-supers@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.23.0.tgz#eeaf8ad9b58ec4337ca94223bacdca1f8d9b4bfd" +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.23.0" + babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helpers@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992" +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.23.0" + babel-template "^6.24.1" babel-loader@^6.4.0: version "6.4.1" @@ -617,38 +616,38 @@ 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-generator-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.22.0.tgz#a720a98153a7596f204099cd5409f4b3c05bab46" +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" dependencies: - babel-helper-remap-async-to-generator "^6.22.0" + babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-generators "^6.5.0" babel-runtime "^6.22.0" -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" +babel-plugin-transform-async-to-generator@^6.24.1: + 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.22.0" + 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-constructor-call@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.22.0.tgz#11a4d2216abb5b0eef298b493748f4f2f4869120" +babel-plugin-transform-class-constructor-call@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" dependencies: babel-plugin-syntax-class-constructor-call "^6.18.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-class-properties@^6.22.0, babel-plugin-transform-class-properties@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.23.0.tgz#187b747ee404399013563c993db038f34754ac3b" +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.23.0" + babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.22.0" - babel-template "^6.23.0" + babel-template "^6.24.1" babel-plugin-transform-decorators-legacy@^1.3.4: version "1.3.4" @@ -658,15 +657,15 @@ babel-plugin-transform-decorators-legacy@^1.3.4: babel-runtime "^6.2.0" babel-template "^6.3.0" -babel-plugin-transform-decorators@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c" +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" dependencies: - babel-helper-explode-class "^6.22.0" + babel-helper-explode-class "^6.24.1" babel-plugin-syntax-decorators "^6.13.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" babel-plugin-transform-do-expressions@^6.22.0: version "6.22.0" @@ -687,36 +686,36 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.23.0.tgz#e48895cf0b375be148cd7c8879b422707a053b51" +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" dependencies: babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" lodash "^4.2.0" -babel-plugin-transform-es2015-classes@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.23.0.tgz#49b53f326202a2fd1b3bbaa5e2edd8a4f78643c1" +babel-plugin-transform-es2015-classes@^6.24.1: + 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.23.0" - babel-helper-function-name "^6.23.0" - babel-helper-optimise-call-expression "^6.23.0" - babel-helper-replace-supers "^6.23.0" + 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.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.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.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" +babel-plugin-transform-es2015-computed-properties@^6.24.1: + 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.22.0" + babel-template "^6.24.1" babel-plugin-transform-es2015-destructuring@^6.22.0: version "6.23.0" @@ -724,12 +723,12 @@ babel-plugin-transform-es2015-destructuring@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-for-of@^6.22.0: version "6.23.0" @@ -737,13 +736,13 @@ babel-plugin-transform-es2015-for-of@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" +babel-plugin-transform-es2015-function-name@^6.24.1: + 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.22.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" @@ -751,63 +750,63 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.0.tgz#a1911fb9b7ec7e05a43a63c5995007557bcf6a2e" +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.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.0.tgz#e921aefb72c2cc26cb03d107626156413222134f" +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" dependencies: - babel-plugin-transform-strict-mode "^6.22.0" + babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-types "^6.23.0" + babel-template "^6.24.1" + babel-types "^6.24.1" -babel-plugin-transform-es2015-modules-systemjs@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.23.0.tgz#ae3469227ffac39b0310d90fec73bfdc4f6317b0" +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: - babel-helper-hoist-variables "^6.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-umd@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.0.tgz#fd5fa63521cae8d273927c3958afd7c067733450" +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" +babel-plugin-transform-es2015-object-super@^6.24.1: + 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.22.0" + babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b" +babel-plugin-transform-es2015-parameters@^6.24.1: + 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.22.0" - babel-helper-get-function-arity "^6.22.0" + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.23.0" - babel-traverse "^6.23.0" - babel-types "^6.23.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.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + 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.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" @@ -815,13 +814,13 @@ babel-plugin-transform-es2015-spread@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: - babel-helper-regex "^6.22.0" + babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" @@ -835,19 +834,19 @@ babel-plugin-transform-es2015-typeof-symbol@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: - babel-helper-regex "^6.22.0" + 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.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" +babel-plugin-transform-exponentiation-operator@^6.24.1: + 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.22.0" + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" @@ -911,23 +910,23 @@ babel-plugin-transform-react-jsx-source@^6.22.0: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-jsx@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.23.0.tgz#23e892f7f2e759678eb5e4446a8f8e94e81b3470" +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.23.0" + babel-helper-builder-react-jsx "^6.24.1" babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-remove-prop-types@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.3.2.tgz#6da8d834c6d7ad8ab02f956509790cfaa01ffe19" +babel-plugin-transform-react-remove-prop-types@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.3.3.tgz#d09f48b9a9503a69c1ced39b3825c2f45d29333c" -babel-plugin-transform-regenerator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" +babel-plugin-transform-regenerator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" dependencies: - regenerator-transform "0.9.8" + regenerator-transform "0.9.11" babel-plugin-transform-runtime@^6.23.0: version "6.23.0" @@ -935,41 +934,41 @@ babel-plugin-transform-runtime@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-strict-mode@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" +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.22.0" + babel-types "^6.24.1" -babel-preset-es2015@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.0.tgz#c162d68b1932696e036cd3110dc1ccd303d2673a" +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.22.0" - babel-plugin-transform-es2015-classes "^6.22.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.0" - babel-plugin-transform-es2015-modules-commonjs "^6.24.0" - babel-plugin-transform-es2015-modules-systemjs "^6.22.0" - babel-plugin-transform-es2015-modules-umd "^6.24.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.22.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" babel-plugin-transform-es2015-template-literals "^6.22.0" babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" babel-preset-flow@^6.23.0: version "6.23.0" @@ -977,57 +976,57 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-react@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.23.0.tgz#eb7cee4de98a3f94502c28565332da9819455195" +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.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-preset-stage-0@^6.16.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.22.0.tgz#707eeb5b415da769eff9c42f4547f644f9296ef9" +babel-preset-stage-0@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" dependencies: babel-plugin-transform-do-expressions "^6.22.0" babel-plugin-transform-function-bind "^6.22.0" - babel-preset-stage-1 "^6.22.0" + babel-preset-stage-1 "^6.24.1" -babel-preset-stage-1@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.22.0.tgz#7da05bffea6ad5a10aef93e320cfc6dd465dbc1a" +babel-preset-stage-1@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" dependencies: - babel-plugin-transform-class-constructor-call "^6.22.0" + babel-plugin-transform-class-constructor-call "^6.24.1" babel-plugin-transform-export-extensions "^6.22.0" - babel-preset-stage-2 "^6.22.0" + babel-preset-stage-2 "^6.24.1" -babel-preset-stage-2@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07" +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.22.0" - babel-plugin-transform-decorators "^6.22.0" - babel-preset-stage-3 "^6.22.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" -babel-preset-stage-3@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e" +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.24.0: - version "6.24.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.0.tgz#5e89f8463ba9970356d02eb07dabe3308b080cfd" +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" dependencies: - babel-core "^6.24.0" + babel-core "^6.24.1" babel-runtime "^6.22.0" core-js "^2.4.0" home-or-tmp "^2.0.0" @@ -1042,33 +1041,33 @@ babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtim core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0, babel-template@^6.3.0, babel-template@^6.7.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638" +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0, babel-template@^6.7.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.23.0" - babel-types "^6.23.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" babylon "^6.11.0" lodash "^4.2.0" -babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1: - version "6.23.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" +babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" dependencies: babel-code-frame "^6.22.0" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.23.0" + babel-types "^6.24.1" babylon "^6.15.0" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" @@ -1195,8 +1194,8 @@ boxen@^1.0.0: widest-line "^1.0.0" brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" dependencies: balanced-match "^0.4.1" concat-map "0.0.1" @@ -1270,7 +1269,7 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: +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: @@ -1281,7 +1280,7 @@ 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-shims@^1.0.0: +buffer-shims@^1.0.0, buffer-shims@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" @@ -1367,25 +1366,25 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" camelcase@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.0.0.tgz#8b0f90d44be5e281b903b9887349b92595ef07f2" + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" caniuse-api@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" dependencies: - browserslist "^1.0.1" - caniuse-db "^1.0.30000346" - lodash.memoize "^4.1.0" - lodash.uniq "^4.3.0" + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" -caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000644" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000644.tgz#9d7eccf1ef1d11cbd6741b9fb390f9923ff42261" +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000650" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000650.tgz#615f564d367533d32b82d72ada09661e75386bab" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1490,8 +1489,8 @@ clap@^1.0.9: chalk "^1.1.3" clean-css@4.0.x: - version "4.0.10" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.10.tgz#6be448d6ba8c767654ebe11f158b97a887cb713f" + version "4.0.12" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.12.tgz#a02e61707f1840bd3338f54dbc9acbda4e772fa3" dependencies: source-map "0.5.x" @@ -1661,6 +1660,10 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +complex.js@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.1.tgz#ea90c7a05aeceaf3a376d2c0f6a78421727d6879" + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -1769,8 +1772,8 @@ cookie@0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" cookiejar@^2.0.6: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898" + version "2.1.1" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.1.tgz#41ad57b1b555951ec171412a81942b1e8200d34a" core-js@^1.0.0: version "1.2.7" @@ -2039,6 +2042,10 @@ 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" +decimal.js@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-7.1.1.tgz#1adcad7d70d7a91c426d756f1eb6566c3be6cbcf" + decompress-tar@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-3.1.0.tgz#217c789f9b94450efaadc5c5e537978fc333c466" @@ -2341,13 +2348,13 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -ejs@^2.5.5, ejs@^2.5.6: +ejs@^2.5.6: version "2.5.6" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" electron-to-chromium@^1.2.7: - version "1.3.2" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.2.tgz#b8ce5c93b308db0e92f6d0435c46ddec8f6363ab" + version "1.3.3" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.3.tgz#651eb63fe89f39db70ffc8dbd5d9b66958bc6a0e" elliptic@^6.0.0: version "6.4.0" @@ -2362,8 +2369,8 @@ elliptic@^6.0.0: minimalistic-crypto-utils "^1.0.0" emoji-regex@^6.1.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.4.1.tgz#77486fe9cd45421d260a6238b88d721e2fad2050" + version "6.4.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.4.2.tgz#a30b6fee353d406d96cfb9fa765bdc82897eff6e" emojis-list@^2.0.0: version "2.1.0" @@ -2569,8 +2576,8 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-airbnb-base@^11.1.0: - version "11.1.2" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.2.tgz#259209a7678bf693e31cbe8f953f206b6aa7ccc3" + version "11.1.3" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.3.tgz#0e8db71514fa36b977fbcf977c01edcf863e0cf0" eslint-config-airbnb@^14.0.0: version "14.1.0" @@ -2674,10 +2681,10 @@ eslint@^3.19.0: user-home "^2.0.0" espree@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" + version "3.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.1.tgz#28a83ab4aaed71ed8fe0f5efe61b76a05c13c4d2" dependencies: - acorn "4.0.4" + acorn "^5.0.1" acorn-jsx "^3.0.0" esprima-fb@~12001.1.0-dev-harmony-fb: @@ -2804,7 +2811,7 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@^4.14.1, express@^4.15.2: +express@^4.15.2: version "4.15.2" resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" dependencies: @@ -2890,9 +2897,9 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" -fbjs@^0.8.4: - version "0.8.11" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.11.tgz#340b590b8a2278a01ef7467c07a16da9b753db24" +fbjs@^0.8.9: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2948,7 +2955,7 @@ filenamify@^1.0.1: strip-outer "^1.0.0" trim-repeated "^1.0.0" -filesize@^3.5.4: +filesize@^3.5.6: version "3.5.6" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" @@ -3041,8 +3048,8 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" form-data@^2.1.1, form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" + 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" @@ -3064,6 +3071,10 @@ forwarded@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" +fraction.js@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.0.tgz#73974e2f8b51ef709536d624cc90782e2bb61274" + fresh@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" @@ -3327,6 +3338,12 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" +gonzales-pe@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.0.3.tgz#36148e18e267184fbfdc929af28f29ad9fbf9746" + dependencies: + minimist "1.1.x" + google-auth-library@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-0.10.0.tgz#6e15babee85fd1dd14d8d128a295b6838d52136e" @@ -3337,10 +3354,10 @@ google-auth-library@~0.10.0: request "^2.74.0" google-p12-pem@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.1.tgz#66ef8946ee97e8da37f1beb1d8ec5c3be2ba4539" + version "0.1.2" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-0.1.2.tgz#33c46ab021aa734fa0332b3960a9a3ffcb2f3177" dependencies: - node-forge "^0.6.46" + node-forge "^0.7.1" googleapis@^16.1.0: version "16.1.0" @@ -3566,8 +3583,8 @@ he@^0.5.0: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" hmac-drbg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5" + 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" @@ -3596,9 +3613,9 @@ html-entities@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" -html-minifier@^3.4.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.2.tgz#31896baaf735c1d95f7a0b7291f9dc36c0720752" +html-minifier@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.3.tgz#eb3a7297c804611f470454eeebe0aacc427e424a" dependencies: camel-case "3.0.x" clean-css "4.0.x" @@ -3607,7 +3624,7 @@ html-minifier@^3.4.1: ncname "1.0.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "2.8.x" + uglify-js "~2.8.22" html-truncate@^1.2.2: version "1.2.2" @@ -3673,8 +3690,8 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" ignore@^3.2.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.6.tgz#26e8da0644be0bb4cb39516f6c79f0e0f4ffe48c" + version "3.2.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.7.tgz#4810ca5f1d8eca5595213a34b94f2eb4ed926bbd" image-size@~0.5.0: version "0.5.1" @@ -3760,8 +3777,8 @@ inquirer@^0.12.0: through "^2.3.6" interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" + version "1.0.2" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.2.tgz#f4f623f0bb7122f15f5717c8e254b8161b5c5b2d" invariant@^2.2.0: version "2.2.2" @@ -4289,9 +4306,9 @@ karma-sourcemap-loader@0.3.7: dependencies: graceful-fs "^4.1.2" -karma-spec-reporter@^0.0.30: - version "0.0.30" - resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.30.tgz#d10b5c8bb441cb1c6adf56785f89d395f2e9093a" +karma-spec-reporter@^0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz#4830dc7148a155c7d7a186e632339a0d80fadec3" dependencies: colors "^1.1.2" @@ -4305,9 +4322,9 @@ karma-webpack@^2.0.3: source-map "^0.1.41" webpack-dev-middleware "^1.0.11" -karma@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/karma/-/karma-1.5.0.tgz#9c4c14f0400bef2c04c8e8e6bff59371025cc009" +karma@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-1.6.0.tgz#0e871d4527d5eac56c41d181f03c5c0a7e6dbf3e" dependencies: bluebird "^3.3.0" body-parser "^1.16.1" @@ -4326,7 +4343,7 @@ karma@^1.5.0: lodash "^3.8.0" log4js "^0.6.31" mime "^1.3.4" - minimatch "^3.0.0" + minimatch "^3.0.2" optimist "^0.6.1" qjobs "^1.1.4" range-parser "^1.2.0" @@ -4656,7 +4673,7 @@ lodash.keysin@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.memoize@^4.1.0: +lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4732,7 +4749,7 @@ lodash.toplainobject@^3.0.0: lodash._basecopy "^3.0.0" lodash.keysin "^3.0.0" -lodash.uniq@^4.3.0: +lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -4748,10 +4765,6 @@ lodash@~2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" -lodash@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.5.0.tgz#19bb3f4d51278f0b8c818ed145c74ecf9fe40e6d" - lodash@~4.16.4: version "4.16.6" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" @@ -4778,7 +4791,7 @@ 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.0.0, loose-envify@^1.1.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -4830,6 +4843,17 @@ math-expression-evaluator@^1.2.14: version "1.2.16" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" +mathjs@^3.11.5: + version "3.11.5" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.11.5.tgz#34e9e75e2bd3740986e96fc8a0815999f331f28d" + dependencies: + complex.js "2.0.1" + decimal.js "7.1.1" + fraction.js "4.0.0" + seed-random "2.2.0" + tiny-emitter "1.0.2" + typed-function "0.10.5" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -4905,7 +4929,7 @@ mime-db@~1.27.0: version "1.27.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: +mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" dependencies: @@ -4939,6 +4963,10 @@ minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" +minimist@1.1.x: + version "1.1.3" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" + minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -4991,8 +5019,8 @@ mute-stream@0.0.5, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" nan@^2.3.0, nan@^2.3.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + version "2.6.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" natural-compare@^1.4.0: version "1.4.0" @@ -5021,9 +5049,9 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@^0.6.46: - version "0.6.49" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.49.tgz#f1ee95d5d74623938fe19d698aa5a26d54d2f60f" +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, node-gyp@~3.6.0: version "3.6.0" @@ -5153,8 +5181,10 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- validate-npm-package-license "^3.0.1" normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" + 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" @@ -5409,7 +5439,7 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" -opener@^1.4.2, opener@~1.4.1: +opener@^1.4.3, opener@~1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" @@ -5867,6 +5897,14 @@ postcss-reduce-transforms@^1.0.3: postcss "^5.0.8" postcss-value-parser "^3.0.1" +postcss-sass@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.1.0.tgz#0d2a655b5d241ec8f419bb3da38de5ca11746ddb" + dependencies: + gonzales-pe "^4.0.3" + mathjs "^3.11.5" + postcss "^5.2.6" + postcss-scss@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.4.1.tgz#ad771b81f0f72f5f4845d08aa60f93557653d54c" @@ -5881,14 +5919,15 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-smart-import@^0.6.10: - version "0.6.10" - resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.6.10.tgz#4e6345cfbafc32c9ef5d6097e6a443738be3f4c0" +postcss-smart-import@^0.6.11: + version "0.6.11" + resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.6.11.tgz#d9982611d063985e91c0a2e2462ed5c068d8bb8e" dependencies: babel-runtime "^6.23.0" lodash "^4.17.4" object-assign "^4.1.1" postcss "^5.2.16" + postcss-sass "^0.1.0" postcss-scss "^0.4.1" postcss-value-parser "^3.3.0" promise-each "^2.2.0" @@ -5925,7 +5964,7 @@ postcss-zindex@^2.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.13, postcss@^5.2.15, postcss@^5.2.16, postcss@^5.2.4: +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.13, postcss@^5.2.15, postcss@^5.2.16, postcss@^5.2.4, postcss@^5.2.6: version "5.2.16" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" dependencies: @@ -5988,6 +6027,12 @@ promzard@^0.3.0: dependencies: read "1" +prop-types@^15.5.4, prop-types@^15.5.7, 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" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -6124,21 +6169,14 @@ raw-body@~2.2.0: unpipe "1.0.0" rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -react-addons-test-utils@^15.4.2: - version "15.4.2" - resolved "https://registry.yarnpkg.com/react-addons-test-utils/-/react-addons-test-utils-15.4.2.tgz#93bcaa718fcae7360d42e8fb1c09756cc36302a2" - dependencies: - fbjs "^0.8.4" - object-assign "^4.1.0" - react-base16-styling@^0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.5.3.tgz#3858f24e9c4dd8cbd3f702f3f74d581ca2917269" @@ -6187,6 +6225,15 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" +react@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.7" + read-all-stream@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" @@ -6244,16 +6291,16 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.2.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" +"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: + version "2.2.9" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" dependencies: - buffer-shims "^1.0.0" + buffer-shims "~1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" isarray "~1.0.0" process-nextick-args "~1.0.6" - string_decoder "~0.10.x" + string_decoder "~1.0.0" util-deprecate "~1.0.1" "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.2: @@ -6337,11 +6384,12 @@ rechoir@^0.6.2: resolve "^1.1.6" redbox-react@^1.2.5: - version "1.3.4" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.4.tgz#3d882bb62cc7c8f6256279d12f05c6a5a96d24c6" + version "1.3.6" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.6.tgz#70314c57c066257eb70b0a24dc794b5cef4f1c4e" dependencies: error-stack-parser "^1.3.6" object-assign "^4.0.1" + prop-types "^15.5.4" redent@^1.0.0: version "1.0.0" @@ -6416,9 +6464,9 @@ regenerator-runtime@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" +regenerator-transform@0.9.11: + version "0.9.11" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -6448,8 +6496,8 @@ regexpu-core@^2.0.0: regjsparser "^0.1.4" registry-auth-token@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" + version "3.1.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.2.tgz#1b9e51a185c930da34a9894b12a52ea998f1adaf" dependencies: rc "^1.1.6" @@ -6473,6 +6521,10 @@ 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.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -6739,13 +6791,13 @@ sax@0.6.x: version "0.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" -sax@1.1.5, sax@>=0.6.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.5.tgz#1da50a8d00cdecd59405659f5ff85349fe773743" +sax@1.2.1, sax@>=0.6.0, sax@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" -sax@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" +seed-random@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" seek-bzip@^1.0.3: version "1.0.5" @@ -7072,12 +7124,12 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-http@^2.3.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" + version "2.7.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.1.0" + readable-stream "^2.2.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -7116,6 +7168,12 @@ 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: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" + dependencies: + buffer-shims "~1.0.0" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -7343,6 +7401,10 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" +tiny-emitter@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-1.0.2.tgz#8e49470d3f55f89e247210368a6bb9fb51aa1601" + tmp@0.0.24: version "0.0.24" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" @@ -7426,11 +7488,15 @@ type-check@~0.3.2: prelude-ls "~1.1.2" type-is@~1.6.14: - version "1.6.14" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" + 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.13" + mime-types "~2.1.15" + +typed-function@0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-0.10.5.tgz#2e0f18abd065219fab694a446a65c6d1981832c0" typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" @@ -7440,9 +7506,9 @@ ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@2.8.x, uglify-js@^2.6, uglify-js@^2.8.5: - version "2.8.18" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.18.tgz#925d14bae48ab62d1883b41afe6e2261662adb8e" +uglify-js@^2.6, uglify-js@^2.8.5, uglify-js@~2.8.22: + version "2.8.22" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -7583,18 +7649,14 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728" +uuid@3.0.1, uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" @@ -7737,20 +7799,20 @@ webdriver-manager@^12.0.1: semver "^5.3.0" xml2js "^0.4.17" -webpack-bundle-analyzer@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.3.1.tgz#d97f8aadbcce68fc865c5787741d8549359a25cd" +webpack-bundle-analyzer@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.4.0.tgz#e406b016e7452bc864793848c79308782accba8e" dependencies: - acorn "^4.0.11" + acorn "^5.0.3" chalk "^1.1.3" commander "^2.9.0" - ejs "^2.5.5" - express "^4.14.1" - filesize "^3.5.4" + ejs "^2.5.6" + express "^4.15.2" + filesize "^3.5.6" gzip-size "^3.0.0" lodash "^4.17.4" mkdirp "^0.5.1" - opener "^1.4.2" + opener "^1.4.3" webpack-core@^0.6.9: version "0.6.9" @@ -7916,12 +7978,12 @@ 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" -xml2js@0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.15.tgz#95cd03ff2dd144ec28bc6273bf2b2890c581ad0c" +xml2js@0.4.17, xml2js@^0.4.17: + version "0.4.17" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" dependencies: sax ">=0.6.0" - xmlbuilder ">=2.4.6" + xmlbuilder "^4.1.0" xml2js@0.4.4: version "0.4.4" @@ -7930,20 +7992,7 @@ xml2js@0.4.4: sax "0.6.x" xmlbuilder ">=1.0.0" -xml2js@^0.4.17: - version "0.4.17" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" - dependencies: - sax ">=0.6.0" - xmlbuilder "^4.1.0" - -xmlbuilder@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-2.6.2.tgz#f916f6d10d45dc171b1be2e6e673fb6e0cc35d0a" - dependencies: - lodash "~3.5.0" - -xmlbuilder@>=1.0.0, xmlbuilder@>=2.4.6, xmlbuilder@^4.1.0: +xmlbuilder@4.2.1, xmlbuilder@>=1.0.0, xmlbuilder@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" dependencies: diff --git a/yarn.lock b/yarn.lock index f93b959..ac50df3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,8 +21,8 @@ balanced-match@^0.4.1: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" dependencies: balanced-match "^0.4.1" concat-map "0.0.1" From 15658425b4bf5898ba948aa496e6c091dee4d65c Mon Sep 17 00:00:00 2001 From: dittonjs Date: Fri, 14 Apr 2017 16:31:12 -0600 Subject: [PATCH 337/452] moves jwt reducer (#17) --- client/apps/hello_world/reducers/index.js | 2 +- client/{apps/hello_world => libs}/reducers/jwt.js | 0 client/{apps/hello_world => libs}/reducers/jwt.spec.js | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename client/{apps/hello_world => libs}/reducers/jwt.js (100%) rename client/{apps/hello_world => libs}/reducers/jwt.spec.js (100%) diff --git a/client/apps/hello_world/reducers/index.js b/client/apps/hello_world/reducers/index.js index 04e4b8b..439ed03 100644 --- a/client/apps/hello_world/reducers/index.js +++ b/client/apps/hello_world/reducers/index.js @@ -1,6 +1,6 @@ import { combineReducers } from 'redux'; import settings from '../../../libs/reducers/settings'; -import jwt from './jwt'; +import jwt from '../../../libs/reducers/jwt'; import application from './application'; const rootReducer = combineReducers({ diff --git a/client/apps/hello_world/reducers/jwt.js b/client/libs/reducers/jwt.js similarity index 100% rename from client/apps/hello_world/reducers/jwt.js rename to client/libs/reducers/jwt.js diff --git a/client/apps/hello_world/reducers/jwt.spec.js b/client/libs/reducers/jwt.spec.js similarity index 100% rename from client/apps/hello_world/reducers/jwt.spec.js rename to client/libs/reducers/jwt.spec.js From 95cccc0a7434e2dda4be5d008c8c3f46e754a791 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 14 Apr 2017 17:08:45 -0600 Subject: [PATCH 338/452] Fixes hot_pack --- client/webpack.hot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index b2f2daa..2da5292 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -62,7 +62,7 @@ if (appName) { _.each(results, (result) => { setupMiddleware(_.merge({}, result.app, - { publicPath: `/${appName}` } + { publicPath: `/${result.app.name}` } )); }); runServer(settings.hotPort, settings.path.devOutput); From e305768d2f49b51ac108e9d4784a6fe36f218953 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 14 Apr 2017 17:36:26 -0600 Subject: [PATCH 339/452] resolve css, less and css. Fix jwt in libs dir. --- client/apps/hello_world/app.jsx | 4 ++-- client/config/webpack.config.js | 2 +- client/{apps/hello_world => libs}/actions/jwt.js | 4 ++-- client/{apps/hello_world => libs}/loaders/jwt.js | 0 4 files changed, 5 insertions(+), 5 deletions(-) rename client/{apps/hello_world => libs}/actions/jwt.js (74%) rename client/{apps/hello_world => libs}/loaders/jwt.js (100%) diff --git a/client/apps/hello_world/app.jsx b/client/apps/hello_world/app.jsx index 9800379..bab9343 100644 --- a/client/apps/hello_world/app.jsx +++ b/client/apps/hello_world/app.jsx @@ -8,10 +8,10 @@ import injectTapEventPlugin from 'react-tap-event-plugin'; import DevTools from '../../libs/dev/dev_tools'; import { getInitialSettings } from '../../libs/reducers/settings'; import configureStore from './store/configure_store'; -import jwt from './loaders/jwt'; +import jwt from '../../libs/loaders/jwt'; import routes from './routes'; -require('./styles/styles'); +import './styles/styles'; // Polyfill es6 promises for IE es6Promise.polyfill(); diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 69952a5..6a04ec5 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -136,7 +136,7 @@ module.exports = function webpackConfig(app) { pathinfo: !app.production }, resolve: { - extensions: ['.js', '.json', '.jsx'], + extensions: ['.js', '.json', '.jsx', '.scss', '.less', '.css'], modules: ['node_modules', `${app.path}/node_modules`] }, cache: true, diff --git a/client/apps/hello_world/actions/jwt.js b/client/libs/actions/jwt.js similarity index 74% rename from client/apps/hello_world/actions/jwt.js rename to client/libs/actions/jwt.js index 8555764..351c02f 100644 --- a/client/apps/hello_world/actions/jwt.js +++ b/client/libs/actions/jwt.js @@ -1,5 +1,5 @@ -import wrapper from '../../../libs/constants/wrapper'; -import Network from '../../../libs/constants/network'; +import wrapper from '../constants/wrapper'; +import Network from '../constants/network'; // Local actions const actions = []; diff --git a/client/apps/hello_world/loaders/jwt.js b/client/libs/loaders/jwt.js similarity index 100% rename from client/apps/hello_world/loaders/jwt.js rename to client/libs/loaders/jwt.js From af56673d1dcc650d72953408a5adf41add64a2a5 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 14 Apr 2017 17:44:04 -0600 Subject: [PATCH 340/452] Fixes public path when using hot pack --- client/config/settings.js | 4 ++++ client/webpack.hot.js | 9 +++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index d0f62a3..21f215f 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -86,6 +86,10 @@ function outputPaths(name, port, options) { publicPath = prodAssetsUrl + prodRelativeOutput; } + if (options.hotPack) { + publicPath = `${publicPath}/${name}`; + } + return { rootOutputPath, outputPath, diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 2da5292..11e0a2d 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -52,7 +52,7 @@ function launch(app) { runServer(app.port, app.outputPath); } -const options = { stage: 'hot', onlyPack: false, port: settings.hotPort }; +const options = { hotPack, stage: 'hot', onlyPack: false, port: settings.hotPort }; if (appName) { const result = clientApps.buildApp(appName, options); launch(result.app); @@ -60,12 +60,9 @@ if (appName) { options.onlyPack = true; const results = clientApps.buildApps(options); _.each(results, (result) => { - setupMiddleware(_.merge({}, - result.app, - { publicPath: `/${result.app.name}` } - )); + setupMiddleware(result.app); }); - runServer(settings.hotPort, settings.path.devOutput); + runServer(settings.hotPort, settings.paths.devOutput); } else { _.each(clientApps.buildApps(options), (result) => { launch(result.app); From 6355ca25a89e9ec844550df16bb8dce5b3f5ddce Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 14 Apr 2017 17:56:12 -0600 Subject: [PATCH 341/452] Fix publicPath --- client/config/settings.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 21f215f..e65c546 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -77,7 +77,7 @@ function outputPaths(name, port, options) { // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In developerment this will // point to whatever public url is serving dev assets. - let publicPath = `${devAssetsUrl}:${port}${devRelativeOutput}`; + let publicPath = `${devAssetsUrl}:${port}${options.hotPack ? `/${name}` : ''}${devRelativeOutput}`; if (isProduction(options.stage)) { rootOutputPath = prodOutput; @@ -86,10 +86,6 @@ function outputPaths(name, port, options) { publicPath = prodAssetsUrl + prodRelativeOutput; } - if (options.hotPack) { - publicPath = `${publicPath}/${name}`; - } - return { rootOutputPath, outputPath, From 6152745c9a2f9fda3b6eeee797dc6389beb8fd46 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 11:23:44 -0600 Subject: [PATCH 342/452] Adds empty placeholder folder --- client/apps/hello_world/static/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 client/apps/hello_world/static/.keep diff --git a/client/apps/hello_world/static/.keep b/client/apps/hello_world/static/.keep new file mode 100644 index 0000000..e69de29 From c09d0e5cf76b596bf9f244cc0ad31b59bb8ab963 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 12:31:49 -0600 Subject: [PATCH 343/452] Separate webpack from app settings --- client/config/settings.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index e65c546..27322b2 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -93,6 +93,20 @@ function outputPaths(name, port, options) { }; } +// ----------------------------------------------------------------------------- +// Generate settings needed for webpack +// ----------------------------------------------------------------------------- +function webpackSettings(file, appPath, port, options) { + return _.merge({ + name, + file, + path: appPath, + stage: options.stage, + production: isProduction(options.stage), + buildSuffix, + }, outputPaths(name, port, options)); +} + // ----------------------------------------------------------------------------- // Generate all settings needed for a given application // ----------------------------------------------------------------------------- @@ -103,19 +117,13 @@ function appSettings(name, port, options) { const staticPath = path.join(appPath, 'static'); const app = _.merge({ - name, - path: appPath, - file: 'app.jsx', htmlPath, staticPath, templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis - stage: options.stage, - buildSuffix, port, - production: isProduction(options.stage), htmlOptions, - }, outputPaths(name, port, options)); + }, webpackSettings('app.jsx', appPath, port, options)); app.templateDirs = templateDirs(app, ['layouts']); return { From 2fbf7e3006702cca99c261bd6c32ea613ebbba67 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 12:36:18 -0600 Subject: [PATCH 344/452] Move port --- client/config/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/settings.js b/client/config/settings.js index 27322b2..f450e37 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -104,6 +104,7 @@ function webpackSettings(file, appPath, port, options) { stage: options.stage, production: isProduction(options.stage), buildSuffix, + port, }, outputPaths(name, port, options)); } @@ -121,7 +122,6 @@ function appSettings(name, port, options) { staticPath, templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis - port, htmlOptions, }, webpackSettings('app.jsx', appPath, port, options)); From 76ffe7c1ed4da59ba7ef38b0525e2eb5b8376763 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 12:52:50 -0600 Subject: [PATCH 345/452] Extract iterate dirs method --- client/config/settings.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index f450e37..04266c1 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -132,19 +132,26 @@ function appSettings(name, port, options) { } // ----------------------------------------------------------------------------- -// Generates an app setting for all applications found in the client directory +// Iterate a given directory to generate app or webpack settings // ----------------------------------------------------------------------------- -function apps(options) { +function iterateDirAndPorts(dir, options, cb) { let port = options.port; - return fs.readdirSync(appsDir) - .filter(file => fs.statSync(path.join(appsDir, file)).isDirectory()) + return fs.readdirSync(dir) + .filter(file => fs.statSync(path.join(dir, file)).isDirectory()) .reduce((result, appName) => { - const app = appSettings(appName, port, options); + const app = cb(appName, port, options); port = options.appPerPort ? port + 1 : options.port; return _.merge(result, app); }, {}); } +// ----------------------------------------------------------------------------- +// Generates an app setting for all applications found in the client directory +// ----------------------------------------------------------------------------- +function apps(options) { + return iterateDirAndPorts(appsDir, options, appSettings); +} + module.exports = { paths, hotPort, From 7de3dc70f93997e22c0d52210db4347780bdfac8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 13:04:13 -0600 Subject: [PATCH 346/452] Remove unused import --- client/libs/build/build.js | 1 - 1 file changed, 1 deletion(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 1e919d8..989062e 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -1,4 +1,3 @@ -const path = require('path'); const fs = require('fs-extra'); const webpack = require('webpack'); const nodeWatch = require('node-watch'); From b7555ba92dbd423421bca98ac12e8391cf29f28b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 13:07:14 -0600 Subject: [PATCH 347/452] Fix missing param --- client/config/settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 04266c1..f4366a0 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -96,7 +96,7 @@ function outputPaths(name, port, options) { // ----------------------------------------------------------------------------- // Generate settings needed for webpack // ----------------------------------------------------------------------------- -function webpackSettings(file, appPath, port, options) { +function webpackSettings(name, file, appPath, port, options) { return _.merge({ name, file, @@ -123,7 +123,7 @@ function appSettings(name, port, options) { templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis htmlOptions, - }, webpackSettings('app.jsx', appPath, port, options)); + }, webpackSettings(name, 'app.jsx', appPath, port, options)); app.templateDirs = templateDirs(app, ['layouts']); return { From 387a2fa0ff145ad088489916a2f6b6e9de4fad10 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 16:46:42 -0600 Subject: [PATCH 348/452] Separate outputPaths from webpackSettings --- client/config/settings.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index f4366a0..4650822 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -97,7 +97,7 @@ function outputPaths(name, port, options) { // Generate settings needed for webpack // ----------------------------------------------------------------------------- function webpackSettings(name, file, appPath, port, options) { - return _.merge({ + return { name, file, path: appPath, @@ -105,7 +105,7 @@ function webpackSettings(name, file, appPath, port, options) { production: isProduction(options.stage), buildSuffix, port, - }, outputPaths(name, port, options)); + }; } // ----------------------------------------------------------------------------- @@ -123,7 +123,8 @@ function appSettings(name, port, options) { templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis htmlOptions, - }, webpackSettings(name, 'app.jsx', appPath, port, options)); + }, webpackSettings(name, 'app.jsx', appPath, port, options), + outputPaths(name, port, options)); app.templateDirs = templateDirs(app, ['layouts']); return { From 07496fb4a443b853102239262dbed88b43bb338d Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 20:13:31 -0600 Subject: [PATCH 349/452] Don't build if inputPath is empty --- client/libs/build/content.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 0b0fa51..4ffe84b 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -113,6 +113,11 @@ function buildContents( webpackAssets) { let results = []; + + if (_.isEmpty(inputPath)) { + return results; + } + const files = fs.readdirSync(inputPath); files.forEach((fileName) => { From d1f8e968ea54daf0aa10c1ec59f466a9f62e8ab0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 15 Apr 2017 23:28:22 -0600 Subject: [PATCH 350/452] Use webpack multicompiler --- client/apps/hello_world/html/index.html | 4 ++-- client/config/webpack.config.js | 4 ++-- client/webpack.hot.js | 27 ++++++++++++------------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/client/apps/hello_world/html/index.html b/client/apps/hello_world/html/index.html index 5a7272d..c4ad34d 100644 --- a/client/apps/hello_world/html/index.html +++ b/client/apps/hello_world/html/index.html @@ -1,4 +1,4 @@
    - - + + \ No newline at end of file diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 6a04ec5..432a8a8 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -54,11 +54,11 @@ module.exports = function webpackConfig(app) { let plugins = [ // Use to extract common code from multiple entry points into a single init.js new webpack.optimize.CommonsChunkPlugin({ - name: 'vendor', + name: `${app.name}_vendor`, minChunks: module => module.context && module.context.indexOf('node_modules') !== -1 }), new webpack.optimize.CommonsChunkPlugin({ - name: 'manifest', + name: `${app.name}_manifest`, minChunks: Infinity }) ]; diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 11e0a2d..d455cf1 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -16,27 +16,26 @@ const localIp = '0.0.0.0'; const appName = _.trim(argv._[0]); const hotPack = argv.hotPack; -function setupMiddleware(app) { +function setupMiddleware(apps) { - const webpackConfig = webpackConfigBuilder(app); + const webpackConfigs = _.map(apps, app => webpackConfigBuilder(app)); + + const compiler = webpack(webpackConfigs); - const compiler = webpack(webpackConfig); const webpackMiddlewareInstance = webpackMiddleware(compiler, { noInfo: true, - publicPath: webpackConfig.output.publicPath, watch: true, headers: { 'Access-Control-Allow-Origin': '*' } }); - - serverApp.use(express.static(app.outputPath)); serverApp.use(webpackMiddlewareInstance); serverApp.use(webpackHotMiddleware(compiler)); - serverApp.get('*', (req, res) => { - res.sendFile(path.join(app.outputPath, req.url)); - }); } function runServer(port, servePath) { + serverApp.use(express.static(servePath)); + serverApp.get('*', (req, res) => { + res.sendFile(path.join(servePath, req.url)); + }); serverApp.listen(port, localIp, (err) => { if (err) { console.log(err); @@ -48,20 +47,20 @@ function runServer(port, servePath) { } function launch(app) { - setupMiddleware(app); + setupMiddleware([app]); runServer(app.port, app.outputPath); } -const options = { hotPack, stage: 'hot', onlyPack: false, port: settings.hotPort }; +const options = { hotPack, stage: 'hot', onlyPack: false, port: settings.hotPort, appPerPort: true }; if (appName) { const result = clientApps.buildApp(appName, options); launch(result.app); } else if (hotPack) { options.onlyPack = true; + options.appPerPort = false; const results = clientApps.buildApps(options); - _.each(results, (result) => { - setupMiddleware(result.app); - }); + const apps = _.map(results, result => result.app); + setupMiddleware(apps); runServer(settings.hotPort, settings.paths.devOutput); } else { _.each(clientApps.buildApps(options), (result) => { From 40dc36df84b194e4b8421e080ad0bc5c0746fe69 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 17 Apr 2017 10:17:47 -0600 Subject: [PATCH 351/452] Move port onto devAssetsUrl setting --- client/config/settings.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 4650822..36cfe68 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -25,7 +25,8 @@ const prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); // https://s3.amazonaws.com/' + deployConfig.domain; const prodAssetsUrl = `https://s3.amazonaws.com/${deployConfig.domain}`; -const devAssetsUrl = process.env.ASSETS_URL; + +const devAssetsUrl = `${process.env.ASSETS_URL}:${hotPort}`; // Get a list of all directories in the apps directory. // These will be used to generate the entries for webpack @@ -77,7 +78,7 @@ function outputPaths(name, port, options) { // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In developerment this will // point to whatever public url is serving dev assets. - let publicPath = `${devAssetsUrl}:${port}${options.hotPack ? `/${name}` : ''}${devRelativeOutput}`; + let publicPath = `${devAssetsUrl}${devRelativeOutput}`; if (isProduction(options.stage)) { rootOutputPath = prodOutput; From e7324a253c2051a02f92a65908cacc4da8e02a5e Mon Sep 17 00:00:00 2001 From: dittonjs Date: Mon, 17 Apr 2017 10:27:32 -0600 Subject: [PATCH 352/452] adds eslint into the webpack hot process (#18) * adds eslint into the webpack hot process * lint the things --- client/config/settings.js | 1 + client/config/webpack.config.js | 3 +++ client/package.json | 1 + client/webpack.hot.js | 4 +++- client/yarn.lock | 6 ++++++ package.json | 3 ++- 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 36cfe68..6a5a52c 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -102,6 +102,7 @@ function webpackSettings(name, file, appPath, port, options) { name, file, path: appPath, + shouldLint: options.shouldLint, stage: options.stage, production: isProduction(options.stage), buildSuffix, diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 432a8a8..4882517 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -40,6 +40,9 @@ module.exports = function webpackConfig(app) { const babelLoader = `babel-loader?${babelPlugins}&${presets}`; const jsLoaders = [babelLoader]; + if (app.shouldLint) { + jsLoaders.push('atomic-lint-loader'); + } const cssLoaders = ['css-loader?importLoaders=1', 'postcss-loader']; diff --git a/client/package.json b/client/package.json index 9e811fd..d63cfa1 100644 --- a/client/package.json +++ b/client/package.json @@ -7,6 +7,7 @@ }, "devDependencies": { "assets-webpack-plugin": "^3.5.1", + "atomic-lint-loader": "^1.0.1", "autoprefixer": "^6.7.7", "babel-core": "^6.24.1", "babel-eslint": "^7.2.2", diff --git a/client/webpack.hot.js b/client/webpack.hot.js index d455cf1..7a294d5 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -15,6 +15,7 @@ const serverApp = express(); const localIp = '0.0.0.0'; const appName = _.trim(argv._[0]); const hotPack = argv.hotPack; +const shouldLint = argv.lint; function setupMiddleware(apps) { @@ -51,7 +52,8 @@ function launch(app) { runServer(app.port, app.outputPath); } -const options = { hotPack, stage: 'hot', onlyPack: false, port: settings.hotPort, appPerPort: true }; +const options = { hotPack, shouldLint, stage: 'hot', onlyPack: false, port: settings.hotPort, appPerPort: true }; + if (appName) { const result = clientApps.buildApp(appName, options); launch(result.app); diff --git a/client/yarn.lock b/client/yarn.lock index 4cacb2d..7c301aa 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -326,6 +326,12 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atomic-lint-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/atomic-lint-loader/-/atomic-lint-loader-1.0.1.tgz#da6877bd7e8a7e8efd86fd4808c6ee14935d3078" + dependencies: + lodash "^4.17.4" + autoprefixer@^6.3.1, autoprefixer@^6.7.7: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" diff --git a/package.json b/package.json index b7979e6..a1653ad 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,9 @@ "postinstall": "cd ./client && yarn", "test": "cd ./client && ./node_modules/karma/bin/karma start", "coverage": "cat ./coverage/**/coverage.info | ./client/node_modules/coveralls/bin/coveralls.js", - "hot": "cd ./client && node webpack.hot.js", + "hot": "cd ./client && node webpack.hot.js --lint", "hot_pack": "cd ./client && node webpack.hot.js --hotPack", + "hot_lint": "cd ./client && node webpack.hot.js --hotPack --lint", "live": "cd ./client && node server.js", "build_dev": "cd ./client && node ./build.js", "build_dev_pack": "cd ./client && node ./build.js --onlyPack", From 5c4c3a2479adc1d5e4d942127b4d4b522af18330 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 18 Apr 2017 13:30:03 -0600 Subject: [PATCH 353/452] Don't lint when run hot --- client/apps/hello_world/components/home.jsx | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/apps/hello_world/components/home.jsx b/client/apps/hello_world/components/home.jsx index cfd62d1..2885b4e 100644 --- a/client/apps/hello_world/components/home.jsx +++ b/client/apps/hello_world/components/home.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React from 'react'; import assets from '../libs/assets'; export default function Home() { diff --git a/package.json b/package.json index a1653ad..246445c 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "postinstall": "cd ./client && yarn", "test": "cd ./client && ./node_modules/karma/bin/karma start", "coverage": "cat ./coverage/**/coverage.info | ./client/node_modules/coveralls/bin/coveralls.js", - "hot": "cd ./client && node webpack.hot.js --lint", + "hot": "cd ./client && node webpack.hot.js", "hot_pack": "cd ./client && node webpack.hot.js --hotPack", "hot_lint": "cd ./client && node webpack.hot.js --hotPack --lint", "live": "cd ./client && node server.js", From 2a0914da27956cddf167d378a56faa561d08bbe4 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 18 Apr 2017 21:51:08 -0600 Subject: [PATCH 354/452] Include app in results from build --- client/libs/build/build.js | 1 + 1 file changed, 1 insertion(+) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 989062e..2840454 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -118,6 +118,7 @@ function build(app) { const pages = buildHtml(app, webpackAssets); resolve({ + app, webpackConfig : packResults.webpackConfig, webpackAssets, pages, From cafb746fa2f94a3a9ed0ec79245b25d453afe0d2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 18 Apr 2017 22:46:23 -0600 Subject: [PATCH 355/452] Fixes default plugin setup --- client/config/webpack.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 4882517..02ae5ec 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -97,10 +97,10 @@ module.exports = function webpackConfig(app) { extractCSS ]); } else { - plugins = [ + plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), extractCSS - ]; + ]); } const rules = [ From d5a5703a90bc88bf684bc853919a435a6bc081d2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 19 Apr 2017 08:58:02 -0600 Subject: [PATCH 356/452] Fixes tests --- client/config/webpack.config.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 02ae5ec..93d4709 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -96,11 +96,16 @@ module.exports = function webpackConfig(app) { new webpack.NoEmitOnErrorsPlugin(), extractCSS ]); - } else { + } else if (app.stage === 'development') { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), extractCSS ]); + } else { + plugins = [ + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), + extractCSS + ]; } const rules = [ From 5383f99608c011f41561302b971c5cc246f9f816 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 09:13:50 -0600 Subject: [PATCH 357/452] Always generate assets plugin --- client/config/settings.js | 3 ++- client/config/webpack.config.js | 24 +++++++++++------------- client/libs/build/content.js | 4 ++-- client/libs/build/html_paths.js | 22 ++++++++++++++++++++++ client/libs/build/production.js | 24 ------------------------ 5 files changed, 37 insertions(+), 40 deletions(-) create mode 100644 client/libs/build/html_paths.js delete mode 100644 client/libs/build/production.js diff --git a/client/config/settings.js b/client/config/settings.js index 6a5a52c..9b197c1 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -159,5 +159,6 @@ module.exports = { paths, hotPort, outputPaths, - apps + apps, + isProduction }; diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 93d4709..9092e3d 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -63,7 +63,14 @@ module.exports = function webpackConfig(app) { new webpack.optimize.CommonsChunkPlugin({ name: `${app.name}_manifest`, minChunks: Infinity - }) + }), + // Generate webpack-assets.json to map path to assets generated with hashed names + new AssetsPlugin({ + path: app.outputPath, + fullPath: false, + filename: `${app.name}-webpack-assets.json` + }), + extractCSS ]; if (app.production) { @@ -80,26 +87,17 @@ module.exports = function webpackConfig(app) { new BundleAnalyzerPlugin({ analyzerMode: 'static', openAnalyzer: false - }), - // Generate webpack-assets.json to map path to assets generated with hashed names - new AssetsPlugin({ - path: app.outputPath, - fullPath: false, - filename: `${app.name}-webpack-assets.json` - }), - extractCSS + }) ]); } else if (app.stage === 'hot') { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), new webpack.HotModuleReplacementPlugin(), - new webpack.NoEmitOnErrorsPlugin(), - extractCSS + new webpack.NoEmitOnErrorsPlugin() ]); } else if (app.stage === 'development') { plugins = _.concat(plugins, [ - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), - extractCSS + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }) ]); } else { plugins = [ diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 4ffe84b..7838af1 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -6,7 +6,7 @@ const ejs = require('ejs'); const marked = require('./markdown'); const templates = require('./templates'); -const applyProduction = require('./production'); +const applyHtmlPaths = require('./html_paths'); const file = require('./file'); const ignoreFiles = ['.DS_Store']; @@ -68,7 +68,7 @@ function buildContent(fullPath, app, webpackAssets, ext) { fullPath, app.templateMap, app.templateDirs); - html = applyProduction(html, app.stage, webpackAssets, app.buildSuffix); + html = applyHtmlPaths(html, app.production, webpackAssets, app.buildSuffix); return { title, diff --git a/client/libs/build/html_paths.js b/client/libs/build/html_paths.js new file mode 100644 index 0000000..423fba0 --- /dev/null +++ b/client/libs/build/html_paths.js @@ -0,0 +1,22 @@ +const minify = require('html-minifier').minify; +const webpackUtils = require('./webpack_utils'); + +module.exports = function applyHtmlPaths(html, production, webpackAssets, buildSuffix) { + + const updatedHtml = webpackUtils.apply( + html, + webpackAssets, + buildSuffix + ); + + if (production) { + return minify(updatedHtml, { + removeComments: true, + collapseWhitespace: true, + minifyJS: true + }); + } + + return updatedHtml; + +}; diff --git a/client/libs/build/production.js b/client/libs/build/production.js deleted file mode 100644 index bb84b88..0000000 --- a/client/libs/build/production.js +++ /dev/null @@ -1,24 +0,0 @@ -const minify = require('html-minifier').minify; -const webpackUtils = require('./webpack_utils'); - -module.exports = function applyProduction(html, stage, webpackAssets, buildSuffix) { - - let productionHtml = html; - - if (stage === 'production') { - productionHtml = webpackUtils.apply( - html, - webpackAssets, - buildSuffix - ); - - return minify(productionHtml, { - removeComments: true, - collapseWhitespace: true, - minifyJS: true - }); - } - - return productionHtml; - -}; From 98323c4e3151cfd48a87c2431c259d24231999fe Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 10:51:55 -0600 Subject: [PATCH 358/452] Fix spelling error. Reformats code. --- client/config/settings.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 9b197c1..fdc435e 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -73,17 +73,15 @@ function isProduction(stage) { function outputPaths(name, port, options) { let rootOutputPath = devOutput; - let outputPath = options.onlyPack ? - devOutput : path.join(devOutput, name); + let outputPath = options.onlyPack ? devOutput : path.join(devOutput, name); // Public path indicates where the assets will be served from. In dev this will likely be - // localhost or a local domain. In production this could be a CDN. In developerment this will + // localhost or a local domain. In production this could be a CDN. In development this will // point to whatever public url is serving dev assets. let publicPath = `${devAssetsUrl}${devRelativeOutput}`; if (isProduction(options.stage)) { rootOutputPath = prodOutput; - outputPath = options.onlyPack ? - prodOutput : path.join(prodOutput, name); + outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, name); publicPath = prodAssetsUrl + prodRelativeOutput; } From 2258d64a05c4bb863960362b88463bee133d8d46 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 13:53:26 -0600 Subject: [PATCH 359/452] Change hot process to run webpack build and output webpackAssets --- client/config/webpack.config.js | 1 - client/libs/build/build.js | 40 +++++++++++------------------- client/libs/build/webpack_utils.js | 20 ++++++++++++--- client/webpack.hot.js | 19 ++++++++++---- 4 files changed, 46 insertions(+), 34 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 9092e3d..5e7b85a 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -123,7 +123,6 @@ module.exports = function webpackConfig(app) { // Add hot reload to entry entry[app.name] = [ 'eventsource-polyfill', - `webpack-hot-middleware/client?path=${app.publicPath}__webpack_hmr&timeout=20000&reload=true`, entryPath ]; } diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 2840454..1e9bc2f 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -1,8 +1,9 @@ -const fs = require('fs-extra'); -const webpack = require('webpack'); +const fs = require('fs-extra'); +const webpack = require('webpack'); const nodeWatch = require('node-watch'); -const content = require('./content'); +const content = require('./content'); +const webpackUtils = require('./webpack_utils'); // Settings const webpackConfigBuilder = require('../../config/webpack.config'); @@ -13,26 +14,19 @@ const webpackConfigBuilder = require('../../config/webpack.config'); function buildWebpackEntries(app) { return new Promise((resolve, reject) => { const webpackConfig = webpackConfigBuilder(app); - if (app.stage !== 'hot') { - const bundler = webpack(webpackConfig); - const bundle = (err, stats) => { - if (err) { - console.log('webpack error', err); - reject(err); - } - // console.log('webpack', stats.toString({ colors: true })); - resolve({ - webpackConfig, - webpackStats: stats.toJson() - }); - }; - bundler.run(bundle); - } else { + const bundler = webpack(webpackConfig); + const bundle = (err, stats) => { + if (err) { + console.log('webpack error', err); + reject(err); + } + // console.log('webpack', stats.toString({ colors: true })); resolve({ webpackConfig, - webpackStats: null + webpackStats: stats.toJson() }); - } + }; + bundler.run(bundle); }); } @@ -107,11 +101,7 @@ function build(app) { console.log(`Webpacking ${app.name}`); buildWebpackEntries(app).then((packResults) => { - let webpackAssets = null; - const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${app.name}-webpack-assets.json`; - if (fs.existsSync(webpackAssetsFilePath)) { - webpackAssets = fs.readJsonSync(webpackAssetsFilePath); - } + const webpackAssets = webpackUtils.loadWebpackAssets(app, packResults); // Build html console.log(`Building html for ${app.name}`); diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index 6930580..4b1e4bd 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -1,4 +1,17 @@ -const _ = require('lodash'); +const fs = require('fs-extra'); +const _ = require('lodash'); + +// ----------------------------------------------------------------------------- +// Loads webpack assets file +// ----------------------------------------------------------------------------- +function loadWebpackAssets(app, packResults) { + let webpackAssets = null; + const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${app.name}-webpack-assets.json`; + if (fs.existsSync(webpackAssetsFilePath)) { + webpackAssets = fs.readJsonSync(webpackAssetsFilePath); + } + return webpackAssets; +} // ----------------------------------------------------------------------------- // Changes webpack paths as needed. @@ -6,7 +19,7 @@ const _ = require('lodash'); function apply(html, webpackAssets, buildSuffix) { let result = html; if (!webpackAssets) { - throw new Error('Invalid webpack assets. Unable to build production.'); + throw new Error('Invalid webpack assets.'); } _.each(webpackAssets, (assets, name) => { _.each(assets, (hashedName, ext) => { @@ -21,5 +34,6 @@ function apply(html, webpackAssets, buildSuffix) { } module.exports = { - apply + apply, + loadWebpackAssets }; diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 7a294d5..1a9f100 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -29,7 +29,13 @@ function setupMiddleware(apps) { headers: { 'Access-Control-Allow-Origin': '*' } }); serverApp.use(webpackMiddlewareInstance); - serverApp.use(webpackHotMiddleware(compiler)); + serverApp.use(webpackHotMiddleware(compiler, { + log: false, + heartbeat: 2000, + timeout: 20000, + reload: true + })); + } function runServer(port, servePath) { @@ -56,16 +62,19 @@ const options = { hotPack, shouldLint, stage: 'hot', onlyPack: false, port: sett if (appName) { const result = clientApps.buildApp(appName, options); - launch(result.app); + result.buildPromise.then(() => launch(result.app)); } else if (hotPack) { options.onlyPack = true; options.appPerPort = false; const results = clientApps.buildApps(options); const apps = _.map(results, result => result.app); - setupMiddleware(apps); - runServer(settings.hotPort, settings.paths.devOutput); + const promises = _.map(results, result => result.buildPromise); + Promise.all(promises, () => { + setupMiddleware(apps); + runServer(settings.hotPort, settings.paths.devOutput); + }); } else { _.each(clientApps.buildApps(options), (result) => { - launch(result.app); + result.buildPromise.then(() => launch(result.app)); }); } From 289cec5b97753eb619f1d594000c07320cfed429 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 14:08:58 -0600 Subject: [PATCH 360/452] Fixes hot pack --- client/webpack.hot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 1a9f100..1c62e00 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -69,7 +69,7 @@ if (appName) { const results = clientApps.buildApps(options); const apps = _.map(results, result => result.app); const promises = _.map(results, result => result.buildPromise); - Promise.all(promises, () => { + Promise.all(promises).then(() => { setupMiddleware(apps); runServer(settings.hotPort, settings.paths.devOutput); }); From 6f289217a3c8c8b5a4c95c6affb9f1f231b7ca67 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 14:53:13 -0600 Subject: [PATCH 361/452] A little better logging --- client/libs/build/build.js | 2 +- client/libs/build/content.js | 12 ++++++++---- client/libs/build/file.js | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 1e9bc2f..146cd76 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -17,7 +17,7 @@ function buildWebpackEntries(app) { const bundler = webpack(webpackConfig); const bundle = (err, stats) => { if (err) { - console.log('webpack error', err); + console.error('webpack error', err); reject(err); } // console.log('webpack', stats.toString({ colors: true })); diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 7838af1..3fc5b7d 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -56,10 +56,10 @@ function buildContent(fullPath, app, webpackAssets, ext) { html = marked(html); } } catch (err) { - console.log(`Unable to compile html from ${fullPath}`); - console.log(err); - console.log('Call stack'); - console.log(err.stack); + console.error(`Unable to compile html from ${fullPath}`); + console.error(err); + console.error('Call stack'); + console.error(err.stack); } // Apply template @@ -95,6 +95,9 @@ function writeContent( app, webpackAssets, ext); + process.stdout.clearLine(); + process.stdout.cursorTo(0); + process.stdout.write(`Writing content to: ${app.outputPath}`); const out = outFilePath(page, app.outputPath, inputFilePath, app.htmlPath); page.outputFilePath = file.write(out, page.html); return page; @@ -144,6 +147,7 @@ function buildContents( } } }); + console.log(''); return results; } diff --git a/client/libs/build/file.js b/client/libs/build/file.js index 4c5673c..e39652c 100644 --- a/client/libs/build/file.js +++ b/client/libs/build/file.js @@ -18,7 +18,7 @@ function makeOutputFilePath(filePath, cb) { function write(outFilePath, content) { return makeOutputFilePath(outFilePath, () => { fs.writeFile(outFilePath, content, (err) => { - if (err) { console.log(err); } + if (err) { console.error(err); } }); }); } @@ -29,7 +29,7 @@ function write(outFilePath, content) { function copy(src, dest) { return makeOutputFilePath(dest, () => { fs.copy(src, dest, (err) => { - if (err) { console.log(err); } + if (err) { console.error(err); } }); }); } From 6c9593a31ffcdadc60202bd55ec37ee6a16932ee Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 15:57:03 -0600 Subject: [PATCH 362/452] Extract logging for a cleaner terminal --- client/libs/build/apps.js | 7 ++++--- client/libs/build/build.js | 19 ++++++++++--------- client/libs/build/content.js | 33 ++++++++++++++++----------------- client/libs/build/file.js | 6 ++++-- client/libs/build/log.js | 30 ++++++++++++++++++++++++++++++ client/libs/build/templates.js | 9 +++++---- 6 files changed, 69 insertions(+), 35 deletions(-) create mode 100644 client/libs/build/log.js diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 2c73d9e..d5c0645 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -3,6 +3,7 @@ const _ = require('lodash'); const settings = require('../../config/settings'); const build = require('./build'); +const log = require('./log'); // ----------------------------------------------------------------------------- // Build a single app @@ -11,14 +12,14 @@ function buildAppParts(app, onlyPack) { if (onlyPack) { const buildPromise = build.buildWebpackEntries(app); buildPromise.then(() => { - console.log(`Finished Javascript for ${app.name}`); + log.out(`Finished Javascript for ${app.name}`); }); return buildPromise; } const buildPromise = build.build(app); buildPromise.then((result) => { - console.log(`Finished Javascript for ${app.name}.`); - console.log(`Built ${result.pages.length} pages.`); + log.out(`Finished Javascript for ${app.name}.`); + log.out(`Built ${result.pages.length} pages.`); }); return buildPromise; } diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 146cd76..a77ce57 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -4,6 +4,7 @@ const nodeWatch = require('node-watch'); const content = require('./content'); const webpackUtils = require('./webpack_utils'); +const log = require('./log'); // Settings const webpackConfigBuilder = require('../../config/webpack.config'); @@ -17,10 +18,10 @@ function buildWebpackEntries(app) { const bundler = webpack(webpackConfig); const bundle = (err, stats) => { if (err) { - console.error('webpack error', err); + log.error('webpack error', err); reject(err); } - // console.log('webpack', stats.toString({ colors: true })); + // log.out('webpack', stats.toString({ colors: true })); resolve({ webpackConfig, webpackStats: stats.toJson() @@ -35,7 +36,7 @@ function buildWebpackEntries(app) { // ----------------------------------------------------------------------------- function buildStatic(app) { try { - console.log(`Copying static files in ${app.staticPath}`); + log.out(`Copying static files in ${app.staticPath}`); fs.copy(app.staticPath, app.outputPath); } catch (err) { // No static dir. Do nothing @@ -47,9 +48,9 @@ function buildStatic(app) { // Used to copy over static files if they change // ----------------------------------------------------------------------------- function watchStatic(app) { - console.log(`Watching static files in ${app.staticPath}`); + log.out(`Watching static files in ${app.staticPath}`); nodeWatch(app.staticPath, { recursive: true }, (evt, filePath) => { - console.log(`Change in static file ${filePath}`); + log.out(`Change in static file ${filePath}`); fs.copySync(filePath, app.outputPath); }); } @@ -59,9 +60,9 @@ function watchStatic(app) { // Used to rebuild html or templates if files change. // ----------------------------------------------------------------------------- function watchHtml(webpackAssets, app) { - console.log(`Watching html files in ${app.htmlPath}`); + log.out(`Watching html files in ${app.htmlPath}`); nodeWatch(app.htmlPath, { recursive: true }, (evt, fullInputPath) => { - console.log(`Change in html file ${fullInputPath}`); + log.out(`Change in html file ${fullInputPath}`); content.writeContent( app.htmlPath, fullInputPath, @@ -98,13 +99,13 @@ function build(app) { } // Webpack build - console.log(`Webpacking ${app.name}`); + log.out(`Webpacking ${app.name}`); buildWebpackEntries(app).then((packResults) => { const webpackAssets = webpackUtils.loadWebpackAssets(app, packResults); // Build html - console.log(`Building html for ${app.name}`); + log.out(`Building html for ${app.name}`); const pages = buildHtml(app, webpackAssets); resolve({ diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 3fc5b7d..d748430 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -1,13 +1,14 @@ -const path = require('path'); -const _ = require('lodash'); -const fs = require('fs'); -const frontMatter = require('front-matter'); -const ejs = require('ejs'); - -const marked = require('./markdown'); -const templates = require('./templates'); +const path = require('path'); +const _ = require('lodash'); +const fs = require('fs'); +const frontMatter = require('front-matter'); +const ejs = require('ejs'); + +const marked = require('./markdown'); +const templates = require('./templates'); const applyHtmlPaths = require('./html_paths'); -const file = require('./file'); +const file = require('./file'); +const log = require('./log'); const ignoreFiles = ['.DS_Store']; @@ -56,10 +57,10 @@ function buildContent(fullPath, app, webpackAssets, ext) { html = marked(html); } } catch (err) { - console.error(`Unable to compile html from ${fullPath}`); - console.error(err); - console.error('Call stack'); - console.error(err.stack); + log.error(`Unable to compile html from ${fullPath}`); + log.error(err); + log.error('Call stack'); + log.error(err.stack); } // Apply template @@ -95,9 +96,7 @@ function writeContent( app, webpackAssets, ext); - process.stdout.clearLine(); - process.stdout.cursorTo(0); - process.stdout.write(`Writing content to: ${app.outputPath}`); + log.replace(`Writing content to: ${app.outputPath}`); const out = outFilePath(page, app.outputPath, inputFilePath, app.htmlPath); page.outputFilePath = file.write(out, page.html); return page; @@ -147,7 +146,7 @@ function buildContents( } } }); - console.log(''); + log.out(''); return results; } diff --git a/client/libs/build/file.js b/client/libs/build/file.js index e39652c..70ad428 100644 --- a/client/libs/build/file.js +++ b/client/libs/build/file.js @@ -1,6 +1,8 @@ const path = require('path'); const fs = require('fs-extra'); +const log = require('./log'); + // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- @@ -18,7 +20,7 @@ function makeOutputFilePath(filePath, cb) { function write(outFilePath, content) { return makeOutputFilePath(outFilePath, () => { fs.writeFile(outFilePath, content, (err) => { - if (err) { console.error(err); } + if (err) { log.error(err); } }); }); } @@ -29,7 +31,7 @@ function write(outFilePath, content) { function copy(src, dest) { return makeOutputFilePath(dest, () => { fs.copy(src, dest, (err) => { - if (err) { console.error(err); } + if (err) { log.error(err); } }); }); } diff --git a/client/libs/build/log.js b/client/libs/build/log.js new file mode 100644 index 0000000..3ccc5eb --- /dev/null +++ b/client/libs/build/log.js @@ -0,0 +1,30 @@ +const readline = require('readline'); + +// ----------------------------------------------------------------------------- +// Output a log entry to the command line +// ----------------------------------------------------------------------------- +function out(output) { + console.log(output); +} + +// ----------------------------------------------------------------------------- +// Replace the current line +// ----------------------------------------------------------------------------- +function replace(output) { + readline.clearLine(process.stdout, 0); + readline.cursorTo(process.stdout, 0, null); + process.stdout.write(output); +} + +// ----------------------------------------------------------------------------- +// Output a error entry to the command line +// ----------------------------------------------------------------------------- +function error(output) { + console.error(output); +} + +module.exports = { + out, + replace, + error +}; diff --git a/client/libs/build/templates.js b/client/libs/build/templates.js index 8e7872a..7f6bb3f 100644 --- a/client/libs/build/templates.js +++ b/client/libs/build/templates.js @@ -4,6 +4,7 @@ const _ = require('lodash'); const ejs = require('ejs'); const utils = require('./utils'); +const log = require('./log'); function safeReadLayout(file) { @@ -60,10 +61,10 @@ function apply(data, fullPath, templateMap, templateDirs) { _ }, data)); } catch (err) { - console.log(err); - console.log(`Unable to build file: ${fullPath} Data: ${data}`); - console.log('Stack Trace:'); - console.log(err.trace); + log.out(err); + log.out(`Unable to build file: ${fullPath} Data: ${data}`); + log.out('Stack Trace:'); + log.out(err.trace); } return html; From de052654c283dc0fc95a1b18cc5af9e017811d00 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 19:23:02 -0600 Subject: [PATCH 363/452] Fix spacing. Fix log --- client/libs/build/content.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index d748430..dab80d6 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -31,12 +31,12 @@ function outFilePath(page, outputPath, inputFilePath, originalInputPath) { // build a single file // ----------------------------------------------------------------------------- function buildContent(fullPath, app, webpackAssets, ext) { - const content = fs.readFileSync(fullPath, 'utf8'); - const parsed = frontMatter(content); - const metadata = parsed.attributes; - const title = metadata.title; + const content = fs.readFileSync(fullPath, 'utf8'); + const parsed = frontMatter(content); + const metadata = parsed.attributes; + const title = metadata.title; const destination = metadata.permalink; - const data = _.merge({ + const data = _.merge({ _, title, metadata, @@ -48,8 +48,8 @@ function buildContent(fullPath, app, webpackAssets, ext) { try { // Allow ejs code in content html = ejs.compile(html, { - cache : false, - filename : fullPath + cache: false, + filename: fullPath })(data); // Parse any markdown in the resulting html @@ -96,8 +96,8 @@ function writeContent( app, webpackAssets, ext); - log.replace(`Writing content to: ${app.outputPath}`); const out = outFilePath(page, app.outputPath, inputFilePath, app.htmlPath); + log.replace(`Writing content to: ${outFilePath}`); page.outputFilePath = file.write(out, page.html); return page; } From 544e3ceb452f8888e7fae796f0cb41f2a3fb93d3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 21 Apr 2017 19:36:55 -0600 Subject: [PATCH 364/452] Fix logging again --- client/libs/build/content.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index dab80d6..dfc8834 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -97,11 +97,12 @@ function writeContent( webpackAssets, ext); const out = outFilePath(page, app.outputPath, inputFilePath, app.htmlPath); - log.replace(`Writing content to: ${outFilePath}`); + log.replace(`Writing ${inputFilePath} to: ${out}`); page.outputFilePath = file.write(out, page.html); return page; } const out = outFilePath(null, app.outputPath, inputFilePath, app.htmlPath); + log.replace(`Copying ${inputFilePath} to: ${out}`); file.copy(inputFilePath, out); return null; } From 52d14ef87af4fe187e0c3aff61467971b749166f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 23 Apr 2017 22:13:01 -0600 Subject: [PATCH 365/452] Remove uneeded param --- client/libs/build/webpack_utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index 4b1e4bd..6ea3051 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -4,9 +4,9 @@ const _ = require('lodash'); // ----------------------------------------------------------------------------- // Loads webpack assets file // ----------------------------------------------------------------------------- -function loadWebpackAssets(app, packResults) { +function loadWebpackAssets(app) { let webpackAssets = null; - const webpackAssetsFilePath = `${packResults.webpackConfig.output.path}/${app.name}-webpack-assets.json`; + const webpackAssetsFilePath = `${app.outputPath}/${app.name}-webpack-assets.json`; if (fs.existsSync(webpackAssetsFilePath)) { webpackAssets = fs.readJsonSync(webpackAssetsFilePath); } From 4fe00854f371c655c73f432f054bb505ff75039b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 23 Apr 2017 22:32:54 -0600 Subject: [PATCH 366/452] Adds public path onto webpackAssets --- client/libs/build/webpack_utils.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index 6ea3051..93a7abb 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -8,7 +8,9 @@ function loadWebpackAssets(app) { let webpackAssets = null; const webpackAssetsFilePath = `${app.outputPath}/${app.name}-webpack-assets.json`; if (fs.existsSync(webpackAssetsFilePath)) { - webpackAssets = fs.readJsonSync(webpackAssetsFilePath); + webpackAssets = _.mapValues(fs.readJsonSync(webpackAssetsFilePath), asset => + _.mapValues(asset, assetFilename => `${app.publicPath}${assetFilename}`) + ); } return webpackAssets; } From e5f681f09af8dff8aaa15772a05b3e532ef72b62 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 29 Apr 2017 15:28:43 -0600 Subject: [PATCH 367/452] Reduce output noise --- client/libs/build/content.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index dfc8834..89355de 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -58,9 +58,10 @@ function buildContent(fullPath, app, webpackAssets, ext) { } } catch (err) { log.error(`Unable to compile html from ${fullPath}`); - log.error(err); - log.error('Call stack'); - log.error(err.stack); + // Uncomment the following for more details + // log.error(err); + // log.error('Call stack'); + // log.error(err.stack); } // Apply template From dae4573adc67acd4eaf02cb3106e802f85b8ee72 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 29 Apr 2017 17:01:39 -0600 Subject: [PATCH 368/452] Use ensureDir instead of mkdir --- client/libs/build/file.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/libs/build/file.js b/client/libs/build/file.js index 70ad428..93894c5 100644 --- a/client/libs/build/file.js +++ b/client/libs/build/file.js @@ -8,7 +8,8 @@ const log = require('./log'); // ----------------------------------------------------------------------------- function makeOutputFilePath(filePath, cb) { const dir = path.dirname(filePath); - fs.mkdirs(dir, {}, () => { + fs.ensureDir(dir, (err) => { + log.error(err); cb(filePath); }); return filePath; From c3e1d9ee37bed672b106ca0ebaae032731c0f57b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 29 Apr 2017 21:03:59 -0600 Subject: [PATCH 369/452] Semantics and output path fix --- client/libs/build/content.js | 2 +- client/libs/build/utils.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 89355de..9d233f9 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -21,7 +21,7 @@ function outFilePath(page, outputPath, inputFilePath, originalInputPath) { if (_.endsWith(page.destination, '/')) { out = path.join(outputPath, page.destination, 'index.html'); } else { - out = page.destination; + out = path.join(outputPath, page.destination); } } return out; diff --git a/client/libs/build/utils.js b/client/libs/build/utils.js index 50bc8dd..4989ea1 100644 --- a/client/libs/build/utils.js +++ b/client/libs/build/utils.js @@ -27,7 +27,7 @@ function filename2date(filePath) { const name = match[4]; result.date = `${month}-${day}-${year}`; result.dateFormat = 'MM-DD-YYYY'; - result.url = `/${year}/${month}/${day}/${name}.html`; + result.path = `/${year}/${month}/${day}/${name}.html`; if (!result.title) { result.title = name.replace(/_/g, ' '); } From 2174d1af00d4ccef618c8775e1d197eb97b26274 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 29 Apr 2017 21:09:53 -0600 Subject: [PATCH 370/452] Don't output empty error messages --- client/libs/build/file.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/client/libs/build/file.js b/client/libs/build/file.js index 93894c5..73e416c 100644 --- a/client/libs/build/file.js +++ b/client/libs/build/file.js @@ -9,8 +9,12 @@ const log = require('./log'); function makeOutputFilePath(filePath, cb) { const dir = path.dirname(filePath); fs.ensureDir(dir, (err) => { - log.error(err); - cb(filePath); + if (err) { + log.error(`Unable to setup directory for ${filePath}. File will not be written.`); + log.error(err); + } else { + cb(filePath); + } }); return filePath; } From ed9282ab325bbf1ac49e2bfe736883e5f36f1113 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sun, 30 Apr 2017 16:25:48 -0600 Subject: [PATCH 371/452] Better error logs --- client/libs/build/content.js | 2 +- client/libs/build/html_paths.js | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 9d233f9..8fb12f2 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -70,7 +70,7 @@ function buildContent(fullPath, app, webpackAssets, ext) { fullPath, app.templateMap, app.templateDirs); - html = applyHtmlPaths(html, app.production, webpackAssets, app.buildSuffix); + html = applyHtmlPaths(fullPath, html, app.production, webpackAssets, app.buildSuffix); return { title, diff --git a/client/libs/build/html_paths.js b/client/libs/build/html_paths.js index 423fba0..e1ef35a 100644 --- a/client/libs/build/html_paths.js +++ b/client/libs/build/html_paths.js @@ -1,7 +1,8 @@ -const minify = require('html-minifier').minify; -const webpackUtils = require('./webpack_utils'); +const minify = require('html-minifier').minify; +const webpackUtils = require('./webpack_utils'); +const log = require('./log'); -module.exports = function applyHtmlPaths(html, production, webpackAssets, buildSuffix) { +module.exports = function applyHtmlPaths(fullPath, html, production, webpackAssets, buildSuffix) { const updatedHtml = webpackUtils.apply( html, @@ -10,11 +11,17 @@ module.exports = function applyHtmlPaths(html, production, webpackAssets, buildS ); if (production) { - return minify(updatedHtml, { - removeComments: true, - collapseWhitespace: true, - minifyJS: true - }); + try { + return minify(updatedHtml, { + removeComments: true, + collapseWhitespace: true, + minifyJS: true + }); + } catch (err) { + log.out(`Unable to minify html for ${fullPath}`); + // log.error(`Error: ${err})`; + return updatedHtml; + } } return updatedHtml; From 327688ce801cb3a85dc2c0d6e7767f2b44020d62 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 1 May 2017 09:10:00 -0600 Subject: [PATCH 372/452] Use ci.karma.conf.js instead of .codeship --- client/karma.conf.js.codeship | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 client/karma.conf.js.codeship diff --git a/client/karma.conf.js.codeship b/client/karma.conf.js.codeship deleted file mode 100644 index 10128b9..0000000 --- a/client/karma.conf.js.codeship +++ /dev/null @@ -1,8 +0,0 @@ -var karmaConfig = require('./config/karma'); - -module.exports = function(config){ - var testConfig = karmaConfig(); - testConfig.singleRun = true - testConfig.autoWatch = false; - config.set(testConfig); -}; From 097aa391ec6fb7195768f87c199e47b785e35ca5 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 1 May 2017 18:04:49 -0600 Subject: [PATCH 373/452] Export the apiRequest from middleware. --- client/libs/middleware/api.js | 71 ++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/client/libs/middleware/api.js b/client/libs/middleware/api.js index e63fb5b..a81af9d 100644 --- a/client/libs/middleware/api.js +++ b/client/libs/middleware/api.js @@ -1,44 +1,47 @@ import api from '../api/api'; import { DONE } from '../constants/wrapper'; -const API = store => next => (action) => { - function request(method, url, params, body, headers, timeout) { - const state = store.getState(); - const promise = api.execRequest( - method, - url, - state.settings.apiUrl, - state.jwt, - state.settings.csrfToken, - params, - body, - headers, - timeout); +export function apiRequest(store, action) { + const state = store.getState(); + const promise = api.execRequest( + action.method, + action.url, + state.settings.apiUrl, + state.jwt, + state.settings.csrfToken, + action.params, + action.body, + action.headers, + action.timeout); - if (promise) { - promise.then( - (response) => { - store.dispatch({ - type : action.type + DONE, - payload : response.body, - original : action, - response, - }); // Dispatch the new data - }, - (error) => { - store.dispatch({ - type : action.type + DONE, - payload : {}, - original : action, - error, - }); // Dispatch the new error - }, - ); - } + if (promise) { + promise.then( + (response) => { + store.dispatch({ + type : action.type + DONE, + payload : response.body, + original : action, + response, + }); // Dispatch the new data + }, + (error) => { + store.dispatch({ + type : action.type + DONE, + payload : {}, + original : action, + error, + }); // Dispatch the new error + }, + ); } + return promise; +} + +const API = store => next => (action) => { + if (action.method) { - request(action.method, action.url, action.params, action.body, action.headers, action.timeout); + apiRequest(store, action); } // call the next middleWare From f7845b2c645f81daa04fc87f986489ef5ff2e027 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 1 May 2017 22:11:29 -0600 Subject: [PATCH 374/452] Adds test --- client/libs/middleware/api.js | 14 +++++++------- client/libs/middleware/api.spec.js | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/client/libs/middleware/api.js b/client/libs/middleware/api.js index a81af9d..de596ab 100644 --- a/client/libs/middleware/api.js +++ b/client/libs/middleware/api.js @@ -1,4 +1,4 @@ -import api from '../api/api'; +import api from '../api/api'; import { DONE } from '../constants/wrapper'; export function apiRequest(store, action) { @@ -18,17 +18,17 @@ export function apiRequest(store, action) { promise.then( (response) => { store.dispatch({ - type : action.type + DONE, - payload : response.body, - original : action, + type: action.type + DONE, + payload: response.body, + original: action, response, }); // Dispatch the new data }, (error) => { store.dispatch({ - type : action.type + DONE, - payload : {}, - original : action, + type: action.type + DONE, + payload: {}, + original: action, error, }); // Dispatch the new error }, diff --git a/client/libs/middleware/api.spec.js b/client/libs/middleware/api.spec.js index 85358fc..dd17cb3 100644 --- a/client/libs/middleware/api.spec.js +++ b/client/libs/middleware/api.spec.js @@ -1,6 +1,6 @@ -import api from './api'; +import api, { apiRequest } from './api'; import Network from '../constants/network'; -import Helper from '../../specs_support/helper'; +import Helper from '../../specs_support/helper'; describe('api middleware', () => { Helper.stubAjax(); @@ -48,3 +48,15 @@ describe('api middleware', () => { actionHandler(action); }); }); + +describe('apiRequest', () => { + Helper.stubAjax(); + + it('returns a promise', () => { + const store = { getState: () => {} }; + const action = {}; + const promise = apiRequest(store, action); + expect(promise.then).toBe(); + }); + +}); From 231855dafa470e3911911aebc3c26c74faba0150 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 3 May 2017 22:33:43 -0600 Subject: [PATCH 375/452] Allow setting initial state for test store --- client/specs_support/helper.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index 8144350..44816fe 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -17,13 +17,13 @@ export default class Helper { } // Create a real store that can be used for testing - static makeStore(initial) { - const initialState = { - settings: _.assign({ + static makeStore(initialSettings, additionalState) { + const initialState = _.merge({ + settings: _.merge({ csrf: 'csrf_token', apiUrl: 'http://www.example.com' - }, initial) - }; + }, initialSettings) + }, additionalState); const rootReducer = combineReducers({ settings, }); From 2ea46073d9bf9d987b000abafaea2ec6b2263730 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 4 May 2017 09:35:25 -0600 Subject: [PATCH 376/452] Allow additional reducers along with additional state --- client/specs_support/helper.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index 44816fe..a03619b 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -17,7 +17,9 @@ export default class Helper { } // Create a real store that can be used for testing - static makeStore(initialSettings, additionalState) { + // For any additional state provided you must also provide the corresponding + // reducers. + static makeStore(initialSettings, additionalState, additionalReducers) { const initialState = _.merge({ settings: _.merge({ csrf: 'csrf_token', @@ -26,6 +28,7 @@ export default class Helper { }, additionalState); const rootReducer = combineReducers({ settings, + ...additionalReducers }); const middleware = [API]; return configureStore(initialState, rootReducer, middleware); From 7fa8d5399c17d3fcbd4786a029721311e11282a1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 9 May 2017 15:02:27 -0600 Subject: [PATCH 377/452] Adds option for not wiping out build dir --- client/build.js | 2 +- client/libs/build/apps.js | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client/build.js b/client/build.js index 7f0e351..4d9279d 100644 --- a/client/build.js +++ b/client/build.js @@ -4,6 +4,6 @@ const argv = require('minimist')(process.argv.slice(2)); const stage = argv.release ? 'production' : 'development'; const port = parseInt(process.env.ASSETS_PORT, 10) || 8080; -const options = { port, stage, onlyPack: argv.onlyPack }; +const options = { port, stage, onlyPack: argv.onlyPack, noClean: argv.noClean }; apps.buildApps(options); diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index d5c0645..6ff1473 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -29,7 +29,9 @@ function buildAppParts(app, onlyPack) { // ----------------------------------------------------------------------------- function buildApp(appName, options) { const app = _.find(settings.apps(options).apps, (e, name) => appName === name); - fs.emptyDirSync(app.outputPath); + if (!options.noClean) { + fs.emptyDirSync(app.outputPath); + } return { app, buildPromise: buildAppParts(app, options.onlyPack) @@ -41,7 +43,9 @@ function buildApp(appName, options) { // ----------------------------------------------------------------------------- function buildApps(options) { return _.map(settings.apps(options), (app) => { - fs.emptyDirSync(app.outputPath); + if (!options.noClean) { + fs.emptyDirSync(app.outputPath); + } return { app, buildPromise: buildAppParts(app, options.onlyPack) From 0dd00caa5da720cb20a0046ed8ead4a34fb6fb6a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 10 May 2017 15:58:38 -0600 Subject: [PATCH 378/452] Fix logging. Remove unused param. --- client/libs/build/build.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index a77ce57..3b1543c 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -18,10 +18,10 @@ function buildWebpackEntries(app) { const bundler = webpack(webpackConfig); const bundle = (err, stats) => { if (err) { - log.error('webpack error', err); + log.error(`webpack error: ${err}`); reject(err); } - // log.out('webpack', stats.toString({ colors: true })); + // log.out(`webpack: ${stats.toString({ colors: true })}`); resolve({ webpackConfig, webpackStats: stats.toJson() @@ -102,7 +102,7 @@ function build(app) { log.out(`Webpacking ${app.name}`); buildWebpackEntries(app).then((packResults) => { - const webpackAssets = webpackUtils.loadWebpackAssets(app, packResults); + const webpackAssets = webpackUtils.loadWebpackAssets(app); // Build html log.out(`Building html for ${app.name}`); From 3f699b3f4e32446ef7900e98114a5e04588d843b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 10 May 2017 16:01:03 -0600 Subject: [PATCH 379/452] Adds nuke script for removing node modules --- README.md | 2 ++ package.json | 1 + 2 files changed, 3 insertions(+) diff --git a/README.md b/README.md index cc248fc..928a267 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,8 @@ Release a production build to the S3 website bucket created by `yarn create` Run a linter over the project: `yarn lint` +Wipe out all node modules: + `yarn nuke` #Deploy to S3: ----------------------- diff --git a/package.json b/package.json index 246445c..8a75e3a 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "create": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js create", "release": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js deploy", "lint": "cd ./client && eslint js" + "nuke": "rm -rf node_modules && cd ./client && yarn nuke" }, "repository": { "type": "git", From e9bb0adc01525e768e6f9ab46b3f0a8723e756e3 Mon Sep 17 00:00:00 2001 From: James Carbine Date: Wed, 10 May 2017 20:56:25 -0600 Subject: [PATCH 380/452] Update eslint packages (#19) --- client/package.json | 8 ++--- client/yarn.lock | 79 +++++++++++++++++++++++---------------------- 2 files changed, 44 insertions(+), 43 deletions(-) diff --git a/client/package.json b/client/package.json index d63cfa1..47ad715 100644 --- a/client/package.json +++ b/client/package.json @@ -10,7 +10,7 @@ "atomic-lint-loader": "^1.0.1", "autoprefixer": "^6.7.7", "babel-core": "^6.24.1", - "babel-eslint": "^7.2.2", + "babel-eslint": "^7.2.3", "babel-loader": "^6.4.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-decorators-legacy": "^1.3.4", @@ -28,11 +28,11 @@ "ecstatic": "2.1.0", "ejs": "^2.5.6", "eslint": "^3.19.0", - "eslint-config-airbnb": "^14.0.0", + "eslint-config-airbnb": "^14.1.0", "eslint-plugin-babel": "^4.1.1", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jsx-a11y": "^4.0.0", - "eslint-plugin-react": "^6.10.0", + "eslint-plugin-jsx-a11y": "^5.0.1", + "eslint-plugin-react": "^7.0.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.15.2", diff --git a/client/yarn.lock b/client/yarn.lock index 7c301aa..fdf3bf4 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -175,9 +175,9 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.3.0.tgz#cb8a9984e2862711c83c80ade5b8f5ca0de2b467" +aria-query@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.5.0.tgz#85e3152cd8cc5bab18dbed61cd9c4fce54fa79c3" dependencies: ast-types-flow "0.0.7" @@ -211,6 +211,13 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" +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-slice@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" @@ -229,13 +236,6 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -array.prototype.find@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - arraybuffer.slice@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" @@ -365,6 +365,12 @@ aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +axobject-query@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + dependencies: + ast-types-flow "0.0.7" + babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" @@ -397,14 +403,14 @@ babel-core@^6.24.1: slash "^1.0.0" source-map "^0.5.0" -babel-eslint@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.2.tgz#0da2cbe6554fd0fb069f19674f2db2f9c59270ff" +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.16.1" + babylon "^6.17.0" babel-generator@^6.18.0, babel-generator@^6.24.1: version "6.24.1" @@ -1080,10 +1086,14 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: version "6.16.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" +babylon@^6.17.0: + version "6.17.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" + backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -2207,7 +2217,7 @@ difflib@~0.2.1: dependencies: heap ">= 0.2.0" -doctrine@1.5.0, doctrine@^1.2.2: +doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: @@ -2585,7 +2595,7 @@ eslint-config-airbnb-base@^11.1.0: version "11.1.3" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.3.tgz#0e8db71514fa36b977fbcf977c01edcf863e0cf0" -eslint-config-airbnb@^14.0.0: +eslint-config-airbnb@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-14.1.0.tgz#355d290040bbf8e00bf8b4b19f4b70cbe7c2317f" dependencies: @@ -2625,26 +2635,25 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz#779bb0fe7b08da564a422624911de10061e048ee" +eslint-plugin-jsx-a11y@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.1.tgz#48e678891fec9fe1e53ef53adc2f7d05fee6640c" dependencies: - aria-query "^0.3.0" + aria-query "^0.5.0" + array-includes "^3.0.3" ast-types-flow "0.0.7" + axobject-query "^0.1.0" damerau-levenshtein "^1.0.0" emoji-regex "^6.1.0" - jsx-ast-utils "^1.0.0" - object-assign "^4.0.1" + jsx-ast-utils "^1.4.0" -eslint-plugin-react@^6.10.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" +eslint-plugin-react@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.0.tgz#084cfe772d229ec5ae7e525dfc6d299cc21ddd77" dependencies: - array.prototype.find "^2.0.1" - doctrine "^1.2.2" + doctrine "^2.0.0" has "^1.0.1" jsx-ast-utils "^1.3.4" - object.assign "^4.0.4" eslint@^3.19.0: version "3.19.0" @@ -4239,7 +4248,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: +jsx-ast-utils@^1.3.4, jsx-ast-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz#5afe38868f56bc8cc7aeaef0100ba8c75bd12591" dependencies: @@ -5400,7 +5409,7 @@ 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.10, object-keys@^1.0.8: +object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" @@ -5408,14 +5417,6 @@ object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" From 333ab4da18e9679d0236d931238bd9fa3872be7c Mon Sep 17 00:00:00 2001 From: James Carbine Date: Thu, 11 May 2017 08:57:25 -0600 Subject: [PATCH 381/452] Downgrade jsx-ally from v5 to v4 as it isn't compatible with airbnb yet (#20) --- client/package.json | 2 +- client/yarn.lock | 90 +++++++-------------------------------------- 2 files changed, 14 insertions(+), 78 deletions(-) diff --git a/client/package.json b/client/package.json index 47ad715..1a4fe82 100644 --- a/client/package.json +++ b/client/package.json @@ -31,7 +31,7 @@ "eslint-config-airbnb": "^14.1.0", "eslint-plugin-babel": "^4.1.1", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jsx-a11y": "^5.0.1", + "eslint-plugin-jsx-a11y": "^4.0.0", "eslint-plugin-react": "^7.0.0", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", diff --git a/client/yarn.lock b/client/yarn.lock index fdf3bf4..a2133c6 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -175,9 +175,9 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.5.0.tgz#85e3152cd8cc5bab18dbed61cd9c4fce54fa79c3" +aria-query@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.3.0.tgz#cb8a9984e2862711c83c80ade5b8f5ca0de2b467" dependencies: ast-types-flow "0.0.7" @@ -211,13 +211,6 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" -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-slice@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" @@ -365,12 +358,6 @@ aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" - dependencies: - ast-types-flow "0.0.7" - babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" @@ -1086,11 +1073,11 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: +babylon@^6.11.0: version "6.16.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" -babylon@^6.17.0: +babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0: version "6.17.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" @@ -2140,13 +2127,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -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" @@ -2486,23 +2466,6 @@ error@^4.2.0: string-template "~0.2.0" xtend "~4.0.0" -es-abstract@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.0" - is-callable "^1.1.3" - is-regex "^1.0.3" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - es5-ext@0.8.x: version "0.8.2" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" @@ -2635,17 +2598,16 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-jsx-a11y@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.0.1.tgz#48e678891fec9fe1e53ef53adc2f7d05fee6640c" +eslint-plugin-jsx-a11y@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz#779bb0fe7b08da564a422624911de10061e048ee" dependencies: - aria-query "^0.5.0" - array-includes "^3.0.3" + aria-query "^0.3.0" ast-types-flow "0.0.7" - axobject-query "^0.1.0" damerau-levenshtein "^1.0.0" emoji-regex "^6.1.0" - jsx-ast-utils "^1.4.0" + jsx-ast-utils "^1.0.0" + object-assign "^4.0.1" eslint-plugin-react@^7.0.0: version "7.0.0" @@ -3054,10 +3016,6 @@ for-own@^0.1.3, for-own@^0.1.4: dependencies: for-in "^1.0.1" -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -3177,7 +3135,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0: +function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" @@ -3843,14 +3801,6 @@ is-bzip2@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -3978,12 +3928,6 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" -is-regex@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - is-relative@^0.1.0: version "0.1.3" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82" @@ -4008,10 +3952,6 @@ is-svg@^2.0.0: 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-tar@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d" @@ -4248,7 +4188,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.3.4, jsx-ast-utils@^1.4.0: +jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: version "1.4.0" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz#5afe38868f56bc8cc7aeaef0100ba8c75bd12591" dependencies: @@ -5409,10 +5349,6 @@ 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.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" From 18a5a7cc92bf595c3f0b48d28075dd9a8839e87e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 10:29:26 -0600 Subject: [PATCH 382/452] Switch to Jest for testing --- client/.babelrc | 8 + .../components/common/not_found.spec.jsx | 2 + .../apps/hello_world/components/home.spec.jsx | 2 + .../apps/hello_world/config/jest_config.json | 20 + client/apps/hello_world/config/setup_tests.js | 2 + .../apps/hello_world/libs/__mocks__/assets.js | 13 + client/apps/hello_world/libs/assets.spec.js | 2 + client/apps/hello_world/package.json | 6 + client/apps/hello_world/yarn.lock | 1980 ++++++++++++++++- client/yarn.lock | 1432 +++++++----- package.json | 4 +- 11 files changed, 2905 insertions(+), 566 deletions(-) create mode 100644 client/.babelrc create mode 100644 client/apps/hello_world/config/jest_config.json create mode 100644 client/apps/hello_world/config/setup_tests.js create mode 100644 client/apps/hello_world/libs/__mocks__/assets.js diff --git a/client/.babelrc b/client/.babelrc new file mode 100644 index 0000000..ca578d2 --- /dev/null +++ b/client/.babelrc @@ -0,0 +1,8 @@ +{ + "presets": ["es2015", "react", "stage-0"], + "env": { + "test": { + "plugins": ["transform-runtime", "transform-decorators-legacy", "transform-class-properties", "babel-plugin-rewire"] + } + } +} diff --git a/client/apps/hello_world/components/common/not_found.spec.jsx b/client/apps/hello_world/components/common/not_found.spec.jsx index 577df9c..001d88a 100644 --- a/client/apps/hello_world/components/common/not_found.spec.jsx +++ b/client/apps/hello_world/components/common/not_found.spec.jsx @@ -3,6 +3,8 @@ import TestUtils from 'react-dom/test-utils'; import NotFound from './not_found'; import Stub from '../../../../specs_support/stub'; +jest.mock('../../libs/assets.js'); + describe('not found', () => { it('renders a "not found" message', () => { const result = TestUtils.renderIntoDocument(); diff --git a/client/apps/hello_world/components/home.spec.jsx b/client/apps/hello_world/components/home.spec.jsx index 209bb73..2c4b9e9 100644 --- a/client/apps/hello_world/components/home.spec.jsx +++ b/client/apps/hello_world/components/home.spec.jsx @@ -4,6 +4,8 @@ import { Provider } from 'react-redux'; import Helper from '../../../specs_support/helper'; import Home from './home'; +jest.mock('../libs/assets.js'); + describe('home', () => { let result; let props; diff --git a/client/apps/hello_world/config/jest_config.json b/client/apps/hello_world/config/jest_config.json new file mode 100644 index 0000000..3f85647 --- /dev/null +++ b/client/apps/hello_world/config/jest_config.json @@ -0,0 +1,20 @@ +{ + "globals": { + "__DEV__": true + }, + "setupTestFrameworkScriptFile": "./config/setup_tests.js", + "rootDir": "../", + "modulePaths": [ + "/node_modules", + "/../node_modules" + ], + "moduleFileExtensions": ["js", "jsx"], + "moduleDirectories": ["node_modules"], + "moduleNameMapper": { + "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js", + "\\.(css|less)$": "identity-obj-proxy" + }, + "transform": { + "^.+\\.jsx?$": "babel-jest" + } +} diff --git a/client/apps/hello_world/config/setup_tests.js b/client/apps/hello_world/config/setup_tests.js new file mode 100644 index 0000000..f55205b --- /dev/null +++ b/client/apps/hello_world/config/setup_tests.js @@ -0,0 +1,2 @@ +// import 'jasmine-core'; +// import 'jasmine-ajax'; diff --git a/client/apps/hello_world/libs/__mocks__/assets.js b/client/apps/hello_world/libs/__mocks__/assets.js new file mode 100644 index 0000000..b3c66a3 --- /dev/null +++ b/client/apps/hello_world/libs/__mocks__/assets.js @@ -0,0 +1,13 @@ +export default function assets(key) { + const assetsMock = { + './images/atomicjolt.jpg': 'data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhBMDlGMEVGQjBEODExRTU4Q0Y4RTJCOTU4QTNFMzM2IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhBMDlGMEYwQjBEODExRTU4Q0Y4RTJCOTU4QTNFMzM2Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OEEwOUYwRURCMEQ4MTFFNThDRjhFMkI5NThBM0UzMzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OEEwOUYwRUVCMEQ4MTFFNThDRjhFMkI5NThBM0UzMzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYF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', + './images/atomicjolt.svg': 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9Ii0zOTIgNDc3LjcgMjE0IDQ3LjMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgLTM5MiA0NzcuNyAyMTQgNDcuMzsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkuc3Qwe2ZpbGw6I0ZDQ0MwRjt9DQo8L3N0eWxlPg0KPGc+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMTcuNCw0OTEuNWM1LjEtMC4xLDkuMiwzLjksOS4zLDlzLTMuOSw5LjEtOS4xLDkuMmMtNS4yLDAuMS05LjItMy44LTkuMy05DQoJCUMtMjI2LjYsNDk1LjQtMjIyLjgsNDkxLjYtMjE3LjQsNDkxLjV6IE0tMjExLjgsNTAwLjZjMC0xLjItMC4zLTIuMy0xLTMuM2MtMi4yLTMuNS02LjktMy42LTktMC4xYy0xLjQsMi4yLTEuMiw1LjMsMC4zLDcuMw0KCQljMS44LDIuNSw1LjMsMi44LDcuNiwwLjhDLTIxMi41LDUwNC0yMTEuOSw1MDIuNC0yMTEuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI0Ni4zLDUwNC40bDIuNCwxLjljMC4xLDAuMSwwLjEsMC4zLDAsMC40Yy0yLjMsMi41LTYuMiwzLjktMTAsMi41Yy0zLjktMS40LTYuNC01LjEtNi4yLTkuMQ0KCQljMC4yLTMuOCwzLjItNy4yLDcuMi04LjNjMy4yLTAuOCw3LjEsMC40LDguNywyLjdjMC4xLDAuMSwwLDAuMy0wLjEsMC4zbC0yLjQsMS45Yy0wLjEsMC4xLTAuMywwLjEtMC40LTAuMQ0KCQljLTAuMS0wLjEtMC4xLTAuMi0wLjItMC4zYy0yLjYtMi44LTUuOC0xLjktNy42LDAuMmMtMi4zLDIuNi0yLDYuNywwLjcsOC45YzIuMSwxLjcsNC44LDEuNSw2LjgtMC40YzAuMi0wLjIsMC40LTAuNCwwLjctMC42DQoJCUMtMjQ2LjUsNTA0LjMtMjQ2LjQsNTA0LjMtMjQ2LjMsNTA0LjR6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMDQuOSw0OTEuOGgzYzAuMiwwLDAuMywwLjEsMC4zLDAuM3YxNGMwLDAuMiwwLjEsMC4zLDAuMywwLjNoNy40YzAuMiwwLDAuMywwLjEsMC4zLDAuM3YyLjMNCgkJYzAsMC4yLTAuMSwwLjMtMC4zLDAuM0gtMjA1Yy0wLjIsMC0wLjMtMC4xLTAuMy0wLjN2LTE2LjlDLTIwNS4zLDQ5Mi0yMDUuMSw0OTEuOC0yMDQuOSw0OTEuOHoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTI4NS41LDUwOS42aC0zLjRjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtMTcuNmMwLTAuMSwwLjEtMC4yLDAuMi0wLjFjMywzLjEsNS45LDYuMSw4LjgsOS4xDQoJCWMwLDAuMSwwLjEsMC4xLDAuMiwwYzIuOS0zLDUuOC02LDguNy05LjFjMC4xLTAuMSwwLjIsMCwwLjIsMC4xdjE3LjZjMCwwLjEtMC4xLDAuMS0wLjEsMC4xaC0zLjNjLTAuMSwwLTAuMS0wLjEtMC4xLTAuMXYtOS4yDQoJCWMtMC4yLTAuMS0wLjItMC4xLTAuMy0wLjFjLTEuNywxLjctMy40LDMuNC01LjEsNS4yYzAsMC0wLjEsMC0wLjIsMGMtMS43LTEuNy0zLjQtMy41LTUuMS01LjNjLTAuMS0wLjEtMC4yLDAtMC4yLDAuMXY5LjQNCgkJQy0yODUuNCw1MDkuNS0yODUuNCw1MDkuNi0yODUuNSw1MDkuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMwMS4zLDQ5MS41YzUuMS0wLjEsOS4yLDMuOSw5LjMsOXMtMy45LDkuMS05LjEsOS4yYy01LjIsMC4xLTkuMi0zLjgtOS4zLTkuMQ0KCQlDLTMxMC41LDQ5NS40LTMwNi43LDQ5MS42LTMwMS4zLDQ5MS41eiBNLTMwNi44LDUwMC42YzAuMSwwLjYsMC4xLDEuMywwLjMsMS45YzAuNiwyLDEuOCwzLjQsMy44LDRjMiwwLjUsMy43LDAsNS4yLTEuNQ0KCQljMi4xLTIuMiwyLjItNS44LDAuMy04LjJjLTEuMy0xLjYtMy0yLjQtNS4yLTJDLTMwNSw0OTUuMy0zMDYuNyw0OTcuNi0zMDYuOCw1MDAuNnoiLz4NCgk8cGF0aCBjbGFzcz0ic3QwIiBkPSJNLTMzMi44LDQ5MS40YzIuOCw1LjksNS42LDExLjcsOC40LDE3LjVjMC4xLDAuMSwwLDAuMi0wLjEsMC4yYy0wLjcsMC0xLjMsMC0yLDBjLTAuNSwwLTEuMiwwLjItMS41LTAuMQ0KCQljLTAuNC0wLjItMC41LTAuOS0wLjctMS40Yy0wLjMtMC43LTAuNi0xLjQtMC45LTJjLTAuMS0wLjItMC4zLTAuMy0wLjUtMC4zYy0xLjksMC0zLjcsMC01LjYsMGMtMC4zLDAtMC41LDAuMS0wLjYsMC40DQoJCWMtMC40LDEtMC44LDEuOS0xLjIsMi45Yy0wLjEsMC4zLTAuNSwwLjUtMC44LDAuNWMtMSwwLTIsMC0zLDBjLTAuMSwwLTAuMi0wLjEtMC4xLTAuMmMyLjgtNS45LDUuNi0xMS42LDguNC0xNy41DQoJCUMtMzMzLDQ5MS4zLTMzMi44LDQ5MS4zLTMzMi44LDQ5MS40eiBNLTMzMyw0OTguNGwtMS43LDMuOGMwLDAuMSwwLDAuMiwwLjEsMC4yaDMuM2MwLjEsMCwwLjItMC4xLDAuMS0wLjJsLTEuNi0zLjgNCgkJQy0zMzIuOCw0OTguMy0zMzMsNDk4LjMtMzMzLDQ5OC40eiIvPg0KCTxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzI1LjEsNDk0LjZ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41YzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtNC41DQoJCWMtMC4xLDAtMC4yLDAuMS0wLjIsMC4ydjE0LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTVjMC0wLjEtMC4xLTAuMi0wLjItMC4yaC00LjUNCgkJQy0zMjUsNDk0LjgtMzI1LjEsNDk0LjctMzI1LjEsNDk0LjZ6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yMzMsNDkxLjdoMy4yYzAuMSwwLDAuMywwLjEsMC4zLDAuM2MwLDAuMSwwLDAuMiwwLDAuMmMwLDQuOSwwLDEwLjMsMCwxNS4zYzAsMy44LTIuNSw3LTYuMSw3LjkNCgkJYy0wLjYsMC4yLTEuMywwLjItMiwwLjNjLTAuMiwwLTAuMy0wLjEtMC4zLTAuM3YtMi42YzAtMC4xLDAuMS0wLjMsMC4yLTAuM2MwLjMsMCwwLjYsMCwwLjktMC4xYzEuOC0wLjQsMy4yLTIsMy40LTQNCgkJYzAtMC40LDAuMS0wLjksMC4xLTEuM2MwLTQuOCwwLTEwLDAtMTQuOHYtMC40Qy0yMzMuMyw0OTEuOS0yMzMuMiw0OTEuNy0yMzMsNDkxLjd6Ii8+DQoJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0yNjYuNiw0OTEuOGgzLjJjMC4xLDAsMC4yLDAuMSwwLjIsMC4ydjE3LjFjMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC0zLjJjLTAuMSwwLTAuMi0wLjEtMC4yLTAuMlY0OTINCgkJQy0yNjYuOCw0OTEuOS0yNjYuOCw0OTEuOC0yNjYuNiw0OTEuOHoiLz4NCgk8Zz4NCgkJPHBhdGggY2xhc3M9InN0MCIgZD0iTS0xODkuNCw0OTQuOGgtNC41Yy0wLjEsMC0wLjItMC4xLTAuMi0wLjJ2LTIuNWMwLTAuMSwwLjEtMC4yLDAuMi0wLjJoMTMuMWMwLjEsMCwwLjIsMC4xLDAuMiwwLjJ2Mi41DQoJCQljMCwwLjEtMC4xLDAuMi0wLjIsMC4yaC00LjVjLTAuMSwwLTAuMiwwLjEtMC4yLDAuMnYxNC4xYzAsMC4xLTAuMSwwLjItMC4yLDAuMmgtMy4yYy0wLjEsMC0wLjItMC4xLTAuMi0wLjJWNDk1DQoJCQlDLTE4OS4xLDQ5NC45LTE4OS4yLDQ5NC44LTE4OS40LDQ5NC44eiIvPg0KCTwvZz4NCjwvZz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0tMzYyLDQ4NS44bC04LjctN2MtMC4xLTAuMS0wLjItMC4xLTAuMywwbC0xOC4zLDI2LjVjLTAuMSwwLjEsMCwwLjIsMCwwLjJsMTUsMTZjMCwwLjEsMC4xLDAuMSwwLjIsMC4xDQoJbDE5LjItNS4xYzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtNy4zLTMwLjRDLTM2MS45LDQ4NS45LTM2Miw0ODUuOS0zNjIsNDg1Ljh6IE0tMzc5LjcsNTEyLjVsMTEuMi0xNmMwLjEtMC4xLDAuMy0wLjEsMC40LDAuMQ0KCWwyLjcsMTIuOWMwLDAuMSwwLDAuMi0wLjEsMC4ybC0xMy4zLDMuN2MtMC4xLDAtMC4xLDAtMC4yLTAuMWwtMC41LTAuNUMtMzc5LjgsNTEyLjctMzc5LjgsNTEyLjYtMzc5LjcsNTEyLjV6IE0tMzY3LjMsNDkxDQoJTC0zNjcuMyw0OTFsLTEuNy03LjdjMC0wLjIsMC4yLTAuMywwLjMtMC4ybDQuMywzLjRjMC4xLDAuMSwwLjEsMC4yLDAsMC4zTC0zNjcuMyw0OTFMLTM2Ny4zLDQ5MXogTS0zNzEuMSw0ODMuM2wyLjIsMTANCgljMCwwLjEsMCwwLjEsMCwwLjJsLTEyLjIsMTcuNGMtMC4xLDAuMS0wLjIsMC4xLTAuMywwbC01LjEtNS41Yy0wLjEtMC4xLTAuMS0wLjIsMC0wLjJsMTUuMi0yMg0KCUMtMzcxLjQsNDgzLjEtMzcxLjEsNDgzLjEtMzcxLjEsNDgzLjN6IE0tMzc3LjIsNTE1bDEzLjktMy45YzAuMSwwLDAuMi0wLjEsMC4xLTAuMmwtMy41LTE3YzAtMC4xLDAtMC4xLDAtMC4ybDMuMS00LjQNCgljMC4xLTAuMSwwLjMtMC4xLDAuNCwwLjFsNi4yLDI1LjVjMCwwLjEsMCwwLjItMC4xLDAuMmwtMTYuMSw0LjNjLTAuMSwwLTAuMSwwLTAuMi0wLjFsLTMuOC00Qy0zNzcuNCw1MTUuMi0zNzcuNCw1MTUtMzc3LjIsNTE1eiINCgkvPg0KPC9zdmc+DQo=', + './images/atomicjolt.png': '/_karma_webpack_/atomicjolt-92b4dadbb4b4c6bc62bcd225dbefa9d3.png' + }; + return assetsMock[key]; +} + +assets.keys = () => ([ + './images/atomicjolt.jpg', + './images/atomicjolt.svg', +]); diff --git a/client/apps/hello_world/libs/assets.spec.js b/client/apps/hello_world/libs/assets.spec.js index 11a219c..2c6b475 100644 --- a/client/apps/hello_world/libs/assets.spec.js +++ b/client/apps/hello_world/libs/assets.spec.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import assets from './assets'; +jest.mock('./assets.js'); + describe('assets', () => { describe('default functionality', () => { it('Provides the url for an asset', () => { diff --git a/client/apps/hello_world/package.json b/client/apps/hello_world/package.json index 1af8f22..f0fbecd 100644 --- a/client/apps/hello_world/package.json +++ b/client/apps/hello_world/package.json @@ -1,4 +1,7 @@ { + "scripts": { + "test": "./node_modules/jest/bin/jest.js --config=config/jest_config.json" + }, "dependencies": { "babel": "^6.23.0", "babel-polyfill": "^6.23.0", @@ -14,5 +17,8 @@ "react-tap-event-plugin": "2.0.1", "redux": "3.6.0", "uuid": "3.0.1" + }, + "devDependencies": { + "jest": "^20.0.1" } } diff --git a/client/apps/hello_world/yarn.lock b/client/apps/hello_world/yarn.lock index f0237a8..6cb57b5 100644 --- a/client/apps/hello_world/yarn.lock +++ b/client/apps/hello_world/yarn.lock @@ -2,10 +2,214 @@ # yarn lockfile v1 +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^4.0.4: + version "4.0.11" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0, ansi-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + asap@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.0.0, babel-core@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0, babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.1.tgz#9cbe9a15bbe3f1ca1b727dc8e45a4161771d3655" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.1" + test-exclude "^4.1.0" + +babel-plugin-jest-hoist@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.1.tgz#1b9cc322cff704d3812d1bca8dccd12205eedfd5" + babel-polyfill@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" @@ -14,6 +218,24 @@ babel-polyfill@^6.23.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" +babel-preset-jest@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.1.tgz#8a9e23ce8a0f0c49835de53ed73ecf75dd6daa2e" + dependencies: + babel-plugin-jest-hoist "^20.0.1" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + babel-runtime@^6.22.0, babel-runtime@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" @@ -21,14 +243,193 @@ babel-runtime@^6.22.0, babel-runtime@^6.23.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" +babel-template@^6.16.0, babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + babel@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: + version "6.17.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +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" + big.js@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" +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" + +brace-expansion@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +content-type-parser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -44,6 +445,68 @@ create-react-class@^15.5.1: fbjs "^0.8.9" object-assign "^4.1.1" +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" + +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" + +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" + +debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: + version "2.6.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" + dependencies: + ms "0.7.3" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diff@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +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" + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -54,10 +517,101 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" +"errno@>=0.1.1 <0.2.0-0": + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + es6-promise@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0" +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + +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" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + fbjs@^0.8.6, fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" @@ -70,6 +624,152 @@ fbjs@^0.8.6, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + 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" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handlebars@^4.0.3: + version "4.0.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +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" + history@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/history/-/history-3.3.0.tgz#fcedcce8f12975371545d735461033579a6dae9c" @@ -79,39 +779,566 @@ history@^3.0.0: query-string "^4.2.2" warning "^3.0.0" -hoist-non-react-statics@^1.0.3, 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" +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoist-non-react-statics@^1.0.3, 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" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +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: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-stream@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@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" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.0" + istanbul-lib-hook "^1.0.6" + istanbul-lib-instrument "^1.7.1" + istanbul-lib-report "^1.1.0" + istanbul-lib-source-maps "^1.2.0" + istanbul-reports "^1.1.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" + +istanbul-lib-hook@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" + dependencies: + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.1.tgz#ba9bd42c3fddb1b7c4ae40065199b44a2335e152" + +jest-cli@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.1.tgz#86ca0bc2e47215ad8e7dc85455c0210f86648502" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.1" + jest-config "^20.0.1" + jest-docblock "^20.0.1" + jest-environment-jsdom "^20.0.1" + jest-haste-map "^20.0.1" + jest-jasmine2 "^20.0.1" + jest-message-util "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve-dependencies "^20.0.1" + jest-runtime "^20.0.1" + jest-snapshot "^20.0.1" + jest-util "^20.0.1" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.1.tgz#c6934f585c3e1775c96133efb302f986c3909ad8" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.1" + jest-environment-node "^20.0.1" + jest-jasmine2 "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve "^20.0.1" + jest-validate "^20.0.1" + pretty-format "^20.0.1" + +jest-diff@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.1.tgz#2567c80c324243328321386f8871a28ec9d350ac" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.1" + pretty-format "^20.0.1" + +jest-docblock@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.1.tgz#055e0bbcb76798198479901f92d2733bf619f854" + +jest-environment-jsdom@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.1.tgz#2d29f81368987d387c70ce4f500c6aa560f9b4f7" + dependencies: + jest-mock "^20.0.1" + jest-util "^20.0.1" + jsdom "^9.12.0" + +jest-environment-node@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.1.tgz#75ab5358072ee1efebc54f43474357d7b3d674c7" + dependencies: + jest-mock "^20.0.1" + jest-util "^20.0.1" + +jest-haste-map@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.1.tgz#e6ba4db99ab512e7c081a5b0a0af731d0e193d56" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.1" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.1.tgz#675772b1fd32ad74e92e8ae8282f8ea71d1de168" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-matchers "^20.0.1" + jest-message-util "^20.0.1" + jest-snapshot "^20.0.1" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.1.tgz#31aef67f59535af3c2271a3a3685db604dbd1622" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.1" + +jest-matchers@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.1.tgz#053b7654ce60129268f39992886e987a5201bb90" + dependencies: + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-message-util "^20.0.1" + jest-regex-util "^20.0.1" + +jest-message-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.1.tgz#ac21cb055a6a5786b7f127ac7e705df5ffb1c335" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.1.tgz#f4cca2e87e441b66fabe4ead6a6d61773ec0773a" + +jest-regex-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.1.tgz#ecbcca8fbe4e217bca7f6f42a9b831d051224dc4" + +jest-resolve-dependencies@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.1.tgz#38fc012191775b0b277fabebb37aa8282e26846f" + dependencies: + jest-regex-util "^20.0.1" + +jest-resolve@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.1.tgz#cace553663f25c703dc977a4ce176e29eda92772" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.1.tgz#384f9298b8e8a177870c6d9ad0023db10ddcaedc" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.1" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.1" + jest-haste-map "^20.0.1" + jest-regex-util "^20.0.1" + jest-resolve "^20.0.1" + jest-util "^20.0.1" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" -iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +jest-snapshot@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.1.tgz#3704c599705042f20ec7c95ba76a4524c744dfac" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.1" + jest-matcher-utils "^20.0.1" + jest-util "^20.0.1" + natural-compare "^1.4.0" + pretty-format "^20.0.1" -invariant@^2.0.0, invariant@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" +jest-util@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.1.tgz#a3e7afb67110b2c3ac77b82e9a51ca57f4ff72a1" dependencies: - loose-envify "^1.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.1" + jest-mock "^20.0.1" + jest-validate "^20.0.1" + leven "^2.1.0" + mkdirp "^0.5.1" -is-stream@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +jest-validate@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.1.tgz#a236c29e3c29e9b92a1e5da211a732f0238da928" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.1" + leven "^2.1.0" + pretty-format "^20.0.1" -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" +jest@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.1.tgz#4e268159ccc3b659966939de817c75bfe9e0157d" dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" + jest-cli "^20.0.1" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" +js-yaml@^3.7.0: + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" + dependencies: + is-buffer "^1.1.5" + +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" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + loader-utils@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" @@ -120,20 +1347,97 @@ loader-utils@^1.0.2: 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.2.0, lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" -lodash@4.17.4, lodash@^4.2.0, lodash@^4.2.1: +lodash@4.17.4, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: js-tokens "^3.0.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +minimatch@^3.0.2, minimatch@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + node-fetch@^1.0.1: version "1.6.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" @@ -141,10 +1445,191 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +normalize-package-data@^2.3.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.3.9" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + object-assign@^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.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" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-format@^20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.1.tgz#ba95329771907c189643dd251e244061ff642350" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + promise@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" @@ -157,6 +1642,18 @@ prop-types@^15.0.0, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, dependencies: fbjs "^0.8.9" +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + query-string@^4.2.2: version "4.3.2" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" @@ -164,6 +1661,13 @@ query-string@^4.2.2: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + react-dom@^15.5.4: version "15.5.4" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da" @@ -218,6 +1722,21 @@ react@^15.5.4: object-assign "^4.1.0" prop-types "^15.5.7" +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + redux@3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" @@ -231,32 +1750,453 @@ regenerator-runtime@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.79.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +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.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sax@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-map-support@^0.4.2: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + 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-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + symbol-observable@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +test-exclude@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uuid@3.0.1: +uglify-js@^2.6: + version "2.8.23" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.23.tgz#8230dd9783371232d62a7821e2cf9a817270a8a0" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uuid@3.0.1, uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + 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" +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + whatwg-fetch@>=0.10.0: 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" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@^1.2.12: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2, wordwrap@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +worker-farm@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + dependencies: + errno ">=0.1.1 <0.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +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" + +"xtend@>=4.0.0 <4.1.0-0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +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@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git a/client/yarn.lock b/client/yarn.lock index 7c301aa..4c3c61b 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -14,11 +14,15 @@ version "2.53.42" resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz#74cb77fb6052edaff2a8984ddafd88d419f25cac" +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -accepts@1.3.3, accepts@~1.3.3: +accepts@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: @@ -31,6 +35,12 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +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" @@ -57,10 +67,6 @@ adm-zip@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - agent-base@2: version "2.0.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" @@ -101,7 +107,7 @@ ansi-align@^1.1.0: dependencies: string-width "^1.0.1" -ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -117,6 +123,12 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" @@ -148,6 +160,12 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3: version "1.1.1" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" @@ -195,6 +213,10 @@ array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + array-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" @@ -211,10 +233,6 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -236,11 +254,7 @@ array.prototype.find@^2.0.1: define-properties "^1.1.2" es-abstract "^1.7.0" -arraybuffer.slice@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" - -arrify@^1.0.0: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -306,11 +320,11 @@ async@1.x, async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^0.9.0, async@~0.9.0: +async@^0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.1, async@^2.1.2, async@^2.1.5: +async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.1.5: version "2.3.0" resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" dependencies: @@ -373,7 +387,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.24.1: +babel-core@^6.0.0, babel-core@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" dependencies: @@ -545,6 +559,22 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^19.0.0" + +babel-jest@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.0.tgz#05ae371102ee8e30c9d61ffdf3f61c738a87741f" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.0" + babel-loader@^6.4.0: version "6.4.1" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" @@ -566,6 +596,26 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-istanbul@^4.0.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.1" + test-exclude "^4.1.0" + +babel-plugin-jest-hoist@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" + +babel-plugin-jest-hoist@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.0.tgz#d2afe94fa6aea3b8bfa5d61d8028f633c898d86d" + +babel-plugin-rewire@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-rewire/-/babel-plugin-rewire-1.1.0.tgz#a6b966d9d8c06c03d95dcda2eec4e2521519549b" + 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" @@ -982,6 +1032,18 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" + dependencies: + babel-plugin-jest-hoist "^19.0.0" + +babel-preset-jest@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.0.tgz#16b992c9351c2525e87a19fd36ba14e47df51bad" + dependencies: + babel-plugin-jest-hoist "^20.0.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" @@ -1084,10 +1146,6 @@ babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.16.1: version "6.16.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - balanced-match@^0.4.1, balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -1096,18 +1154,10 @@ base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" -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.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" -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" @@ -1122,12 +1172,6 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - big.js@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" @@ -1142,10 +1186,6 @@ bl@^1.0.0, bl@~1.1.2: dependencies: readable-stream "~2.0.5" -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - block-stream@*, block-stream@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1158,28 +1198,13 @@ blocking-proxy@0.0.5: dependencies: minimist "^1.2.0" -bluebird@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" -body-parser@^1.16.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" - dependencies: - bytes "2.4.0" - content-type "~1.0.2" - debug "2.6.1" - depd "~1.1.0" - http-errors "~1.6.1" - iconv-lite "0.4.15" - on-finished "~2.3.0" - qs "6.4.0" - raw-body "~2.2.0" - type-is "~1.6.14" +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" @@ -1206,12 +1231,6 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" -braces@^0.1.2: - version "0.1.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" - dependencies: - expand-range "^0.1.0" - braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -1224,6 +1243,12 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" @@ -1282,6 +1307,18 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-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" @@ -1327,24 +1364,20 @@ builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" -bytes@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" - caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: callsites "^0.2.0" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -1449,11 +1482,32 @@ char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + chmodr@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" -chokidar@^1.4.1, chokidar@^1.4.3: +chokidar@^1.4.3: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" dependencies: @@ -1478,6 +1532,10 @@ chunk-manifest-webpack-plugin@1.0.0: dependencies: webpack-core "^0.6.9" +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + cipher-base@^1.0.0, cipher-base@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" @@ -1595,7 +1653,7 @@ 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.0.0, color-convert@^1.3.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: @@ -1627,7 +1685,7 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@^1.1.0, colors@^1.1.2, colors@~1.1.2: +colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1638,12 +1696,6 @@ columnify@~1.5.4: strip-ansi "^3.0.0" wcwidth "^1.0.0" -combine-lists@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" - dependencies: - lodash "^4.5.0" - 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" @@ -1670,22 +1722,10 @@ complex.js@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.1.tgz#ea90c7a05aeceaf3a376d2c0f6a78421727d6879" -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: +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" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1724,15 +1764,6 @@ configstore@^3.0.0: write-file-atomic "^1.1.2" xdg-basedir "^3.0.0" -connect@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.0.tgz#f09a4f7dcd17324b663b725c815bdb1c4158a46e" - dependencies: - debug "2.6.1" - finalhandler "1.0.0" - parseurl "~1.3.1" - utils-merge "1.0.0" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1761,11 +1792,15 @@ 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.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0: +convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0, convert-source-map@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1785,7 +1820,7 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.2.0, core-js@^2.4.0: +core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -1907,6 +1942,15 @@ css-loader@^0.28.0: postcss-modules-values "^1.1.0" source-list-map "^0.1.7" +css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + css-selector-tokenizer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" @@ -1923,6 +1967,10 @@ css-selector-tokenizer@^0.7.0: fastparse "^1.1.1" regexpu-core "^1.0.0" +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" @@ -1971,16 +2019,22 @@ csso@~2.3.1: 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" -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -2001,13 +2055,6 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^1.0.6: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" @@ -2016,7 +2063,7 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.3, debug@^2.1.1, debug@^2.2.0: +debug@2, debug@2.6.3, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: @@ -2028,12 +2075,6 @@ debug@2.2.0: 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.1: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" @@ -2124,6 +2165,12 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -2189,9 +2236,9 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" +diff@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" diffie-hellman@^5.0.0: version "5.0.2" @@ -2221,14 +2268,12 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" +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: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" + domelementtype "~1.1.1" + entities "~1.1.1" dom-walk@^0.1.0: version "0.1.1" @@ -2238,6 +2283,27 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domutils@1.5.1, 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@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-2.4.0.tgz#848e28f7f1d50740c6747ab3cb07670462b6f89c" @@ -2398,45 +2464,6 @@ end-of-stream@1.0.0, end-of-stream@^1.0.0: dependencies: once "~1.3.0" -engine.io-client@1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "2.3.3" - engine.io-parser "1.3.2" - has-cors "1.1.0" - indexof "0.0.1" - parsejson "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - ws "1.1.2" - xmlhttprequest-ssl "1.5.3" - yeast "0.1.2" - -engine.io-parser@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" - dependencies: - after "0.8.2" - arraybuffer.slice "0.0.6" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary "0.1.7" - wtf-8 "1.0.0" - -engine.io@1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" - 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.2" - enhanced-resolve@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" @@ -2446,11 +2473,26 @@ enhanced-resolve@^3.0.0: object-assign "^4.0.1" tapable "^0.2.5" -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +enzyme@^2.7.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.2.tgz#6c8bcb05012abc4aa4bc3213fb23780b9b5b1714" + dependencies: + cheerio "^0.22.0" + function.prototype.name "^1.0.0" + is-subset "^0.1.1" + lodash "^4.17.2" + object-is "^1.0.1" + object.assign "^4.0.4" + object.entries "^1.0.3" + object.values "^1.0.3" + prop-types "^15.5.4" + uuid "^2.0.3" -errno@^0.1.1, errno@^0.1.3: +"errno@>=0.1.1 <0.2.0-0", errno@^0.1.1, errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -2476,7 +2518,7 @@ error@^4.2.0: string-template "~0.2.0" xtend "~4.0.0" -es-abstract@^1.7.0: +es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" dependencies: @@ -2561,7 +2603,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^ version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.8.x: +escodegen@1.8.x, escodegen@^1.6.1: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: @@ -2753,10 +2795,6 @@ event-stream@3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -2771,6 +2809,12 @@ evp_bytestokey@^1.0.0: dependencies: create-hash "^1.1.1" +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + execa@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" @@ -2790,27 +2834,12 @@ exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" -expand-braces@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" - dependencies: - array-slice "^0.2.3" - array-unique "^0.2.1" - braces "^0.1.2" - 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@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" - dependencies: - is-number "^0.1.1" - repeat-string "^0.2.2" - expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" @@ -2903,6 +2932,18 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" @@ -2961,6 +3002,13 @@ filenamify@^1.0.1: strip-outer "^1.0.0" trim-repeated "^1.0.0" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + filesize@^3.5.6: version "3.5.6" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" @@ -2975,18 +3023,6 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755" - dependencies: - debug "2.6.1" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.1" - statuses "~1.3.1" - unpipe "~1.0.0" - finalhandler@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" @@ -3014,6 +3050,12 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" @@ -3095,12 +3137,6 @@ front-matter@^2.1.1: dependencies: js-yaml "^3.4.6" -fs-access@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - dependencies: - null-check "^1.0.0" - fs-extra@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" @@ -3172,6 +3208,14 @@ function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +function.prototype.name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + is-callable "^1.1.2" + gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" @@ -3417,6 +3461,10 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + gtoken@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.2.tgz#172776a1a9d96ac09fc22a00f5be83cee6de8820" @@ -3484,7 +3532,7 @@ gzip-size@^3.0.0: dependencies: duplexer "^0.1.1" -handlebars@^4.0.1: +handlebars@^4.0.1, handlebars@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" dependencies: @@ -3520,20 +3568,10 @@ has-ansi@^2.0.0: 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-color@~0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" -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" @@ -3615,6 +3653,12 @@ 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.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + html-entities@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" @@ -3636,6 +3680,17 @@ html-truncate@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.2.tgz#db2e331dcf1cba0bd432a507d16e988609f2575f" +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + http-errors@~1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" @@ -3645,13 +3700,6 @@ http-errors@~1.6.1: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-proxy@^1.13.0: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -3679,9 +3727,9 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -iconv-lite@0.4.15, iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +iconv-lite@0.4.13, iconv-lite@~0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" icss-replace-symbols@^1.0.2: version "1.0.2" @@ -3834,10 +3882,16 @@ is-bzip2@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" -is-callable@^1.1.1, is-callable@^1.1.3: +is-callable@^1.1.1, is-callable@^1.1.2, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" @@ -3913,10 +3967,6 @@ is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" -is-number@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" - is-number@^2.0.2, is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -3993,6 +4043,10 @@ is-stream@^1.0.0, 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-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -4035,10 +4089,6 @@ 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" -isbinaryfile@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4064,6 +4114,22 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +istanbul-api@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.0" + istanbul-lib-hook "^1.0.6" + istanbul-lib-instrument "^1.7.1" + istanbul-lib-report "^1.1.0" + istanbul-lib-source-maps "^1.2.0" + istanbul-reports "^1.1.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + istanbul-instrumenter-loader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz#e5492900ab0bba835efa8024cb00be9b3eea2700" @@ -4073,10 +4139,20 @@ istanbul-instrumenter-loader@^2.0.0: loader-utils "^0.2.16" object-assign "^4.1.0" -istanbul-lib-coverage@^1.0.2: +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz#87a0c015b6910651cb3b184814dfb339337e25e1" +istanbul-lib-coverage@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" + +istanbul-lib-hook@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" + dependencies: + append-transform "^0.4.0" + istanbul-lib-instrument@^1.1.3: version "1.7.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.0.tgz#b8e0dc25709bb44e17336ab47b7bb5c97c23f659" @@ -4089,7 +4165,44 @@ istanbul-lib-instrument@^1.1.3: istanbul-lib-coverage "^1.0.2" semver "^5.3.0" -istanbul@0.4.5, istanbul@^0.4.0: +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.0" + semver "^5.3.0" + +istanbul-lib-report@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" + dependencies: + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" + dependencies: + handlebars "^4.0.3" + +istanbul@0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" dependencies: @@ -4108,7 +4221,7 @@ istanbul@0.4.5, istanbul@^0.4.0: which "^1.1.1" wordwrap "^1.0.0" -jasmine-ajax@^3.0.0: +jasmine-ajax@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz#f8cad9fd49dfd44f3cf798d36f4e857d125c75c5" @@ -4128,21 +4241,231 @@ jasminewd2@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.0.0.tgz#10aacd2c588c1ceb6a0b849f1a7f3f959f777c91" -jju@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" - -jmespath@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" +jest-changed-files@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.0.tgz#2ad82870a815b40ce3f4bf4555581d387b21022c" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" +jest-cli@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.0.tgz#72664e0723bd099a0bade5bd4bf960fd54876069" dependencies: - jsbn "~0.1.0" - -js-base64@^2.1.9: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.0" + jest-config "^20.0.0" + jest-docblock "^20.0.0" + jest-environment-jsdom "^20.0.0" + jest-haste-map "^20.0.0" + jest-jasmine2 "^20.0.0" + jest-message-util "^20.0.0" + jest-regex-util "^20.0.0" + jest-resolve-dependencies "^20.0.0" + jest-runtime "^20.0.0" + jest-snapshot "^20.0.0" + jest-util "^20.0.0" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.0.tgz#295fe937a377f79a8eea240ad29546bf43acbbec" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.0" + jest-environment-node "^20.0.0" + jest-jasmine2 "^20.0.0" + jest-regex-util "^20.0.0" + jest-resolve "^20.0.0" + jest-validate "^20.0.0" + pretty-format "^20.0.0" + +jest-diff@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.0.tgz#d6e9190b57e0333c6706ef28d62b1cb23042d7eb" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.0" + pretty-format "^20.0.0" + +jest-docblock@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.0.tgz#5b647c4af36f52dae74df1949a8cb418d146ad3a" + +jest-environment-jsdom@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.0.tgz#a688499d817e33cdea6400c502d8d5f4aa01c808" + dependencies: + jest-mock "^20.0.0" + jest-util "^20.0.0" + jsdom "^9.12.0" + +jest-environment-node@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.0.tgz#7016d8d1270cbc1ed71a10f242c78324297e1db8" + dependencies: + jest-mock "^20.0.0" + jest-util "^20.0.0" + +jest-haste-map@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.0.tgz#3b8d9255dfe2a6a96e516fe71dafd415e1b5d65f" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.0" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.0.tgz#2a0aba92ed36ec132901cfc2a552fd7cee6fde3d" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.0" + jest-matcher-utils "^20.0.0" + jest-matchers "^20.0.0" + jest-message-util "^20.0.0" + jest-snapshot "^20.0.0" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.0.tgz#2c5d9dd11670c5418ffc78baecf9094db9e91e09" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.0" + +jest-matchers@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.0.tgz#55498637bbb58f164d97c73610fb8d016dfac770" + dependencies: + jest-diff "^20.0.0" + jest-matcher-utils "^20.0.0" + jest-message-util "^20.0.0" + jest-regex-util "^20.0.0" + +jest-message-util@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.0.tgz#060bac1980bd5e11134e8e1c19c94863d937c727" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.0.tgz#3c54b94fe502ed57f2e602fab22ab196a7aa4b95" + +jest-regex-util@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.0.tgz#7f6051e9d00fdcccca52bade50aabdd9919bcfd2" + +jest-resolve-dependencies@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.0.tgz#616c6976c52e49d13e6420b1bcc8f380e701408f" + dependencies: + jest-regex-util "^20.0.0" + +jest-resolve@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.0.tgz#f9bfdfa31109aee2decfc3a07c2c354608cc5e1d" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.0.tgz#4c78c08573ffaeba9b8ceb096f705b75d5fb54a1" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.0" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.0" + jest-haste-map "^20.0.0" + jest-regex-util "^20.0.0" + jest-resolve "^20.0.0" + jest-util "^20.0.0" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.0.tgz#fbe51d94ed1c6cd23808bb7ef82e58ca12a0ccf7" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.0" + jest-matcher-utils "^20.0.0" + jest-util "^20.0.0" + natural-compare "^1.4.0" + pretty-format "^20.0.0" + +jest-util@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.0.tgz#5421322f196e884e962bc8b8bac4b009733caed9" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.0" + jest-mock "^20.0.0" + jest-validate "^20.0.0" + leven "^2.1.0" + mkdirp "^0.5.1" + +jest-validate@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.0.tgz#c0832e8210190b6d5b39a46b8df536083131a7d7" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.0" + leven "^2.1.0" + pretty-format "^20.0.0" + +jest@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.0.tgz#58cf6abf328f2a2e3c4203890131cbe89d3b0769" + dependencies: + jest-cli "^20.0.0" + +jju@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" + +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" @@ -4157,7 +4480,7 @@ js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@~3.7.0: +js-yaml@^3.7.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: @@ -4168,6 +4491,30 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -4208,10 +4555,6 @@ 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: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -4262,104 +4605,6 @@ jws@^3.0.0, jws@^3.1.4: jwa "^1.1.4" safe-buffer "^5.0.1" -karma-chrome-launcher@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz#c2790c5a32b15577d0fff5a4d5a2703b3b439c25" - dependencies: - fs-access "^1.0.0" - which "^1.2.1" - -karma-cli@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960" - dependencies: - resolve "^1.1.6" - -karma-coverage@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6" - dependencies: - dateformat "^1.0.6" - istanbul "^0.4.0" - lodash "^3.8.0" - minimatch "^3.0.0" - source-map "^0.5.1" - -karma-firefox-launcher@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz#ce58f47c2013a88156d55a5d61337c099cf5bb51" - -karma-jasmine-ajax@0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz#78bb92d896fe32a25a180098c47722e1d9605bfc" - dependencies: - jasmine-ajax "^3.0.0" - -karma-jasmine@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" - -karma-phantomjs-launcher@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2" - dependencies: - lodash "^4.0.1" - phantomjs-prebuilt "^2.1.7" - -karma-sourcemap-loader@0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" - dependencies: - graceful-fs "^4.1.2" - -karma-spec-reporter@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz#4830dc7148a155c7d7a186e632339a0d80fadec3" - dependencies: - colors "^1.1.2" - -karma-webpack@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.3.tgz#39cebf5ca2580139b27f9ae69b78816b9c82fae6" - dependencies: - async "~0.9.0" - loader-utils "^0.2.5" - lodash "^3.8.0" - source-map "^0.1.41" - webpack-dev-middleware "^1.0.11" - -karma@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/karma/-/karma-1.6.0.tgz#0e871d4527d5eac56c41d181f03c5c0a7e6dbf3e" - dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - chokidar "^1.4.1" - colors "^1.1.0" - combine-lists "^1.0.0" - connect "^3.6.0" - core-js "^2.2.0" - di "^0.0.1" - dom-serialize "^2.2.0" - expand-braces "^0.1.1" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^3.8.0" - log4js "^0.6.31" - mime "^1.3.4" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "1.7.3" - source-map "^0.5.3" - tmp "0.0.31" - useragent "^2.1.12" - kew@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" @@ -4437,6 +4682,10 @@ less@2.7.2: request "^2.72.0" source-map "^0.5.3" +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -4458,7 +4707,7 @@ 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.16, loader-utils@^0.2.5: +loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" dependencies: @@ -4475,6 +4724,13 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: 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" + lockfile@~1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" @@ -4587,6 +4843,14 @@ 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.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -4613,6 +4877,10 @@ lodash.debounce@^4.0.4: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + lodash.difference@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-3.2.2.tgz#dc463fffe6619ab4af49a3c87ace6695a285dde6" @@ -4627,10 +4895,22 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + lodash.intersection@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-3.2.0.tgz#e5b3611298a1187247b99eeadb385a3da018c570" @@ -4679,6 +4959,10 @@ lodash.keysin@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4699,6 +4983,10 @@ lodash.merge@^3.3.2: lodash.keysin "^3.0.0" lodash.toplainobject "^3.0.0" +lodash.merge@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" @@ -4719,10 +5007,26 @@ lodash.padstart@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" @@ -4759,11 +5063,7 @@ 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.8.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4786,18 +5086,11 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" -log4js@^0.6.31: - version "0.6.38" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" - dependencies: - readable-stream "~1.0.2" - semver "~4.3.3" - 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.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -4818,10 +5111,6 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@2.2.x: - version "2.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" - lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -4833,6 +5122,12 @@ macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + 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" @@ -4871,7 +5166,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0, meow@^3.5.0, meow@^3.7.0: +meow@^3.5.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -4902,11 +5197,15 @@ merge-stream@^1.0.0: dependencies: readable-stream "^2.0.1" +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + 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, micromatch@^2.3.7: +micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -4973,7 +5272,7 @@ minimist@1.1.x: version "1.1.3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -5077,6 +5376,10 @@ node-gyp@^3.3.1, node-gyp@~3.6.0: tar "^2.0.0" which "1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + node-libs-browser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" @@ -5105,6 +5408,15 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + node-pre-gyp@^0.6.29: version "0.6.34" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" @@ -5360,9 +5672,11 @@ npm@^2.15.10: are-we-there-yet "~1.1.2" gauge "~1.2.5" -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" +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" null-loader@0.1.1: version "0.1.1" @@ -5376,14 +5690,14 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.3.9" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" + oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" - object-assign@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" @@ -5396,9 +5710,9 @@ object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@ version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" object-keys@^1.0.10, object-keys@^1.0.8: version "1.0.11" @@ -5416,6 +5730,15 @@ object.assign@^4.0.4: function-bind "^1.1.0" object-keys "^1.0.10" +object.entries@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -5423,13 +5746,22 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" +object.values@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" -once@1.x, once@^1.3.0, once@^1.3.3, once@~1.4.0: +once@1.x, once@^1.3.0, once@^1.3.3, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -5503,6 +5835,20 @@ osenv@0, osenv@^0.1.4, osenv@~0.1.3: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + package-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.0.tgz#f3c9dc8738f5b59304d54d2cfb3f91d08fdd7998" @@ -5551,23 +5897,9 @@ parse-key@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/parse-key/-/parse-key-0.2.1.tgz#7bcf76595536e36075664be4d687e4bdd910208f" -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" +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" parseurl@~1.3.1: version "1.3.1" @@ -5587,6 +5919,10 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -5635,7 +5971,7 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -phantomjs-prebuilt@^2.1.14, phantomjs-prebuilt@^2.1.7: +phantomjs-prebuilt@^2.1.14: version "2.1.14" resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" dependencies: @@ -5995,6 +6331,12 @@ pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" +pretty-format@^20.0.0: + version "20.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.0.tgz#bd100f330e707e4f49fef3f234d6e915242a6e7e" + dependencies: + ansi-styles "^3.0.0" + private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -6033,7 +6375,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8: +prop-types@^15.5.4, prop-types@^15.5.8: version "15.5.8" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" dependencies: @@ -6120,10 +6462,6 @@ q@1.4.1, q@^1.1.2, q@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qjobs@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" - qs@6.4.0, qs@^6.1.0, qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -6162,18 +6500,10 @@ randombytes@^2.0.0, randombytes@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" -range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.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.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" - dependencies: - bytes "2.4.0" - iconv-lite "0.4.15" - unpipe "1.0.0" - rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" @@ -6231,15 +6561,6 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" -react@^15.5.4: - version "15.5.4" - resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.7" - read-all-stream@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" @@ -6309,7 +6630,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.0.0" util-deprecate "~1.0.1" -"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.2: +"readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -6535,10 +6856,6 @@ 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@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" - repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -6656,19 +6973,15 @@ require-uncached@^1.0.2: caller-path "^0.1.0" resolve-from "^1.0.0" -requires-port@1.x.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.x, resolve@^1.1.6: +resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" dependencies: @@ -6691,7 +7004,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -6769,6 +7082,18 @@ safe-json-parse@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-2.0.0.tgz#6da43f2e4a864335773b1d2df0db2c1962a0beec" +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + sass-graph@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" @@ -6797,7 +7122,7 @@ sax@0.6.x: version "0.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" -sax@1.2.1, sax@>=0.6.0, sax@~1.2.1: +sax@1.2.1, sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -6840,7 +7165,7 @@ semver-diff@^2.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^4.0.3, semver@~4.3.3: +semver@^4.0.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" @@ -6925,6 +7250,10 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6947,50 +7276,6 @@ sntp@1.x.x: dependencies: hoek "2.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.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "2.3.3" - engine.io-client "1.8.3" - 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.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" - dependencies: - debug "2.3.3" - engine.io "1.8.3" - has-binary "0.1.7" - object-assign "4.1.0" - socket.io-adapter "0.5.0" - socket.io-client "1.7.3" - 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" @@ -7026,16 +7311,10 @@ source-map-support@^0.4.2, source-map-support@~0.4.0: dependencies: source-map "^0.5.6" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@^0.1.41: - 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.4, source-map@~0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -7147,6 +7426,12 @@ 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-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + string-template@^0.2.0, string-template@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -7201,16 +7486,16 @@ strip-bom-stream@^1.0.0: first-chunk-stream "^1.0.0" strip-bom "^2.0.0" +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-dirs@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0" @@ -7283,7 +7568,7 @@ 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: +supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -7305,6 +7590,10 @@ symbol-observable@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -7356,10 +7645,24 @@ term-size@^0.1.0: dependencies: execa "^0.4.0" +test-exclude@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +throat@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" + throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -7421,11 +7724,9 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmp@0.0.31, tmp@0.0.x: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" - dependencies: - os-tmpdir "~1.0.1" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" to-absolute-glob@^0.1.1: version "0.1.1" @@ -7433,10 +7734,6 @@ to-absolute-glob@^0.1.1: dependencies: extend-shallow "^2.0.1" -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" @@ -7445,12 +7742,16 @@ to-fast-properties@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -tough-cookie@~2.3.0: +tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -7564,7 +7865,7 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7630,13 +7931,6 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -useragent@^2.1.12: - version "2.1.13" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" - dependencies: - lru-cache "2.2.x" - tmp "0.0.x" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7659,7 +7953,7 @@ uuid@3.0.1, uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" -uuid@^2.0.1: +uuid@^2.0.1, uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" @@ -7758,9 +8052,11 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" ware@^1.2.0: version "1.3.0" @@ -7768,6 +8064,10 @@ ware@^1.2.0: dependencies: wrap-fn "^0.1.0" +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + watchpack@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" @@ -7805,6 +8105,14 @@ webdriver-manager@^12.0.1: semver "^5.3.0" xml2js "^0.4.17" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + webpack-bundle-analyzer@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.4.0.tgz#e406b016e7452bc864793848c79308782accba8e" @@ -7827,7 +8135,7 @@ webpack-core@^0.6.9: source-list-map "~0.1.7" source-map "~0.4.1" -webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.10.1: +webpack-dev-middleware@^1.10.1: version "1.10.1" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" dependencies: @@ -7884,10 +8192,23 @@ webpack@^2.3.3: webpack-sources "^0.2.3" yargs "^6.0.0" +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-url@^4.3.0: + version "4.7.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de" + 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" @@ -7896,7 +8217,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: +which@1, which@^1.1.1, which@^1.2.12, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: @@ -7934,6 +8255,13 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +worker-farm@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + dependencies: + errno ">=0.1.1 <0.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -7965,17 +8293,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@1.1.2, ws@^1.0.1: +ws@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" dependencies: options ">=0.0.5" ultron "1.0.x" -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" @@ -7984,6 +8308,10 @@ 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" + xml2js@0.4.17, xml2js@^0.4.17: version "0.4.17" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" @@ -8004,10 +8332,6 @@ xmlbuilder@4.2.1, xmlbuilder@>=1.0.0, xmlbuilder@^4.1.0: dependencies: lodash "^4.0.0" -xmlhttprequest-ssl@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" - "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -8039,6 +8363,12 @@ yargs-parser@^4.2.0: dependencies: camelcase "^3.0.0" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" @@ -8076,6 +8406,24 @@ yargs@^6.0.0: y18n "^3.2.1" yargs-parser "^4.2.0" +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" @@ -8090,7 +8438,3 @@ yauzl@2.4.1, yauzl@^2.2.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" diff --git a/package.json b/package.json index 8a75e3a..459a40c 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "homepage": "https://github.com/atomicjolt/react_client_starter_app", "scripts": { "postinstall": "cd ./client && yarn", - "test": "cd ./client && ./node_modules/karma/bin/karma start", + "test": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn test; cd ..; cd ..; done", "coverage": "cat ./coverage/**/coverage.info | ./client/node_modules/coveralls/bin/coveralls.js", "hot": "cd ./client && node webpack.hot.js", "hot_pack": "cd ./client && node webpack.hot.js --hotPack", @@ -19,7 +19,7 @@ "build_pack": "cd ./client && node ./build.js --release --onlyPack", "create": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js create", "release": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js deploy", - "lint": "cd ./client && eslint js" + "lint": "cd ./client && eslint js", "nuke": "rm -rf node_modules && cd ./client && yarn nuke" }, "repository": { From 9e9fdfd91c8073564492a6d84d7de8953a09fd72 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 10:32:42 -0600 Subject: [PATCH 383/452] upgrade modules --- client/apps/hello_world/package.json | 2 +- client/apps/hello_world/yarn.lock | 9 +- client/package.json | 50 +- client/yarn.lock | 1710 +++++++++++--------------- 4 files changed, 720 insertions(+), 1051 deletions(-) diff --git a/client/apps/hello_world/package.json b/client/apps/hello_world/package.json index f0fbecd..bc82d6a 100644 --- a/client/apps/hello_world/package.json +++ b/client/apps/hello_world/package.json @@ -8,7 +8,7 @@ "babel-runtime": "^6.23.0", "es6-promise": "^4.1.0", "lodash": "4.17.4", - "prop-types": "^15.5.8", + "prop-types": "^15.5.9", "react": "^15.5.4", "react-dom": "^15.5.4", "react-proxy-loader": "^0.3.5", diff --git a/client/apps/hello_world/yarn.lock b/client/apps/hello_world/yarn.lock index 6cb57b5..8cfa996 100644 --- a/client/apps/hello_world/yarn.lock +++ b/client/apps/hello_world/yarn.lock @@ -1366,7 +1366,7 @@ 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.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: @@ -1636,11 +1636,12 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.0.0, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@~15.5.7: - version "15.5.8" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" +prop-types@^15.0.0, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.9, prop-types@~15.5.7: + version "15.5.9" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" dependencies: fbjs "^0.8.9" + loose-envify "^1.3.1" prr@~0.0.0: version "0.0.0" diff --git a/client/package.json b/client/package.json index 1a4fe82..5e52736 100644 --- a/client/package.json +++ b/client/package.json @@ -8,22 +8,22 @@ "devDependencies": { "assets-webpack-plugin": "^3.5.1", "atomic-lint-loader": "^1.0.1", - "autoprefixer": "^6.7.7", + "autoprefixer": "^7.0.1", "babel-core": "^6.24.1", "babel-eslint": "^7.2.3", - "babel-loader": "^6.4.0", + "babel-loader": "^7.0.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.23.0", "babel-plugin-transform-react-inline-elements": "^6.8.0", - "babel-plugin-transform-react-remove-prop-types": "^0.3.3", + "babel-plugin-transform-react-remove-prop-types": "^0.4.5", "babel-plugin-transform-runtime": "^6.23.0", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", - "chunk-manifest-webpack-plugin": "1.0.0", - "coveralls": "^2.13.0", - "css-loader": "^0.28.0", + "chunk-manifest-webpack-plugin": "^1.1.0", + "coveralls": "^2.13.1", + "css-loader": "^0.28.1", "dotenv": "4.0.0", "ecstatic": "2.1.0", "ejs": "^2.5.6", @@ -39,16 +39,16 @@ "extract-text-webpack-plugin": "^2.1.0", "file-loader": "^0.11.1", "front-matter": "^2.1.1", - "fs-extra": "^2.1.0", - "html-minifier": "^3.4.3", + "fs-extra": "^3.0.1", + "html-minifier": "^3.4.4", "html-truncate": "^1.2.2", "imports-loader": "^0.7.1", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "^2.0.0", - "jasmine": "^2.5.2", - "jasmine-core": "2.5.2", + "jasmine": "^2.6.0", + "jasmine-core": "^2.6.1", "karma": "^1.6.0", - "karma-chrome-launcher": "2.0.0", + "karma-chrome-launcher": "^2.1.1", "karma-cli": "1.0.1", "karma-coverage": "1.1.1", "karma-firefox-launcher": "^1.0.1", @@ -64,28 +64,28 @@ "marked": "^0.3.6", "minimist": "1.2.0", "node-sass": "^4.5.2", - "node-watch": "^0.5.1", + "node-watch": "^0.5.4", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", "phantomjs-prebuilt": "^2.1.14", "postcss-load-config": "^1.2.0", - "postcss-loader": "^1.3.3", - "postcss-smart-import": "^0.6.11", - "prop-types": "^15.5.8", + "postcss-loader": "^2.0.5", + "postcss-smart-import": "^0.7.0", + "prop-types": "^15.5.9", "protractor": "^5.1.1", "psi": "^3.0.0", "react": "^15.5.4", - "react-hot-loader": "^3.0.0-beta.6", - "redux-devtools": "^3.3.2", - "redux-devtools-dock-monitor": "1.1.1", - "redux-devtools-log-monitor": "1.2.0", - "s3-website": "^3.0.0", - "sass-loader": "^6.0.3", - "style-loader": "^0.16.1", + "react-hot-loader": "^1.3.1", + "redux-devtools": "^3.4.0", + "redux-devtools-dock-monitor": "^1.1.2", + "redux-devtools-log-monitor": "^1.3.0", + "s3-website": "^3.1.0", + "sass-loader": "^6.0.5", + "style-loader": "^0.17.0", "url-loader": "^0.5.8", - "webpack": "^2.3.3", - "webpack-bundle-analyzer": "^2.4.0", - "webpack-dev-middleware": "^1.10.1", + "webpack": "^2.5.1", + "webpack-bundle-analyzer": "^2.7.0", + "webpack-dev-middleware": "^1.10.2", "webpack-hot-middleware": "^2.18.0" } } diff --git a/client/yarn.lock b/client/yarn.lock index bf60194..0f293c5 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -14,15 +14,11 @@ version "2.53.42" resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz#74cb77fb6052edaff2a8984ddafd88d419f25cac" -abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" - abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -accepts@~1.3.3: +accepts@1.3.3, accepts@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: @@ -35,12 +31,6 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" -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" @@ -51,11 +41,11 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.3, acorn@^4.0.4: +acorn@^4.0.3: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" -acorn@^5.0.1, acorn@^5.0.3: +acorn@^5.0.0, acorn@^5.0.1, acorn@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" @@ -67,6 +57,10 @@ adm-zip@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + agent-base@2: version "2.0.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" @@ -85,6 +79,13 @@ ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.0.1.tgz#5fd1a8f5cc92b371aa86445b1152fd4dec844ac9" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -107,7 +108,7 @@ ansi-align@^1.1.0: dependencies: string-width "^1.0.1" -ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -123,12 +124,6 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" - dependencies: - color-convert "^1.0.0" - ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" @@ -160,12 +155,6 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - aproba@^1.0.3: version "1.1.1" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" @@ -213,10 +202,6 @@ array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - array-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" @@ -233,6 +218,10 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" +array-slice@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -317,11 +306,11 @@ async@1.x, async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^0.9.0: +async@^0.9.0, async@~0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.1.5: +async@^2.0.1, async@^2.1.2, async@^2.1.5: version "2.3.0" resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" dependencies: @@ -343,7 +332,7 @@ atomic-lint-loader@^1.0.1: dependencies: lodash "^4.17.4" -autoprefixer@^6.3.1, autoprefixer@^6.7.7: +autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" dependencies: @@ -354,6 +343,17 @@ autoprefixer@^6.3.1, autoprefixer@^6.7.7: postcss "^5.2.16" postcss-value-parser "^3.2.3" +autoprefixer@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.0.1.tgz#472d7620a1b286e55ad1d8345a09d76aaed99d92" + dependencies: + browserslist "^2.1.2" + caniuse-lite "^1.0.30000665" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.1" + postcss-value-parser "^3.2.3" + aws-sdk@^2.1.4, aws-sdk@^2.2.4, aws-sdk@^2.6.12: version "2.41.0" resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.41.0.tgz#930c15ae7ef4532bb8912c4c36a18b0023fd74c2" @@ -384,7 +384,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.0.0, babel-core@^6.24.1: +babel-core@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" dependencies: @@ -556,30 +556,13 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^19.0.0" - -babel-jest@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.0.tgz#05ae371102ee8e30c9d61ffdf3f61c738a87741f" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.0" - -babel-loader@^6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" +babel-loader@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.0.0.tgz#2e43a66bee1fff4470533d0402c8a4532fafbaf7" dependencies: find-cache-dir "^0.1.1" - loader-utils "^0.2.16" + loader-utils "^1.0.2" mkdirp "^0.5.1" - object-assign "^4.0.1" babel-messages@^6.23.0: version "6.23.0" @@ -593,26 +576,6 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" - dependencies: - find-up "^2.1.0" - istanbul-lib-instrument "^1.7.1" - test-exclude "^4.1.0" - -babel-plugin-jest-hoist@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" - -babel-plugin-jest-hoist@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.0.tgz#d2afe94fa6aea3b8bfa5d61d8028f633c898d86d" - -babel-plugin-rewire@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-rewire/-/babel-plugin-rewire-1.1.0.tgz#a6b966d9d8c06c03d95dcda2eec4e2521519549b" - 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" @@ -971,9 +934,11 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-react-remove-prop-types@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.3.3.tgz#d09f48b9a9503a69c1ced39b3825c2f45d29333c" +babel-plugin-transform-react-remove-prop-types@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.5.tgz#79d1958437ae23d4fbc0b11d1a041498ddb23877" + dependencies: + babel-traverse "^6.24.1" babel-plugin-transform-regenerator@^6.24.1: version "6.24.1" @@ -1029,18 +994,6 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-jest@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" - dependencies: - babel-plugin-jest-hoist "^19.0.0" - -babel-preset-jest@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.0.tgz#16b992c9351c2525e87a19fd36ba14e47df51bad" - dependencies: - babel-plugin-jest-hoist "^20.0.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" @@ -1106,7 +1059,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtim core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0, babel-template@^6.7.0: +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" dependencies: @@ -1159,10 +1112,18 @@ base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" +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.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" +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" @@ -1177,6 +1138,12 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + big.js@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" @@ -1191,6 +1158,10 @@ bl@^1.0.0, bl@~1.1.2: dependencies: readable-stream "~2.0.5" +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + block-stream@*, block-stream@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1203,13 +1174,28 @@ blocking-proxy@0.0.5: dependencies: minimist "^1.2.0" +bluebird@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" +body-parser@^1.16.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" + dependencies: + bytes "2.4.0" + content-type "~1.0.2" + debug "2.6.1" + depd "~1.1.0" + http-errors "~1.6.1" + iconv-lite "0.4.15" + on-finished "~2.3.0" + qs "6.4.0" + raw-body "~2.2.0" + type-is "~1.6.14" boom@2.x.x: version "2.10.1" @@ -1236,6 +1222,12 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" +braces@^0.1.2: + version "0.1.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" + dependencies: + expand-range "^0.1.0" + braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -1248,12 +1240,6 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" -browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" - dependencies: - resolve "1.1.7" - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" @@ -1312,17 +1298,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -bser@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" - dependencies: - node-int64 "^0.4.0" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" +browserslist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.2.tgz#a9dd0791342dab019861c2dd1cd0fd5d83230d39" dependencies: - node-int64 "^0.4.0" + caniuse-lite "^1.0.30000665" + electron-to-chromium "^1.3.9" buffer-equal-constant-time@1.0.1: version "1.0.1" @@ -1369,20 +1350,24 @@ builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" +bytes@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: callsites "^0.2.0" +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -1430,6 +1415,10 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000650" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000650.tgz#615f564d367533d32b82d72ada09661e75386bab" +caniuse-lite@^1.0.30000665: + version "1.0.30000666" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000666.tgz#831b63247e24fa408e20c6c546c4173d27c5a1a5" + 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" @@ -1487,32 +1476,11 @@ char-spinner@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - chmodr@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" -chokidar@^1.4.3: +chokidar@^1.4.1, chokidar@^1.4.3: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" dependencies: @@ -1531,16 +1499,12 @@ chownr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -chunk-manifest-webpack-plugin@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-1.0.0.tgz#84ef34ff676e7b147e9512f7f0289ef3589f33e2" +chunk-manifest-webpack-plugin@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-1.1.0.tgz#21e73e5d31ed09e15f610e41385a276224d39af2" dependencies: webpack-core "^0.6.9" -ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" - cipher-base@^1.0.0, cipher-base@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" @@ -1658,7 +1622,7 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -color-convert@^1.0.0, color-convert@^1.3.0: +color-convert@^1.3.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: @@ -1690,7 +1654,7 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@^1.1.2, colors@~1.1.2: +colors@^1.1.0, colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1701,6 +1665,12 @@ columnify@~1.5.4: strip-ansi "^3.0.0" wcwidth "^1.0.0" +combine-lists@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" + dependencies: + lodash "^4.5.0" + 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" @@ -1727,10 +1697,22 @@ complex.js@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.1.tgz#ea90c7a05aeceaf3a376d2c0f6a78421727d6879" -component-emitter@^1.2.0: +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" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1769,6 +1751,15 @@ configstore@^3.0.0: write-file-atomic "^1.1.2" xdg-basedir "^3.0.0" +connect@^3.6.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.1.tgz#b7760693a74f0454face1d9378edb3f885b43227" + dependencies: + debug "2.6.3" + finalhandler "1.0.1" + parseurl "~1.3.1" + utils-merge "1.0.0" + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1797,15 +1788,11 @@ 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.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" - content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0, convert-source-map@^1.4.0: +convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1825,7 +1812,7 @@ 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.4.0: +core-js@^2.2.0, core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -1844,9 +1831,9 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: parse-json "^2.2.0" require-from-string "^1.1.0" -coveralls@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.0.tgz#df933876e8c6f478efb04f4d3ab70dc96b7e5a8e" +coveralls@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178" dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" @@ -1930,9 +1917,9 @@ 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-loader@^0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.0.tgz#417cfa9789f8cde59a30ccbf3e4da7a806889bad" +css-loader@^0.28.1: + version "0.28.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.1.tgz#220325599f8f00452d9ceb4c3ca6c8a66798642d" dependencies: babel-code-frame "^6.11.0" css-selector-tokenizer "^0.7.0" @@ -1945,17 +1932,9 @@ css-loader@^0.28.0: postcss-modules-local-by-default "^1.0.1" postcss-modules-scope "^1.0.0" postcss-modules-values "^1.1.0" + postcss-value-parser "^3.3.0" source-list-map "^0.1.7" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - css-selector-tokenizer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" @@ -1972,10 +1951,6 @@ css-selector-tokenizer@^0.7.0: fastparse "^1.1.1" regexpu-core "^1.0.0" -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" @@ -2024,22 +1999,16 @@ csso@~2.3.1: 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" +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -2060,6 +2029,13 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" +dateformat@^1.0.6: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" @@ -2068,7 +2044,7 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.3, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: +debug@2, debug@2.6.3, debug@^2.1.1, debug@^2.2.0: version "2.6.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" dependencies: @@ -2080,6 +2056,12 @@ debug@2.2.0: 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.1: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" @@ -2170,12 +2152,6 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - dependencies: - strip-bom "^2.0.0" - defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -2234,9 +2210,9 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -diff@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" diffie-hellman@^5.0.0: version "5.0.2" @@ -2266,42 +2242,19 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -dom-walk@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@1, domelementtype@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" - dependencies: - domelementtype "1" - -domutils@1.5.1, 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@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-2.4.0.tgz#848e28f7f1d50740c6747ab3cb07670462b6f89c" @@ -2426,6 +2379,10 @@ electron-to-chromium@^1.2.7: version "1.3.3" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.3.tgz#651eb63fe89f39db70ffc8dbd5d9b66958bc6a0e" +electron-to-chromium@^1.3.9: + version "1.3.10" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08" + elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -2462,6 +2419,45 @@ end-of-stream@1.0.0, end-of-stream@^1.0.0: dependencies: once "~1.3.0" +engine.io-client@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "2.3.3" + engine.io-parser "1.3.2" + has-cors "1.1.0" + indexof "0.0.1" + parsejson "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + ws "1.1.2" + xmlhttprequest-ssl "1.5.3" + yeast "0.1.2" + +engine.io-parser@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" + dependencies: + after "0.8.2" + arraybuffer.slice "0.0.6" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary "0.1.7" + wtf-8 "1.0.0" + +engine.io@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" + 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.2" + enhanced-resolve@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" @@ -2471,26 +2467,11 @@ enhanced-resolve@^3.0.0: object-assign "^4.0.1" tapable "^0.2.5" -entities@^1.1.1, entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - -enzyme@^2.7.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.2.tgz#6c8bcb05012abc4aa4bc3213fb23780b9b5b1714" - dependencies: - cheerio "^0.22.0" - function.prototype.name "^1.0.0" - is-subset "^0.1.1" - lodash "^4.17.2" - object-is "^1.0.1" - object.assign "^4.0.4" - object.entries "^1.0.3" - object.values "^1.0.3" - prop-types "^15.5.4" - uuid "^2.0.3" - -"errno@>=0.1.1 <0.2.0-0", errno@^0.1.1, errno@^0.1.3: +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + +errno@^0.1.1, errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -2502,12 +2483,6 @@ error-ex@^1.2.0: 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" - error@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/error/-/error-4.4.0.tgz#bf69ff251fb4a279c19adccdaa6b61e90d9bf12a" @@ -2584,7 +2559,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^ version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.8.x, escodegen@^1.6.1: +escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: @@ -2774,6 +2749,10 @@ event-stream@3.3.4: stream-combiner "~0.0.4" through "~2.3.1" +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -2788,12 +2767,6 @@ evp_bytestokey@^1.0.0: dependencies: create-hash "^1.1.1" -exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" - dependencies: - merge "^1.1.3" - execa@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" @@ -2813,12 +2786,27 @@ exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" +expand-braces@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" + dependencies: + array-slice "^0.2.3" + array-unique "^0.2.1" + braces "^0.1.2" + 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@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" + dependencies: + is-number "^0.1.1" + repeat-string "^0.2.2" + expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" @@ -2911,18 +2899,6 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" -fb-watchman@^1.8.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" - dependencies: - bser "1.0.2" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" @@ -2981,13 +2957,6 @@ filenamify@^1.0.1: strip-outer "^1.0.0" trim-repeated "^1.0.0" -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - filesize@^3.5.6: version "3.5.6" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" @@ -3002,7 +2971,7 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@~1.0.0: +finalhandler@1.0.1, finalhandler@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" dependencies: @@ -3029,12 +2998,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" @@ -3112,12 +3075,19 @@ front-matter@^2.1.1: dependencies: js-yaml "^3.4.6" -fs-extra@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + dependencies: + null-check "^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 "^2.1.0" + jsonfile "^3.0.0" + universalify "^0.1.0" fs-extra@~1.0.0: version "1.0.0" @@ -3183,14 +3153,6 @@ function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" -function.prototype.name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - is-callable "^1.1.2" - gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" @@ -3327,13 +3289,6 @@ glob@~7.0.6: once "^1.3.0" path-is-absolute "^1.0.0" -global@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df" - dependencies: - min-document "^2.19.0" - process "~0.5.1" - globals@^9.0.0, globals@^9.14.0: version "9.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" @@ -3436,10 +3391,6 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - gtoken@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.2.tgz#172776a1a9d96ac09fc22a00f5be83cee6de8820" @@ -3507,7 +3458,7 @@ gzip-size@^3.0.0: dependencies: duplexer "^0.1.1" -handlebars@^4.0.1, handlebars@^4.0.3: +handlebars@^4.0.1: version "4.0.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" dependencies: @@ -3543,10 +3494,20 @@ has-ansi@^2.0.0: 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-color@~0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" +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" @@ -3628,19 +3589,13 @@ 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.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" - dependencies: - whatwg-encoding "^1.0.1" - html-entities@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" -html-minifier@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.3.tgz#eb3a7297c804611f470454eeebe0aacc427e424a" +html-minifier@^3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.4.tgz#616fe3e3ef16da02b393d9a6099eeff468a35df0" dependencies: camel-case "3.0.x" clean-css "4.0.x" @@ -3655,17 +3610,6 @@ html-truncate@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.2.tgz#db2e331dcf1cba0bd432a507d16e988609f2575f" -htmlparser2@^3.9.1: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^2.0.2" - http-errors@~1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" @@ -3675,6 +3619,13 @@ http-errors@~1.6.1: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" +http-proxy@^1.13.0: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -3702,9 +3653,9 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -iconv-lite@0.4.13, iconv-lite@~0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +iconv-lite@0.4.15, iconv-lite@~0.4.13: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" icss-replace-symbols@^1.0.2: version "1.0.2" @@ -3928,6 +3879,10 @@ is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" +is-number@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" + is-number@^2.0.2, is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -3998,10 +3953,6 @@ is-stream@^1.0.0, 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-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -4040,6 +3991,10 @@ 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" +isbinaryfile@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4065,22 +4020,6 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.1.0" - istanbul-lib-hook "^1.0.6" - istanbul-lib-instrument "^1.7.1" - istanbul-lib-report "^1.1.0" - istanbul-lib-source-maps "^1.2.0" - istanbul-reports "^1.1.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - istanbul-instrumenter-loader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz#e5492900ab0bba835efa8024cb00be9b3eea2700" @@ -4090,20 +4029,10 @@ istanbul-instrumenter-loader@^2.0.0: loader-utils "^0.2.16" object-assign "^4.1.0" -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.0.2: +istanbul-lib-coverage@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz#87a0c015b6910651cb3b184814dfb339337e25e1" -istanbul-lib-coverage@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" - -istanbul-lib-hook@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" - dependencies: - append-transform "^0.4.0" - istanbul-lib-instrument@^1.1.3: version "1.7.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.0.tgz#b8e0dc25709bb44e17336ab47b7bb5c97c23f659" @@ -4116,44 +4045,7 @@ istanbul-lib-instrument@^1.1.3: istanbul-lib-coverage "^1.0.2" semver "^5.3.0" -istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.1.0" - semver "^5.3.0" - -istanbul-lib-report@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" - dependencies: - istanbul-lib-coverage "^1.1.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" - dependencies: - debug "^2.6.3" - istanbul-lib-coverage "^1.1.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" - dependencies: - handlebars "^4.0.3" - -istanbul@0.4.5: +istanbul@0.4.5, istanbul@^0.4.0: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" dependencies: @@ -4172,239 +4064,29 @@ istanbul@0.4.5: which "^1.1.1" wordwrap "^1.0.0" -jasmine-ajax@^3.3.1: +jasmine-ajax@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz#f8cad9fd49dfd44f3cf798d36f4e857d125c75c5" -jasmine-core@2.5.2, jasmine-core@~2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" +jasmine-core@^2.6.1, jasmine-core@~2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.6.1.tgz#66a61cddb699958e3613edef346c996f6311fc3b" -jasmine@^2.5.2, jasmine@^2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.3.tgz#5441f254e1fc2269deb1dfd93e0e57d565ff4d22" +jasmine@^2.5.3, jasmine@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.6.0.tgz#6b22e70883e8e589d456346153b4d206ddbe217f" dependencies: exit "^0.1.2" glob "^7.0.6" - jasmine-core "~2.5.2" + jasmine-core "~2.6.0" jasminewd2@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.0.0.tgz#10aacd2c588c1ceb6a0b849f1a7f3f959f777c91" -jest-changed-files@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.0.tgz#2ad82870a815b40ce3f4bf4555581d387b21022c" - -jest-cli@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.0.tgz#72664e0723bd099a0bade5bd4bf960fd54876069" - dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - istanbul-api "^1.1.1" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.0" - jest-config "^20.0.0" - jest-docblock "^20.0.0" - jest-environment-jsdom "^20.0.0" - jest-haste-map "^20.0.0" - jest-jasmine2 "^20.0.0" - jest-message-util "^20.0.0" - jest-regex-util "^20.0.0" - jest-resolve-dependencies "^20.0.0" - jest-runtime "^20.0.0" - jest-snapshot "^20.0.0" - jest-util "^20.0.0" - micromatch "^2.3.11" - node-notifier "^5.0.2" - pify "^2.3.0" - slash "^1.0.0" - string-length "^1.0.1" - throat "^3.0.0" - which "^1.2.12" - worker-farm "^1.3.1" - yargs "^7.0.2" - -jest-config@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.0.tgz#295fe937a377f79a8eea240ad29546bf43acbbec" - dependencies: - chalk "^1.1.3" - glob "^7.1.1" - jest-environment-jsdom "^20.0.0" - jest-environment-node "^20.0.0" - jest-jasmine2 "^20.0.0" - jest-regex-util "^20.0.0" - jest-resolve "^20.0.0" - jest-validate "^20.0.0" - pretty-format "^20.0.0" - -jest-diff@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.0.tgz#d6e9190b57e0333c6706ef28d62b1cb23042d7eb" - dependencies: - chalk "^1.1.3" - diff "^3.2.0" - jest-matcher-utils "^20.0.0" - pretty-format "^20.0.0" - -jest-docblock@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.0.tgz#5b647c4af36f52dae74df1949a8cb418d146ad3a" - -jest-environment-jsdom@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.0.tgz#a688499d817e33cdea6400c502d8d5f4aa01c808" - dependencies: - jest-mock "^20.0.0" - jest-util "^20.0.0" - jsdom "^9.12.0" - -jest-environment-node@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.0.tgz#7016d8d1270cbc1ed71a10f242c78324297e1db8" - dependencies: - jest-mock "^20.0.0" - jest-util "^20.0.0" - -jest-haste-map@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.0.tgz#3b8d9255dfe2a6a96e516fe71dafd415e1b5d65f" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^20.0.0" - micromatch "^2.3.11" - sane "~1.6.0" - worker-farm "^1.3.1" - -jest-jasmine2@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.0.tgz#2a0aba92ed36ec132901cfc2a552fd7cee6fde3d" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-diff "^20.0.0" - jest-matcher-utils "^20.0.0" - jest-matchers "^20.0.0" - jest-message-util "^20.0.0" - jest-snapshot "^20.0.0" - once "^1.4.0" - p-map "^1.1.1" - -jest-matcher-utils@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.0.tgz#2c5d9dd11670c5418ffc78baecf9094db9e91e09" - dependencies: - chalk "^1.1.3" - pretty-format "^20.0.0" - -jest-matchers@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.0.tgz#55498637bbb58f164d97c73610fb8d016dfac770" - dependencies: - jest-diff "^20.0.0" - jest-matcher-utils "^20.0.0" - jest-message-util "^20.0.0" - jest-regex-util "^20.0.0" - -jest-message-util@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.0.tgz#060bac1980bd5e11134e8e1c19c94863d937c727" - dependencies: - chalk "^1.1.3" - micromatch "^2.3.11" - slash "^1.0.0" - -jest-mock@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.0.tgz#3c54b94fe502ed57f2e602fab22ab196a7aa4b95" - -jest-regex-util@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.0.tgz#7f6051e9d00fdcccca52bade50aabdd9919bcfd2" - -jest-resolve-dependencies@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.0.tgz#616c6976c52e49d13e6420b1bcc8f380e701408f" - dependencies: - jest-regex-util "^20.0.0" - -jest-resolve@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.0.tgz#f9bfdfa31109aee2decfc3a07c2c354608cc5e1d" - dependencies: - browser-resolve "^1.11.2" - is-builtin-module "^1.0.0" - resolve "^1.3.2" - -jest-runtime@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.0.tgz#4c78c08573ffaeba9b8ceb096f705b75d5fb54a1" - dependencies: - babel-core "^6.0.0" - babel-jest "^20.0.0" - babel-plugin-istanbul "^4.0.0" - chalk "^1.1.3" - convert-source-map "^1.4.0" - graceful-fs "^4.1.11" - jest-config "^20.0.0" - jest-haste-map "^20.0.0" - jest-regex-util "^20.0.0" - jest-resolve "^20.0.0" - jest-util "^20.0.0" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - strip-bom "3.0.0" - yargs "^7.0.2" - -jest-snapshot@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.0.tgz#fbe51d94ed1c6cd23808bb7ef82e58ca12a0ccf7" - dependencies: - chalk "^1.1.3" - jest-diff "^20.0.0" - jest-matcher-utils "^20.0.0" - jest-util "^20.0.0" - natural-compare "^1.4.0" - pretty-format "^20.0.0" - -jest-util@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.0.tgz#5421322f196e884e962bc8b8bac4b009733caed9" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-message-util "^20.0.0" - jest-mock "^20.0.0" - jest-validate "^20.0.0" - leven "^2.1.0" - mkdirp "^0.5.1" - -jest-validate@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.0.tgz#c0832e8210190b6d5b39a46b8df536083131a7d7" - dependencies: - chalk "^1.1.3" - jest-matcher-utils "^20.0.0" - leven "^2.1.0" - pretty-format "^20.0.0" - -jest@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.0.tgz#58cf6abf328f2a2e3c4203890131cbe89d3b0769" - dependencies: - jest-cli "^20.0.0" - -jju@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" +jju@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" jmespath@0.15.0: version "0.15.0" @@ -4431,7 +4113,7 @@ js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@^3.7.0, js-yaml@~3.7.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: @@ -4442,30 +4124,6 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdom@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" - dependencies: - abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" - whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" - xml-name-validator "^2.0.1" - jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -4506,7 +4164,11 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json5@^0.5.0: +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" @@ -4516,6 +4178,12 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + 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" @@ -4556,6 +4224,104 @@ jws@^3.0.0, jws@^3.1.4: jwa "^1.1.4" safe-buffer "^5.0.1" +karma-chrome-launcher@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz#216879c68ac04d8d5140e99619ba04b59afd46cf" + dependencies: + fs-access "^1.0.0" + which "^1.2.1" + +karma-cli@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960" + dependencies: + resolve "^1.1.6" + +karma-coverage@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6" + dependencies: + dateformat "^1.0.6" + istanbul "^0.4.0" + lodash "^3.8.0" + minimatch "^3.0.0" + source-map "^0.5.1" + +karma-firefox-launcher@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz#ce58f47c2013a88156d55a5d61337c099cf5bb51" + +karma-jasmine-ajax@0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz#78bb92d896fe32a25a180098c47722e1d9605bfc" + dependencies: + jasmine-ajax "^3.0.0" + +karma-jasmine@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" + +karma-phantomjs-launcher@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2" + dependencies: + lodash "^4.0.1" + phantomjs-prebuilt "^2.1.7" + +karma-sourcemap-loader@0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" + dependencies: + graceful-fs "^4.1.2" + +karma-spec-reporter@^0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz#4830dc7148a155c7d7a186e632339a0d80fadec3" + dependencies: + colors "^1.1.2" + +karma-webpack@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.3.tgz#39cebf5ca2580139b27f9ae69b78816b9c82fae6" + dependencies: + async "~0.9.0" + loader-utils "^0.2.5" + lodash "^3.8.0" + source-map "^0.1.41" + webpack-dev-middleware "^1.0.11" + +karma@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-1.7.0.tgz#6f7a1a406446fa2e187ec95398698f4cee476269" + dependencies: + bluebird "^3.3.0" + body-parser "^1.16.1" + chokidar "^1.4.1" + colors "^1.1.0" + combine-lists "^1.0.0" + connect "^3.6.0" + core-js "^2.2.0" + di "^0.0.1" + dom-serialize "^2.2.0" + expand-braces "^0.1.1" + glob "^7.1.1" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^3.8.0" + log4js "^0.6.31" + mime "^1.3.4" + minimatch "^3.0.2" + optimist "^0.6.1" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.6.0" + safe-buffer "^5.0.1" + socket.io "1.7.3" + source-map "^0.5.3" + tmp "0.0.31" + useragent "^2.1.12" + kew@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" @@ -4633,10 +4399,6 @@ less@2.7.2: request "^2.72.0" source-map "^0.5.3" -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -4658,7 +4420,7 @@ 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.16: +loader-utils@^0.2.16, loader-utils@^0.2.5: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" dependencies: @@ -4667,7 +4429,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.x: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -4675,13 +4437,6 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: 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" - lockfile@~1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" @@ -4794,14 +4549,6 @@ 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.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -4828,10 +4575,6 @@ lodash.debounce@^4.0.4: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - lodash.difference@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-3.2.2.tgz#dc463fffe6619ab4af49a3c87ace6695a285dde6" @@ -4846,22 +4589,10 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - lodash.intersection@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-3.2.0.tgz#e5b3611298a1187247b99eeadb385a3da018c570" @@ -4910,10 +4641,6 @@ lodash.keysin@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4934,10 +4661,6 @@ lodash.merge@^3.3.2: lodash.keysin "^3.0.0" lodash.toplainobject "^3.0.0" -lodash.merge@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" - lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" @@ -4958,26 +4681,10 @@ lodash.padstart@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" @@ -5014,7 +4721,11 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^3.8.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -5037,11 +4748,18 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" +log4js@^0.6.31: + version "0.6.38" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" + dependencies: + readable-stream "~1.0.2" + semver "~4.3.3" + 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.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -5062,6 +4780,10 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" +lru-cache@2.2.x: + version "2.2.4" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -5073,12 +4795,6 @@ macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - 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" @@ -5117,7 +4833,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.5.0, meow@^3.7.0: +meow@^3.3.0, meow@^3.5.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -5148,15 +4864,11 @@ merge-stream@^1.0.0: dependencies: readable-stream "^2.0.1" -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - 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, micromatch@^2.3.11, micromatch@^2.3.7: +micromatch@^2.1.5, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -5195,12 +4907,6 @@ mime@1.3.4, mime@1.3.x, mime@^1.2.11, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -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" @@ -5223,7 +4929,7 @@ minimist@1.1.x: version "1.1.3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -5327,10 +5033,6 @@ node-gyp@^3.3.1, node-gyp@~3.6.0: tar "^2.0.0" which "1" -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - node-libs-browser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" @@ -5359,15 +5061,6 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-notifier@^5.0.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" - dependencies: - growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" - node-pre-gyp@^0.6.29: version "0.6.34" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" @@ -5413,9 +5106,9 @@ node-uuid@~1.4.7: version "1.4.8" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" -node-watch@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.2.tgz#948d72ec5fe74b488332cd1087fa180e9c24825b" +node-watch@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.4.tgz#bdad41b23d23444e895c797d73ad5d49e3833309" "nopt@2 || 3", nopt@3.x, nopt@~3.0.6: version "3.0.6" @@ -5623,11 +5316,9 @@ npm@^2.15.10: are-we-there-yet "~1.1.2" gauge "~1.2.5" -nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - dependencies: - boolbase "~1.0.0" +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" null-loader@0.1.1: version "0.1.1" @@ -5641,14 +5332,14 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" - oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +object-assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" + object-assign@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" @@ -5661,9 +5352,9 @@ object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@ version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" +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@~0.4.0: version "0.4.0" @@ -5676,22 +5367,13 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.values@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" -once@1.x, once@^1.3.0, once@^1.3.3, once@^1.4.0, once@~1.4.0: +once@1.x, once@^1.3.0, 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: @@ -5765,20 +5447,6 @@ osenv@0, osenv@^0.1.4, osenv@~0.1.3: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" - package-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.0.tgz#f3c9dc8738f5b59304d54d2cfb3f91d08fdd7998" @@ -5827,9 +5495,23 @@ parse-key@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/parse-key/-/parse-key-0.2.1.tgz#7bcf76595536e36075664be4d687e4bdd910208f" -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.1: version "1.3.1" @@ -5849,10 +5531,6 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -5901,7 +5579,7 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -phantomjs-prebuilt@^2.1.14: +phantomjs-prebuilt@^2.1.14, phantomjs-prebuilt@^2.1.7: version "2.1.14" resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" dependencies: @@ -6006,7 +5684,7 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" -postcss-load-config@^1.2.0: +postcss-load-config@^1.2.0, postcss-load-config@^1.x: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" dependencies: @@ -6029,14 +5707,14 @@ postcss-load-plugins@^2.3.0: cosmiconfig "^2.1.1" object-assign "^4.1.0" -postcss-loader@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-1.3.3.tgz#a621ea1fa29062a83972a46f54486771301916eb" +postcss-loader@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.5.tgz#c19d3e8b83eb1ac316f5621ef4c0ef5b3d1b8b3a" dependencies: - loader-utils "^1.0.2" - object-assign "^4.1.1" - postcss "^5.2.15" - postcss-load-config "^1.2.0" + loader-utils "^1.x" + postcss "^6.x" + postcss-load-config "^1.x" + schema-utils "^0.x" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -6177,11 +5855,11 @@ postcss-sass@^0.1.0: mathjs "^3.11.5" postcss "^5.2.6" -postcss-scss@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.4.1.tgz#ad771b81f0f72f5f4845d08aa60f93557653d54c" +postcss-scss@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.0.tgz#4957013097973dfd5bd9b1ad8a6dc13456a5d1ba" dependencies: - postcss "^5.2.13" + postcss "^6.0.1" postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.3" @@ -6191,21 +5869,21 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-smart-import@^0.6.11: - version "0.6.11" - resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.6.11.tgz#d9982611d063985e91c0a2e2462ed5c068d8bb8e" +postcss-smart-import@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.7.0.tgz#563801a3a104c893ebcff0d6c4e64e16c1960d30" dependencies: babel-runtime "^6.23.0" lodash "^4.17.4" object-assign "^4.1.1" - postcss "^5.2.16" + postcss "^6.0.1" postcss-sass "^0.1.0" - postcss-scss "^0.4.1" + postcss-scss "^1.0.0" postcss-value-parser "^3.3.0" promise-each "^2.2.0" read-cache "^1.0.0" - resolve "^1.3.2" - sugarss "^0.2.0" + resolve "^1.3.3" + sugarss "^1.0.0" postcss-svgo@^2.1.1: version "2.1.6" @@ -6236,7 +5914,7 @@ postcss-zindex@^2.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.13, postcss@^5.2.15, postcss@^5.2.16, postcss@^5.2.4, postcss@^5.2.6: +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, postcss@^5.2.6: version "5.2.16" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" dependencies: @@ -6245,6 +5923,14 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.x: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" + dependencies: + chalk "^1.1.3" + source-map "^0.5.6" + supports-color "^3.2.3" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -6261,12 +5947,6 @@ pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" -pretty-format@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.0.tgz#bd100f330e707e4f49fef3f234d6e915242a6e7e" - dependencies: - ansi-styles "^3.0.0" - private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -6279,10 +5959,6 @@ process@^0.11.0: version "0.11.9" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" - progress@^1.1.8, progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" @@ -6305,11 +5981,12 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.5.4, prop-types@^15.5.8: - version "15.5.8" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.8.tgz#6b7b2e141083be38c8595aa51fc55775c7199394" +prop-types@^15.0.0, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9: + version "15.5.9" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" dependencies: fbjs "^0.8.9" + loose-envify "^1.3.1" proto-list@~1.2.1: version "1.2.4" @@ -6392,6 +6069,10 @@ q@1.4.1, q@^1.1.2, q@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" +qjobs@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" + qs@6.4.0, qs@^6.1.0, qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -6430,10 +6111,18 @@ randombytes@^2.0.0, randombytes@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" -range-parser@^1.0.3, range-parser@~1.2.0: +range-parser@^1.0.3, range-parser@^1.2.0, 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.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" + dependencies: + bytes "2.4.0" + iconv-lite "0.4.15" + unpipe "1.0.0" + rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" @@ -6452,45 +6141,45 @@ react-base16-styling@^0.5.1: lodash.flow "^3.3.0" pure-color "^1.2.0" -react-deep-force-update@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" - -react-dock@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/react-dock/-/react-dock-0.2.3.tgz#a25461564f3cf64ab5b7098e7546036066a9c0e2" +react-dock@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/react-dock/-/react-dock-0.2.4.tgz#e727dc7550b3b73116635dcb9c0e04d0b7afe17c" dependencies: lodash.debounce "^3.1.1" - object-assign "^4.0.1" + prop-types "^15.5.8" -react-hot-loader@^3.0.0-beta.6: - version "3.0.0-beta.6" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.6.tgz#463fac0bfc8b63a8385258af20c91636abce75f4" +react-hot-api@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/react-hot-api/-/react-hot-api-0.4.7.tgz#a7e22a56d252e11abd9366b61264cf4492c58171" + +react-hot-loader@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-1.3.1.tgz#c95647ae78b73dfceff6ec71ffcb04182ff6daf9" dependencies: - babel-template "^6.7.0" - global "^4.3.0" - react-deep-force-update "^2.0.1" - react-proxy "^3.0.0-alpha.0" - redbox-react "^1.2.5" + react-hot-api "^0.4.5" source-map "^0.4.4" -react-json-tree@^0.10.0: - version "0.10.7" - resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.7.tgz#1f6cd1b1b7dc01f9745b7a30ffabe2c880d04d4c" +react-json-tree@^0.10.8: + version "0.10.9" + resolved "https://registry.yarnpkg.com/react-json-tree/-/react-json-tree-0.10.9.tgz#7263173a2cc8bf05eac63b0419c3ce75b232e284" dependencies: babel-runtime "^6.6.1" + prop-types "^15.5.8" react-base16-styling "^0.5.1" -react-proxy@^3.0.0-alpha.0: - version "3.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" - dependencies: - lodash "^4.6.1" - react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" +react@^15.5.4: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.7" + read-all-stream@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" @@ -6560,7 +6249,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.0.0" util-deprecate "~1.0.1" -"readable-stream@>=1.0.33-1 <1.1.0-0": +"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.2: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -6640,14 +6329,6 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redbox-react@^1.2.5: - version "1.3.6" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.6.tgz#70314c57c066257eb70b0a24dc794b5cef4f1c4e" - dependencies: - error-stack-parser "^1.3.6" - object-assign "^4.0.1" - prop-types "^15.5.4" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -6675,13 +6356,14 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -redux-devtools-dock-monitor@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/redux-devtools-dock-monitor/-/redux-devtools-dock-monitor-1.1.1.tgz#6ef4ff5a7c42f5d7fa39c34859a8f4eb4dee9947" +redux-devtools-dock-monitor@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/redux-devtools-dock-monitor/-/redux-devtools-dock-monitor-1.1.2.tgz#eb213a021f8c25b892f6c98bdb87368615e3d201" dependencies: babel-runtime "^6.2.0" parse-key "^0.2.1" - react-dock "^0.2.1" + prop-types "^15.5.8" + react-dock "^0.2.4" react-pure-render "^1.0.2" redux-devtools-instrument@^1.0.1: @@ -6691,12 +6373,13 @@ redux-devtools-instrument@^1.0.1: lodash "^4.2.0" symbol-observable "^1.0.2" -redux-devtools-log-monitor@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.2.0.tgz#136a202f999c659a13fbb5c50793106e80722311" +redux-devtools-log-monitor@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/redux-devtools-log-monitor/-/redux-devtools-log-monitor-1.3.0.tgz#2de0ca1d708da208bca649ec74103023036cce39" dependencies: lodash.debounce "^4.0.4" - react-json-tree "^0.10.0" + prop-types "^15.0.0" + react-json-tree "^0.10.8" react-pure-render "^1.0.2" redux-devtools-themes "^1.0.0" @@ -6706,11 +6389,12 @@ redux-devtools-themes@^1.0.0: dependencies: base16 "^1.0.0" -redux-devtools@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.3.2.tgz#f427f71964e2b3785b68834b6e4fe99d8da75b5e" +redux-devtools@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/redux-devtools/-/redux-devtools-3.4.0.tgz#9bf8415154301f56906f26a36f5bc1f5ca913bb5" dependencies: lodash "^4.2.0" + prop-types "^15.5.7" redux-devtools-instrument "^1.0.1" regenerate@^1.2.1: @@ -6786,6 +6470,10 @@ 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@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" + repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -6903,17 +6591,21 @@ require-uncached@^1.0.2: caller-path "^0.1.0" resolve-from "^1.0.0" +requires-port@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.7, resolve@1.1.x: +resolve@1.1.x, resolve@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" +resolve@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: path-parse "^1.0.5" @@ -6934,7 +6626,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -6984,9 +6676,9 @@ s3-diff@^1.1.0: lodash.intersection "^3.2.0" run-auto "^1.1.3" -s3-website@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-3.0.1.tgz#bbd3dd66ffcfdb83f0967183d1a9a142c7a05bf0" +s3-website@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/s3-website/-/s3-website-3.1.0.tgz#881502a1bcf19999561d0abf0672aba04643fd61" dependencies: aws-sdk "^2.6.12" cloudfront-tls "^1.0.0" @@ -7012,18 +6704,6 @@ safe-json-parse@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-2.0.0.tgz#6da43f2e4a864335773b1d2df0db2c1962a0beec" -sane@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - sass-graph@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" @@ -7032,9 +6712,9 @@ sass-graph@^2.1.1: lodash "^4.0.0" yargs "^4.7.1" -sass-loader@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.3.tgz#33983b1f90d27ddab0e57d0dac403dce9bc7ecfd" +sass-loader@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.5.tgz#a847910f36442aa56c5985879d54eb519e24a328" dependencies: async "^2.1.5" clone-deep "^0.2.4" @@ -7052,10 +6732,16 @@ sax@0.6.x: version "0.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" -sax@1.2.1, sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: +sax@1.2.1, sax@>=0.6.0, sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" +schema-utils@^0.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + dependencies: + ajv "^5.0.0" + seed-random@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" @@ -7095,7 +6781,7 @@ semver-diff@^2.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^4.0.3: +semver@^4.0.3, semver@~4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" @@ -7180,10 +6866,6 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" - signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -7206,6 +6888,50 @@ sntp@1.x.x: dependencies: hoek "2.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.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "2.3.3" + engine.io-client "1.8.3" + 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.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" + dependencies: + debug "2.3.3" + engine.io "1.8.3" + has-binary "0.1.7" + object-assign "4.1.0" + socket.io-adapter "0.5.0" + socket.io-client "1.7.3" + 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" @@ -7241,10 +6967,16 @@ source-map-support@^0.4.2, source-map-support@~0.4.0: dependencies: source-map "^0.5.6" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@^0.1.41: + 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.4, source-map@~0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -7300,10 +7032,6 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -stackframe@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" - stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" @@ -7356,12 +7084,6 @@ 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-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" - dependencies: - strip-ansi "^3.0.0" - string-template@^0.2.0, string-template@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -7416,16 +7138,16 @@ strip-bom-stream@^1.0.0: first-chunk-stream "^1.0.0" strip-bom "^2.0.0" -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-dirs@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0" @@ -7461,17 +7183,17 @@ strip-url-auth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" -style-loader@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.16.1.tgz#50e325258d4e78421dd9680636b41e8661595d10" +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" -sugarss@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-0.2.0.tgz#ac34237563327c6ff897b64742bf6aec190ad39e" +sugarss@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.0.tgz#65e51b3958432fb70d5451a68bb33e32d0cf1ef7" dependencies: - postcss "^5.2.4" + postcss "^6.0.0" sum-up@^1.0.1: version "1.0.3" @@ -7498,7 +7220,7 @@ 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.1.2, supports-color@^3.2.3: +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: @@ -7520,10 +7242,6 @@ symbol-observable@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" -symbol-tree@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -7575,24 +7293,10 @@ term-size@^0.1.0: dependencies: execa "^0.4.0" -test-exclude@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -throat@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" - throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -7654,9 +7358,11 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" +tmp@0.0.31, tmp@0.0.x: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" to-absolute-glob@^0.1.1: version "0.1.1" @@ -7664,6 +7370,10 @@ to-absolute-glob@^0.1.1: dependencies: extend-shallow "^2.0.1" +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" @@ -7672,16 +7382,12 @@ to-fast-properties@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -tough-cookie@^2.3.2, tough-cookie@~2.3.0: +tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -7795,7 +7501,11 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -unpipe@~1.0.0: +universalify@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" + +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7861,6 +7571,13 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" +useragent@^2.1.12: + version "2.1.13" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" + dependencies: + lru-cache "2.2.x" + tmp "0.0.x" + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7883,7 +7600,7 @@ uuid@3.0.1, uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" -uuid@^2.0.1, uuid@^2.0.3: +uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" @@ -7982,11 +7699,9 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" ware@^1.2.0: version "1.3.0" @@ -7994,10 +7709,6 @@ ware@^1.2.0: dependencies: wrap-fn "^0.1.0" -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" - watchpack@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" @@ -8035,17 +7746,9 @@ webdriver-manager@^12.0.1: semver "^5.3.0" xml2js "^0.4.17" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - -webidl-conversions@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" - -webpack-bundle-analyzer@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.4.0.tgz#e406b016e7452bc864793848c79308782accba8e" +webpack-bundle-analyzer@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.7.0.tgz#9a8320a9e33917ade47aa1369013bbf4d4a9f5af" dependencies: acorn "^5.0.3" chalk "^1.1.3" @@ -8065,9 +7768,9 @@ webpack-core@^0.6.9: source-list-map "~0.1.7" source-map "~0.4.1" -webpack-dev-middleware@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" +webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz#2e252ce1dfb020dbda1ccb37df26f30ab014dbd1" dependencies: memory-fs "~0.4.1" mime "^1.3.4" @@ -8097,11 +7800,11 @@ webpack-sources@^0.2.3: source-list-map "^1.1.1" source-map "~0.5.3" -webpack@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.3.tgz#eecc083c18fb7bf958ea4f40b57a6640c5a0cc78" +webpack@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.5.1.tgz#61742f0cf8af555b87460a9cd8bba2f1e3ee2fce" dependencies: - acorn "^4.0.4" + acorn "^5.0.0" acorn-dynamic-import "^2.0.0" ajv "^4.7.0" ajv-keywords "^1.1.1" @@ -8109,6 +7812,7 @@ webpack@^2.3.3: enhanced-resolve "^3.0.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" @@ -8122,23 +7826,10 @@ webpack@^2.3.3: webpack-sources "^0.2.3" yargs "^6.0.0" -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" - dependencies: - iconv-lite "0.4.13" - whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" -whatwg-url@^4.3.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de" - 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" @@ -8147,7 +7838,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@1, which@^1.1.1, which@^1.2.12, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: @@ -8185,13 +7876,6 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -worker-farm@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" - dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -8223,13 +7907,17 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^1.0.1: +ws@1.1.2, ws@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" dependencies: options ">=0.0.5" ultron "1.0.x" +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" @@ -8238,10 +7926,6 @@ 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" - xml2js@0.4.17, xml2js@^0.4.17: version "0.4.17" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" @@ -8262,6 +7946,10 @@ xmlbuilder@4.2.1, xmlbuilder@>=1.0.0, xmlbuilder@^4.1.0: dependencies: lodash "^4.0.0" +xmlhttprequest-ssl@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" + "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -8293,12 +7981,6 @@ yargs-parser@^4.2.0: dependencies: camelcase "^3.0.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" @@ -8336,24 +8018,6 @@ yargs@^6.0.0: y18n "^3.2.1" yargs-parser "^4.2.0" -yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" @@ -8368,3 +8032,7 @@ yauzl@2.4.1, yauzl@^2.2.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" From 85eac8adf28a6450e3828e60f8e861b2559991ba Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 11:02:17 -0600 Subject: [PATCH 384/452] Add babel plugin rewire --- client/package.json | 1 + client/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/client/package.json b/client/package.json index 5e52736..98e9aad 100644 --- a/client/package.json +++ b/client/package.json @@ -12,6 +12,7 @@ "babel-core": "^6.24.1", "babel-eslint": "^7.2.3", "babel-loader": "^7.0.0", + "babel-plugin-rewire": "^1.1.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-plugin-transform-react-constant-elements": "^6.23.0", diff --git a/client/yarn.lock b/client/yarn.lock index 0f293c5..6b68bde 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -576,6 +576,10 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-rewire@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-rewire/-/babel-plugin-rewire-1.1.0.tgz#a6b966d9d8c06c03d95dcda2eec4e2521519549b" + 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" @@ -2375,11 +2379,7 @@ ejs@^2.5.6: version "2.5.6" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" -electron-to-chromium@^1.2.7: - version "1.3.3" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.3.tgz#651eb63fe89f39db70ffc8dbd5d9b66958bc6a0e" - -electron-to-chromium@^1.3.9: +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.9: version "1.3.10" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08" From aad1ed09023445352078cdc084d9af4f00ba15a0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 15:17:22 -0600 Subject: [PATCH 385/452] Removes Karma --- .travis.yml | 5 +-- client/ci.karma.conf.js | 15 ------- client/config/karma.js | 95 ----------------------------------------- client/karma.conf.js | 5 --- 4 files changed, 2 insertions(+), 118 deletions(-) delete mode 100644 client/ci.karma.conf.js delete mode 100644 client/config/karma.js delete mode 100644 client/karma.conf.js diff --git a/.travis.yml b/.travis.yml index 5a8d13c..cb268b6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,9 +15,8 @@ branches: before_install: - cp .env.example .env - - cp client/ci.karma.conf.js client/karma.conf.js - - nvm install 6.9.1 - - nvm use 6.9.1 + - nvm install 7.5.0 + - nvm use 7.5.0 - npm install -g yarn install: diff --git a/client/ci.karma.conf.js b/client/ci.karma.conf.js deleted file mode 100644 index 359b09f..0000000 --- a/client/ci.karma.conf.js +++ /dev/null @@ -1,15 +0,0 @@ -const karmaConfig = require('./config/karma'); - -module.exports = (config) => { - const testConfig = karmaConfig(); - testConfig.singleRun = true; - testConfig.autoWatch = false; - testConfig.customLaunchers = { - Chrome_travis_ci: { - base: 'Chrome', - flags: ['--no-sandbox'], - }, - }; - testConfig.browsers = ['Chrome_travis_ci']; - config.set(testConfig); -}; diff --git a/client/config/karma.js b/client/config/karma.js deleted file mode 100644 index 1102f1b..0000000 --- a/client/config/karma.js +++ /dev/null @@ -1,95 +0,0 @@ -const _ = require('lodash'); - -const settings = require('./settings'); -const webpackConfigBuilder = require('./webpack.config'); - -module.exports = () => { - let plugins = []; - let module = {}; - let resolve = {}; - - const options = { - port: settings.hotPort, - stage: 'test' - }; - _.each(settings.apps(options), (app) => { - const webpackConfig = webpackConfigBuilder(app); - plugins = _.union(plugins, webpackConfig.plugins); - module = _.merge(module, webpackConfig.module); - resolve = _.merge(resolve, webpackConfig.resolve); - }); - - return { - - // If browser does not capture in given timeout [ms], kill it - captureTimeout: 60000, - - // How long will Karma wait for a message from a browser before disconnecting from it (in ms) - browserNoActivityTimeout: 60000, - - // enable / disable colors in the output (reporters and logs) - colors: true, - - // web server port - port: 9876, - - files: [ - // Use webpack to build each test individually. If changed here, change in preprocessors - // './js/**/*.spec.js' - './webpack.tests.js', // More performant but tests cannot be run individually - ], - - // Transpile tests with the karma-webpack plugin - preprocessors: { - // Use webpack to build each test individually. If changed here, match the change in files - // './js/**/*.spec.js': ['webpack', 'sourcemap'] - './webpack.tests.js': ['webpack', 'sourcemap', 'coverage'], // More performant but tests cannot be run individually - // './js/**/*.js*': 'coverage', - }, - - // Run the tests using any of the following browsers - // - Chrome npm install --save-dev karma-chrome-launcher - // - ChromeCanary - // - Firefox npm install --save-dev karma-firefox-launcher - // - Opera npm install --save-dev karma-opera-launcher - // - Safari npm install --save-dev karma-safari-launcher (only Mac) - // - PhantomJS npm install --save-dev karma-phantomjs-launcher - // - IE npm install karma-ie-launcher (only Windows) - browsers: ['Chrome'], - - // Exit the test runner as well when the test suite returns. - singleRun: false, - - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - - // Use jasmine as the test framework - frameworks: ['jasmine-ajax', 'jasmine'], - - // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage', 'spec' - reporters: ['dots', 'coverage'], - - // karma-webpack configuration. Load and transpile js and jsx files. - // Use istanbul-transformer post loader to generate code coverage report. - webpack: { - devtool : 'eval', - plugins, - module, - resolve, - }, - - // Reduce the noise to the console - webpackMiddleware: { - noInfo : true, - stats : { - colors: true, - }, - }, - - coverageReporter: { - type : 'lcovonly', - dir : '../coverage/', - file : 'coverage.info', - }, - }; -}; diff --git a/client/karma.conf.js b/client/karma.conf.js deleted file mode 100644 index d37b876..0000000 --- a/client/karma.conf.js +++ /dev/null @@ -1,5 +0,0 @@ -const karmaConf = require('./config/karma'); - -module.exports = function karmaConfig(config) { - config.set(karmaConf()); -}; From d4b21ac398307c65ff9265bec8c094dbd21b5aaf Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 15:18:35 -0600 Subject: [PATCH 386/452] Adds watch and coverage output. --- client/apps/hello_world/package.json | 3 ++- package.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/client/apps/hello_world/package.json b/client/apps/hello_world/package.json index bc82d6a..23101aa 100644 --- a/client/apps/hello_world/package.json +++ b/client/apps/hello_world/package.json @@ -1,6 +1,7 @@ { "scripts": { - "test": "./node_modules/jest/bin/jest.js --config=config/jest_config.json" + "test": "./node_modules/jest/bin/jest.js --config=config/jest_config.json --coverage", + "watch": "./node_modules/jest/bin/jest.js --config=config/jest_config.json --watch" }, "dependencies": { "babel": "^6.23.0", diff --git a/package.json b/package.json index 459a40c..99ed466 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "scripts": { "postinstall": "cd ./client && yarn", "test": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn test; cd ..; cd ..; done", + "watch": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn watch; cd ..; cd ..; done", "coverage": "cat ./coverage/**/coverage.info | ./client/node_modules/coveralls/bin/coveralls.js", "hot": "cd ./client && node webpack.hot.js", "hot_pack": "cd ./client && node webpack.hot.js --hotPack", From 6adecda8a7716ce11fc4d58b662f8f674fcc633c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 15:20:35 -0600 Subject: [PATCH 387/452] ignore coverage output --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 1bc5148..2b92337 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,5 @@ s3_website.yml node_modules npm-debug.log /build + +coverage/ \ No newline at end of file From c4b44de643b9427c562abe3ec4440346522e7e5c Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 15:48:27 -0600 Subject: [PATCH 388/452] Removes coveralls --- .gitignore | 1 - .travis.yml | 3 +-- client/package.json | 1 - package.json | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 2b92337..3f3f9f7 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,6 @@ secrets.js config/secrets.js s3_website.yml -.coveralls.yml ## Environment normalisation: /.bundle diff --git a/.travis.yml b/.travis.yml index cb268b6..fea5eb3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,5 +28,4 @@ before_script: - "sh -e /etc/init.d/xvfb start" script: - - yarn test - - yarn coverage + - yarn test \ No newline at end of file diff --git a/client/package.json b/client/package.json index 98e9aad..a2efda5 100644 --- a/client/package.json +++ b/client/package.json @@ -23,7 +23,6 @@ "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "chunk-manifest-webpack-plugin": "^1.1.0", - "coveralls": "^2.13.1", "css-loader": "^0.28.1", "dotenv": "4.0.0", "ecstatic": "2.1.0", diff --git a/package.json b/package.json index 99ed466..5c0eda8 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "postinstall": "cd ./client && yarn", "test": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn test; cd ..; cd ..; done", "watch": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn watch; cd ..; cd ..; done", - "coverage": "cat ./coverage/**/coverage.info | ./client/node_modules/coveralls/bin/coveralls.js", "hot": "cd ./client && node webpack.hot.js", "hot_pack": "cd ./client && node webpack.hot.js --hotPack", "hot_lint": "cd ./client && node webpack.hot.js --hotPack --lint", From 596dbf30d442bf6c94720112f275ecea9c5a2271 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 16:07:51 -0600 Subject: [PATCH 389/452] Use beta react hot loader. --- client/package.json | 2 +- client/yarn.lock | 93 ++++++++++++++++++++++++++++++--------------- 2 files changed, 63 insertions(+), 32 deletions(-) diff --git a/client/package.json b/client/package.json index a2efda5..3658ff0 100644 --- a/client/package.json +++ b/client/package.json @@ -75,7 +75,7 @@ "protractor": "^5.1.1", "psi": "^3.0.0", "react": "^15.5.4", - "react-hot-loader": "^1.3.1", + "react-hot-loader": "next", "redux-devtools": "^3.4.0", "redux-devtools-dock-monitor": "^1.1.2", "redux-devtools-log-monitor": "^1.3.0", diff --git a/client/yarn.lock b/client/yarn.lock index 6b68bde..b5da4db 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1063,7 +1063,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtim core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0: +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0, babel-template@^6.7.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" dependencies: @@ -1835,16 +1835,6 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: parse-json "^2.2.0" require-from-string "^1.1.0" -coveralls@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178" - dependencies: - js-yaml "3.6.1" - lcov-parse "0.0.10" - log-driver "1.2.5" - minimist "1.2.0" - request "2.79.0" - create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -2255,6 +2245,10 @@ dom-serialize@^2.2.0: extend "^3.0.0" void-elements "^2.0.0" +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.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" @@ -2483,6 +2477,12 @@ error-ex@^1.2.0: 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" + error@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/error/-/error-4.4.0.tgz#bf69ff251fb4a279c19adccdaa6b61e90d9bf12a" @@ -3289,6 +3289,13 @@ glob@~7.0.6: once "^1.3.0" path-is-absolute "^1.0.0" +global@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + globals@^9.0.0, globals@^9.14.0: version "9.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" @@ -4106,7 +4113,7 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" -js-yaml@3.6.1, js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: +js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: @@ -4374,10 +4381,6 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lcov-parse@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - less-loader@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.3.tgz#d1e6462ca2f090c11248455e14b8dda4616d0521" @@ -4725,7 +4728,7 @@ lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4737,10 +4740,6 @@ lodash@~4.16.4: version "4.16.6" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" -log-driver@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" - log-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" @@ -4907,6 +4906,12 @@ mime@1.3.4, mime@1.3.x, mime@^1.2.11, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +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" @@ -5959,6 +5964,10 @@ process@^0.11.0: version "0.11.9" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + progress@^1.1.8, progress@~1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" @@ -5981,7 +5990,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.0.0, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9: +prop-types@^15.0.0, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9: version "15.5.9" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" dependencies: @@ -6141,6 +6150,10 @@ react-base16-styling@^0.5.1: lodash.flow "^3.3.0" pure-color "^1.2.0" +react-deep-force-update@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" + react-dock@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/react-dock/-/react-dock-0.2.4.tgz#e727dc7550b3b73116635dcb9c0e04d0b7afe17c" @@ -6148,15 +6161,15 @@ react-dock@^0.2.4: lodash.debounce "^3.1.1" prop-types "^15.5.8" -react-hot-api@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/react-hot-api/-/react-hot-api-0.4.7.tgz#a7e22a56d252e11abd9366b61264cf4492c58171" - -react-hot-loader@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-1.3.1.tgz#c95647ae78b73dfceff6ec71ffcb04182ff6daf9" +react-hot-loader@next: + version "3.0.0-beta.7" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.7.tgz#d5847b8165d731c4d5b30d86d5d4716227a0fa83" dependencies: - react-hot-api "^0.4.5" + babel-template "^6.7.0" + global "^4.3.0" + react-deep-force-update "^2.0.1" + react-proxy "^3.0.0-alpha.0" + redbox-react "^1.3.6" source-map "^0.4.4" react-json-tree@^0.10.8: @@ -6167,6 +6180,12 @@ react-json-tree@^0.10.8: prop-types "^15.5.8" react-base16-styling "^0.5.1" +react-proxy@^3.0.0-alpha.0: + version "3.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" + dependencies: + lodash "^4.6.1" + react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" @@ -6329,6 +6348,14 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +redbox-react@^1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.6.tgz#70314c57c066257eb70b0a24dc794b5cef4f1c4e" + dependencies: + error-stack-parser "^1.3.6" + object-assign "^4.0.1" + prop-types "^15.5.4" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -6494,7 +6521,7 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@2, request@2.79.0, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: +request@2, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -7032,6 +7059,10 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stackframe@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" + stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" From b927516044ed8018323135d59f45cd40da46d198 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 16:18:42 -0600 Subject: [PATCH 390/452] add jest to globals --- .eslintrc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index f37bce5..b6768af 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -21,6 +21,7 @@ globals: spyOn: false jasmine: false module: false + jest: false __DEV__: false rules: linebreak-style: From f88d81d470e633688ad855567e435f2a82f3467d Mon Sep 17 00:00:00 2001 From: Nick Benoit Date: Thu, 11 May 2017 16:20:09 -0600 Subject: [PATCH 391/452] Adds node debugger support to jest (#21) * adds test debug * adds test debug --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 5c0eda8..a960a5f 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "scripts": { "postinstall": "cd ./client && yarn", "test": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn test; cd ..; cd ..; done", + "test_debug": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; node debug ./node_modules/jest/bin/jest --runInBand --config=config/jest_config.json; cd ..; cd ..; done", "watch": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn watch; cd ..; cd ..; done", "hot": "cd ./client && node webpack.hot.js", "hot_pack": "cd ./client && node webpack.hot.js --hotPack", From b7db23f4fd3f85cc844e7ae035e9766d7f3fcff7 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 19:13:22 -0600 Subject: [PATCH 392/452] Adds beforeAll to globals --- .eslintrc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index b6768af..609ad8f 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -13,6 +13,7 @@ plugins: - import globals: describe: false + beforeAll: false beforeEach: false afterEach: false it: false From 39dd38dd7f7544de637f9ca764b0a0dd6e04f4da Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 19:13:33 -0600 Subject: [PATCH 393/452] Don't run coverage when running tests --- client/apps/hello_world/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/apps/hello_world/package.json b/client/apps/hello_world/package.json index 23101aa..2e04284 100644 --- a/client/apps/hello_world/package.json +++ b/client/apps/hello_world/package.json @@ -1,6 +1,6 @@ { "scripts": { - "test": "./node_modules/jest/bin/jest.js --config=config/jest_config.json --coverage", + "test": "./node_modules/jest/bin/jest.js --config=config/jest_config.json", "watch": "./node_modules/jest/bin/jest.js --config=config/jest_config.json --watch" }, "dependencies": { From 467459cb63ab2d2c4f7be47d8015893dc005c44a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 11 May 2017 19:14:01 -0600 Subject: [PATCH 394/452] Remove karma from package.json --- client/apps/hello_world/yarn.lock | 23 +- client/package.json | 14 +- client/yarn.lock | 1025 +++++++++-------------------- yarn.lock | 8 +- 4 files changed, 316 insertions(+), 754 deletions(-) diff --git a/client/apps/hello_world/yarn.lock b/client/apps/hello_world/yarn.lock index 8cfa996..5f61769 100644 --- a/client/apps/hello_world/yarn.lock +++ b/client/apps/hello_world/yarn.lock @@ -439,10 +439,11 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" create-react-class@^15.5.1: - version "15.5.2" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.2.tgz#6a8758348df660b88326a0e764d569f274aad681" + version "15.5.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.3.tgz#fb0f7cae79339e9a179e194ef466efa3923820fe" dependencies: fbjs "^0.8.9" + loose-envify "^1.3.1" object-assign "^4.1.1" cryptiles@2.x.x: @@ -817,8 +818,8 @@ iconv-lite@0.4.13: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + version "0.4.17" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" inflight@^1.0.4: version "1.0.6" @@ -1656,8 +1657,8 @@ qs@~6.4.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" query-string@^4.2.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" + 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" @@ -1748,8 +1749,8 @@ redux@3.6.0: symbol-observable "^1.0.2" regenerator-runtime@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regex-cache@^0.4.2: version "0.4.3" @@ -2131,10 +2132,14 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -wordwrap@0.0.2, wordwrap@~0.0.2: +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" diff --git a/client/package.json b/client/package.json index 3658ff0..9b6ca49 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,7 @@ { "scripts": { - "postinstall": "node node_modules/phantomjs-prebuilt/install.js && for dir in apps/*; do cd \"$dir\" || continue; yarn; cd ..; cd ..; done" + "postinstall": "node node_modules/phantomjs-prebuilt/install.js && for dir in apps/*; do cd \"$dir\" || continue; yarn; cd ..; cd ..; done", + "nuke": "rm -rf node_modules && for dir in apps/*; do cd \"$dir\" || continue; rm -rf node_modules; cd ..; cd ..; done" }, "dependencies": { "superagent": "^3.5.0" @@ -47,17 +48,6 @@ "istanbul-instrumenter-loader": "^2.0.0", "jasmine": "^2.6.0", "jasmine-core": "^2.6.1", - "karma": "^1.6.0", - "karma-chrome-launcher": "^2.1.1", - "karma-cli": "1.0.1", - "karma-coverage": "1.1.1", - "karma-firefox-launcher": "^1.0.1", - "karma-jasmine": "1.1.0", - "karma-jasmine-ajax": "0.1.13", - "karma-phantomjs-launcher": "^1.0.4", - "karma-sourcemap-loader": "0.3.7", - "karma-spec-reporter": "^0.0.31", - "karma-webpack": "^2.0.3", "less": "2.7.2", "less-loader": "^4.0.3", "lodash": "^4.17.4", diff --git a/client/yarn.lock b/client/yarn.lock index b5da4db..5c9d380 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -3,8 +3,8 @@ "@types/node@^6.0.46": - version "6.0.68" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.68.tgz#0c43b6b8b9445feb86a0fbd3457e3f4bc591e66d" + version "6.0.73" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.73.tgz#85dc4bb6f125377c75ddd2519a1eeb63f0a4ed70" "@types/q@^0.0.32": version "0.0.32" @@ -18,7 +18,7 @@ abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -accepts@1.3.3, accepts@~1.3.3: +accepts@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" dependencies: @@ -57,10 +57,6 @@ adm-zip@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - agent-base@2: version "2.0.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" @@ -73,8 +69,8 @@ ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1: - version "4.11.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.6.tgz#947e93049790942b2a2d60a8289b28924d39f987" + 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" @@ -102,11 +98,11 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" dependencies: - string-width "^1.0.1" + string-width "^2.0.0" ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: version "1.4.0" @@ -116,7 +112,7 @@ 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: +ansi-regex@*, ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -170,11 +166,11 @@ archy@~1.0.0: resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" + 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.0 || ^1.1.13" + readable-stream "^2.0.6" argparse@^1.0.7: version "1.0.9" @@ -195,8 +191,8 @@ arr-diff@^2.0.0: arr-flatten "^1.0.1" arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" array-differ@^1.0.0: version "1.0.0" @@ -218,10 +214,6 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -236,10 +228,6 @@ 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: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -306,13 +294,13 @@ async@1.x, async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^0.9.0, async@~0.9.0: +async@^0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" async@^2.0.1, async@^2.1.2, async@^2.1.5: - version "2.3.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" + version "2.4.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" dependencies: lodash "^4.14.0" @@ -355,10 +343,10 @@ autoprefixer@^7.0.1: postcss-value-parser "^3.2.3" aws-sdk@^2.1.4, aws-sdk@^2.2.4, aws-sdk@^2.6.12: - version "2.41.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.41.0.tgz#930c15ae7ef4532bb8912c4c36a18b0023fd74c2" + version "2.50.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.50.0.tgz#6b2855741f8efe064f824a3db0bf4f3bc5bde018" dependencies: - buffer "4.9.1" + buffer "5.0.6" crypto-browserify "1.0.9" jmespath "0.15.0" querystring "0.2.0" @@ -1096,18 +1084,10 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0: - version "6.16.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" - -babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0: +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0: version "6.17.1" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - balanced-match@^0.4.1, balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -1116,18 +1096,10 @@ base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" -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.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" -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" @@ -1142,12 +1114,6 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - big.js@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" @@ -1162,10 +1128,6 @@ bl@^1.0.0, bl@~1.1.2: dependencies: readable-stream "~2.0.5" -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - block-stream@*, block-stream@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -1178,29 +1140,10 @@ blocking-proxy@0.0.5: dependencies: minimist "^1.2.0" -bluebird@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" - bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" -body-parser@^1.16.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" - dependencies: - bytes "2.4.0" - content-type "~1.0.2" - debug "2.6.1" - depd "~1.1.0" - http-errors "~1.6.1" - iconv-lite "0.4.15" - on-finished "~2.3.0" - qs "6.4.0" - raw-body "~2.2.0" - type-is "~1.6.14" - boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -1208,10 +1151,10 @@ boom@2.x.x: hoek "2.x.x" boxen@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" + version "1.1.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" dependencies: - ansi-align "^1.1.0" + ansi-align "^2.0.0" camelcase "^4.0.0" chalk "^1.1.1" cli-boxes "^1.0.0" @@ -1219,19 +1162,13 @@ boxen@^1.0.0: term-size "^0.1.0" widest-line "^1.0.0" -brace-expansion@^1.0.0: +brace-expansion@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" dependencies: balanced-match "^0.4.1" concat-map "0.0.1" -braces@^0.1.2: - version "0.1.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" - dependencies: - expand-range "^0.1.0" - braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -1330,7 +1267,14 @@ buffer-xor@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" -buffer@4.9.1, buffer@^4.3.0: +buffer@5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.6.tgz#2ea669f7eec0b6eda05b08f8b5ff661b28573588" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: @@ -1354,20 +1298,12 @@ builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" -bytes@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" - caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: callsites "^0.2.0" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" @@ -1416,8 +1352,8 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000650" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000650.tgz#615f564d367533d32b82d72ada09661e75386bab" + version "1.0.30000666" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000666.tgz#951ed9f3d3bfaa08a06dafbb5089ab07cce6ab90" caniuse-lite@^1.0.30000665: version "1.0.30000666" @@ -1484,9 +1420,9 @@ chmodr@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" -chokidar@^1.4.1, chokidar@^1.4.3: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" +chokidar@^1.4.3: + 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" @@ -1509,7 +1445,7 @@ chunk-manifest-webpack-plugin@^1.1.0: dependencies: webpack-core "^0.6.9" -cipher-base@^1.0.0, cipher-base@^1.0.1: +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" dependencies: @@ -1526,8 +1462,8 @@ clap@^1.0.9: chalk "^1.1.3" clean-css@4.0.x: - version "4.0.12" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.12.tgz#a02e61707f1840bd3338f54dbc9acbda4e772fa3" + version "4.0.13" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.13.tgz#feb2a176062d72a6c3e624d9213cac6a0c485e80" dependencies: source-map "0.5.x" @@ -1658,7 +1594,7 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@^1.1.0, colors@^1.1.2, colors@~1.1.2: +colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -1669,12 +1605,6 @@ columnify@~1.5.4: strip-ansi "^3.0.0" wcwidth "^1.0.0" -combine-lists@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" - dependencies: - lodash "^4.5.0" - 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" @@ -1701,22 +1631,10 @@ complex.js@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.1.tgz#ea90c7a05aeceaf3a376d2c0f6a78421727d6879" -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: +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" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1745,25 +1663,16 @@ config-chain@~1.1.10: proto-list "~1.2.1" configstore@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" + version "3.1.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1" dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" - mkdirp "^0.5.0" + make-dir "^1.0.0" unique-string "^1.0.0" - write-file-atomic "^1.1.2" + write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" -connect@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.1.tgz#b7760693a74f0454face1d9378edb3f885b43227" - dependencies: - debug "2.6.3" - finalhandler "1.0.1" - parseurl "~1.3.1" - utils-merge "1.0.0" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -1816,7 +1725,7 @@ core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.2.0, core-js@^2.4.0: +core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -1825,9 +1734,10 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82" + version "2.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.3.tgz#952771eb0dddc1cb3fa2f6fbe51a522e93b3ee0a" dependencies: + is-directory "^0.3.1" js-yaml "^3.4.3" minimist "^1.2.0" object-assign "^4.1.0" @@ -1848,21 +1758,25 @@ create-error-class@^3.0.0, create-error-class@^3.0.1: dependencies: capture-stack-trace "^1.0.0" -create-hash@^1.1.0, create-hash@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" +create-hash@^1.1.0, create-hash@^1.1.1, 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 "^1.0.0" - sha.js "^2.3.6" + ripemd160 "^2.0.0" + sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" +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" cross-spawn-async@^2.1.1: version "2.2.5" @@ -1999,10 +1913,6 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -2023,13 +1933,6 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^1.0.6: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" @@ -2038,11 +1941,11 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.3, debug@^2.1.1, debug@^2.2.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" +debug@2, debug@^2.1.1, debug@^2.2.0: + version "2.6.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" dependencies: - ms "0.7.2" + ms "0.7.3" debug@2.2.0: version "2.2.0" @@ -2050,18 +1953,18 @@ debug@2.2.0: 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.1: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: ms "0.7.2" +debug@2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" + dependencies: + ms "0.7.3" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2135,12 +2038,12 @@ decompress@^3.0.0: vinyl-fs "^2.2.0" deep-diff@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.4.tgz#aac5c39952236abe5f037a2349060ba01b00ae48" + version "0.3.8" + resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" + 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" @@ -2204,10 +2107,6 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -2236,15 +2135,6 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -2413,45 +2303,6 @@ end-of-stream@1.0.0, end-of-stream@^1.0.0: dependencies: once "~1.3.0" -engine.io-client@1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "2.3.3" - engine.io-parser "1.3.2" - has-cors "1.1.0" - indexof "0.0.1" - parsejson "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - ws "1.1.2" - xmlhttprequest-ssl "1.5.3" - yeast "0.1.2" - -engine.io-parser@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" - dependencies: - after "0.8.2" - arraybuffer.slice "0.0.6" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary "0.1.7" - wtf-8 "1.0.0" - -engine.io@1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" - 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.2" - enhanced-resolve@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" @@ -2461,10 +2312,6 @@ enhanced-resolve@^3.0.0: object-assign "^4.0.1" tapable "^0.2.5" -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - errno@^0.1.1, errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -2496,8 +2343,8 @@ es5-ext@0.8.x: resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.15" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" + version "0.10.16" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -2683,8 +2530,8 @@ eslint@^3.19.0: user-home "^2.0.0" espree@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.1.tgz#28a83ab4aaed71ed8fe0f5efe61b76a05c13c4d2" + version "3.4.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" dependencies: acorn "^5.0.1" acorn-jsx "^3.0.0" @@ -2697,6 +2544,10 @@ esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" @@ -2749,10 +2600,6 @@ event-stream@3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -2786,27 +2633,12 @@ exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" -expand-braces@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" - dependencies: - array-slice "^0.2.3" - array-unique "^0.2.1" - braces "^0.1.2" - 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@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" - dependencies: - is-number "^0.1.1" - repeat-string "^0.2.2" - expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" @@ -2853,8 +2685,8 @@ extend-shallow@^2.0.1: is-extendable "^0.1.0" extend@3, extend@^3.0.0, extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" extglob@^0.3.1: version "0.3.2" @@ -2942,8 +2774,8 @@ file-type@^3.1.0: resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" filename-reserved-regex@^1.0.0: version "1.0.0" @@ -2958,8 +2790,8 @@ filenamify@^1.0.1: trim-repeated "^1.0.0" filesize@^3.5.6: - version "3.5.6" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" + version "3.5.9" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.9.tgz#9e3dd8a9b124f5b2f1fb2ee9cd13a86c707bb222" fill-range@^2.1.0: version "2.2.3" @@ -2971,11 +2803,11 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@1.0.1, finalhandler@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" +finalhandler@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a" dependencies: - debug "2.6.3" + debug "2.6.4" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" @@ -3075,12 +2907,6 @@ front-matter@^2.1.1: dependencies: js-yaml "^3.4.6" -fs-access@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - dependencies: - null-check "^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" @@ -3163,9 +2989,9 @@ gauge@~1.2.5: lodash.padend "^4.1.0" lodash.padstart "^4.1.0" -gauge@~2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" +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" @@ -3211,8 +3037,8 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" @@ -3466,8 +3292,8 @@ gzip-size@^3.0.0: duplexer "^0.1.1" handlebars@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" + version "4.0.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -3501,20 +3327,10 @@ has-ansi@^2.0.0: 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-color@~0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" -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" @@ -3535,6 +3351,12 @@ has@^1.0.1: 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.js@^1.0.0, hash.js@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" @@ -3597,8 +3419,8 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" html-entities@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" html-minifier@^3.4.4: version "3.4.4" @@ -3626,13 +3448,6 @@ http-errors@~1.6.1: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-proxy@^1.13.0: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -3660,9 +3475,9 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -iconv-lite@0.4.15, iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +iconv-lite@~0.4.13: + version "0.4.17" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" icss-replace-symbols@^1.0.2: version "1.0.2" @@ -3677,12 +3492,12 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" ignore@^3.2.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.7.tgz#4810ca5f1d8eca5595213a34b94f2eb4ed926bbd" + version "3.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.0.tgz#3812d22cbe9125f2c2b4915755a1b8abd745a001" image-size@~0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.1.tgz#28eea8548a4b1443480ddddc1e083ae54652439f" + version "0.5.3" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.3.tgz#5cbe9fafc8436386ceb7e9e3a9d90c5b71b70ad9" imports-loader@^0.7.1: version "0.7.1" @@ -3691,7 +3506,7 @@ imports-loader@^0.7.1: loader-utils "^1.0.2" source-map "^0.5.6" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3733,11 +3548,11 @@ ini@^1.3.4, ini@~1.3.0, ini@~1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" init-package-json@~1.9.4: - version "1.9.5" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.5.tgz#7d4d64a264dc76c1f1f557cbbe824978bf10cd09" + version "1.9.6" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.9.6.tgz#789fc2b74466a4952b9ea77c0575bc78ebd60a61" dependencies: glob "^7.1.1" - npm-package-arg "^4.0.0" + npm-package-arg "^4.0.0 || ^5.0.0" promzard "^0.3.0" read "~1.0.1" read-package-json "1 || 2" @@ -3764,8 +3579,8 @@ inquirer@^0.12.0: through "^2.3.6" interpret@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.2.tgz#f4f623f0bb7122f15f5717c8e254b8161b5c5b2d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" invariant@^2.2.0: version "2.2.2" @@ -3801,7 +3616,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2: +is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -3815,6 +3630,10 @@ is-bzip2@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -3886,10 +3705,6 @@ is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" -is-number@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" - is-number@^2.0.2, is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -3998,10 +3813,6 @@ 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" -isbinaryfile@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4036,23 +3847,23 @@ istanbul-instrumenter-loader@^2.0.0: loader-utils "^0.2.16" object-assign "^4.1.0" -istanbul-lib-coverage@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.2.tgz#87a0c015b6910651cb3b184814dfb339337e25e1" +istanbul-lib-coverage@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" istanbul-lib-instrument@^1.1.3: - version "1.7.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.0.tgz#b8e0dc25709bb44e17336ab47b7bb5c97c23f659" + version "1.7.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.13.0" - istanbul-lib-coverage "^1.0.2" + istanbul-lib-coverage "^1.1.0" semver "^5.3.0" -istanbul@0.4.5, istanbul@^0.4.0: +istanbul@0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" dependencies: @@ -4071,10 +3882,6 @@ istanbul@0.4.5, istanbul@^0.4.0: which "^1.1.1" wordwrap "^1.0.0" -jasmine-ajax@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz#f8cad9fd49dfd44f3cf798d36f4e857d125c75c5" - jasmine-core@^2.6.1, jasmine-core@~2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.6.1.tgz#66a61cddb699958e3613edef346c996f6311fc3b" @@ -4088,8 +3895,8 @@ jasmine@^2.5.3, jasmine@^2.6.0: jasmine-core "~2.6.0" jasminewd2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.0.0.tgz#10aacd2c588c1ceb6a0b849f1a7f3f959f777c91" + version "2.1.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.1.0.tgz#da595275d1ae631de736ac0a7c7d85c9f73ef652" jju@^1.1.0: version "1.3.0" @@ -4105,7 +3912,7 @@ jodid25519@^1.0.0: dependencies: jsbn "~0.1.0" -js-base64@^2.1.9: +js-base64@^2.1.8, js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" @@ -4114,11 +3921,11 @@ js-tokens@^3.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" dependencies: argparse "^1.0.7" - esprima "^2.6.0" + esprima "^3.1.1" js-yaml@~3.7.0: version "3.7.0" @@ -4171,10 +3978,6 @@ 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" @@ -4209,10 +4012,8 @@ jsprim@^1.2.2: verror "1.3.6" jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz#5afe38868f56bc8cc7aeaef0100ba8c75bd12591" - dependencies: - object-assign "^4.1.0" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" jwa@^1.1.4: version "1.1.5" @@ -4231,104 +4032,6 @@ jws@^3.0.0, jws@^3.1.4: jwa "^1.1.4" safe-buffer "^5.0.1" -karma-chrome-launcher@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz#216879c68ac04d8d5140e99619ba04b59afd46cf" - dependencies: - fs-access "^1.0.0" - which "^1.2.1" - -karma-cli@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960" - dependencies: - resolve "^1.1.6" - -karma-coverage@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6" - dependencies: - dateformat "^1.0.6" - istanbul "^0.4.0" - lodash "^3.8.0" - minimatch "^3.0.0" - source-map "^0.5.1" - -karma-firefox-launcher@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz#ce58f47c2013a88156d55a5d61337c099cf5bb51" - -karma-jasmine-ajax@0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz#78bb92d896fe32a25a180098c47722e1d9605bfc" - dependencies: - jasmine-ajax "^3.0.0" - -karma-jasmine@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" - -karma-phantomjs-launcher@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz#d23ca34801bda9863ad318e3bb4bd4062b13acd2" - dependencies: - lodash "^4.0.1" - phantomjs-prebuilt "^2.1.7" - -karma-sourcemap-loader@0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" - dependencies: - graceful-fs "^4.1.2" - -karma-spec-reporter@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz#4830dc7148a155c7d7a186e632339a0d80fadec3" - dependencies: - colors "^1.1.2" - -karma-webpack@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.3.tgz#39cebf5ca2580139b27f9ae69b78816b9c82fae6" - dependencies: - async "~0.9.0" - loader-utils "^0.2.5" - lodash "^3.8.0" - source-map "^0.1.41" - webpack-dev-middleware "^1.0.11" - -karma@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/karma/-/karma-1.7.0.tgz#6f7a1a406446fa2e187ec95398698f4cee476269" - dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - chokidar "^1.4.1" - colors "^1.1.0" - combine-lists "^1.0.0" - connect "^3.6.0" - core-js "^2.2.0" - di "^0.0.1" - dom-serialize "^2.2.0" - expand-braces "^0.1.1" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^3.8.0" - log4js "^0.6.31" - mime "^1.3.4" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "1.7.3" - source-map "^0.5.3" - tmp "0.0.31" - useragent "^2.1.12" - kew@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" @@ -4340,10 +4043,10 @@ kind-of@^2.0.1: is-buffer "^1.0.2" kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + version "3.2.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" dependencies: - is-buffer "^1.0.2" + is-buffer "^1.1.5" klaw@^1.0.0: version "1.3.1" @@ -4423,7 +4126,7 @@ 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.16, loader-utils@^0.2.5: +loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" dependencies: @@ -4548,7 +4251,7 @@ lodash.assign@^3.2.0: lodash._createassigner "^3.0.0" lodash.keys "^3.0.0" -lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: +lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -4724,11 +4427,7 @@ 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.8.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4747,13 +4446,6 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" -log4js@^0.6.31: - version "0.6.38" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" - dependencies: - readable-stream "~1.0.2" - semver "~4.3.3" - longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -4779,10 +4471,6 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@2.2.x: - version "2.2.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" - lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -4794,6 +4482,12 @@ 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.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" + dependencies: + pify "^2.3.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" @@ -4807,12 +4501,12 @@ marked@^0.3.6, marked@~0.3.0: resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" math-expression-evaluator@^1.2.14: - version "1.2.16" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.16.tgz#b357fa1ca9faefb8e48d10c14ef2bcb2d9f0a7c9" + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" mathjs@^3.11.5: - version "3.11.5" - resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.11.5.tgz#34e9e75e2bd3740986e96fc8a0815999f331f28d" + version "3.12.3" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.12.3.tgz#25c61ce3b5514b9c62f93141ac61d61be88486d6" dependencies: complex.js "2.0.1" decimal.js "7.1.1" @@ -4832,7 +4526,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0, meow@^3.5.0, meow@^3.7.0: +meow@^3.5.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -4902,10 +4596,14 @@ mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, dependencies: mime-db "~1.27.0" -mime@1.3.4, mime@1.3.x, mime@^1.2.11, mime@^1.3.4: +mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +mime@1.3.x, mime@^1.2.11, mime@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.5.tgz#dc1ee70b80fee4999cb0775c9f94beefc9a779a3" + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -4921,10 +4619,10 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^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.2, minimatch@~3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: - brace-expansion "^1.0.0" + brace-expansion "^1.1.7" minimist@0.0.8, minimist@~0.0.1: version "0.0.8" @@ -4965,6 +4663,10 @@ ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" +ms@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" + msee@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/msee/-/msee-0.1.2.tgz#f2d1e20ef94b8cd45243f2d5c817e97143f0286d" @@ -4981,10 +4683,14 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" -mute-stream@0.0.5, mute-stream@~0.0.4: +mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +mute-stream@~0.0.4: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + nan@^2.3.0, nan@^2.3.2: version "2.6.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" @@ -5021,8 +4727,8 @@ node-forge@^0.7.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" node-gyp@^3.3.1, node-gyp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.0.tgz#7474f63a3a0501161dda0b6341f022f14c423fa6" + version "3.6.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.1.tgz#19561067ff185464aded478212681f47fd578cbc" dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -5139,8 +4845,8 @@ normalize-git-url@~3.0.2: resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" + version "2.3.8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -5177,7 +4883,7 @@ npm-install-checks@~1.0.7: npmlog "0.1 || 1 || 2" semver "^2.3.0 || 3.x || 4 || 5" -"npm-package-arg@^3.0.0 || ^4.0.0", npm-package-arg@^4.0.0, npm-package-arg@^4.1.1, npm-package-arg@~4.1.0: +"npm-package-arg@^3.0.0 || ^4.0.0", "npm-package-arg@^4.0.0 || ^5.0.0", npm-package-arg@^4.1.1, npm-package-arg@~4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.1.1.tgz#86d9dca985b4c5e5d59772dfd5de6919998a495a" dependencies: @@ -5305,12 +5011,12 @@ npm@^2.15.10: write-file-atomic "~1.1.4" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" + version "4.1.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" - gauge "~2.7.1" + gauge "~2.7.3" set-blocking "~2.0.0" "npmlog@0.1 || 1 || 2", "npmlog@~2.0.0 || ~3.1.0", npmlog@~2.0.4: @@ -5321,10 +5027,6 @@ npm@^2.15.10: are-we-there-yet "~1.1.2" gauge "~1.2.5" -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" - null-loader@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-0.1.1.tgz#17be9abfcd3ff0e1512f6fc4afcb1f5039378fae" @@ -5341,10 +5043,6 @@ oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" - object-assign@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" @@ -5357,10 +5055,6 @@ object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@ 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@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" @@ -5453,8 +5147,8 @@ osenv@0, osenv@^0.1.4, osenv@~0.1.3: os-tmpdir "^1.0.0" package-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.0.tgz#f3c9dc8738f5b59304d54d2cfb3f91d08fdd7998" + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -5500,24 +5194,6 @@ parse-key@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/parse-key/-/parse-key-0.2.1.tgz#7bcf76595536e36075664be4d687e4bdd910208f" -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.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" @@ -5571,10 +5247,14 @@ pause-stream@0.0.11: through "~2.3" pbkdf2@^3.0.3: - version "3.0.9" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" + version "3.0.12" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" dependencies: - create-hmac "^1.1.2" + 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" @@ -5584,7 +5264,7 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -phantomjs-prebuilt@^2.1.14, phantomjs-prebuilt@^2.1.7: +phantomjs-prebuilt@^2.1.14: version "2.1.14" resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz#d53d311fcfb7d1d08ddb24014558f1188c516da0" dependencies: @@ -5920,8 +5600,8 @@ postcss-zindex@^2.0.1: 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, postcss@^5.2.6: - version "5.2.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" + version "5.2.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -5961,8 +5641,8 @@ process-nextick-args@~1.0.6: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" process@^0.11.0: - version "0.11.9" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" process@~0.5.1: version "0.5.2" @@ -6078,10 +5758,6 @@ q@1.4.1, q@^1.1.2, q@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qjobs@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" - qs@6.4.0, qs@^6.1.0, qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -6095,8 +5771,8 @@ qs@~6.3.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" query-string@^4.1.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" + 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" @@ -6120,18 +5796,10 @@ randombytes@^2.0.0, randombytes@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" -range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.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.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" - dependencies: - bytes "2.4.0" - iconv-lite "0.4.15" - unpipe "1.0.0" - rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" @@ -6256,7 +5924,7 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, 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.2.6: version "2.2.9" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" dependencies: @@ -6268,7 +5936,7 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.0.0" util-deprecate "~1.0.1" -"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.2: +"readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -6394,8 +6062,8 @@ redux-devtools-dock-monitor@^1.1.2: react-pure-render "^1.0.2" redux-devtools-instrument@^1.0.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.8.0.tgz#db1840ed3d8152af6792913698e3424c119de9aa" + version "1.8.2" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.8.2.tgz#5e91cfe402e790dae3fd2f0d235f7b7d84b09ffe" dependencies: lodash "^4.2.0" symbol-observable "^1.0.2" @@ -6429,8 +6097,8 @@ regenerate@^1.2.1: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" regenerator-runtime@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-transform@0.9.11: version "0.9.11" @@ -6464,10 +6132,11 @@ regexpu-core@^2.0.0: regjsparser "^0.1.4" registry-auth-token@^3.0.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.2.tgz#1b9e51a185c930da34a9894b12a52ea998f1adaf" + version "3.3.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" dependencies: rc "^1.1.6" + safe-buffer "^5.0.1" registry-url@^3.0.3: version "3.1.0" @@ -6497,10 +6166,6 @@ 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@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" - repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -6521,18 +6186,18 @@ request-progress@~2.0.1: dependencies: throttleit "^1.0.0" -request@2, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@2, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.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.11.0" + 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 "~2.0.6" + har-validator "~4.2.1" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" @@ -6540,51 +6205,51 @@ request@2, request@^2.72.0, request@^2.74.0, request@^2.78.0, request@^2.79.0, r json-stringify-safe "~5.0.1" mime-types "~2.1.7" oauth-sign "~0.8.1" - qs "~6.3.0" + 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.4.1" + tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" +request@~2.74.0: + version "2.74.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" - caseless "~0.12.0" + bl "~1.1.2" + 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 "~4.2.1" + form-data "~1.0.0-rc4" + 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" + node-uuid "~1.4.7" oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" + qs "~6.2.0" stringstream "~0.0.4" tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" + tunnel-agent "~0.4.1" -request@~2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" +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" - bl "~1.1.2" caseless "~0.11.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" - form-data "~1.0.0-rc4" + form-data "~2.1.1" har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" @@ -6592,12 +6257,12 @@ request@~2.74.0: isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" - node-uuid "~1.4.7" oauth-sign "~0.8.1" - qs "~6.2.0" + 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" @@ -6618,19 +6283,15 @@ require-uncached@^1.0.2: caller-path "^0.1.0" resolve-from "^1.0.0" -requires-port@1.x.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.x, resolve@^1.1.6: +resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.3.3: +resolve@^1.1.6, resolve@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: @@ -6653,7 +6314,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -6665,9 +6326,12 @@ rimraf@~2.5.4: dependencies: glob "^7.0.5" -ripemd160@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" +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" run-async@^0.1.0: version "0.1.0" @@ -6732,12 +6396,13 @@ safe-json-parse@^2.0.0: resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-2.0.0.tgz#6da43f2e4a864335773b1d2df0db2c1962a0beec" sass-graph@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.1.2.tgz#965104be23e8103cb7e5f710df65935b317da57b" + version "2.2.2" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.2.tgz#f4d6c95b546ea2a09d14176d0fc1a07ee2b48354" dependencies: glob "^7.0.0" lodash "^4.0.0" - yargs "^4.7.1" + scss-tokenizer "^0.2.1" + yargs "^6.6.0" sass-loader@^6.0.5: version "6.0.5" @@ -6769,6 +6434,13 @@ schema-utils@^0.x: dependencies: ajv "^5.0.0" +scss-tokenizer@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.1.tgz#07c0cc577bb7ab4d08fd900185adbf4bc844141d" + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + seed-random@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" @@ -6808,7 +6480,7 @@ semver-diff@^2.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^4.0.3, semver@~4.3.3: +semver@^4.0.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" @@ -6863,7 +6535,7 @@ setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" -sha.js@^2.3.6: +sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.8" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" dependencies: @@ -6915,50 +6587,6 @@ sntp@1.x.x: dependencies: hoek "2.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.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "2.3.3" - engine.io-client "1.8.3" - 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.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" - dependencies: - debug "2.3.3" - engine.io "1.8.3" - has-binary "0.1.7" - object-assign "4.1.0" - socket.io-adapter "0.5.0" - socket.io-client "1.7.3" - 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" @@ -6985,26 +6613,20 @@ source-list-map@^0.1.7, source-list-map@~0.1.7: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" source-list-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4" + version "1.1.2" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" source-map-support@^0.4.2, source-map-support@~0.4.0: - version "0.4.14" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" dependencies: source-map "^0.5.6" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@^0.1.41: - 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.4, source-map@~0.4.1: +source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: @@ -7045,8 +6667,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" + version "1.13.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7098,8 +6720,8 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-http@^2.3.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" + version "2.7.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.1.tgz#546a51741ad5a6b07e9e31b0b10441a917df528a" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -7302,8 +6924,8 @@ tar-pack@^3.4.0: uid-number "^0.0.6" tar-stream@^1.1.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.2.tgz#fbc6c6e83c1a19d4cb48c7d96171fc248effc7bf" + version "1.5.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.4.tgz#36549cf04ed1aee9b2a30c0143252238daf94016" dependencies: bl "^1.0.0" end-of-stream "^1.0.0" @@ -7389,29 +7011,19 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmp@0.0.31, tmp@0.0.x: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" - dependencies: - os-tmpdir "~1.0.1" - to-absolute-glob@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" dependencies: extend-shallow "^2.0.1" -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.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" tough-cookie@~2.3.0: version "2.3.2" @@ -7481,8 +7093,8 @@ ua-parser-js@^0.7.9: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" uglify-js@^2.6, uglify-js@^2.8.5, uglify-js@~2.8.22: - version "2.8.22" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" + version "2.8.23" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.23.tgz#8230dd9783371232d62a7821e2cf9a817270a8a0" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -7536,7 +7148,7 @@ universalify@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7602,13 +7214,6 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" -useragent@^2.1.12: - version "2.1.13" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" - dependencies: - lru-cache "2.2.x" - tmp "0.0.x" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -7730,10 +7335,6 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - ware@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4" @@ -7762,8 +7363,8 @@ webdriver-js-extender@^1.0.0: selenium-webdriver "^2.53.2" webdriver-manager@^12.0.1: - version "12.0.4" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.4.tgz#658e431c805bc3a7e6bf74bc819475884e6d4861" + version "12.0.6" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.6.tgz#3df1a481977010b4cbf8c9d85c7a577828c0e70b" dependencies: adm-zip "^0.4.7" chalk "^1.1.1" @@ -7799,7 +7400,7 @@ webpack-core@^0.6.9: source-list-map "~0.1.7" source-map "~0.4.1" -webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.10.2: +webpack-dev-middleware@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz#2e252ce1dfb020dbda1ccb37df26f30ab014dbd1" dependencies: @@ -7869,17 +7470,17 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: +which@1, which@^1.1.1, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: - string-width "^1.0.1" + string-width "^1.0.2" widest-line@^1.0.0: version "1.0.0" @@ -7891,10 +7492,6 @@ 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.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -7924,7 +7521,15 @@ wrappy@1, wrappy@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^1.1.2, write-file-atomic@~1.1.4: +write-file-atomic@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.0.0.tgz#bb99a5440d0d31dd860a68da392bffeef66251a1" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.1.4.tgz#b1f52dc2e8dc0e3cb04d187a25f758a38a90ca3b" dependencies: @@ -7938,17 +7543,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@1.1.2, ws@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" +ws@^1.0.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" dependencies: options ">=0.0.5" ultron "1.0.x" -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" @@ -7977,10 +7578,6 @@ xmlbuilder@4.2.1, xmlbuilder@>=1.0.0, xmlbuilder@^4.1.0: dependencies: lodash "^4.0.0" -xmlhttprequest-ssl@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" - "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -7999,39 +7596,13 @@ yallist@^2.0.0: 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@^4.7.1: - 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: +yargs@^6.0.0, yargs@^6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: @@ -8063,7 +7634,3 @@ yauzl@2.4.1, yauzl@^2.2.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" diff --git a/yarn.lock b/yarn.lock index ac50df3..478af43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20,7 +20,7 @@ balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" -brace-expansion@^1.0.0: +brace-expansion@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" dependencies: @@ -97,10 +97,10 @@ is-path-inside@^1.0.0: path-is-inside "^1.0.1" minimatch@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: - brace-expansion "^1.0.0" + brace-expansion "^1.1.7" object-assign@^4.0.1: version "4.1.1" From e252642fa96267f268d7d82d0c5a244bd8771a30 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 15 May 2017 19:28:17 -0600 Subject: [PATCH 395/452] Include app name in path based on configuration. --- client/config/settings.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index fdc435e..036f256 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -67,6 +67,16 @@ function isProduction(stage) { return stage === 'production' || stage === 'staging'; } +// ----------------------------------------------------------------------------- +// Generates a path with the app name if needed +// ----------------------------------------------------------------------------- +function withNameIfRequired(name, relativeOutput, options) { + if (!options.onlyPack && !options.appPerPort) { + return path.join(relativeOutput, name); + } + return relativeOutput; +} + // ----------------------------------------------------------------------------- // Generates the main paths used for output // ----------------------------------------------------------------------------- @@ -77,12 +87,12 @@ function outputPaths(name, port, options) { // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In development this will // point to whatever public url is serving dev assets. - let publicPath = `${devAssetsUrl}${devRelativeOutput}`; + let publicPath = path.join(devAssetsUrl, withNameIfRequired(name, devRelativeOutput, options)); if (isProduction(options.stage)) { rootOutputPath = prodOutput; outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, name); - publicPath = prodAssetsUrl + prodRelativeOutput; + publicPath = path.join(prodAssetsUrl, withNameIfRequired(name, prodRelativeOutput, options)); } return { From 106ff447f0d3fce17b9f75a001968eb1ff608000 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 15 May 2017 22:03:58 -0600 Subject: [PATCH 396/452] Refactor css loaders config --- client/config/webpack.config.js | 43 ++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 5e7b85a..7ed089a 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -44,13 +44,48 @@ module.exports = function webpackConfig(app) { jsLoaders.push('atomic-lint-loader'); } - const cssLoaders = ['css-loader?importLoaders=1', 'postcss-loader']; + const isDevelopment = app.state === 'development' || app.state === 'hot'; + const cssLoaders = [ + { + loader: 'css-loader', + options: { + sourceMap: isDevelopment, + includePaths: [ + `${app.path}/node_modules` + ], + import: true, + importLoaders: 1 + } + }, { + loader: 'postcss-loader', + options: { sourceMap: isDevelopment } + } + ]; const scssLoaders = cssLoaders.slice(0); - scssLoaders.push(`sass-loader?outputStyle=expanded&includePaths[]=${(path.resolve(__dirname, './node_modules/bootstrap-sass'))}`); + scssLoaders.push({ + loader: 'sass-loader', + options: { + sourceMap: isDevelopment, + includePaths: [ + `${app.path}/node_modules` + ], + outputStyle: (app.production ? 'compressed' : 'expanded'), + } + }); + scssLoaders[0].options.importLoaders = 2; const lessLoaders = cssLoaders.slice(0); - lessLoaders.push('less-loader'); + lessLoaders.push({ + loader: 'less-loader', + options: { + sourceMap: isDevelopment, + includePaths: [ + `${app.path}/node_modules` + ] + } + }); + lessLoaders[0].options.importLoaders = 2; const extractCSS = new ExtractTextPlugin(app.production ? '[name]-[chunkhash].css' : '[name].css'); @@ -109,7 +144,7 @@ module.exports = function webpackConfig(app) { const rules = [ { test: /\.js$/, use: jsLoaders, exclude: /node_modules/ }, { test: /\.jsx?$/, use: jsLoaders, exclude: /node_modules/ }, - { test: /\.scss$/i, use: extractCSS.extract(scssLoaders) }, + { test: /\.s[ac]ss$/i, use: extractCSS.extract(scssLoaders) }, { test: /\.css$/i, use: extractCSS.extract(cssLoaders) }, { test: /\.less$/i, use: extractCSS.extract(lessLoaders) }, { test: /.*\.(gif|png|jpg|jpeg|svg)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, From d688538c2bb42044de56f0aaa4f0a8a2bd435cce Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 15 May 2017 22:13:21 -0600 Subject: [PATCH 397/452] path.join is better --- client/libs/build/webpack_utils.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index 93a7abb..2832598 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -1,5 +1,6 @@ const fs = require('fs-extra'); const _ = require('lodash'); +const path = require('path'); // ----------------------------------------------------------------------------- // Loads webpack assets file @@ -9,7 +10,7 @@ function loadWebpackAssets(app) { const webpackAssetsFilePath = `${app.outputPath}/${app.name}-webpack-assets.json`; if (fs.existsSync(webpackAssetsFilePath)) { webpackAssets = _.mapValues(fs.readJsonSync(webpackAssetsFilePath), asset => - _.mapValues(asset, assetFilename => `${app.publicPath}${assetFilename}`) + _.mapValues(asset, assetFilename => path.join(app.publicPath, assetFilename)) ); } return webpackAssets; From 63ef6cace1b2b91d35eb61c8565929c83a38f3e3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 15 May 2017 22:34:38 -0600 Subject: [PATCH 398/452] path doesn't join urls so well --- client/libs/build/webpack_utils.js | 4 ++-- client/package.json | 1 + client/yarn.lock | 14 +++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index 2832598..bf9899b 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -1,6 +1,6 @@ const fs = require('fs-extra'); const _ = require('lodash'); -const path = require('path'); +const urljoin = require('url-join'); // ----------------------------------------------------------------------------- // Loads webpack assets file @@ -10,7 +10,7 @@ function loadWebpackAssets(app) { const webpackAssetsFilePath = `${app.outputPath}/${app.name}-webpack-assets.json`; if (fs.existsSync(webpackAssetsFilePath)) { webpackAssets = _.mapValues(fs.readJsonSync(webpackAssetsFilePath), asset => - _.mapValues(asset, assetFilename => path.join(app.publicPath, assetFilename)) + _.mapValues(asset, assetFilename => urljoin(app.publicPath, assetFilename)) ); } return webpackAssets; diff --git a/client/package.json b/client/package.json index 9b6ca49..7c484ff 100644 --- a/client/package.json +++ b/client/package.json @@ -72,6 +72,7 @@ "s3-website": "^3.1.0", "sass-loader": "^6.0.5", "style-loader": "^0.17.0", + "url-join": "^2.0.1", "url-loader": "^0.5.8", "webpack": "^2.5.1", "webpack-bundle-analyzer": "^2.7.0", diff --git a/client/yarn.lock b/client/yarn.lock index 5c9d380..c10e22e 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -112,7 +112,7 @@ 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@*, ansi-regex@^2.0.0: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -3506,7 +3506,7 @@ imports-loader@^0.7.1: loader-utils "^1.0.2" source-map "^0.5.6" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4683,14 +4683,10 @@ multipipe@^0.1.2: dependencies: duplexer2 "0.0.2" -mute-stream@0.0.5: +mute-stream@0.0.5, mute-stream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" -mute-stream@~0.0.4: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - nan@^2.3.0, nan@^2.3.2: version "2.6.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" @@ -7181,6 +7177,10 @@ url-join@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" +url-join@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.1.tgz#04b446fcd359a2fa42cc9b6962b219b91ddfe1a8" + url-loader@^0.5.8: version "0.5.8" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.8.tgz#b9183b1801e0f847718673673040bc9dc1c715c5" From 50e2e8b559a63472a3c3f66f31e5333cd3a30340 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 15 May 2017 22:42:44 -0600 Subject: [PATCH 399/452] urljoin again --- client/config/settings.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/config/settings.js b/client/config/settings.js index 036f256..84ec916 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -1,6 +1,7 @@ const fs = require('fs-extra'); const path = require('path'); const _ = require('lodash'); +const urljoin = require('url-join'); // There is a warning if the .env file is missing // This is fine in a production setting, where settings @@ -92,7 +93,7 @@ function outputPaths(name, port, options) { if (isProduction(options.stage)) { rootOutputPath = prodOutput; outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, name); - publicPath = path.join(prodAssetsUrl, withNameIfRequired(name, prodRelativeOutput, options)); + publicPath = urljoin(prodAssetsUrl, withNameIfRequired(name, prodRelativeOutput, options)); } return { From 060072a4067bf9980131afc2827b0679763adba4 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 16 May 2017 14:31:45 -0600 Subject: [PATCH 400/452] Use os to copy files --- client/libs/build/build.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 3b1543c..d1012aa 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -1,6 +1,7 @@ const fs = require('fs-extra'); const webpack = require('webpack'); const nodeWatch = require('node-watch'); +const exec = require('child_process').exec; const content = require('./content'); const webpackUtils = require('./webpack_utils'); @@ -35,11 +36,9 @@ function buildWebpackEntries(app) { // copy over static files to build directory // ----------------------------------------------------------------------------- function buildStatic(app) { - try { + if (fs.existsSync(app.staticPath)) { log.out(`Copying static files in ${app.staticPath}`); - fs.copy(app.staticPath, app.outputPath); - } catch (err) { - // No static dir. Do nothing + exec(`cp -r ${app.staticPath} ${app.outputPath}`); } } From d4a44dccc5eb6a75c550c56a9d873971f18c679e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 18 May 2017 12:04:28 -0600 Subject: [PATCH 401/452] Fixes copy of static files --- client/libs/build/build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index d1012aa..7c169e4 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -38,7 +38,7 @@ function buildWebpackEntries(app) { function buildStatic(app) { if (fs.existsSync(app.staticPath)) { log.out(`Copying static files in ${app.staticPath}`); - exec(`cp -r ${app.staticPath} ${app.outputPath}`); + exec(`cp -r ${app.staticPath}/. ${app.outputPath}`); } } From caca6f9ab336ba5c22ab53d1366e107c2ead3de2 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 18 May 2017 12:42:54 -0600 Subject: [PATCH 402/452] urljoin instead of path.join --- client/config/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/settings.js b/client/config/settings.js index 84ec916..83331d2 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -88,7 +88,7 @@ function outputPaths(name, port, options) { // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In development this will // point to whatever public url is serving dev assets. - let publicPath = path.join(devAssetsUrl, withNameIfRequired(name, devRelativeOutput, options)); + let publicPath = urljoin(devAssetsUrl, withNameIfRequired(name, devRelativeOutput, options)); if (isProduction(options.stage)) { rootOutputPath = prodOutput; From 1833ebba9fa5eb76671420ac8d6828692f7568d0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 23 May 2017 09:41:39 -0600 Subject: [PATCH 403/452] create new instance of express server for each client app --- client/webpack.hot.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 1c62e00..c000efd 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -10,14 +10,12 @@ const settings = require('./config/settings'); const webpackConfigBuilder = require('./config/webpack.config'); const clientApps = require('./libs/build/apps'); -const serverApp = express(); - const localIp = '0.0.0.0'; const appName = _.trim(argv._[0]); const hotPack = argv.hotPack; const shouldLint = argv.lint; -function setupMiddleware(apps) { +function setupMiddleware(serverApp, apps) { const webpackConfigs = _.map(apps, app => webpackConfigBuilder(app)); @@ -38,7 +36,7 @@ function setupMiddleware(apps) { } -function runServer(port, servePath) { +function runServer(serverApp, port, servePath) { serverApp.use(express.static(servePath)); serverApp.get('*', (req, res) => { res.sendFile(path.join(servePath, req.url)); @@ -54,8 +52,9 @@ function runServer(port, servePath) { } function launch(app) { - setupMiddleware([app]); - runServer(app.port, app.outputPath); + const serverApp = express(); + setupMiddleware(serverApp, [app]); + runServer(serverApp, app.port, app.outputPath); } const options = { hotPack, shouldLint, stage: 'hot', onlyPack: false, port: settings.hotPort, appPerPort: true }; From 3069b5d30246aad4de0235d6f8814fae7baf05c0 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 23 May 2017 16:49:29 -0600 Subject: [PATCH 404/452] Dynamically set port per app --- client/config/settings.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 83331d2..fcf4ed2 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -27,7 +27,7 @@ const prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); const prodAssetsUrl = `https://s3.amazonaws.com/${deployConfig.domain}`; -const devAssetsUrl = `${process.env.ASSETS_URL}:${hotPort}`; +const devAssetsUrl = process.env.ASSETS_URL; // Get a list of all directories in the apps directory. // These will be used to generate the entries for webpack @@ -88,12 +88,20 @@ function outputPaths(name, port, options) { // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In development this will // point to whatever public url is serving dev assets. - let publicPath = urljoin(devAssetsUrl, withNameIfRequired(name, devRelativeOutput, options)); + + let publicPath; if (isProduction(options.stage)) { rootOutputPath = prodOutput; outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, name); publicPath = urljoin(prodAssetsUrl, withNameIfRequired(name, prodRelativeOutput, options)); + } else { + let devUrl = devAssetsUrl; + // Include the port if we are running on localhost + if (_.includes(['localhost', '0.0.0.0', '127.0.0.1'], devAssetsUrl)) { + devUrl = `${devAssetsUrl}:${port}`; + } + publicPath = urljoin(devUrl, withNameIfRequired(name, devRelativeOutput, options)); } return { From 7c6c738035a822d07fbc67e8a4151340a84adf51 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 23 May 2017 17:02:43 -0600 Subject: [PATCH 405/452] Better check for local domain --- client/config/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/settings.js b/client/config/settings.js index fcf4ed2..c8db272 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -98,7 +98,7 @@ function outputPaths(name, port, options) { } else { let devUrl = devAssetsUrl; // Include the port if we are running on localhost - if (_.includes(['localhost', '0.0.0.0', '127.0.0.1'], devAssetsUrl)) { + if (_.find(['localhost', '0.0.0.0', '127.0.0.1'], d => _.includes(devAssetsUrl, d))) { devUrl = `${devAssetsUrl}:${port}`; } publicPath = urljoin(devUrl, withNameIfRequired(name, devRelativeOutput, options)); From e9c7c8dedcc1fa4f612d6af5b0aeb46dc903408f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 24 May 2017 17:39:10 -0600 Subject: [PATCH 406/452] Check for static dir for build and watch --- client/libs/build/build.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 7c169e4..cdfc23c 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -36,10 +36,8 @@ function buildWebpackEntries(app) { // copy over static files to build directory // ----------------------------------------------------------------------------- function buildStatic(app) { - if (fs.existsSync(app.staticPath)) { - log.out(`Copying static files in ${app.staticPath}`); - exec(`cp -r ${app.staticPath}/. ${app.outputPath}`); - } + log.out(`Copying static files in ${app.staticPath}`); + exec(`cp -r ${app.staticPath}/. ${app.outputPath}`); } // ----------------------------------------------------------------------------- @@ -91,10 +89,12 @@ function build(app) { return new Promise((resolve) => { - // Copy static files to build directory - buildStatic(app); - if (app.stage === 'hot') { - watchStatic(app); + if (fs.existsSync(app.staticPath)) { + // Copy static files to build directory + buildStatic(app); + if (app.stage === 'hot') { + watchStatic(app); + } } // Webpack build From 03bc136e9773e764886e5c5c9d67d91b9a9d00f8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 24 May 2017 17:48:22 -0600 Subject: [PATCH 407/452] Check for input dir --- client/libs/build/content.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/libs/build/content.js b/client/libs/build/content.js index 8fb12f2..dd72893 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -118,7 +118,7 @@ function buildContents( let results = []; - if (_.isEmpty(inputPath)) { + if (_.isEmpty(inputPath) || !fs.existsSync(inputPath)) { return results; } From b5ee907f096c5ae52456fcdfd6e15ee4e399436f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 24 May 2017 21:23:03 -0600 Subject: [PATCH 408/452] Fixes run hotPack mode --- client/libs/build/build.js | 2 +- client/webpack.hot.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index cdfc23c..7bb4763 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -75,7 +75,7 @@ function buildHtml(app, webpackAssets) { webpackAssets ); - if (app.stage === 'hot') { + if (app.stage === 'hot' && fs.existsSync(app.htmlPath)) { watchHtml(webpackAssets, app); } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index c000efd..919aa90 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -68,9 +68,10 @@ if (appName) { const results = clientApps.buildApps(options); const apps = _.map(results, result => result.app); const promises = _.map(results, result => result.buildPromise); + const serverApp = express(); Promise.all(promises).then(() => { - setupMiddleware(apps); - runServer(settings.hotPort, settings.paths.devOutput); + setupMiddleware(serverApp, apps); + runServer(serverApp, settings.hotPort, settings.paths.devOutput); }); } else { _.each(clientApps.buildApps(options), (result) => { From a34d9e2c519e21efae892a6cf7b278a554025872 Mon Sep 17 00:00:00 2001 From: David Ray Date: Fri, 26 May 2017 12:10:07 -0400 Subject: [PATCH 409/452] adjust formatting (#23) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 928a267..44fc279 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ If you have multiple applications you can run them one at a time with the applic `yarn hot hello_world` -then `visit http://localhost:8080` +then visit `http://localhost:8080` # Using the React Client Starter App @@ -198,4 +198,4 @@ This will serve files from the build/prod directory. License and attribution ----------------------- -MIT \ No newline at end of file +MIT From db91e29e37e255b8d8ba52d25c5832af56afe297 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 27 May 2017 17:07:02 -0600 Subject: [PATCH 410/452] Throw error if webpack fails --- client/libs/build/build.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 7bb4763..49de988 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -1,4 +1,5 @@ const fs = require('fs-extra'); +const _ = require('lodash'); const webpack = require('webpack'); const nodeWatch = require('node-watch'); const exec = require('child_process').exec; @@ -101,6 +102,11 @@ function build(app) { log.out(`Webpacking ${app.name}`); buildWebpackEntries(app).then((packResults) => { + + if (!_.isEmpty(packResults.webpackStats.errors)) { + throw packResults.webpackStats.errors.join(','); + } + const webpackAssets = webpackUtils.loadWebpackAssets(app); // Build html From 9742e571122700283a3a1e722fdc83b2a94ca797 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 27 May 2017 22:36:25 -0600 Subject: [PATCH 411/452] output webpack build errors --- client/libs/build/build.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 49de988..6064a4a 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -103,9 +103,9 @@ function build(app) { buildWebpackEntries(app).then((packResults) => { - if (!_.isEmpty(packResults.webpackStats.errors)) { - throw packResults.webpackStats.errors.join(','); - } + _.each(packResults.webpackStats.errors, (error) => { + log.error(error); + }); const webpackAssets = webpackUtils.loadWebpackAssets(app); From 24a97ba941288d6f7130b916b8297094a2e50f7e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 30 May 2017 12:51:53 -0600 Subject: [PATCH 412/452] Remove extra param --- client/libs/build/build.js | 1 - 1 file changed, 1 deletion(-) diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 6064a4a..7d08658 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -62,7 +62,6 @@ function watchHtml(webpackAssets, app) { nodeWatch(app.htmlPath, { recursive: true }, (evt, fullInputPath) => { log.out(`Change in html file ${fullInputPath}`); content.writeContent( - app.htmlPath, fullInputPath, webpackAssets, app); From 61574032199b71ed40a0d2938aa2e5b0157059c9 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 30 May 2017 16:20:31 -0600 Subject: [PATCH 413/452] Adds ability to override default webpack and app settings. --- README.md | 28 +++++++++++++++++ client/config/settings.js | 39 ++++++++++++++++++------ client/config/webpack.config.js | 53 +++++++++++++++++++-------------- 3 files changed, 88 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 44fc279..ae0707a 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,34 @@ an example "hello world" application in client/apps/hello_world Modify html and js files in that directory to build your application or copy paste that directory to build additional applications. The build process will automatically add a new webpack entry point for each folder in that directory. +## Custom Build Settings +----------- +Default build settings can be overridden by adding the following json files to the application directory: + +Change the output directory for an application by specifying "outName" which will override the default name +used when generating a path: + +In output_paths.json +` +{ + "outName": "hello_world" +} +` + +By default app.jsx is used as the webpack entry point. This can be overriden in webpack.json. Change the buildSuffix, +filename, chunkFilename and other settings: + +In webpack.json +` +{ + "file": "app.js", // The webpack entry. Default is app.jsx + "buildSuffix": ".js", // Change the build suffix. Default is _bundle.js + "filename": "[name]", // Change the output file name. Default is based on production/development + "chunkFilename": "[id]", // Change the chunkFilename. Default is based on production/development + "codeSplittingOff": true, // Turn off code splitting + "extractCssOff": true // Turn off css extraction +} +` ## React.js ----------- diff --git a/client/config/settings.js b/client/config/settings.js index c8db272..6343f1e 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -81,10 +81,18 @@ function withNameIfRequired(name, relativeOutput, options) { // ----------------------------------------------------------------------------- // Generates the main paths used for output // ----------------------------------------------------------------------------- -function outputPaths(name, port, options) { +function outputPaths(name, port, appPath, options) { + + let outName = name; + + const customOutputPaths = `${appPath}/output_paths.json`; + if (fs.existsSync(customOutputPaths)) { + const custom = JSON.parse(fs.readFileSync(customOutputPaths, 'utf8')); + outName = custom.outName; + } let rootOutputPath = devOutput; - let outputPath = options.onlyPack ? devOutput : path.join(devOutput, name); + let outputPath = options.onlyPack ? devOutput : path.join(devOutput, outName); // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In development this will // point to whatever public url is serving dev assets. @@ -93,15 +101,15 @@ function outputPaths(name, port, options) { if (isProduction(options.stage)) { rootOutputPath = prodOutput; - outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, name); - publicPath = urljoin(prodAssetsUrl, withNameIfRequired(name, prodRelativeOutput, options)); + outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, outName); + publicPath = urljoin(prodAssetsUrl, withNameIfRequired(outName, prodRelativeOutput, options)); } else { let devUrl = devAssetsUrl; // Include the port if we are running on localhost if (_.find(['localhost', '0.0.0.0', '127.0.0.1'], d => _.includes(devAssetsUrl, d))) { devUrl = `${devAssetsUrl}:${port}`; } - publicPath = urljoin(devUrl, withNameIfRequired(name, devRelativeOutput, options)); + publicPath = urljoin(devUrl, withNameIfRequired(outName, devRelativeOutput, options)); } return { @@ -113,18 +121,31 @@ function outputPaths(name, port, options) { // ----------------------------------------------------------------------------- // Generate settings needed for webpack +// Allow for custom overrides to be placed in webpack.json // ----------------------------------------------------------------------------- function webpackSettings(name, file, appPath, port, options) { - return { + + let custom = {}; + const customWebpack = `${appPath}/webpack.json`; + + if (fs.existsSync(customWebpack)) { + custom = JSON.parse(fs.readFileSync(customWebpack, 'utf8')); + } + + const production = isProduction(options.stage); + + return _.merge({ name, file, path: appPath, shouldLint: options.shouldLint, stage: options.stage, - production: isProduction(options.stage), + production, buildSuffix, port, - }; + filename: production ? '[name]-[chunkhash]' : '[name]', + chunkFilename: production ? '[id]-[chunkhash]' : '[id]', + }, custom); } // ----------------------------------------------------------------------------- @@ -143,7 +164,7 @@ function appSettings(name, port, options) { templateMap: {}, // Used to specify specific templates on a per file basis htmlOptions, }, webpackSettings(name, 'app.jsx', appPath, port, options), - outputPaths(name, port, options)); + outputPaths(name, port, appPath, options)); app.templateDirs = templateDirs(app, ['layouts']); return { diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 7ed089a..ec38877 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -89,24 +89,31 @@ module.exports = function webpackConfig(app) { const extractCSS = new ExtractTextPlugin(app.production ? '[name]-[chunkhash].css' : '[name].css'); - let plugins = [ - // Use to extract common code from multiple entry points into a single init.js - new webpack.optimize.CommonsChunkPlugin({ - name: `${app.name}_vendor`, - minChunks: module => module.context && module.context.indexOf('node_modules') !== -1 - }), - new webpack.optimize.CommonsChunkPlugin({ - name: `${app.name}_manifest`, - minChunks: Infinity - }), - // Generate webpack-assets.json to map path to assets generated with hashed names - new AssetsPlugin({ - path: app.outputPath, - fullPath: false, - filename: `${app.name}-webpack-assets.json` - }), - extractCSS - ]; + let plugins = []; + + if (!app.codeSplittingOff) { + plugins = [ + // Use to extract common code from multiple entry points into a single init.js + new webpack.optimize.CommonsChunkPlugin({ + name: `${app.name}_vendor`, + minChunks: module => module.context && module.context.indexOf('node_modules') !== -1 + }), + new webpack.optimize.CommonsChunkPlugin({ + name: `${app.name}_manifest`, + minChunks: Infinity + }), + // Generate webpack-assets.json to map path to assets generated with hashed names + new AssetsPlugin({ + path: app.outputPath, + fullPath: false, + filename: `${app.name}-webpack-assets.json` + }) + ]; + } + + if (!app.extractCssOff) { + plugins.push(extractCSS); + } if (app.production) { plugins = _.concat(plugins, [ @@ -144,9 +151,9 @@ module.exports = function webpackConfig(app) { const rules = [ { test: /\.js$/, use: jsLoaders, exclude: /node_modules/ }, { test: /\.jsx?$/, use: jsLoaders, exclude: /node_modules/ }, - { test: /\.s[ac]ss$/i, use: extractCSS.extract(scssLoaders) }, - { test: /\.css$/i, use: extractCSS.extract(cssLoaders) }, - { test: /\.less$/i, use: extractCSS.extract(lessLoaders) }, + { test: /\.s[ac]ss$/i, use: app.extractCssOff ? scssLoaders : extractCSS.extract(scssLoaders) }, + { test: /\.css$/i, use: app.extractCssOff ? cssLoaders : extractCSS.extract(cssLoaders) }, + { test: /\.less$/i, use: app.extractCssOff ? lessLoaders : extractCSS.extract(lessLoaders) }, { test: /.*\.(gif|png|jpg|jpeg|svg)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } ]; @@ -169,8 +176,8 @@ module.exports = function webpackConfig(app) { publicPath: app.publicPath, // Location where generated files will be output path: app.outputPath, - filename: app.production ? `[name]-[chunkhash]${app.buildSuffix}` : `[name]${app.buildSuffix}`, - chunkFilename: app.production ? `[id]-[chunkhash]${app.buildSuffix}` : `[id]${app.buildSuffix}`, + filename: `${app.filename}${app.buildSuffix}`, + chunkFilename: `${app.chunkFilename}${app.buildSuffix}`, sourceMapFilename: '[name].map', // http://webpack.github.io/docs/configuration.html#output-pathinfo pathinfo: !app.production From 216d12533097c758b949f849a1e9de5fabb2ad9f Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 2 Jun 2017 18:49:54 -0600 Subject: [PATCH 414/452] stub out sass and scss --- client/apps/hello_world/config/jest_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/apps/hello_world/config/jest_config.json b/client/apps/hello_world/config/jest_config.json index 3f85647..425179f 100644 --- a/client/apps/hello_world/config/jest_config.json +++ b/client/apps/hello_world/config/jest_config.json @@ -12,7 +12,7 @@ "moduleDirectories": ["node_modules"], "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js", - "\\.(css|less)$": "identity-obj-proxy" + "\\.(sass|scss|css|less)$": "identity-obj-proxy" }, "transform": { "^.+\\.jsx?$": "babel-jest" From df8c0d63f7fe1fa6839fcbf2ffcdbcc15ad4ec83 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 2 Jun 2017 18:50:38 -0600 Subject: [PATCH 415/452] Adds a trailing slash to publicPath --- client/config/settings.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/config/settings.js b/client/config/settings.js index 6343f1e..0e25481 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -112,6 +112,11 @@ function outputPaths(name, port, appPath, options) { publicPath = urljoin(devUrl, withNameIfRequired(outName, devRelativeOutput, options)); } + // Make sure the public path ends with a / or fonts will not have the correct path + if (!_.endsWith(publicPath)) { + publicPath = `${publicPath}/`; + } + return { rootOutputPath, outputPath, From dc45a6cf20db467d9b269253af023484d77c55c6 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 3 Jun 2017 13:04:25 -0600 Subject: [PATCH 416/452] Add style loader if not extracting css --- client/config/webpack.config.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index ec38877..1b28158 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -62,6 +62,15 @@ module.exports = function webpackConfig(app) { } ]; + if (app.extractCssOff) { + cssLoaders.unshift({ + loader: 'style-loader', + options: { + sourceMap: isDevelopment, + } + }); + } + const scssLoaders = cssLoaders.slice(0); scssLoaders.push({ loader: 'sass-loader', From 85045e5aade1d0d437ca8f54a19eaa3e3beccb6b Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 3 Jun 2017 15:09:23 -0600 Subject: [PATCH 417/452] Adds additional param for outputting all apps to the root --- .s3-website.json | 8 ++++++-- client/config/settings.js | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.s3-website.json b/.s3-website.json index 2cf5d2b..d9f6925 100644 --- a/.s3-website.json +++ b/.s3-website.json @@ -6,7 +6,9 @@ "corsConfiguration": [ { "AllowedMethods": [ - "POST", "PUT", "DELETE" + "POST", + "PUT", + "DELETE" ], "AllowedOrigins": [ "*" @@ -18,5 +20,7 @@ } ], "enableCloudfront": true, - "domain": "reactclientstarterapp.com" + "retries": 20, + "domain": "reactclientstarterapp.com", + "configFile": ".s3-website.json" } \ No newline at end of file diff --git a/client/config/settings.js b/client/config/settings.js index 0e25481..c9e246f 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -72,7 +72,7 @@ function isProduction(stage) { // Generates a path with the app name if needed // ----------------------------------------------------------------------------- function withNameIfRequired(name, relativeOutput, options) { - if (!options.onlyPack && !options.appPerPort) { + if (!options.onlyPack && !options.appPerPort && !options.rootOutput) { return path.join(relativeOutput, name); } return relativeOutput; From cc1cc2d4bdbf1380bb3ac22776bdd68b47e0c01e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 3 Jun 2017 15:14:30 -0600 Subject: [PATCH 418/452] Adds additional build param --- client/build.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/build.js b/client/build.js index 4d9279d..913119b 100644 --- a/client/build.js +++ b/client/build.js @@ -4,6 +4,12 @@ const argv = require('minimist')(process.argv.slice(2)); const stage = argv.release ? 'production' : 'development'; const port = parseInt(process.env.ASSETS_PORT, 10) || 8080; -const options = { port, stage, onlyPack: argv.onlyPack, noClean: argv.noClean }; +const options = { + port, + stage, + onlyPack: argv.onlyPack, + noClean: argv.noClean, + rootOutput: argv.rootOutput +}; apps.buildApps(options); From e9dcfee10487a486d025d9b10fe6470b93b9e851 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Sat, 3 Jun 2017 21:01:29 -0600 Subject: [PATCH 419/452] Fix output path generation --- client/config/settings.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index c9e246f..1c3affa 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -68,12 +68,16 @@ function isProduction(stage) { return stage === 'production' || stage === 'staging'; } +function isNameRequired(options) { + return !options.onlyPack && !options.appPerPort && !options.rootOutput; +} + // ----------------------------------------------------------------------------- // Generates a path with the app name if needed // ----------------------------------------------------------------------------- function withNameIfRequired(name, relativeOutput, options) { - if (!options.onlyPack && !options.appPerPort && !options.rootOutput) { - return path.join(relativeOutput, name); + if (isNameRequired(options)) { + return urljoin(relativeOutput, name); } return relativeOutput; } @@ -92,7 +96,7 @@ function outputPaths(name, port, appPath, options) { } let rootOutputPath = devOutput; - let outputPath = options.onlyPack ? devOutput : path.join(devOutput, outName); + let outputPath = isNameRequired(options) ? path.join(devOutput, outName) : devOutput; // Public path indicates where the assets will be served from. In dev this will likely be // localhost or a local domain. In production this could be a CDN. In development this will // point to whatever public url is serving dev assets. @@ -101,7 +105,7 @@ function outputPaths(name, port, appPath, options) { if (isProduction(options.stage)) { rootOutputPath = prodOutput; - outputPath = options.onlyPack ? prodOutput : path.join(prodOutput, outName); + outputPath = isNameRequired(options) ? path.join(prodOutput, outName) : prodOutput; publicPath = urljoin(prodAssetsUrl, withNameIfRequired(outName, prodRelativeOutput, options)); } else { let devUrl = devAssetsUrl; From f8f2405f55097d600fcf6dbc1331ed7eb8da9261 Mon Sep 17 00:00:00 2001 From: Eric Durr Date: Tue, 6 Jun 2017 14:20:28 -0600 Subject: [PATCH 420/452] libs test capability add and api spec changes (#24) --- .../apps/hello_world/config/jest_config.json | 2 +- client/config/jest_config.json | 21 + client/config/setup_tests.js | 2 + client/libs/api/api.spec.js | 128 +- client/libs/api/superagent-mock-config.js | 169 ++ client/libs/middleware/api.spec.js | 24 +- client/libs/store/configure_store.spec.js | 4 +- client/package.json | 6 + client/specs_support/helper.js | 36 + client/yarn.lock | 748 ++++++- package.json | 7 +- yarn.lock | 1981 ++++++++++++++++- 12 files changed, 3005 insertions(+), 123 deletions(-) create mode 100644 client/config/jest_config.json create mode 100644 client/config/setup_tests.js create mode 100644 client/libs/api/superagent-mock-config.js diff --git a/client/apps/hello_world/config/jest_config.json b/client/apps/hello_world/config/jest_config.json index 425179f..66a2bf0 100644 --- a/client/apps/hello_world/config/jest_config.json +++ b/client/apps/hello_world/config/jest_config.json @@ -6,7 +6,7 @@ "rootDir": "../", "modulePaths": [ "/node_modules", - "/../node_modules" + "/../../node_modules" ], "moduleFileExtensions": ["js", "jsx"], "moduleDirectories": ["node_modules"], diff --git a/client/config/jest_config.json b/client/config/jest_config.json new file mode 100644 index 0000000..061e166 --- /dev/null +++ b/client/config/jest_config.json @@ -0,0 +1,21 @@ +{ + "globals": { + "__DEV__": true + }, + "setupTestFrameworkScriptFile": "./config/setup_tests.js", + "rootDir": "../", + "modulePaths": [ + "/node_modules", + "/../node_modules" + ], + "moduleFileExtensions": ["js", "jsx"], + "moduleDirectories": ["node_modules"], + "testPathIgnorePatterns": ["/node_modules/", "/apps/"], + "moduleNameMapper": { + "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js", + "\\.(css|less|scss)$": "identity-obj-proxy" + }, + "transform": { + "^.+\\.jsx?$": "babel-jest" + } +} diff --git a/client/config/setup_tests.js b/client/config/setup_tests.js new file mode 100644 index 0000000..f55205b --- /dev/null +++ b/client/config/setup_tests.js @@ -0,0 +1,2 @@ +// import 'jasmine-core'; +// import 'jasmine-ajax'; diff --git a/client/libs/api/api.spec.js b/client/libs/api/api.spec.js index f848c57..00306b7 100644 --- a/client/libs/api/api.spec.js +++ b/client/libs/api/api.spec.js @@ -1,8 +1,13 @@ +import superAgentMock from 'superagent-mock'; +import Request from 'superagent'; import api from './api'; import Network from '../constants/network'; -import Helper from '../../specs_support/helper'; +import config from './superagent-mock-config'; +import Helper from '../../specs_support/helper'; describe('api', () => { + let superagentMock; + const url = '/api/test/12'; const jwt = 'jwt_token'; const apiUrl = 'http://www.example.com'; const csrf = 'csrf_value'; @@ -10,116 +15,105 @@ describe('api', () => { const body = {}; const headers = {}; - Helper.stubAjax(); + beforeEach(() => { + superagentMock = superAgentMock(Request, config); + }); + + afterEach(() => { + superagentMock.unset(); + }); it('calls Get', () => { - const url = '/api/test/1'; - api.get(url, apiUrl, jwt, csrf, params, headers).then((result) => { - expect(result.statusCode).toBe(200); - expect(result.text).toEqual(Helper.testPayload()); + expect.assertions(3); + api.get( + url, + apiUrl, + jwt, + csrf, + params, + headers + ).then((data) => { + expect(data.body.status).toBe(200); + expect(data.body.contentType).toContain('application/json'); + expect(data.body.responseText).toContain('Starter App'); }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.method.toLowerCase()).toEqual(Network.GET); - expect(request.requestHeaders.Accept).toEqual('application/json'); - expect(request.requestHeaders.Authorization).toEqual(`Bearer ${jwt}`); - expect(request.requestHeaders['X-CSRF-Token']).toEqual(csrf); }); it('calls Get without a jwt', () => { - const url = '/api/test/2'; - api.get(url, apiUrl, null, csrf, params, headers).then((result) => { - expect(result.statusCode).toBe(200); - }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.requestHeaders.Authorization).toBeUndefined(); - expect(request.requestHeaders['X-CSRF-Token']).toEqual(csrf); + api.get( + url, + apiUrl, + null, + csrf, + params, + headers + ).then(data => expect(data.body.statusText).toContain('Unauthorized')); }); it('calls Get without a csrf', () => { - const url = '/api/test/3'; - api.get(url, apiUrl, jwt, null, params, headers).then((result) => { - expect(result.statusCode).toBe(200); - }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.requestHeaders.Authorization).toEqual(`Bearer ${jwt}`); - expect(request.requestHeaders['X-CSRF-Token']).toBeUndefined(); + api.get( + url, + apiUrl, + jwt, + null, + params, + headers + ).then(result => + expect(result.body.status).toBe(401)); }); it('calls Get with a full url', () => { const url = 'http://www.example.com/api/test/full'; - api.get(url, apiUrl, jwt, null, params, headers).then((result) => { - expect(result.statusCode).toBe(200); - }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(url); + api.get(url, apiUrl, jwt, csrf, params, headers).then(data => + expect(data.body.status).toBe(200)); }); it('calls Post', () => { const url = '/api/test'; api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { - expect(result.statusCode).toBe(200); + expect(result.code).toBe(201); }); }); it('calls Post with a full url', () => { const url = 'http://www.example.com/api/test/full'; api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { - expect(result.statusCode).toBe(200); + expect(result.code).toBe(201); }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(url); - expect(request.method.toLowerCase()).toEqual(Network.POST); }); it('calls Put', () => { - const url = '/api/test/4'; api.put(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { - expect(result.statusCode).toBe(200); - const request = result.req; - expect(request.method.toLowerCase()).toEqual(Network.PUT); + expect(result.code).toBe(202); }); }); it('calls Delete', () => { - const url = '/api/test/5'; api.del(url, apiUrl, jwt, csrf, params, headers).then((result) => { - expect(result.statusCode).toBe(200); + expect(result.code).toBe(204); + }); + }); + + it('calls execRequest directly', () => { + api.execRequest(Network.GET, url, apiUrl, jwt, csrf, params, headers).then((result) => { + expect(result.body.status).toBe(200); + expect(result.body.responseText).toEqual(Helper.testPayload()); }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.method.toLowerCase()).toEqual(Network.DEL); }); it('calls execRequest directly', () => { - const url = '/api/test/6'; - api.execRequest(Network.GET, url, apiUrl, null, null).then((result) => { - expect(result.statusCode).toBe(200); - expect(result.text).toEqual(Helper.testPayload()); + api.execRequest(Network.GET, url, apiUrl, null, null).then((data) => { + expect(data.body.status).toBe(401); + expect(data.body.responseText).toBeUndefined(); }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.method.toLowerCase()).toEqual(Network.GET); - expect(request.requestHeaders.Accept).toEqual('application/json'); - expect(request.requestHeaders.Authorization).toBeUndefined(); - expect(request.requestHeaders['X-CSRF-Token']).toBeUndefined(); }); it('calls execRequest with optional timeout', () => { - const url = '/api/test/7'; const timeout = 1000; - api.execRequest(Network.GET, url, apiUrl, null, null, {}, {}, {}, timeout).then((result) => { - expect(result.statusCode).toBe(200); - expect(result.text).toEqual(Helper.testPayload()); + api.execRequest(Network.GET, url, apiUrl, jwt, csrf, {}, {}, {}, timeout).then((result) => { + expect(result.body.status).toBe(200); + expect(result.body.responseText).toEqual(Helper.testPayload()); }); - const request = jasmine.Ajax.requests.mostRecent(); - expect(request.url).toEqual(`${apiUrl}${url}`); - expect(request.method.toLowerCase()).toEqual(Network.GET); - expect(request.requestHeaders.Accept).toEqual('application/json'); - expect(request.requestHeaders.Authorization).toBeUndefined(); - expect(request.requestHeaders['X-CSRF-Token']).toBeUndefined(); }); describe('Pending Requests', () => { diff --git a/client/libs/api/superagent-mock-config.js b/client/libs/api/superagent-mock-config.js new file mode 100644 index 0000000..4f5f553 --- /dev/null +++ b/client/libs/api/superagent-mock-config.js @@ -0,0 +1,169 @@ +// ./superagent-mock-config.js file +module.exports = [ + { + /** + * regular expression of URL + */ + pattern: 'http://www.example.com(.*)', + + /** + * returns the data + * + * @param match array Result of the resolution of the regular expression + * @param params object sent by 'send' function + * @param headers object set by 'set' function + * @param context object the context of running the fixtures function + */ + fixtures(match, params, headers, context) { + /** + * Returning error codes example: + * request.get('https://domain.example/404').end(function(err, res){ + * console.log(err); // 404 + * console.log(res.notFound); // true + * }) + */ + if (match[1] === '/404') { + throw new Error(404); + } + + /** + * Checking on parameters example: + * request.get('https://domain.example/hero').send({superhero: "superman"}).end(function(err, res){ + * console.log(res.body); // "Your hero: superman" + * }) + */ + + if (match[1] === '/hero') { + if (params['superhero']) { + return 'Your hero:' + params['superhero']; + } + return 'You didnt choose a hero'; + } + + + /** + * Checking on headers example: + * request.get('https://domain.example/authorized_endpoint').set({Authorization: "9382hfih1834h"}).end(function(err, res){ + * console.log(res.body); // "Authenticated!" + * }) + */ + + if (match[1] === '/api/test/12') { + if (headers.Authorization && headers['X-CSRF-Token']) { + return { + status: 200, + contentType: 'application/json', + statusText: 'OK', + responseText: JSON.stringify([{ + id: 1, + name: 'Starter App' + }]) + }; + } + + return { + status: 401, + statusText: 'Unauthorized', + }; + } + + /** + * Cancelling the mocking for a specific matched route example: + * request.get('https://domain.example/server_test').end(function(err, res){ + * console.log(res.body); // (whatever the actual server would have returned) + * }) + */ + + if (match[1] === '/api/test/full') { + return { + status: 200, + contentType: 'application/json', + statusText: 'OK', + responseText: JSON.stringify([{ + id: 1, + name: 'Starter App' + }]) + }; + } + + /** + * Delaying the response with a specific number of milliseconds: + * request.get('https://domain.example/delay_test').end(function(err, res){ + * console.log(res.body); // This log will be written after the delay time has passed + * }) + */ + + if (match[1] === '/delay_test') { + context.delay = 3000; // This will delay the response by 3 seconds + return 'zzZ'; + } + + /** + * Mocking progress events: + * request.get('https://domain.example/progress_test') + * .on('progress', function (e) { console.log(e.percent + '%'); }) + * .end(function(err, res){ + * console.log(res.body); // This log will be written after all progress events emitted + * }) + */ + + if (match[1] === '/progress_test') { + context.progress = { + parts: 3, // The number of progress events to emit one after the other with + // linear progress + // (Meaning, loaded will be [total/parts]) + delay: 1000, // [optional] The delay of emitting each of the progress events + // by ms + // (default is 0 unless context.delay specified, then it's + // [delay/parts]) + total: 100, // [optional] The total as it will appear in the progress + // event (default is 100) + lengthComputable: true, // [optional] The same as it will appear in the progress + // event (default is true) + direction: 'upload' // [optional] superagent adds 'download'/'upload' direction + // to the event (default is 'upload') + }; + return 'Hundred percent!'; + } + }, + + /** + * returns the result of the GET request + * + * @param match array Result of the resolution of the regular expression + * @param data mixed Data returns by `fixtures` attribute + */ + get(match, data) { + return { + body: data + }; + }, + + /** + * returns the result of the POST request + * + * @param match array Result of the resolution of the regular expression + * @param data mixed Data returns by `fixtures` attribute + */ + post(match, data) { + return { + code: 201, + body: data + }; + }, + + put(match, data) { + return { + code: 202, + body: data + }; + }, + + delete(match, data) { + return { + code: 204, + body: data + }; + }, + }, +]; diff --git a/client/libs/middleware/api.spec.js b/client/libs/middleware/api.spec.js index dd17cb3..c90569c 100644 --- a/client/libs/middleware/api.spec.js +++ b/client/libs/middleware/api.spec.js @@ -3,7 +3,7 @@ import Network from '../constants/network'; import Helper from '../../specs_support/helper'; describe('api middleware', () => { - Helper.stubAjax(); + Helper.mockAllAjax(); it('implements Redux middleware interface', () => { const store = { getState: () => {} }; @@ -50,13 +50,25 @@ describe('api middleware', () => { }); describe('apiRequest', () => { - Helper.stubAjax(); - it('returns a promise', () => { - const store = { getState: () => {} }; - const action = {}; + class Store { + getState() { + return ( + { + settings: { + apiUrl: 'http://www.something.com/asdfaoer' + } + } + ); + } + dispatch() {} + } + const store = new Store(); + const action = { + method: Network.GET, + }; const promise = apiRequest(store, action); - expect(promise.then).toBe(); + expect(promise.then).toBeDefined(); }); }); diff --git a/client/libs/store/configure_store.spec.js b/client/libs/store/configure_store.spec.js index ccce5d1..607a840 100644 --- a/client/libs/store/configure_store.spec.js +++ b/client/libs/store/configure_store.spec.js @@ -10,7 +10,9 @@ describe('configure store', () => { jwt: 'jwt_token', settings, }; - const store = configureStore(initialState); + const rootReducer = state => (state); + const middleware = []; + const store = configureStore(initialState, rootReducer, middleware); expect(store.getState().settings).toBe(settings); expect(store.getState().jwt).toBe('jwt_token'); }); diff --git a/client/package.json b/client/package.json index 7c484ff..1840e81 100644 --- a/client/package.json +++ b/client/package.json @@ -1,5 +1,7 @@ { "scripts": { + "test": "./node_modules/jest/bin/jest.js --config=config/jest_config.json", + "watch": "./node_modules/jest/bin/jest.js --config=config/jest_config.json --watch", "postinstall": "node node_modules/phantomjs-prebuilt/install.js && for dir in apps/*; do cd \"$dir\" || continue; yarn; cd ..; cd ..; done", "nuke": "rm -rf node_modules && for dir in apps/*; do cd \"$dir\" || continue; rm -rf node_modules; cd ..; cd ..; done" }, @@ -48,6 +50,7 @@ "istanbul-instrumenter-loader": "^2.0.0", "jasmine": "^2.6.0", "jasmine-core": "^2.6.1", + "jest": "^20.0.4", "less": "2.7.2", "less-loader": "^4.0.3", "lodash": "^4.17.4", @@ -66,12 +69,15 @@ "psi": "^3.0.0", "react": "^15.5.4", "react-hot-loader": "next", + "react-redux": "^5.0.5", + "redux": "^3.6.0", "redux-devtools": "^3.4.0", "redux-devtools-dock-monitor": "^1.1.2", "redux-devtools-log-monitor": "^1.3.0", "s3-website": "^3.1.0", "sass-loader": "^6.0.5", "style-loader": "^0.17.0", + "superagent-mock": "^3.4.0", "url-join": "^2.0.1", "url-loader": "^0.5.8", "webpack": "^2.5.1", diff --git a/client/specs_support/helper.js b/client/specs_support/helper.js index a03619b..09577b1 100644 --- a/client/specs_support/helper.js +++ b/client/specs_support/helper.js @@ -1,5 +1,6 @@ import _ from 'lodash'; import { combineReducers } from 'redux'; +import nock from 'nock'; import API from '../libs/middleware/api'; import settings from '../libs/reducers/settings'; @@ -69,6 +70,41 @@ export default class Helper { }); } + static mockRequest(method, apiUrl, url, expectedHeaders) { + return nock(apiUrl, expectedHeaders) + .intercept(url, method) + .reply( + 200, + Helper.testPayload(), + { 'content-type': 'application/json' } + ); + } + + static mockAllAjax() { + beforeEach(() => { + nock('http://www.example.com') + .persist() + .get(RegExp('.*')) + .reply(200, Helper.testPayload(), { 'content-type': 'application/json' }); + nock('http://www.example.com') + .persist() + .post(RegExp('.*')) + .reply(200, Helper.testPayload(), { 'content-type': 'application/json' }); + nock('http://www.example.com') + .persist() + .put(RegExp('.*')) + .reply(200, Helper.testPayload(), { 'content-type': 'application/json' }); + nock('http://www.example.com') + .persist() + .delete(RegExp('.*')) + .reply(200, Helper.testPayload(), { 'content-type': 'application/json' }); + }); + + afterEach(() => { + nock.cleanAll(); + }); + } + static mockClock() { beforeEach(() => { jasmine.clock().install(); // Mock out the built in timers diff --git a/client/yarn.lock b/client/yarn.lock index c10e22e..7b2e1f7 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -14,6 +14,10 @@ version "2.53.42" resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz#74cb77fb6052edaff2a8984ddafd88d419f25cac" +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + abbrev@1, abbrev@1.0.x, abbrev@~1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" @@ -31,6 +35,12 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" +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" @@ -41,7 +51,7 @@ acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.3: +acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" @@ -104,7 +114,7 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -112,7 +122,7 @@ 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: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -120,6 +130,12 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" @@ -151,6 +167,12 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + aproba@^1.0.3: version "1.1.1" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" @@ -198,6 +220,10 @@ array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + array-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" @@ -228,7 +254,7 @@ array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -arrify@^1.0.0: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -298,7 +324,7 @@ async@^0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.1, async@^2.1.2, async@^2.1.5: +async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.1.5: version "2.4.0" resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" dependencies: @@ -372,7 +398,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.24.1: +babel-core@^6.0.0, babel-core@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" dependencies: @@ -544,6 +570,14 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + babel-loader@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.0.0.tgz#2e43a66bee1fff4470533d0402c8a4532fafbaf7" @@ -564,6 +598,18 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-istanbul@^4.0.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.2" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + babel-plugin-rewire@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-rewire/-/babel-plugin-rewire-1.1.0.tgz#a6b966d9d8c06c03d95dcda2eec4e2521519549b" @@ -986,6 +1032,12 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" @@ -1181,6 +1233,12 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" @@ -1246,6 +1304,18 @@ browserslist@^2.1.2: caniuse-lite "^1.0.30000665" electron-to-chromium "^1.3.9" +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-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" @@ -1308,6 +1378,10 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + camel-case@3.0.x: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -1445,6 +1519,10 @@ chunk-manifest-webpack-plugin@^1.1.0: dependencies: webpack-core "^0.6.9" +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" @@ -1562,7 +1640,7 @@ 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.0.0, color-convert@^1.3.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: @@ -1701,11 +1779,15 @@ 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.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0: +convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0, convert-source-map@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1778,6 +1860,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-react-class@^15.5.3: + version "15.5.3" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.3.tgz#fb0f7cae79339e9a179e194ef466efa3923820fe" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + cross-spawn-async@^2.1.1: version "2.2.5" resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" @@ -1907,6 +1997,16 @@ csso@~2.3.1: 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" @@ -1941,7 +2041,7 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@^2.1.1, debug@^2.2.0: +debug@2, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: version "2.6.6" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" dependencies: @@ -2049,6 +2149,12 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -2107,6 +2213,10 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" +diff@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -2163,6 +2273,10 @@ dotenv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" +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" + download@^4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac" @@ -2312,7 +2426,7 @@ enhanced-resolve@^3.0.0: object-assign "^4.0.1" tapable "^0.2.5" -errno@^0.1.1, errno@^0.1.3: +"errno@>=0.1.1 <0.2.0-0", errno@^0.1.1, errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -2406,7 +2520,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^ version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.8.x: +escodegen@1.8.x, escodegen@^1.6.1: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: @@ -2614,6 +2728,12 @@ evp_bytestokey@^1.0.0: dependencies: create-hash "^1.1.1" +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + execa@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" @@ -2731,6 +2851,18 @@ fastparse@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + fbjs@^0.8.9: version "0.8.12" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" @@ -2789,6 +2921,13 @@ filenamify@^1.0.1: strip-outer "^1.0.0" trim-repeated "^1.0.0" +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + filesize@^3.5.6: version "3.5.9" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.9.tgz#9e3dd8a9b124f5b2f1fb2ee9cd13a86c707bb222" @@ -2830,6 +2969,12 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" @@ -3224,6 +3369,10 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + gtoken@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-1.2.2.tgz#172776a1a9d96ac09fc22a00f5be83cee6de8820" @@ -3291,7 +3440,7 @@ gzip-size@^3.0.0: dependencies: duplexer "^0.1.1" -handlebars@^4.0.1: +handlebars@^4.0.1, handlebars@^4.0.3: version "4.0.8" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" dependencies: @@ -3403,6 +3552,10 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoist-non-react-statics@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" + 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" @@ -3418,6 +3571,12 @@ 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.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + 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" @@ -3475,9 +3634,9 @@ humanize-url@^1.0.1: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -iconv-lite@~0.4.13: - version "0.4.17" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" +iconv-lite@0.4.13, iconv-lite@~0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" icss-replace-symbols@^1.0.2: version "1.0.2" @@ -3582,7 +3741,7 @@ interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -invariant@^2.2.0: +invariant@^2.0.0, invariant@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -3630,6 +3789,12 @@ is-bzip2@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" @@ -3838,6 +4003,22 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" +istanbul-api@^1.1.1: + version "1.1.9" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.2" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + istanbul-instrumenter-loader@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz#e5492900ab0bba835efa8024cb00be9b3eea2700" @@ -3847,11 +4028,21 @@ istanbul-instrumenter-loader@^2.0.0: loader-utils "^0.2.16" object-assign "^4.1.0" -istanbul-lib-coverage@^1.1.0: +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" -istanbul-lib-instrument@^1.1.3: +istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.1.3, istanbul-lib-instrument@^1.4.2: version "1.7.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" dependencies: @@ -3863,6 +4054,43 @@ istanbul-lib-instrument@^1.1.3: istanbul-lib-coverage "^1.1.0" semver "^5.3.0" +istanbul-lib-instrument@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" + dependencies: + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" + dependencies: + handlebars "^4.0.3" + istanbul@0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" @@ -3898,6 +4126,217 @@ jasminewd2@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.1.0.tgz#da595275d1ae631de736ac0a7c7d85c9f73ef652" +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" + +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" + +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" + +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.0" + +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.3" + +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" + dependencies: + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" + +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" + +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" + dependencies: + jest-regex-util "^20.0.3" + +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.3" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" + natural-compare "^1.4.0" + pretty-format "^20.0.3" + +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" + leven "^2.1.0" + mkdirp "^0.5.1" + +jest-validate@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.3" + leven "^2.1.0" + pretty-format "^20.0.3" + +jest@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" + dependencies: + jest-cli "^20.0.4" + jju@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa" @@ -3920,7 +4359,7 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" -js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1: +js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.7.0: version "3.8.4" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" dependencies: @@ -3938,6 +4377,30 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -4105,6 +4568,10 @@ less@2.7.2: request "^2.72.0" source-map "^0.5.3" +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -4143,10 +4610,21 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.x 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" + lockfile@~1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" +lodash-es@^4.2.0, lodash-es@^4.2.1: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" + lodash._arraycopy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" @@ -4427,7 +4905,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4488,6 +4966,12 @@ make-dir@^1.0.0: dependencies: pify "^2.3.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + 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" @@ -4557,11 +5041,15 @@ merge-stream@^1.0.0: dependencies: readable-stream "^2.0.1" +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + 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, micromatch@^2.3.7: +micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -4632,7 +5120,7 @@ minimist@1.1.x: version "1.1.3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -4740,6 +5228,10 @@ node-gyp@^3.3.1, node-gyp@~3.6.0: tar "^2.0.0" which "1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + node-libs-browser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" @@ -4768,6 +5260,15 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + node-pre-gyp@^0.6.29: version "0.6.34" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" @@ -5035,6 +5536,10 @@ 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.0" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.0.tgz#b4389362170e7ef9798c3c7716d80ebc0106fccf" + oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -5068,7 +5573,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@1.x, once@^1.3.0, once@^1.3.3, once@~1.4.0: +once@1.x, once@^1.3.0, once@^1.3.3, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -5142,6 +5647,20 @@ osenv@0, osenv@^0.1.4, osenv@~0.1.3: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -5190,6 +5709,10 @@ parse-key@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/parse-key/-/parse-key-0.2.1.tgz#7bcf76595536e36075664be4d687e4bdd910208f" +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" @@ -5208,6 +5731,10 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -5628,6 +6155,13 @@ pretty-bytes@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" +pretty-format@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + private@^0.1.6: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -5673,6 +6207,13 @@ prop-types@^15.0.0, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, fbjs "^0.8.9" loose-envify "^1.3.1" +prop-types@^15.5.10: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -5854,6 +6395,18 @@ react-pure-render@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" +react-redux@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.5.tgz#f8e8c7b239422576e52d6b7db06439469be9846a" + dependencies: + create-react-class "^15.5.3" + hoist-non-react-statics "^1.0.3" + invariant "^2.0.0" + lodash "^4.2.0" + lodash-es "^4.2.0" + loose-envify "^1.1.0" + prop-types "^15.5.10" + react@^15.5.4: version "15.5.4" resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" @@ -6088,6 +6641,15 @@ redux-devtools@^3.4.0: prop-types "^15.5.7" redux-devtools-instrument "^1.0.1" +redux@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.2" + regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" @@ -6283,11 +6845,11 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.x: +resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.3.3: +resolve@^1.1.6, resolve@^1.3.2, resolve@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: @@ -6391,6 +6953,18 @@ safe-json-parse@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-2.0.0.tgz#6da43f2e4a864335773b1d2df0db2c1962a0beec" +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + sass-graph@^2.1.1: version "2.2.2" resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.2.tgz#f4d6c95b546ea2a09d14176d0fc1a07ee2b48354" @@ -6420,7 +6994,7 @@ sax@0.6.x: version "0.6.1" resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" -sax@1.2.1, sax@>=0.6.0, sax@~1.2.1: +sax@1.2.1, sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -6561,6 +7135,10 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6733,6 +7311,12 @@ 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-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + string-template@^0.2.0, string-template@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -6787,16 +7371,16 @@ strip-bom-stream@^1.0.0: first-chunk-stream "^1.0.0" strip-bom "^2.0.0" +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-dirs@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0" @@ -6850,6 +7434,10 @@ sum-up@^1.0.1: dependencies: chalk "^1.0.0" +superagent-mock@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/superagent-mock/-/superagent-mock-3.4.0.tgz#8c872abb2604531ffdf33cc3da7b83b736a5c490" + superagent@^3.5.0: version "3.5.2" resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.5.2.tgz#3361a3971567504c351063abeaae0faa23dbf3f8" @@ -6869,7 +7457,7 @@ 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: +supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -6891,6 +7479,10 @@ symbol-observable@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -6942,10 +7534,26 @@ term-size@^0.1.0: dependencies: execa "^0.4.0" +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" +throat@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.1.0.tgz#ef22d8855963b3fdc626d043508f24c4cdf7d3c3" + dependencies: + double-ended-queue "^2.1.0-0" + throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -7007,6 +7615,10 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + to-absolute-glob@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" @@ -7021,12 +7633,16 @@ to-fast-properties@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" -tough-cookie@~2.3.0: +tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -7335,12 +7951,22 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + ware@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4" dependencies: wrap-fn "^0.1.0" +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + watchpack@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" @@ -7378,6 +8004,14 @@ webdriver-manager@^12.0.1: semver "^5.3.0" xml2js "^0.4.17" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + webpack-bundle-analyzer@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.7.0.tgz#9a8320a9e33917ade47aa1369013bbf4d4a9f5af" @@ -7458,10 +8092,23 @@ webpack@^2.5.1: webpack-sources "^0.2.3" yargs "^6.0.0" +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" +whatwg-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" @@ -7470,7 +8117,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@1, which@^1.1.1, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: +which@1, which@^1.1.1, which@^1.2.12, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: @@ -7504,6 +8151,13 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +worker-farm@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + dependencies: + errno ">=0.1.1 <0.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -7558,6 +8212,10 @@ 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" + xml2js@0.4.17, xml2js@^0.4.17: version "0.4.17" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" @@ -7602,6 +8260,12 @@ yargs-parser@^4.2.0: dependencies: camelcase "^3.0.0" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + yargs@^6.0.0, yargs@^6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" @@ -7620,6 +8284,24 @@ yargs@^6.0.0, yargs@^6.6.0: y18n "^3.2.1" yargs-parser "^4.2.0" +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" diff --git a/package.json b/package.json index a960a5f..8625fe4 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "homepage": "https://github.com/atomicjolt/react_client_starter_app", "scripts": { "postinstall": "cd ./client && yarn", - "test": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn test; cd ..; cd ..; done", + "test": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn test; cd ..; cd ..; done && yarn test", "test_debug": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; node debug ./node_modules/jest/bin/jest --runInBand --config=config/jest_config.json; cd ..; cd ..; done", "watch": "cd ./client && for dir in apps/*; do cd \"$dir\" || continue; yarn watch; cd ..; cd ..; done", "hot": "cd ./client && node webpack.hot.js", @@ -33,5 +33,8 @@ "dependencies": { "del": "^2.2.2" }, - "devDependencies": {} + "devDependencies": { + "jest": "^20.0.4", + "nock": "^9.0.13" + } } diff --git a/yarn.lock b/yarn.lock index 478af43..b627085 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,90 @@ # yarn lockfile v1 +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0, ansi-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -12,14 +96,208 @@ array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" -arrify@^1.0.0: +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +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" + +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.0.0, babel-core@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0, babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.0.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.2" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.16.0, babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: + version "6.17.2" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.2.tgz#201d25ef5f892c41bae49488b08db0dd476e9f5c" + balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +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" + +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" + brace-expansion@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" @@ -27,10 +305,189 @@ brace-expansion@^1.1.7: balanced-match "^0.4.1" concat-map "0.0.1" +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +"chai@>=1.9.2 <4.0.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + +chalk@^1.1.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +content-type-parser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +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" + +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" + +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" + +debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +deep-equal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + del@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -43,11 +500,205 @@ del@^2.2.2: 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" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diff@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +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" + +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" + +"errno@>=0.1.1 <0.2.0-0": + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + +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" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + 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" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -glob@^7.0.3, glob@^7.0.5: +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -58,6 +709,10 @@ glob@^7.0.3, glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" @@ -69,6 +724,87 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handlebars@^4.0.3: + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -80,6 +816,78 @@ inherits@2: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + is-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" @@ -96,22 +904,663 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -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" +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" -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -once@^1.3.0: +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@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" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.1: + version "1.1.9" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.2" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" + dependencies: + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" + +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" + +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" + +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.0" + +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.3" + +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" + dependencies: + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" + +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" + +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" + dependencies: + jest-regex-util "^20.0.3" + +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.3" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" + natural-compare "^1.4.0" + pretty-format "^20.0.3" + +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" + leven "^2.1.0" + mkdirp "^0.5.1" + +jest-validate@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.3" + leven "^2.1.0" + pretty-format "^20.0.3" + +jest@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" + dependencies: + jest-cli "^20.0.4" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@^3.7.0: + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +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" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash@^4.14.0, lodash@^4.2.0, lodash@~4.17.2: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +minimatch@^3.0.2, minimatch@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +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" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +nock@^9.0.13: + version "9.0.13" + resolved "https://registry.yarnpkg.com/nock/-/nock-9.0.13.tgz#d0bc39ef43d3179981e22b2e8ea069f916c5781a" + dependencies: + chai ">=1.9.2 <4.0.0" + debug "^2.2.0" + deep-equal "^1.0.0" + json-stringify-safe "^5.0.1" + lodash "~4.17.2" + mkdirp "^0.5.0" + propagate "0.4.0" + qs "^6.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +normalize-package-data@^2.3.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +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.0" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.0.tgz#b4389362170e7ef9798c3c7716d80ebc0106fccf" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -120,7 +1569,23 @@ 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" -pify@^2.0.0: +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -134,12 +1599,502 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -rimraf@^2.2.8: +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-format@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +propagate@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-0.4.0.tgz#f3fcca0a6fe06736a7ba572966069617c130b481" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@^6.0.2, qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.79.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.2.8, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" +safe-buffer@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" + +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sax@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-map-support@^0.4.2: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.1.0.tgz#ef22d8855963b3fdc626d043508f24c4cdf7d3c3" + dependencies: + double-ended-queue "^2.1.0-0" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + +uglify-js@^2.6: + version "2.8.28" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.28.tgz#e335032df9bb20dcb918f164589d5af47f38834a" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@^1.2.12: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~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" + +worker-farm@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + dependencies: + errno ">=0.1.1 <0.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +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" + +"xtend@>=4.0.0 <4.1.0-0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +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@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From 57dc2dbfe563c3dc66e91ba87ec9fda390ad7bb8 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 6 Jun 2017 15:24:43 -0600 Subject: [PATCH 421/452] Updates yarn lock --- client/yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/client/yarn.lock b/client/yarn.lock index 7b2e1f7..89239e9 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -6200,16 +6200,16 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.0.0, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9: - version "15.5.9" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" -prop-types@^15.5.10: - version "15.5.10" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" +prop-types@^15.5.7, prop-types@^15.5.9: + version "15.5.9" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" From e5658e8539e4bb4097446acf86b066f3f3b2bd2a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 6 Jun 2017 15:29:56 -0600 Subject: [PATCH 422/452] Update packages --- client/apps/hello_world/package.json | 6 +- client/apps/hello_world/yarn.lock | 285 ++++++++++++------------ client/package.json | 34 +-- client/yarn.lock | 312 +++++++++++++++------------ 4 files changed, 341 insertions(+), 296 deletions(-) diff --git a/client/apps/hello_world/package.json b/client/apps/hello_world/package.json index 2e04284..6d324e6 100644 --- a/client/apps/hello_world/package.json +++ b/client/apps/hello_world/package.json @@ -9,17 +9,17 @@ "babel-runtime": "^6.23.0", "es6-promise": "^4.1.0", "lodash": "4.17.4", - "prop-types": "^15.5.9", + "prop-types": "^15.5.10", "react": "^15.5.4", "react-dom": "^15.5.4", "react-proxy-loader": "^0.3.5", - "react-redux": "^5.0.4", + "react-redux": "^5.0.5", "react-router": "^3.0.2", "react-tap-event-plugin": "2.0.1", "redux": "3.6.0", "uuid": "3.0.1" }, "devDependencies": { - "jest": "^20.0.1" + "jest": "^20.0.4" } } diff --git a/client/apps/hello_world/yarn.lock b/client/apps/hello_world/yarn.lock index 5f61769..7c56d8b 100644 --- a/client/apps/hello_world/yarn.lock +++ b/client/apps/hello_world/yarn.lock @@ -184,13 +184,13 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.1.tgz#9cbe9a15bbe3f1ca1b727dc8e45a4161771d3655" +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" dependencies: babel-core "^6.0.0" babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.1" + babel-preset-jest "^20.0.3" babel-messages@^6.23.0: version "6.23.0" @@ -206,9 +206,9 @@ babel-plugin-istanbul@^4.0.0: istanbul-lib-instrument "^1.7.1" test-exclude "^4.1.0" -babel-plugin-jest-hoist@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.1.tgz#1b9cc322cff704d3812d1bca8dccd12205eedfd5" +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" babel-polyfill@^6.23.0: version "6.23.0" @@ -218,11 +218,11 @@ babel-polyfill@^6.23.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-preset-jest@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.1.tgz#8a9e23ce8a0f0c49835de53ed73ecf75dd6daa2e" +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" dependencies: - babel-plugin-jest-hoist "^20.0.1" + babel-plugin-jest-hoist "^20.0.3" babel-register@^6.24.1: version "6.24.1" @@ -438,7 +438,7 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" -create-react-class@^15.5.1: +create-react-class@^15.5.1, create-react-class@^15.5.3: version "15.5.3" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.3.tgz#fb0f7cae79339e9a179e194ef466efa3923820fe" dependencies: @@ -1012,13 +1012,13 @@ istanbul-reports@^1.1.0: dependencies: handlebars "^4.0.3" -jest-changed-files@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.1.tgz#ba9bd42c3fddb1b7c4ae40065199b44a2335e152" +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" -jest-cli@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.1.tgz#86ca0bc2e47215ad8e7dc85455c0210f86648502" +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" dependencies: ansi-escapes "^1.4.0" callsites "^2.0.0" @@ -1029,18 +1029,18 @@ jest-cli@^20.0.1: istanbul-lib-coverage "^1.0.1" istanbul-lib-instrument "^1.4.2" istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.1" - jest-config "^20.0.1" - jest-docblock "^20.0.1" - jest-environment-jsdom "^20.0.1" - jest-haste-map "^20.0.1" - jest-jasmine2 "^20.0.1" - jest-message-util "^20.0.1" - jest-regex-util "^20.0.1" - jest-resolve-dependencies "^20.0.1" - jest-runtime "^20.0.1" - jest-snapshot "^20.0.1" - jest-util "^20.0.1" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" micromatch "^2.3.11" node-notifier "^5.0.2" pify "^2.3.0" @@ -1051,177 +1051,177 @@ jest-cli@^20.0.1: worker-farm "^1.3.1" yargs "^7.0.2" -jest-config@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.1.tgz#c6934f585c3e1775c96133efb302f986c3909ad8" +jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" dependencies: chalk "^1.1.3" glob "^7.1.1" - jest-environment-jsdom "^20.0.1" - jest-environment-node "^20.0.1" - jest-jasmine2 "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-regex-util "^20.0.1" - jest-resolve "^20.0.1" - jest-validate "^20.0.1" - pretty-format "^20.0.1" - -jest-diff@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.1.tgz#2567c80c324243328321386f8871a28ec9d350ac" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" dependencies: chalk "^1.1.3" diff "^3.2.0" - jest-matcher-utils "^20.0.1" - pretty-format "^20.0.1" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" -jest-docblock@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.1.tgz#055e0bbcb76798198479901f92d2733bf619f854" +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" -jest-environment-jsdom@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.1.tgz#2d29f81368987d387c70ce4f500c6aa560f9b4f7" +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" dependencies: - jest-mock "^20.0.1" - jest-util "^20.0.1" + jest-mock "^20.0.3" + jest-util "^20.0.3" jsdom "^9.12.0" -jest-environment-node@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.1.tgz#75ab5358072ee1efebc54f43474357d7b3d674c7" +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" dependencies: - jest-mock "^20.0.1" - jest-util "^20.0.1" + jest-mock "^20.0.3" + jest-util "^20.0.3" -jest-haste-map@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.1.tgz#e6ba4db99ab512e7c081a5b0a0af731d0e193d56" +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" - jest-docblock "^20.0.1" + jest-docblock "^20.0.3" micromatch "^2.3.11" sane "~1.6.0" worker-farm "^1.3.1" -jest-jasmine2@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.1.tgz#675772b1fd32ad74e92e8ae8282f8ea71d1de168" +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" dependencies: chalk "^1.1.3" graceful-fs "^4.1.11" - jest-diff "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-matchers "^20.0.1" - jest-message-util "^20.0.1" - jest-snapshot "^20.0.1" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" once "^1.4.0" p-map "^1.1.1" -jest-matcher-utils@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.1.tgz#31aef67f59535af3c2271a3a3685db604dbd1622" +jest-matcher-utils@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" dependencies: chalk "^1.1.3" - pretty-format "^20.0.1" + pretty-format "^20.0.3" -jest-matchers@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.1.tgz#053b7654ce60129268f39992886e987a5201bb90" +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" dependencies: - jest-diff "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-message-util "^20.0.1" - jest-regex-util "^20.0.1" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" -jest-message-util@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.1.tgz#ac21cb055a6a5786b7f127ac7e705df5ffb1c335" +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" dependencies: chalk "^1.1.3" micromatch "^2.3.11" slash "^1.0.0" -jest-mock@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.1.tgz#f4cca2e87e441b66fabe4ead6a6d61773ec0773a" +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" -jest-regex-util@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.1.tgz#ecbcca8fbe4e217bca7f6f42a9b831d051224dc4" +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" -jest-resolve-dependencies@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.1.tgz#38fc012191775b0b277fabebb37aa8282e26846f" +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" dependencies: - jest-regex-util "^20.0.1" + jest-regex-util "^20.0.3" -jest-resolve@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.1.tgz#cace553663f25c703dc977a4ce176e29eda92772" +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" dependencies: browser-resolve "^1.11.2" is-builtin-module "^1.0.0" resolve "^1.3.2" -jest-runtime@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.1.tgz#384f9298b8e8a177870c6d9ad0023db10ddcaedc" +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" dependencies: babel-core "^6.0.0" - babel-jest "^20.0.1" + babel-jest "^20.0.3" babel-plugin-istanbul "^4.0.0" chalk "^1.1.3" convert-source-map "^1.4.0" graceful-fs "^4.1.11" - jest-config "^20.0.1" - jest-haste-map "^20.0.1" - jest-regex-util "^20.0.1" - jest-resolve "^20.0.1" - jest-util "^20.0.1" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" json-stable-stringify "^1.0.1" micromatch "^2.3.11" strip-bom "3.0.0" yargs "^7.0.2" -jest-snapshot@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.1.tgz#3704c599705042f20ec7c95ba76a4524c744dfac" +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" dependencies: chalk "^1.1.3" - jest-diff "^20.0.1" - jest-matcher-utils "^20.0.1" - jest-util "^20.0.1" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" natural-compare "^1.4.0" - pretty-format "^20.0.1" + pretty-format "^20.0.3" -jest-util@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.1.tgz#a3e7afb67110b2c3ac77b82e9a51ca57f4ff72a1" +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" dependencies: chalk "^1.1.3" graceful-fs "^4.1.11" - jest-message-util "^20.0.1" - jest-mock "^20.0.1" - jest-validate "^20.0.1" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" leven "^2.1.0" mkdirp "^0.5.1" -jest-validate@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.1.tgz#a236c29e3c29e9b92a1e5da211a732f0238da928" +jest-validate@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" dependencies: chalk "^1.1.3" - jest-matcher-utils "^20.0.1" + jest-matcher-utils "^20.0.3" leven "^2.1.0" - pretty-format "^20.0.1" + pretty-format "^20.0.3" -jest@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.1.tgz#4e268159ccc3b659966939de817c75bfe9e0157d" +jest@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" dependencies: - jest-cli "^20.0.1" + jest-cli "^20.0.4" jodid25519@^1.0.0: version "1.0.2" @@ -1620,9 +1620,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -pretty-format@^20.0.1: - version "20.0.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.1.tgz#ba95329771907c189643dd251e244061ff642350" +pretty-format@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" dependencies: ansi-regex "^2.1.1" ansi-styles "^3.0.0" @@ -1637,7 +1637,14 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.0.0, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.9, prop-types@~15.5.7: +prop-types@^15.5.10: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + +prop-types@^15.5.6, prop-types@^15.5.7, prop-types@~15.5.7: version "15.5.9" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" dependencies: @@ -1685,17 +1692,17 @@ react-proxy-loader@^0.3.5: dependencies: loader-utils "^1.0.2" -react-redux@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.4.tgz#1563babadcfb2672f57f9ceaa439fb16bf85d55b" +react-redux@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.5.tgz#f8e8c7b239422576e52d6b7db06439469be9846a" dependencies: - create-react-class "^15.5.1" + create-react-class "^15.5.3" hoist-non-react-statics "^1.0.3" invariant "^2.0.0" lodash "^4.2.0" lodash-es "^4.2.0" loose-envify "^1.1.0" - prop-types "^15.0.0" + prop-types "^15.5.10" react-router@^3.0.2: version "3.0.5" diff --git a/client/package.json b/client/package.json index 1840e81..30a5d38 100644 --- a/client/package.json +++ b/client/package.json @@ -11,7 +11,7 @@ "devDependencies": { "assets-webpack-plugin": "^3.5.1", "atomic-lint-loader": "^1.0.1", - "autoprefixer": "^7.0.1", + "autoprefixer": "^7.1.1", "babel-core": "^6.24.1", "babel-eslint": "^7.2.3", "babel-loader": "^7.0.0", @@ -26,46 +26,46 @@ "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "chunk-manifest-webpack-plugin": "^1.1.0", - "css-loader": "^0.28.1", + "css-loader": "^0.28.4", "dotenv": "4.0.0", "ecstatic": "2.1.0", "ejs": "^2.5.6", "eslint": "^3.19.0", "eslint-config-airbnb": "^14.1.0", "eslint-plugin-babel": "^4.1.1", - "eslint-plugin-import": "^2.2.0", + "eslint-plugin-import": "^2.3.0", "eslint-plugin-jsx-a11y": "^4.0.0", - "eslint-plugin-react": "^7.0.0", + "eslint-plugin-react": "^7.0.1", "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", - "express": "^4.15.2", + "express": "^4.15.3", "extract-text-webpack-plugin": "^2.1.0", - "file-loader": "^0.11.1", + "file-loader": "^0.11.2", "front-matter": "^2.1.1", "fs-extra": "^3.0.1", - "html-minifier": "^3.4.4", + "html-minifier": "^3.5.2", "html-truncate": "^1.2.2", "imports-loader": "^0.7.1", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "^2.0.0", "jasmine": "^2.6.0", - "jasmine-core": "^2.6.1", + "jasmine-core": "^2.6.2", "jest": "^20.0.4", "less": "2.7.2", - "less-loader": "^4.0.3", + "less-loader": "^4.0.4", "lodash": "^4.17.4", "marked": "^0.3.6", "minimist": "1.2.0", - "node-sass": "^4.5.2", + "node-sass": "^4.5.3", "node-watch": "^0.5.4", "npm-shrinkwrap": "6.0.2", "null-loader": "0.1.1", "phantomjs-prebuilt": "^2.1.14", "postcss-load-config": "^1.2.0", "postcss-loader": "^2.0.5", - "postcss-smart-import": "^0.7.0", - "prop-types": "^15.5.9", - "protractor": "^5.1.1", + "postcss-smart-import": "^0.7.4", + "prop-types": "^15.5.10", + "protractor": "^5.1.2", "psi": "^3.0.0", "react": "^15.5.4", "react-hot-loader": "next", @@ -76,12 +76,12 @@ "redux-devtools-log-monitor": "^1.3.0", "s3-website": "^3.1.0", "sass-loader": "^6.0.5", - "style-loader": "^0.17.0", + "style-loader": "^0.18.2", "superagent-mock": "^3.4.0", - "url-join": "^2.0.1", + "url-join": "^2.0.2", "url-loader": "^0.5.8", - "webpack": "^2.5.1", - "webpack-bundle-analyzer": "^2.7.0", + "webpack": "^2.6.1", + "webpack-bundle-analyzer": "^2.8.2", "webpack-dev-middleware": "^1.10.2", "webpack-hot-middleware": "^2.18.0" } diff --git a/client/yarn.lock b/client/yarn.lock index 89239e9..22cc9ee 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -357,12 +357,12 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" -autoprefixer@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.0.1.tgz#472d7620a1b286e55ad1d8345a09d76aaed99d92" +autoprefixer@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d" dependencies: - browserslist "^2.1.2" - caniuse-lite "^1.0.30000665" + browserslist "^2.1.3" + caniuse-lite "^1.0.30000670" normalize-range "^0.1.2" num2fraction "^1.2.2" postcss "^6.0.1" @@ -1297,12 +1297,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.2.tgz#a9dd0791342dab019861c2dd1cd0fd5d83230d39" +browserslist@^2.1.3: + version "2.1.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" dependencies: - caniuse-lite "^1.0.30000665" - electron-to-chromium "^1.3.9" + caniuse-lite "^1.0.30000670" + electron-to-chromium "^1.3.11" bser@1.0.2: version "1.0.2" @@ -1429,9 +1429,9 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000666" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000666.tgz#951ed9f3d3bfaa08a06dafbb5089ab07cce6ab90" -caniuse-lite@^1.0.30000665: - version "1.0.30000666" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000666.tgz#831b63247e24fa408e20c6c546c4173d27c5a1a5" +caniuse-lite@^1.0.30000670: + version "1.0.30000679" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000679.tgz#0fb5bb3658d4d4448f8f86a1c48df15664aa05ef" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1539,9 +1539,9 @@ clap@^1.0.9: dependencies: chalk "^1.1.3" -clean-css@4.0.x: - version "4.0.13" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.13.tgz#feb2a176062d72a6c3e624d9213cac6a0c485e80" +clean-css@4.1.x: + version "4.1.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.3.tgz#07cfe8980edb20d455ddc23aadcf1e04c6e509ce" dependencies: source-map "0.5.x" @@ -1689,7 +1689,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.x, commander@^2.6.0, commander@^2.9.0: +commander@2.9.x, commander@^2.6.0, commander@^2.9.0, commander@~2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1915,13 +1915,14 @@ 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-loader@^0.28.1: - version "0.28.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.1.tgz#220325599f8f00452d9ceb4c3ca6c8a66798642d" +css-loader@^0.28.4: + version "0.28.4" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.4.tgz#6cf3579192ce355e8b38d5f42dd7a1f2ec898d0f" dependencies: babel-code-frame "^6.11.0" css-selector-tokenizer "^0.7.0" cssnano ">=2.6.1 <4" + icss-utils "^2.1.0" loader-utils "^1.0.2" lodash.camelcase "^4.3.0" object-assign "^4.0.1" @@ -2041,11 +2042,11 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: - version "2.6.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" +debug@2, debug@2.6.7, debug@^2.6.3: + version "2.6.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" dependencies: - ms "0.7.3" + ms "2.0.0" debug@2.2.0: version "2.2.0" @@ -2053,15 +2054,9 @@ debug@2.2.0: dependencies: ms "0.7.1" -debug@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" - dependencies: - ms "0.7.2" - -debug@2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" +debug@^2.1.1, debug@^2.2.0: + version "2.6.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" dependencies: ms "0.7.3" @@ -2377,9 +2372,9 @@ ejs@^2.5.6: version "2.5.6" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.9: - version "1.3.10" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.10.tgz#63d62b785471f0d8dda85199d64579de8a449f08" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.11: + version "1.3.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc" elliptic@^6.0.0: version "6.4.0" @@ -2569,9 +2564,9 @@ eslint-plugin-babel@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.1.tgz#ef285c87039b67beb3bbd227f5b0eed4fb376b87" -eslint-plugin-import@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" +eslint-plugin-import@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.3.0.tgz#37c801e0ada0e296cbdf20c3f393acb5b52af36b" dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" @@ -2582,7 +2577,7 @@ eslint-plugin-import@^2.2.0: has "^1.0.1" lodash.cond "^4.3.0" minimatch "^3.0.3" - pkg-up "^1.0.0" + read-pkg-up "^2.0.0" eslint-plugin-jsx-a11y@^4.0.0: version "4.0.0" @@ -2595,9 +2590,9 @@ eslint-plugin-jsx-a11y@^4.0.0: jsx-ast-utils "^1.0.0" object-assign "^4.0.1" -eslint-plugin-react@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.0.tgz#084cfe772d229ec5ae7e525dfc6d299cc21ddd77" +eslint-plugin-react@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.1.tgz#e78107e1e559c6e2b17786bb67c2e2a010ad0d2f" dependencies: doctrine "^2.0.0" has "^1.0.1" @@ -2765,9 +2760,9 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@^4.15.2: - version "4.15.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" +express@^4.15.2, express@^4.15.3: + version "4.15.3" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662" dependencies: accepts "~1.3.3" array-flatten "1.1.1" @@ -2775,28 +2770,28 @@ express@^4.15.2: content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" - debug "2.6.1" + debug "2.6.7" depd "~1.1.0" encodeurl "~1.0.1" escape-html "~1.0.3" etag "~1.8.0" - finalhandler "~1.0.0" + finalhandler "~1.0.3" fresh "0.5.0" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.1" path-to-regexp "0.1.7" - proxy-addr "~1.1.3" + proxy-addr "~1.1.4" qs "6.4.0" range-parser "~1.2.0" - send "0.15.1" - serve-static "1.12.1" + send "0.15.3" + serve-static "1.12.3" setprototypeof "1.0.3" statuses "~1.3.1" - type-is "~1.6.14" + type-is "~1.6.15" utils-merge "1.0.0" - vary "~1.1.0" + vary "~1.1.1" extend-shallow@^2.0.1: version "2.0.1" @@ -2895,9 +2890,9 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.1.tgz#6b328ee1234a729e4e47d36375dd6d35c0e1db84" +file-loader@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34" dependencies: loader-utils "^1.0.2" @@ -2928,9 +2923,9 @@ fileset@^2.0.2: glob "^7.0.3" minimatch "^3.0.3" -filesize@^3.5.6: - version "3.5.9" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.9.tgz#9e3dd8a9b124f5b2f1fb2ee9cd13a86c707bb222" +filesize@^3.5.9: + version "3.5.10" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.10.tgz#fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f" fill-range@^2.1.0: version "2.2.3" @@ -2942,11 +2937,11 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a" +finalhandler@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" dependencies: - debug "2.6.4" + debug "2.6.7" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" @@ -2969,7 +2964,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.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: @@ -3581,18 +3576,18 @@ 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.4.4: - version "3.4.4" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.4.tgz#616fe3e3ef16da02b393d9a6099eeff468a35df0" +html-minifier@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7" dependencies: camel-case "3.0.x" - clean-css "4.0.x" + clean-css "4.1.x" commander "2.9.x" he "1.1.x" ncname "1.0.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "~2.8.22" + uglify-js "3.0.x" html-truncate@^1.2.2: version "1.2.2" @@ -3642,6 +3637,12 @@ icss-replace-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" +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" @@ -4110,9 +4111,9 @@ istanbul@0.4.5: which "^1.1.1" wordwrap "^1.0.0" -jasmine-core@^2.6.1, jasmine-core@~2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.6.1.tgz#66a61cddb699958e3613edef346c996f6311fc3b" +jasmine-core@^2.6.2, jasmine-core@~2.6.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.6.2.tgz#74ea1f7cf428691af201107d631234027a09daab" jasmine@^2.5.3, jasmine@^2.6.0: version "2.6.0" @@ -4122,7 +4123,7 @@ jasmine@^2.5.3, jasmine@^2.6.0: glob "^7.0.6" jasmine-core "~2.6.0" -jasminewd2@^2.0.0: +jasminewd2@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.1.0.tgz#da595275d1ae631de736ac0a7c7d85c9f73ef652" @@ -4547,9 +4548,9 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -less-loader@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.3.tgz#d1e6462ca2f090c11248455e14b8dda4616d0521" +less-loader@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.4.tgz#b4a8c43843e65c67d2ea2eb1465b5c4233d5006a" dependencies: clone "^2.1.1" loader-utils "^1.1.0" @@ -4589,6 +4590,15 @@ load-json-file@^1.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" @@ -5147,14 +5157,14 @@ 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@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + msee@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/msee/-/msee-0.1.2.tgz#f2d1e20ef94b8cd45243f2d5c817e97143f0286d" @@ -5283,9 +5293,9 @@ node-pre-gyp@^0.6.29: tar "^2.2.1" tar-pack "^3.4.0" -node-sass@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.2.tgz#4012fa2bd129b1d6365117e88d9da0500d99da64" +node-sass@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568" dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5763,6 +5773,12 @@ path-type@^1.0.0: 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" + pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -5821,12 +5837,6 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" -pkg-up@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" - dependencies: - find-up "^1.0.0" - pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -6077,9 +6087,9 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-smart-import@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.7.0.tgz#563801a3a104c893ebcff0d6c4e64e16c1960d30" +postcss-smart-import@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.7.4.tgz#50cfb3d9a49b70a61f911451bc24d841f8dbf200" dependencies: babel-runtime "^6.23.0" lodash "^4.17.4" @@ -6200,27 +6210,20 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8: +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" -prop-types@^15.5.7, prop-types@^15.5.9: - version "15.5.9" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -protractor@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.1.1.tgz#10c4e336571b28875b8acc3ae3e4e1e40ef7e986" +protractor@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.1.2.tgz#9b221741709a4c62d5cd53c6aadd54a71137e95f" dependencies: "@types/node" "^6.0.46" "@types/q" "^0.0.32" @@ -6229,16 +6232,16 @@ protractor@^5.1.1: chalk "^1.1.3" glob "^7.0.3" jasmine "^2.5.3" - jasminewd2 "^2.0.0" + jasminewd2 "^2.1.0" optimist "~0.6.0" q "1.4.1" saucelabs "~1.3.0" selenium-webdriver "3.0.1" source-map-support "~0.4.0" webdriver-js-extender "^1.0.0" - webdriver-manager "^12.0.1" + webdriver-manager "^12.0.6" -proxy-addr@~1.1.3: +proxy-addr@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" dependencies: @@ -6459,6 +6462,13 @@ read-pkg-up@^1.0.1: 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" @@ -6467,6 +6477,14 @@ read-pkg@^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" + read@1, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -6945,7 +6963,7 @@ s3-website@^3.1.0: object-assign "^4.1.0" s3-diff "^1.1.0" -safe-buffer@^5.0.1: +safe-buffer@^5.0.1, safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -6998,7 +7016,7 @@ sax@1.2.1, sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" -schema-utils@^0.x: +schema-utils@^0.3.0, schema-utils@^0.x: version "0.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" dependencies: @@ -7062,11 +7080,11 @@ semver@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" -send@0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" +send@0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" dependencies: - debug "2.6.1" + debug "2.6.7" depd "~1.1.0" destroy "~1.0.4" encodeurl "~1.0.1" @@ -7075,19 +7093,19 @@ send@0.15.1: fresh "0.5.0" http-errors "~1.6.1" mime "1.3.4" - ms "0.7.2" + ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" statuses "~1.3.1" -serve-static@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" +serve-static@1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.15.1" + send "0.15.3" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -7416,11 +7434,12 @@ strip-url-auth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" -style-loader@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.17.0.tgz#e8254bccdb7af74bd58274e36107b4d5ab4df310" +style-loader@^0.18.2: + version "0.18.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb" dependencies: loader-utils "^1.0.2" + schema-utils "^0.3.0" sugarss@^1.0.0: version "1.0.0" @@ -7685,7 +7704,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.14: +type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" dependencies: @@ -7704,9 +7723,16 @@ ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" -uglify-js@^2.6, uglify-js@^2.8.5, uglify-js@~2.8.22: - version "2.8.23" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.23.tgz#8230dd9783371232d62a7821e2cf9a817270a8a0" +uglify-js@3.0.x: + version "3.0.15" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.15.tgz#aacb323a846b234602270dead8a32441a8806f42" + dependencies: + commander "~2.9.0" + source-map "~0.5.1" + +uglify-js@^2.6, uglify-js@^2.8.27: + version "2.8.28" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.28.tgz#e335032df9bb20dcb918f164589d5af47f38834a" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -7725,6 +7751,10 @@ ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" +ultron@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.0.tgz#b07a2e6a541a815fc6a34ccd4533baec307ca864" + umask@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" @@ -7793,9 +7823,9 @@ url-join@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" -url-join@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.1.tgz#04b446fcd359a2fa42cc9b6962b219b91ddfe1a8" +url-join@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.2.tgz#c072756967ad24b8b59e5741551caac78f50b8b7" url-loader@^0.5.8: version "0.5.8" @@ -7879,7 +7909,7 @@ validate-npm-package-name@~2.2.2: dependencies: builtins "0.0.7" -vary@~1.1.0: +vary@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" @@ -7988,7 +8018,7 @@ webdriver-js-extender@^1.0.0: "@types/selenium-webdriver" "^2.53.35" selenium-webdriver "^2.53.2" -webdriver-manager@^12.0.1: +webdriver-manager@^12.0.6: version "12.0.6" resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.6.tgz#3df1a481977010b4cbf8c9d85c7a577828c0e70b" dependencies: @@ -8012,20 +8042,21 @@ webidl-conversions@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" -webpack-bundle-analyzer@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.7.0.tgz#9a8320a9e33917ade47aa1369013bbf4d4a9f5af" +webpack-bundle-analyzer@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.8.2.tgz#8b6240c29a9d63bc72f09d920fb050adbcce9fe8" dependencies: acorn "^5.0.3" chalk "^1.1.3" commander "^2.9.0" ejs "^2.5.6" express "^4.15.2" - filesize "^3.5.6" + filesize "^3.5.9" gzip-size "^3.0.0" lodash "^4.17.4" mkdirp "^0.5.1" opener "^1.4.3" + ws "^2.3.1" webpack-core@^0.6.9: version "0.6.9" @@ -8066,9 +8097,9 @@ webpack-sources@^0.2.3: source-list-map "^1.1.1" source-map "~0.5.3" -webpack@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.5.1.tgz#61742f0cf8af555b87460a9cd8bba2f1e3ee2fce" +webpack@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" @@ -8087,7 +8118,7 @@ webpack@^2.5.1: source-map "^0.5.3" supports-color "^3.1.0" tapable "~0.2.5" - uglify-js "^2.8.5" + uglify-js "^2.8.27" watchpack "^1.3.1" webpack-sources "^0.2.3" yargs "^6.0.0" @@ -8204,6 +8235,13 @@ ws@^1.0.1: options ">=0.0.5" ultron "1.0.x" +ws@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-2.3.1.tgz#6b94b3e447cb6a363f785eaf94af6359e8e81c80" + dependencies: + safe-buffer "~5.0.1" + ultron "~1.1.0" + xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" From 5b1727db5f6fa3629bdeadbcd06dedd4558e40d2 Mon Sep 17 00:00:00 2001 From: Eric Durr Date: Tue, 6 Jun 2017 16:07:16 -0600 Subject: [PATCH 423/452] updates to readme and .env example to reflect the need for assets url (#25) --- .env.example | 2 +- README.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index c17ba81..03852fe 100644 --- a/.env.example +++ b/.env.example @@ -16,7 +16,7 @@ ASSETS_PORT=8080 # build and serve assets from a specific url - the webpack server's url. # Use localhost -# ASSETS_URL=http://0.0.0.0 +ASSETS_URL=http://0.0.0.0 # Use a local domain. # Change /etc/hosts (on a mac) and add sites.dev and rcsassets.sites.dev. Each entry will need to point to 127.0.0.1 diff --git a/README.md b/README.md index ae0707a..2c4e445 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Make sure to install git, npm and yarn before you start then: 1. git clone https://github.com/atomicjolt/react_client_starter_app.git my_project_name 2. Rename .env.example to .env. This file contains the port the server will use. The default 8080 should be fine, but you can also use a local domain or ngrok if you wish. + Be sure that the ASSETS_URL is not commented out for the domain that you plan on using. The + ASSETS_URL=http://0.0.0.0 or localhost is set as default. 3. Install packages with `yarn` From 1f6c9bb8bf7b677ebb14a9c57a33fa4272d99ea1 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 13 Jun 2017 14:07:01 -0600 Subject: [PATCH 424/452] Adds default favicons --- .../html/layouts/partials/_head.html | 17 ++++++++ .../static/android-icon-144x144.png | Bin 0 -> 7450 bytes .../static/android-icon-192x192.png | Bin 0 -> 10294 bytes .../hello_world/static/android-icon-36x36.png | Bin 0 -> 1411 bytes .../hello_world/static/android-icon-48x48.png | Bin 0 -> 1825 bytes .../hello_world/static/android-icon-72x72.png | Bin 0 -> 3096 bytes .../hello_world/static/android-icon-96x96.png | Bin 0 -> 4303 bytes .../hello_world/static/apple-icon-114x114.png | Bin 0 -> 5283 bytes .../hello_world/static/apple-icon-120x120.png | Bin 0 -> 5690 bytes .../hello_world/static/apple-icon-144x144.png | Bin 0 -> 7450 bytes .../hello_world/static/apple-icon-152x152.png | Bin 0 -> 8074 bytes .../hello_world/static/apple-icon-180x180.png | Bin 0 -> 10364 bytes .../hello_world/static/apple-icon-57x57.png | Bin 0 -> 2412 bytes .../hello_world/static/apple-icon-60x60.png | Bin 0 -> 2534 bytes .../hello_world/static/apple-icon-72x72.png | Bin 0 -> 3096 bytes .../hello_world/static/apple-icon-76x76.png | Bin 0 -> 3322 bytes .../static/apple-icon-precomposed.png | Bin 0 -> 10868 bytes client/apps/hello_world/static/apple-icon.png | Bin 0 -> 10868 bytes .../apps/hello_world/static/browserconfig.xml | 2 + .../apps/hello_world/static/favicon-16x16.png | Bin 0 -> 921 bytes .../apps/hello_world/static/favicon-32x32.png | Bin 0 -> 1333 bytes .../apps/hello_world/static/favicon-96x96.png | Bin 0 -> 4303 bytes client/apps/hello_world/static/favicon.ico | Bin 0 -> 1150 bytes client/apps/hello_world/static/manifest.json | 41 ++++++++++++++++++ .../hello_world/static/ms-icon-144x144.png | Bin 0 -> 7450 bytes .../hello_world/static/ms-icon-150x150.png | Bin 0 -> 7982 bytes .../hello_world/static/ms-icon-310x310.png | Bin 0 -> 24213 bytes .../apps/hello_world/static/ms-icon-70x70.png | Bin 0 -> 2989 bytes 28 files changed, 60 insertions(+) create mode 100644 client/apps/hello_world/static/android-icon-144x144.png create mode 100644 client/apps/hello_world/static/android-icon-192x192.png create mode 100644 client/apps/hello_world/static/android-icon-36x36.png create mode 100644 client/apps/hello_world/static/android-icon-48x48.png create mode 100644 client/apps/hello_world/static/android-icon-72x72.png create mode 100644 client/apps/hello_world/static/android-icon-96x96.png create mode 100644 client/apps/hello_world/static/apple-icon-114x114.png create mode 100644 client/apps/hello_world/static/apple-icon-120x120.png create mode 100644 client/apps/hello_world/static/apple-icon-144x144.png create mode 100644 client/apps/hello_world/static/apple-icon-152x152.png create mode 100644 client/apps/hello_world/static/apple-icon-180x180.png create mode 100644 client/apps/hello_world/static/apple-icon-57x57.png create mode 100644 client/apps/hello_world/static/apple-icon-60x60.png create mode 100644 client/apps/hello_world/static/apple-icon-72x72.png create mode 100644 client/apps/hello_world/static/apple-icon-76x76.png create mode 100644 client/apps/hello_world/static/apple-icon-precomposed.png create mode 100644 client/apps/hello_world/static/apple-icon.png create mode 100644 client/apps/hello_world/static/browserconfig.xml create mode 100644 client/apps/hello_world/static/favicon-16x16.png create mode 100644 client/apps/hello_world/static/favicon-32x32.png create mode 100644 client/apps/hello_world/static/favicon-96x96.png create mode 100644 client/apps/hello_world/static/favicon.ico create mode 100644 client/apps/hello_world/static/manifest.json create mode 100644 client/apps/hello_world/static/ms-icon-144x144.png create mode 100644 client/apps/hello_world/static/ms-icon-150x150.png create mode 100644 client/apps/hello_world/static/ms-icon-310x310.png create mode 100644 client/apps/hello_world/static/ms-icon-70x70.png diff --git a/client/apps/hello_world/html/layouts/partials/_head.html b/client/apps/hello_world/html/layouts/partials/_head.html index 4cc277e..ea53009 100644 --- a/client/apps/hello_world/html/layouts/partials/_head.html +++ b/client/apps/hello_world/html/layouts/partials/_head.html @@ -10,3 +10,20 @@ window.DEFAULT_JWT = {}; + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/apps/hello_world/static/android-icon-144x144.png b/client/apps/hello_world/static/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..81bd229ab23c067e728c20ce5d24676214b60881 GIT binary patch literal 7450 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 OKut+Yu}a=5>^}gRAHrq; literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/android-icon-192x192.png b/client/apps/hello_world/static/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..07b4238cbc3884bb69842fe7beebe3fcc03d51aa GIT binary patch literal 10294 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 eNtd*L|j0J1f?8N=%0n!f>4lDvxm literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/android-icon-48x48.png b/client/apps/hello_world/static/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..fc559e876d54b23e9eecc24c1a79b1f1c7162e9e GIT binary patch literal 1825 zcmZ{kc~sL^7RTRj|NWBROAu5Lx1b{~Ovu6#h=4$lMH)6^l&M;hkc0ps2%%7ASfv99 zc}RNeMBK=g9*Az_{3`6wXU$jmEe(ZItQZ9Bz(KM*whkFMnD`a50jf5)%nd-Cp!9 z7l;h8DQWC}@$Ut%k0BBFr8=CbTfT2L8z?XQS zervEtPI#q-4e-Gb0NjK~?*aagw}jKTgb&X`Z8SmP0K-6K7X5`2cGdAld!S=C@2g%x znS~ZYBwC4o)e8;DWJCb|&|mYy_>H@m+b7uhuE;7c^llfdw=*;ew!{)sp9-Zbu~0cadJf80V;!};PaNzbcT^ig zJpWjbok}g5kKXHodE2P*UZ@JhMV{#JhwO`+LR}(BQ=q?*f2f!V_Ql3};M-{wLm?kj z@a}ZN&pKgqDN|*o=gmQW*UWdm$9EMXW)1o0enEUFUXev#Z)e?HkjOw>whF^>P?JlS zWzZ-JHiQxn&cfBp(D6ROg@gRTLwxV0=>5|$Mu{^tGSI}|SHvt`fL=Ss9xi3dGwHxz zVy*(@+EI4LHmW+8{`5HeULi9vAn^6ZzU&p4G~~%WyzU0R*c(ex5no<_)i%1dk_Y)n zK^k?Z3oi9UKktU)y@KWv=CckM=7&pHVS|VHb@>d6fQf!Vk)AScBoiYD9*uZ;qV3hZ zXCDdF>xiqz*f|2^@u1-ELjn&sButLKYo#wX@$a94xo=YOVZ?|Nu33&*Q^}{71&&JI ziCW(6lWbicBU*^w?S={A1WADW?bLTyh596Nt_w2H6$$+jxq$XVE4!!x9ie;E*5|BxLy10S4*=lAoow@@K6 zyx2tTG*B}$Gb1Y|k8l?k(Z|O`eSIbSSF_K6$&F3T=X~rdiyqDj+yy{?mOC>&aWb0_i#p3CxPIs5NuJh;2b88f7D~}yGU)OcyVnv(ljwc5< zMQ!@yy#W87^99u@r#stim(w!Rvxl-WO$l`*Ki-EV)maPQT)T^kS$1!2@L(UhT2V*{ z6D78xC-B$BKZc(#4Hv1B&JYn(&0Y?jNExzBUhAdw{%z~Zi3vBnOruZ9+t3lLYE~v`r3GKu zTj9+XKT}1~Ig^jZ#GqN?dp$d1ip|K?|2xmXps$3x>TNv%z!j!rut`*dj0)J|uZfb@KOOB^SbBN#*~3BG4C1J+{A(sG4>JeZ zf1pbs8?$$DV`#G7)pdHhJ>katcYe{T`u=JEccQ(`?pynczMVXHpcB7Q@lBRK=Rr%( zXkA~y5C2;1wqn`!hD|F9pN*A1e}2cXZrf1pm9($-w^xnVM6DsQ=*T6DiI0{5&~&I| zvhg2}XaB<$_Vrur={mbnX~;8j4#=f4g;*LWmicMqQl(U;lm+=nxsG(~G zeP&SdGv-xIr82{4F=yC;ELbiCc~u5@qt#8*K{^ob{c^+GV(xM*i&vw``Xl| zlsI6rWE;8dORPEeY@1nP(!Fgl*mCkE|2-IqLLrr=%M>PsDafD?@|XJu%Z#P~xiLr) eq?hS+CSNYYms{UkX6+zX0mQ9Oh&mOSR`DO#M{ctK literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/android-icon-72x72.png b/client/apps/hello_world/static/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4826ae4ac58331a051ed91959e94b1a4d9e1c715 GIT binary patch literal 3096 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 qbyam86q%x-O4ioWc0su~QX5kQU!uB5 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 literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/apple-icon-114x114.png b/client/apps/hello_world/static/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..40c3903b7a696206ceef2d149c2eea0ca0739014 GIT binary patch literal 5283 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 literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/apple-icon-144x144.png b/client/apps/hello_world/static/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..81bd229ab23c067e728c20ce5d24676214b60881 GIT binary patch literal 7450 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 OKut+Yu}a=5>^}gRAHrq; literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/apple-icon-152x152.png b/client/apps/hello_world/static/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..80a9ec44adb58a70be00eb427364b478c43c827c GIT binary patch literal 8074 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 literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/apple-icon-57x57.png b/client/apps/hello_world/static/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..c33832fcc4c7a8d0dda8740a28736bb47e0f195a GIT binary patch literal 2412 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 literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/apple-icon-72x72.png b/client/apps/hello_world/static/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4826ae4ac58331a051ed91959e94b1a4d9e1c715 GIT binary patch literal 3096 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 literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/apple-icon-precomposed.png b/client/apps/hello_world/static/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..d4bc31ab49e2781f19332a760bca55152dd01d72 GIT binary patch literal 10868 zcmdUV^;29y)9zwnk>DB#?yz`pcXxO9#oe=kpusgb2_9G=IKeHrCdlIM5;W-Dymfzg z?^kvIfUi!?nVB;^J#uDxy8D?J4K?}K=x@*g0KjWS1sN@P-2E>AU%}s6%Py$!2-#jz zRT2QGOT>7zM1kiKytL${05ucj2k;D)wStx^01(Ik0E9;X0Qc}u;rjr94<`U{XaN8S zWdQ)h?zwH6BJhG&R?6}+fR}$yVMkdi{0o}9f}s~YR`^el8+H~002rSXWh8a{mrnBh za^LE%ysX(Db{K2@WQd5kT2&}7LVrckFRvpb$)>}MIP+CWGnzp1YjhD45l;GzHtzLB zk(>tg$`uac!6$+lU$^XRuh6jE>{h?jB$uC36n+yA*Tp|v>%I0)MGJV=LXitONw{Mh z%iOvx7E(zNNVq@YhEvb}Z%8~+_IUNw-Cmj6V80h+3QDv_OS))Y7r^-#be~ZFApr5% zG6FCPF<;f{YgWHSlYXMB?a%N0?y`P-K=xBespqfxAAuvAM5!-U3Y2kiXH0l<=rD-F z>4C5dj0E2Sn+6&4#Q9nleA{e= zh_4tc7leR{fnSjcu1>%gYf<4 zHo(_GXkuPpS#GntwqDkCk#b$Bt4@KJ^ zFm`{K-#eH!g*^#N1DW`lu@)zH-L{+rPmnp@MaIiEJdjYXThpL9=3fgYvQC~~um`qrxm4!(SN_0wm;UK(GbRa2ILqqi|R_y^7jNUCInWg!z=tq)FuPGNbY%hTHZ=RNRY_b+(R z9F5F|V2O82Rw~W)cv#MSi z!)ow<9(tF18Gt?cX`KG@(<$B{@;$H)4DKWso7v5;x@>TR`h_Vwz(SN$H|Lx`8?+hK zuK{w9qLv(`#;S-3n!2SY)9x;v5%QLdF;CpK9yHiL97*83-vX+M^$awl%Hw=h=Cq5k&+ z;XY&pVfR52b-)MgM#r^P8m1ws`oaa|0+B&m3%?w}GbO!hT?UWeQt<#W#E2>31|4@; zvuCcrU?dLC#c4kA;M^$R0dS91?z_x$m&^Y z_~$d9X}eK5Fm3KkcL9_3BP@P#&2rdj*f_31JK1EdHsoIe1wWXv!G zy1QaDZEL_EGoo6oT@*nS18%W5(qv4X`LjFrmaQ7Z7oQOuT;$W~L#0c6A3tR@ zF-?fi?j@65mj3cYB|&JQ$tWS-pMQpJT^4wvA!@a+U0dFNi_W27L4alO%j2!)lF|gf zkN@6Pj2YyI*XAOn*Vf<5d4a!9Jee+d`H|uI9hZu9xnic_-;jX|c>&C$sxG@Ne787U z3D#uZ8ghZTU19s6hAP6J0^6jDOi}JTD=2zUSko0x%vP|DR zXVWh7WIrpU^UHdTyz&nrW)+?`n6+}M)$bobelw^g>6j;SUxR}Rbm+>1thTJKj=cgjgR@ef6w!(zqcbnIDX~(W9#O?)ngPz z@XZ@Gh!i>c>+UMTXnX-=mWqXyB|SiUUtykFr`Ng?Hr&1B@I`i;OJ_oz*V$gO<^jn41ub@s}S zo2~U&j+Ggpkaes%N%zGMN-2fy`gR$o1aKEKl5v#vyoxFu{#Rl43*%4?{ws0 z2*n(1b3)l`PM~n}lntRAaC#q*Y>{E9Yw=Lb(p`E5VD^mu+ zmsg7>K5gpYprW`QL$>kvet;8lZ`5+nR)C>??JdxFxMYc(xn^iH@FtsK$E<*; zRFR8WvSkUGn|BCU7)gh~|fzT&^W8ok(4e znZr)POCUROpVG*wt+2ZHKS7yaG2cGZz8b z3PvSlzanM{7|-a$zx6^;C?Cg2Ah&%CcY^Qn_q1}0%N~XaGjiZtWwg*w7Sk}?+sC&4 zhnzWA?0Qw--M?}4^@YTTzcW)ktRE}WQ|c1a3@$sJPThdfGy`7^E$_c4M|>6`w|fkS z@4$wnk5~|o`MvkCUe3ZeD6y#dY&@Z!(MJuvOqc!xHEZSmN7cYJH`g;(6g;3w%Wfy4 z_MR-TsS+U;da=~N`4q-1=?{5&wUmBd-UGC-rxV`!w6{Yd*k3`H1z_dy-;IRJ9&IJ? zpA~w;OlN*3hVhCkR5}?v&lBWCG0ojXXv9+5-|&^kUy7Ck$cWJml$=gU7f5(xPzzK# zzUw{l1J6ZLiV}wO-!J|FJ-LRs%`ZQ)GDsSBYuZ{hFII(6e0SQCBTOhtRnP*~E4Yo( zh4YC-eQIpHiVh=zLUU+XWCv87p#b>0#3?DX*YEkTHmscxx15GJ|Dkj|ww;2N>k|An za5=AB{oU|qa<1;(?Jd({PV`gfFG;Nju=6t1rk zOP+hBD0jV~2>JM`Oj(#`Zw%-okizW#E-1vCuMX;*hvf31; ziYCh38^fyZ*YsgBi(`?XfDNfoYJbkmeLvJAzvIV&+?i2;jyX;Y?ChPF&@lA3>>jRklI!0R8xY<7y+ey2QfkE%eK7DoV*5OFCk`lC{}qGV zi=WOYSLm=$MehR@}p7DM<%t{n^Z?qOAiE-Urx!(AvM_fhq}BF58Kbz9G?s5PT?ldCj@dA5=y zO!@a~;W?D-f1n4rEb48>Ros{d&YG$CAaq+IVcs znZjJK2Wj!gjopUlaQZC)PQ&RY@kM{jQCITT9j)oeMGuh@WUFT`8&~{Jma8M`P!YEn z`9l!Q`-E<0-d9F&>dUXX_X3{uXJ-&;@FDCeV?zAfxz zpb)Q_S?n0Sm2vxZ&xIoY*1~IiQOr`Yq%=MC!|iVt_OABsN*|%%R`*DoK9)!*b~GIe z>&NT5{iP{xc>@*_aY2Qn*ak{KkY7E?Z~Z-j`a@J3JwOcD%@~q1IXPX`tg2BHAu384 zdRK)P_MqP~`(Cd-7Azf7y0~5^!)>rc9bnPnu3NMGG+VYnntWa8I&b87Q7=-{>dB zZ5C~NQk-a)o&nu#IeTG}Ig~LDFhYWTw0^4Rvy?=+0N9MH{hec6R;jEV_edLNfAGBK zCA9oAreL3uP60Dm8@8IWpbZ~OW~))BJn-CL&d=Y@$P&X%qaEOP1J$-x_{8m|ZZ`6W zA9*g7iP#iE3$BRR44GTceDv0tq$YFY!9Rr+vJi z!`X;dvd^ymJ|d|8fM$4w#LXDq|NC@F(S1Cd!t}P0X((!57WeKN!g|Ke4RYmm1f^^= zJOvpn-&d1|*8H*YAZH@js0@l_GX?n!`#jnY%j`#v5?Fnw2xA8*#TJEt+Pqz|X~`Au z9@20gcenIzR*cmPCY*SgyeI{;Q{2ZF1rx-UOP0%L<{!x)pP{xCL1vRgj^j__%(Y~G zA^9P(Zl%qQ-paF$eO;x? z!a~S&bE0MYDw|OP#!#{PxD?i&8dES(hg8O%l=Ku7W%|3NZ8WJ`GGx*AL#TU{S|E35M`0ExZU5z! z@($oo7(?y~in%)eCL1>#d?3s7HF4b5{JLUov{?sv5PMzY| z{h2s~9GaqD3kqTA7UbvGWUDy&%r)F=)@Jl)qMpeo0)zpyFc3GkPxR9u$qddIglrbf zN}pFg0uY`8_n*VHUOk1Y0I3v(&=B!W7o|X>jGw^6u{UPj0s zJn`uXrVS*k;yKfWD#6SByHC5BA`^ch%C(v$O}^}?JofUB`yQghh7DT1%7v-*n3PD4fV>E|HM>?Z8Y9gG*75m{`ka#zj!23=nA0)M|pj?$CqE9SOL z%cT=`v>C>eB&muQj$=?Q?#L(BwjLje>5QM?A}UdvJoh0g>ksRJU7EKvjt&?DbG^Ui z5Y^CEf2x{io@i~IDt4y7ZFh*Y*+7rkLXgT~>v&l7KAidk_0ayZIZmp1h?-_4ZlOTQ z`jlrA!v_lQ?}S1LO?*C17E)i(?b&>@=&(3$p@FKR8DGaWZ+YxI1sRzHB}|&V*86NL zcTiIk=f+VR>@zx|gs<7zZc^vo>f+kh&dFrR_-I=#Okckv}9V{psT=UNNr9Yy47%kL4Ab}bQ9O5sR zYwzxLK5IYn_?%uifC2Id)Q6_B85s@(jqBk0N};N1jqTrXst7cmzAK5-{>=Sm==eE8 zy0$~TRL)cR@cy|qmgn7#p_t{DUQd=d_Z6pMRcvCzI=PYoxAr(HF-n!*67vgz4F!GJ zlOFvfr?pxCHTHgzy)sH!+6^P}(no!dD;7sr(sxs((oYk=(xSbl(T4{Kxxp=&^s;Ld zke-lwVk~efqCznT+@72-*qfbNRALlnLMWnbx#*$6x09>TF#7Nnx{i-3kQ-K+n3-tI zxaGc8ifF>AS3uHQrB23tZM$knW7ws&IS?w*icI@zac+LFAOv+@VF>D`^@EFNM)j8E z1_^G09;SC(9DvmTF|hWJ zMl0;17`6@DX>i2B=a3K!tc|E}=oENj&2>{RVvzpb3xvw&q8a~GaeC5dT-Pxj`+bZt zw0GkwHDtsVd@GMfPDup%ba#`8?&4Uf6L!kNeS^fu&z$is?LH?Cg$j}6-Opn7wLih# zn}o5SMr{MXI_YR(?pyN|mZevSZSY-k;m?+t=B+;v?~riyGqCBY;52uv$JmdGJV}M0 zH5RW>%KP14*S1^)7fifHBo(euf)Kbrb;uI2#pG!E_ARRAyJBR>rSb1aXW&pF4M<9p zA3FJVf*CiB+chr+zX2ITQ__&ikJw12Mx8FQ2f^?8Xu~7my1usfj@D|qa#Ycb!s?eC zS!sF63X@^1Gpu3u#Uiuwj!Vz@<;kL2$&I!)Bc6H9^UJak5&llk;OWzERomSs%|yz2 z)fo%3hFm?RdnH8nfFqiwHKhP@gnlh}OeeX4c9W?!w>VM1UzK#b@Q&rh3&K^RP$ zTrn8i*e6ql1M4HcUw9!E&S;sF4S z``~KIm!>h*tyss7IGy{{SE{ibVM{xwZhQL%P@W>n8^t7*7yX_Tpil+Rruz z`96m8UE`)QMd7$lLY0GWC0C4dax-ee3z6-EC$?%>J>ga$rIT9d4BeV7N6*{L?fpim zEDq&o;>h(qlr0L5i={M9QSCxqv4YAgZVsawoL^{l8g(xgaZCNUtHVBkRbyzD5Myt` zc%diYT^cQe|U8)+G5hQFe{pmJPyVyJ*zR(93*zI6Rl1@Ao4^kPw-b-zRwli*tC)b0}>)H4LXL{E!3? z=kIzP4g75wD=guIrn%1{V6BO9$XC>**myZxt{UT7hgGV_t0ZVUolL&s^waE*ZA9PD z!L!P1Kd6|l^%AFY#Q7{Hu0-5QFG1iP<8$V^SpH9pg^yTNSt)v4_R*h)i4aK|WOtX+ znFO{C-Ln5IDV?3L+E+S|`||*um=$BZO8!*WL7uTbl$e>tEuTo~IPSrMHr$*4RAX}; zh~heMg=7@^CipXU(l;Zv;eirDNwkmHwFis3FOf~Bz-B}ERDM$^`r7jR9#1@^O{K;R zXOJcdmujQZE4W4!rVc}IW`t}vF8x@~aJ$DObGdZX&TZ_yiT1`tCI(RCF_28Z1INRf+;2 z#N{O7%VTGgyZ3$7G1dAhbWm+>-%WY+y~RC38Z zN7ds9Hb34cdTtn8XsnW>I>cnDhbQkdncI}|m?VKsXVTOni-8@pF?w{}Zt{XvQ zoeu>nIm7@RnJEJelVJJxYog|Z&|e82G>G!uw;bah(-o_zd|B9s;LEKe&vJoehArG! zXFa9U&~N?4gxq<6=_NY#Qk$A&9nJu?{?9%_x8YOmx02E>;ECf1x?%#wtVSw|PFAbb zvT~Al<%c*}wBawoDGcYO#hc4HId^>+2%)C7QOYvzlZ^org2S-E;EG{1icabwvy(^) zStgb*V+H=5V`t`AR}1NSW{<@zT}crP!VUPr7Xq1HUF*}GW)58p6_9GetFvitajL)3 z82U2sU+IIaDA8J;ka^F~b0kq7$0aiTLiyvMvO{PxL|itiysh|1rw#r#2RW z`XhZl9`*VkXb?HiQW3#Cu`J%BFC=p)D)_cYE6_>B8TO>;c)O3wH$=JX`DlstA<(d; zMxjhrpK?d$tAI_*I2liG-m0>Yr)|2`jWDk1t%v4&nzVHv+^eaQ_>4H zRA_qK_~rPs==WvOR?6UHsy#mLzG>p+yBNAah)VP(39?Km)Zq$w{9&;njN2@t^|h|h zsIg54xIa6-sU0O8eCQq}ee1Qa!C1>Cswzbn>1&KOffqh!(DEn@EN?!crv4uOpPJdf2O6d%iglz(%wy=E!TpOgjC^FbXaMCqFN(0mM z3bf)e(wIxs*duM^%S|ZA!e({D_GnUBmukp$f?0P6sITi5%OuZlQkq!9{naG-6nA}m z&#W$9LUsD~k;r?ccIGutyh{mF!*hrqpTkCiFDe;Aeh&I#jpJW*H8nc~6N~6`ek&OF z`0_SEd~9Rt>6q6qsZ;;gWMwsRaPBBmIyI2MnXmgu8_6t~XWQ)s)3CYD*4$ak$m7@{ ziqW;o@=T2;#8ZGT_|LK&d^D~+-y5ovh8ZQKtgt{~>VMLmbMC^#D{Wt%Tp$o7@KLSP zO{doSZ{Y4kT+3m;RU4~b!Mrgj&Bpn{6z)&Y6Gl%Eo7!!WHidilW-3y{6{t&A7e6F{ zo9ISkF>b87noJ<2kYWw3F@NJfn`G1+ouu4bC)oC3^czclng2xU{?fQ?dU}4^itJQZ z)cUm}n4dDq5xy>D+T0_z=bYdC?dxd7q}0Nd^a1qySd2RjpNMnRbLLkjG3Kgwe))tntcv64l2blD&pSuHY)hRbp>Q<^v7{u*P{4-u}- zUy29=o;#wmsph`Zxa$4?)a;4&6zjq8B?5CO02SL04rV0{O2K$PaB~34qb+*0hUcMf z+ryM|-2O>CL)|(_wz!5FZ$B3Ps;BS(3|bun z!axwS9Cq_TeWt~R=P!m6TiWm}8RXeL|4$qkh*If_%sWd8BtWu}52M~3%Far>?kJzT{qg(HByI}M77)4;;m zuab6$xzRkXE}PAMb5re^s;z}rSp$GqH;w)`r*HB@sn-{#*-^0?i?AHDB5XU>XM2TM zN@KRdchJwnarnNaelz1RY}Dg|i^U^tY54N1?;Hv6Iaboo(fPU;(|Et9hFq(_9ai!6 zs52qdN%5x-4(72fmxtcm?ii&*>gUyvl<1)>Y4Xqj<^22yqXWTC#r*CXLJbXqQNj(4 z9UzP-@I0-|@9&>i12ex;(wzw|Gi82oiEb9WBxJSM{$)RF4U`;dF}mKm^Tey8S%>3b zxj`A~8=|0XlRS%MsIrNdd9b?z*(K5#zJ;*N1tiqg>gQi;j7LwG*AL#fX-b41aJ?}w z3^pU&sAWWw!AONlK**}kLIjOBXprItoAs0N(5&X-@?E~28OGx7bUiO}dyxJ@;GZAb z%Vxl$St2mUa&>prcROp3L)S45M!Q5_Kv49(y&P(JJZ=vV@~ez4Bt_57Eu1RPYUZ@M zP%<@wA0R)s1#w69^g{O7mb7AgBNCU^Hu#%&4yIR%bz*}OLIk$w zK#rI30f;scOf&5dUR&2}MILLzvlSoI2z||lp=LPswo$+ZBWZmO-7FBa{%DNBX2L#; z_aQO$YXYO;m9e;^kk8Z(ao+kNn;>d@bvl}U>}^8E3phtiD6Yx)EQ4hB=U0xM7MY>;hyI@BiS z^Gs<`m*V%`W}#67;rT>x)p5#90+)$7ggYb`Rgp+$hB5he`fuzF=heRISV*%^V#?Ai z34VDbQ^`2$C?u+Yc}vKBO*f#oJY|`MpSjaLS6MLJZAH^!<>PNq>c`5rV%e^^Iqzbo zO%FsvQV})2^X1`QDmq};(`(!p6YGY0L$Y1d1>*NXX`3q7}ls7un+4PPjDSoH5 z10}JUF&j1+)%!}rOc>+Do3`W>AjzehS4ETU>V+?s-c? zOh5f$Y#kE|DoC?nY+)yVH?nb_jD-r9l(VW+Q$1E^YKT>8`)yz9X@CxVJ(9W|nP-q4 zjFWvn=GEL9o@uu+Ov754db)x~yQlK}HR-aA4@e*P_8&i{nVan!g{3-dpS6 zCxTEq+NEOQnS+rBUIa-q)QuO@m)mIAL+a z#eQ$E414pjcE<9moIgEZoF&20*CT$G-(Zb{ROTlUUHV_cY`>Zk;Gl3yG}T^@ss48B zws(Qmm&)jFM7Ea8X}q7s07Kn^ZgbA3};8cg$Ym zyCZ@~7RcwxDGeIFi^}IPm~%N4|M8>%VT(}~euKp&!+$BTCTU{}4*X#!H<8;3ym|>k zfZw-4c%QJyh-%+3@cHwLPCNiJn}G+_h6EGV2kcIA{Ffj6UzT_le+B%?z)^1A1-}tU z?=5TKZDZ+eD`f3y3y%QYoLu}MPCgJ9j}AAd5GR)qmjEj#Ji)p0a3%l$Q~wr)?`Z8z#mCOiE&vjwf;Y(v;(Q0<;-=E% z;-hl#_I4NI;PCVFV|V;V4G(Z?b~jJ^<&P(Dh5(X(9CaLgz*a&+GH%vBU|UyjAt4Po zsTY8&?4_OKf6)A=O(7u%TSt2bZ+L$>xnqf1;WWhm#pnOh=sVhYJNzR#Wsv2ClaT%w ziK-*m);qx67Vw{5ak#tMi`VO^{SQ8>I&dlg7q1{cj{q+xzd*w4-cN86?Em7U?HFha z;FOX|D;7J37fJkAk*<~^z|PUd7Cw9qZ?HRuou#j%wVSIK2R}b2rwtds9lxD`wUq!b lH?JUDB#?yz`pcXxO9#oe=kpusgb2_9G=IKeHrCdlIM5;W-Dymfzg z?^kvIfUi!?nVB;^J#uDxy8D?J4K?}K=x@*g0KjWS1sN@P-2E>AU%}s6%Py$!2-#jz zRT2QGOT>7zM1kiKytL${05ucj2k;D)wStx^01(Ik0E9;X0Qc}u;rjr94<`U{XaN8S zWdQ)h?zwH6BJhG&R?6}+fR}$yVMkdi{0o}9f}s~YR`^el8+H~002rSXWh8a{mrnBh za^LE%ysX(Db{K2@WQd5kT2&}7LVrckFRvpb$)>}MIP+CWGnzp1YjhD45l;GzHtzLB zk(>tg$`uac!6$+lU$^XRuh6jE>{h?jB$uC36n+yA*Tp|v>%I0)MGJV=LXitONw{Mh z%iOvx7E(zNNVq@YhEvb}Z%8~+_IUNw-Cmj6V80h+3QDv_OS))Y7r^-#be~ZFApr5% zG6FCPF<;f{YgWHSlYXMB?a%N0?y`P-K=xBespqfxAAuvAM5!-U3Y2kiXH0l<=rD-F z>4C5dj0E2Sn+6&4#Q9nleA{e= zh_4tc7leR{fnSjcu1>%gYf<4 zHo(_GXkuPpS#GntwqDkCk#b$Bt4@KJ^ zFm`{K-#eH!g*^#N1DW`lu@)zH-L{+rPmnp@MaIiEJdjYXThpL9=3fgYvQC~~um`qrxm4!(SN_0wm;UK(GbRa2ILqqi|R_y^7jNUCInWg!z=tq)FuPGNbY%hTHZ=RNRY_b+(R z9F5F|V2O82Rw~W)cv#MSi z!)ow<9(tF18Gt?cX`KG@(<$B{@;$H)4DKWso7v5;x@>TR`h_Vwz(SN$H|Lx`8?+hK zuK{w9qLv(`#;S-3n!2SY)9x;v5%QLdF;CpK9yHiL97*83-vX+M^$awl%Hw=h=Cq5k&+ z;XY&pVfR52b-)MgM#r^P8m1ws`oaa|0+B&m3%?w}GbO!hT?UWeQt<#W#E2>31|4@; zvuCcrU?dLC#c4kA;M^$R0dS91?z_x$m&^Y z_~$d9X}eK5Fm3KkcL9_3BP@P#&2rdj*f_31JK1EdHsoIe1wWXv!G zy1QaDZEL_EGoo6oT@*nS18%W5(qv4X`LjFrmaQ7Z7oQOuT;$W~L#0c6A3tR@ zF-?fi?j@65mj3cYB|&JQ$tWS-pMQpJT^4wvA!@a+U0dFNi_W27L4alO%j2!)lF|gf zkN@6Pj2YyI*XAOn*Vf<5d4a!9Jee+d`H|uI9hZu9xnic_-;jX|c>&C$sxG@Ne787U z3D#uZ8ghZTU19s6hAP6J0^6jDOi}JTD=2zUSko0x%vP|DR zXVWh7WIrpU^UHdTyz&nrW)+?`n6+}M)$bobelw^g>6j;SUxR}Rbm+>1thTJKj=cgjgR@ef6w!(zqcbnIDX~(W9#O?)ngPz z@XZ@Gh!i>c>+UMTXnX-=mWqXyB|SiUUtykFr`Ng?Hr&1B@I`i;OJ_oz*V$gO<^jn41ub@s}S zo2~U&j+Ggpkaes%N%zGMN-2fy`gR$o1aKEKl5v#vyoxFu{#Rl43*%4?{ws0 z2*n(1b3)l`PM~n}lntRAaC#q*Y>{E9Yw=Lb(p`E5VD^mu+ zmsg7>K5gpYprW`QL$>kvet;8lZ`5+nR)C>??JdxFxMYc(xn^iH@FtsK$E<*; zRFR8WvSkUGn|BCU7)gh~|fzT&^W8ok(4e znZr)POCUROpVG*wt+2ZHKS7yaG2cGZz8b z3PvSlzanM{7|-a$zx6^;C?Cg2Ah&%CcY^Qn_q1}0%N~XaGjiZtWwg*w7Sk}?+sC&4 zhnzWA?0Qw--M?}4^@YTTzcW)ktRE}WQ|c1a3@$sJPThdfGy`7^E$_c4M|>6`w|fkS z@4$wnk5~|o`MvkCUe3ZeD6y#dY&@Z!(MJuvOqc!xHEZSmN7cYJH`g;(6g;3w%Wfy4 z_MR-TsS+U;da=~N`4q-1=?{5&wUmBd-UGC-rxV`!w6{Yd*k3`H1z_dy-;IRJ9&IJ? zpA~w;OlN*3hVhCkR5}?v&lBWCG0ojXXv9+5-|&^kUy7Ck$cWJml$=gU7f5(xPzzK# zzUw{l1J6ZLiV}wO-!J|FJ-LRs%`ZQ)GDsSBYuZ{hFII(6e0SQCBTOhtRnP*~E4Yo( zh4YC-eQIpHiVh=zLUU+XWCv87p#b>0#3?DX*YEkTHmscxx15GJ|Dkj|ww;2N>k|An za5=AB{oU|qa<1;(?Jd({PV`gfFG;Nju=6t1rk zOP+hBD0jV~2>JM`Oj(#`Zw%-okizW#E-1vCuMX;*hvf31; ziYCh38^fyZ*YsgBi(`?XfDNfoYJbkmeLvJAzvIV&+?i2;jyX;Y?ChPF&@lA3>>jRklI!0R8xY<7y+ey2QfkE%eK7DoV*5OFCk`lC{}qGV zi=WOYSLm=$MehR@}p7DM<%t{n^Z?qOAiE-Urx!(AvM_fhq}BF58Kbz9G?s5PT?ldCj@dA5=y zO!@a~;W?D-f1n4rEb48>Ros{d&YG$CAaq+IVcs znZjJK2Wj!gjopUlaQZC)PQ&RY@kM{jQCITT9j)oeMGuh@WUFT`8&~{Jma8M`P!YEn z`9l!Q`-E<0-d9F&>dUXX_X3{uXJ-&;@FDCeV?zAfxz zpb)Q_S?n0Sm2vxZ&xIoY*1~IiQOr`Yq%=MC!|iVt_OABsN*|%%R`*DoK9)!*b~GIe z>&NT5{iP{xc>@*_aY2Qn*ak{KkY7E?Z~Z-j`a@J3JwOcD%@~q1IXPX`tg2BHAu384 zdRK)P_MqP~`(Cd-7Azf7y0~5^!)>rc9bnPnu3NMGG+VYnntWa8I&b87Q7=-{>dB zZ5C~NQk-a)o&nu#IeTG}Ig~LDFhYWTw0^4Rvy?=+0N9MH{hec6R;jEV_edLNfAGBK zCA9oAreL3uP60Dm8@8IWpbZ~OW~))BJn-CL&d=Y@$P&X%qaEOP1J$-x_{8m|ZZ`6W zA9*g7iP#iE3$BRR44GTceDv0tq$YFY!9Rr+vJi z!`X;dvd^ymJ|d|8fM$4w#LXDq|NC@F(S1Cd!t}P0X((!57WeKN!g|Ke4RYmm1f^^= zJOvpn-&d1|*8H*YAZH@js0@l_GX?n!`#jnY%j`#v5?Fnw2xA8*#TJEt+Pqz|X~`Au z9@20gcenIzR*cmPCY*SgyeI{;Q{2ZF1rx-UOP0%L<{!x)pP{xCL1vRgj^j__%(Y~G zA^9P(Zl%qQ-paF$eO;x? z!a~S&bE0MYDw|OP#!#{PxD?i&8dES(hg8O%l=Ku7W%|3NZ8WJ`GGx*AL#TU{S|E35M`0ExZU5z! z@($oo7(?y~in%)eCL1>#d?3s7HF4b5{JLUov{?sv5PMzY| z{h2s~9GaqD3kqTA7UbvGWUDy&%r)F=)@Jl)qMpeo0)zpyFc3GkPxR9u$qddIglrbf zN}pFg0uY`8_n*VHUOk1Y0I3v(&=B!W7o|X>jGw^6u{UPj0s zJn`uXrVS*k;yKfWD#6SByHC5BA`^ch%C(v$O}^}?JofUB`yQghh7DT1%7v-*n3PD4fV>E|HM>?Z8Y9gG*75m{`ka#zj!23=nA0)M|pj?$CqE9SOL z%cT=`v>C>eB&muQj$=?Q?#L(BwjLje>5QM?A}UdvJoh0g>ksRJU7EKvjt&?DbG^Ui z5Y^CEf2x{io@i~IDt4y7ZFh*Y*+7rkLXgT~>v&l7KAidk_0ayZIZmp1h?-_4ZlOTQ z`jlrA!v_lQ?}S1LO?*C17E)i(?b&>@=&(3$p@FKR8DGaWZ+YxI1sRzHB}|&V*86NL zcTiIk=f+VR>@zx|gs<7zZc^vo>f+kh&dFrR_-I=#Okckv}9V{psT=UNNr9Yy47%kL4Ab}bQ9O5sR zYwzxLK5IYn_?%uifC2Id)Q6_B85s@(jqBk0N};N1jqTrXst7cmzAK5-{>=Sm==eE8 zy0$~TRL)cR@cy|qmgn7#p_t{DUQd=d_Z6pMRcvCzI=PYoxAr(HF-n!*67vgz4F!GJ zlOFvfr?pxCHTHgzy)sH!+6^P}(no!dD;7sr(sxs((oYk=(xSbl(T4{Kxxp=&^s;Ld zke-lwVk~efqCznT+@72-*qfbNRALlnLMWnbx#*$6x09>TF#7Nnx{i-3kQ-K+n3-tI zxaGc8ifF>AS3uHQrB23tZM$knW7ws&IS?w*icI@zac+LFAOv+@VF>D`^@EFNM)j8E z1_^G09;SC(9DvmTF|hWJ zMl0;17`6@DX>i2B=a3K!tc|E}=oENj&2>{RVvzpb3xvw&q8a~GaeC5dT-Pxj`+bZt zw0GkwHDtsVd@GMfPDup%ba#`8?&4Uf6L!kNeS^fu&z$is?LH?Cg$j}6-Opn7wLih# zn}o5SMr{MXI_YR(?pyN|mZevSZSY-k;m?+t=B+;v?~riyGqCBY;52uv$JmdGJV}M0 zH5RW>%KP14*S1^)7fifHBo(euf)Kbrb;uI2#pG!E_ARRAyJBR>rSb1aXW&pF4M<9p zA3FJVf*CiB+chr+zX2ITQ__&ikJw12Mx8FQ2f^?8Xu~7my1usfj@D|qa#Ycb!s?eC zS!sF63X@^1Gpu3u#Uiuwj!Vz@<;kL2$&I!)Bc6H9^UJak5&llk;OWzERomSs%|yz2 z)fo%3hFm?RdnH8nfFqiwHKhP@gnlh}OeeX4c9W?!w>VM1UzK#b@Q&rh3&K^RP$ zTrn8i*e6ql1M4HcUw9!E&S;sF4S z``~KIm!>h*tyss7IGy{{SE{ibVM{xwZhQL%P@W>n8^t7*7yX_Tpil+Rruz z`96m8UE`)QMd7$lLY0GWC0C4dax-ee3z6-EC$?%>J>ga$rIT9d4BeV7N6*{L?fpim zEDq&o;>h(qlr0L5i={M9QSCxqv4YAgZVsawoL^{l8g(xgaZCNUtHVBkRbyzD5Myt` zc%diYT^cQe|U8)+G5hQFe{pmJPyVyJ*zR(93*zI6Rl1@Ao4^kPw-b-zRwli*tC)b0}>)H4LXL{E!3? z=kIzP4g75wD=guIrn%1{V6BO9$XC>**myZxt{UT7hgGV_t0ZVUolL&s^waE*ZA9PD z!L!P1Kd6|l^%AFY#Q7{Hu0-5QFG1iP<8$V^SpH9pg^yTNSt)v4_R*h)i4aK|WOtX+ znFO{C-Ln5IDV?3L+E+S|`||*um=$BZO8!*WL7uTbl$e>tEuTo~IPSrMHr$*4RAX}; zh~heMg=7@^CipXU(l;Zv;eirDNwkmHwFis3FOf~Bz-B}ERDM$^`r7jR9#1@^O{K;R zXOJcdmujQZE4W4!rVc}IW`t}vF8x@~aJ$DObGdZX&TZ_yiT1`tCI(RCF_28Z1INRf+;2 z#N{O7%VTGgyZ3$7G1dAhbWm+>-%WY+y~RC38Z zN7ds9Hb34cdTtn8XsnW>I>cnDhbQkdncI}|m?VKsXVTOni-8@pF?w{}Zt{XvQ zoeu>nIm7@RnJEJelVJJxYog|Z&|e82G>G!uw;bah(-o_zd|B9s;LEKe&vJoehArG! zXFa9U&~N?4gxq<6=_NY#Qk$A&9nJu?{?9%_x8YOmx02E>;ECf1x?%#wtVSw|PFAbb zvT~Al<%c*}wBawoDGcYO#hc4HId^>+2%)C7QOYvzlZ^org2S-E;EG{1icabwvy(^) zStgb*V+H=5V`t`AR}1NSW{<@zT}crP!VUPr7Xq1HUF*}GW)58p6_9GetFvitajL)3 z82U2sU+IIaDA8J;ka^F~b0kq7$0aiTLiyvMvO{PxL|itiysh|1rw#r#2RW z`XhZl9`*VkXb?HiQW3#Cu`J%BFC=p)D)_cYE6_>B8TO>;c)O3wH$=JX`DlstA<(d; zMxjhrpK?d$tAI_*I2liG-m0>Yr)|2`jWDk1t%v4&nzVHv+^eaQ_>4H zRA_qK_~rPs==WvOR?6UHsy#mLzG>p+yBNAah)VP(39?Km)Zq$w{9&;njN2@t^|h|h zsIg54xIa6-sU0O8eCQq}ee1Qa!C1>Cswzbn>1&KOffqh!(DEn@EN?!crv4uOpPJdf2O6d%iglz(%wy=E!TpOgjC^FbXaMCqFN(0mM z3bf)e(wIxs*duM^%S|ZA!e({D_GnUBmukp$f?0P6sITi5%OuZlQkq!9{naG-6nA}m z&#W$9LUsD~k;r?ccIGutyh{mF!*hrqpTkCiFDe;Aeh&I#jpJW*H8nc~6N~6`ek&OF z`0_SEd~9Rt>6q6qsZ;;gWMwsRaPBBmIyI2MnXmgu8_6t~XWQ)s)3CYD*4$ak$m7@{ ziqW;o@=T2;#8ZGT_|LK&d^D~+-y5ovh8ZQKtgt{~>VMLmbMC^#D{Wt%Tp$o7@KLSP zO{doSZ{Y4kT+3m;RU4~b!Mrgj&Bpn{6z)&Y6Gl%Eo7!!WHidilW-3y{6{t&A7e6F{ zo9ISkF>b87noJ<2kYWw3F@NJfn`G1+ouu4bC)oC3^czclng2xU{?fQ?dU}4^itJQZ z)cUm}n4dDq5xy>D+T0_z=bYdC?dxd7q}0Nd^a1qySd2RjpNMnRbLLkjG3Kgwe))tntcv64l2blD&pSuHY)hRbp>Q<^v7{u*P{4-u}- zUy29=o;#wmsph`Zxa$4?)a;4&6zjq8B?5CO02SL04rV0{O2K$PaB~34qb+*0hUcMf z+ryM|-2O>CL)|(_wz!5FZ$B3Ps;BS(3|bun z!axwS9Cq_TeWt~R=P!m6TiWm}8RXeL|4$qkh*If_%sWd8BtWu}52M~3%Far>?kJzT{qg(HByI}M77)4;;m zuab6$xzRkXE}PAMb5re^s;z}rSp$GqH;w)`r*HB@sn-{#*-^0?i?AHDB5XU>XM2TM zN@KRdchJwnarnNaelz1RY}Dg|i^U^tY54N1?;Hv6Iaboo(fPU;(|Et9hFq(_9ai!6 zs52qdN%5x-4(72fmxtcm?ii&*>gUyvl<1)>Y4Xqj<^22yqXWTC#r*CXLJbXqQNj(4 z9UzP-@I0-|@9&>i12ex;(wzw|Gi82oiEb9WBxJSM{$)RF4U`;dF}mKm^Tey8S%>3b zxj`A~8=|0XlRS%MsIrNdd9b?z*(K5#zJ;*N1tiqg>gQi;j7LwG*AL#fX-b41aJ?}w z3^pU&sAWWw!AONlK**}kLIjOBXprItoAs0N(5&X-@?E~28OGx7bUiO}dyxJ@;GZAb z%Vxl$St2mUa&>prcROp3L)S45M!Q5_Kv49(y&P(JJZ=vV@~ez4Bt_57Eu1RPYUZ@M zP%<@wA0R)s1#w69^g{O7mb7AgBNCU^Hu#%&4yIR%bz*}OLIk$w zK#rI30f;scOf&5dUR&2}MILLzvlSoI2z||lp=LPswo$+ZBWZmO-7FBa{%DNBX2L#; z_aQO$YXYO;m9e;^kk8Z(ao+kNn;>d@bvl}U>}^8E3phtiD6Yx)EQ4hB=U0xM7MY>;hyI@BiS z^Gs<`m*V%`W}#67;rT>x)p5#90+)$7ggYb`Rgp+$hB5he`fuzF=heRISV*%^V#?Ai z34VDbQ^`2$C?u+Yc}vKBO*f#oJY|`MpSjaLS6MLJZAH^!<>PNq>c`5rV%e^^Iqzbo zO%FsvQV})2^X1`QDmq};(`(!p6YGY0L$Y1d1>*NXX`3q7}ls7un+4PPjDSoH5 z10}JUF&j1+)%!}rOc>+Do3`W>AjzehS4ETU>V+?s-c? zOh5f$Y#kE|DoC?nY+)yVH?nb_jD-r9l(VW+Q$1E^YKT>8`)yz9X@CxVJ(9W|nP-q4 zjFWvn=GEL9o@uu+Ov754db)x~yQlK}HR-aA4@e*P_8&i{nVan!g{3-dpS6 zCxTEq+NEOQnS+rBUIa-q)QuO@m)mIAL+a z#eQ$E414pjcE<9moIgEZoF&20*CT$G-(Zb{ROTlUUHV_cY`>Zk;Gl3yG}T^@ss48B zws(Qmm&)jFM7Ea8X}q7s07Kn^ZgbA3};8cg$Ym zyCZ@~7RcwxDGeIFi^}IPm~%N4|M8>%VT(}~euKp&!+$BTCTU{}4*X#!H<8;3ym|>k zfZw-4c%QJyh-%+3@cHwLPCNiJn}G+_h6EGV2kcIA{Ffj6UzT_le+B%?z)^1A1-}tU z?=5TKZDZ+eD`f3y3y%QYoLu}MPCgJ9j}AAd5GR)qmjEj#Ji)p0a3%l$Q~wr)?`Z8z#mCOiE&vjwf;Y(v;(Q0<;-=E% z;-hl#_I4NI;PCVFV|V;V4G(Z?b~jJ^<&P(Dh5(X(9CaLgz*a&+GH%vBU|UyjAt4Po zsTY8&?4_OKf6)A=O(7u%TSt2bZ+L$>xnqf1;WWhm#pnOh=sVhYJNzR#Wsv2ClaT%w ziK-*m);qx67Vw{5ak#tMi`VO^{SQ8>I&dlg7q1{cj{q+xzd*w4-cN86?Em7U?HFha z;FOX|D;7J37fJkAk*<~^z|PUd7Cw9qZ?HRuou#j%wVSIK2R}b2rwtds9lxD`wUq!b lH?JU +#ffffff \ No newline at end of file diff --git a/client/apps/hello_world/static/favicon-16x16.png b/client/apps/hello_world/static/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..491dc66b76bb660ba40ded306775d441fbfaf378 GIT binary patch literal 921 zcmZ{hOH30{6o$`CXNFQkFvjpuVv599P1~8FFw=?hsHG2WODUy-f-r5T?Es|>9jp*d zkSGxoP>c&rjG__*Bt%>okc5Sgg&SkSMibqu!Ndg%BP4iBOe7>O&i(J1^PT^kn;G(Y z>^Yh}8UV;~I;=jVJ2RnHq4Tglw;l-*t#(%f%-z_rE|Mt6Qa-x{X5SZmLy0!z@VNo{ z4g&OF0r-tR^?wEEp#i?P0SI>h@{{*o)*VBINw3RagLL;!tg@8IB7snWSW8U~XQ?Y|jI#r{Cw3HLE2CBA- zJbRK1*ht-e6^_Hh06v@bt*+{iVyrxB5rthNcP^?&B~#M(xK|@~)#n z2b7vdB`hkE5bBnY082BRo-WrjrGAzcXhvZ8qcpnEU)EML>;7wqC&F^1_x}wu6RtJX zV9QKMB_c{%?3Tb87o(C}jLM-7ZMlIn@OrZrjWp@$GCjj;>zHzFOi_}8(U?xB4RVG? zfoMabJNkL>2Qq|$jH5r+6Auc4H4*BGOI?Z}coCWc=E=sQaT~KaQxIa39E~Z!nAu$D zzKWRqEk1vl({fmeWsv2WVl_evw;*mgE-Af92{yMfCcC1Q&jX%qK5jpvfH9f5Qr<*! z{7BBLVT9yv@u`>lB%m#p+m9+%P${sb)ZlYMMDCQ(^NsN?r85yVM#S@SDAAQN{`)aT xj-%-?!$r6V9}4m&)?{X+NEs{f93NzYV#I(t3~0aBXkZad0B4QII%{bg_yZaE1_l5C literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/favicon-32x32.png b/client/apps/hello_world/static/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..e5881f62ad51e2fff845cda499506e0769f33250 GIT binary patch literal 1333 zcmZ{hdrVVT9LLYSy}gf9THjhHbJb1R#J2aA+Lmhvf<;=Pj7KdJ$JPh8rAndF3#EXL z$3Q?RJ`gd!r{XlOQJ0wpH!)^0(Ir0TUeP7`$FdohxMkU#E@7u;$(YIh_?_SHob&m9 zf9KI#T$C?|FF^o++-9|uqO3{=EkUE@Xy0X&2!D<}2Y@q!vcKF?G{?fF`MDr|E%m1) z>9v;H0cc(fK->EOJVi@wKLXIe0`SlU06zl2oY20p5;M}BEG~59AwWuiMf34}?=h>* z1O@<2f?ZMOm(LY<;_~(7Btv0-2f4e2*|Ul1ucvo4GqDC{=2UFiQpra#xa3tyrJdaD zr*jR&!*NB0O*%!69qoqe3Z$CFlK7zPL?0aAD~o!lCJ!|bW+)OUWZ1?1DKU{TbHt$z z2x%-olQ_8*E=X%3u3LNZ!2DRkK7Wl?Oe5xGV-O6;Vr)dhvWth8|9BgD;skyW8BVF+N$&`{@sn0>~h%h6q%*MB=T$kMZ-hDJq^rq&Fbn*MwuCAvaaWm|jtdJC+p@9)?>yj|F~v%J`G>DY>jyj?l= z%9UjW^Ui-7i_e#IUT7aWcX*mJ>YY(Wk{Oj@8Cg(K^Q-eK!?~3H#@`jOl%i|j%uFQ4 zI5yGJ)EsSj`ozP)>}g_kPD8c-q}}dGy8) z!!?iGSH66B_3rF@-{0&_*D05bjkP>pJaQj`8hmM5=ZBllpeI-)=B*X0+@ipH>jjj6 zj^&JM)}ZDx96FX~Ii546v#4P2J^L;HKZ0OgRlpbhf5EBI!e>aZD%l}i=My9DdI8vi zZogo6`vcw$Duc$TF{v|EsHI-bE>m+lRS9QMRf}SX*J>k?h$fJvQ6O4VSMR^u{WCHI z%A}*Cx*_P{c}tzQAt=;}JYS5^FyM|)oY%gFngzh-<_>+3^$2Y_CvB}MwEi8RX43``L literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/favicon-96x96.png b/client/apps/hello_world/static/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..aa47a9143839fea9121baf38cdd5881e9306a7de GIT binary patch literal 4303 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 literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/favicon.ico b/client/apps/hello_world/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..52ee19b75a583775349f9bfaa7949b7ea91b16a2 GIT binary patch literal 1150 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 OKut+Yu}a=5>^}gRAHrq; literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/static/ms-icon-150x150.png b/client/apps/hello_world/static/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..ed141a9d47a203cef1121b705decda4ed09ce7a7 GIT binary patch literal 7982 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 Date: Tue, 13 Jun 2017 14:22:50 -0600 Subject: [PATCH 425/452] Change images --- .../static/android-icon-144x144.png | Bin 7450 -> 7823 bytes .../static/android-icon-192x192.png | Bin 10294 -> 10705 bytes .../hello_world/static/android-icon-96x96.png | Bin 4303 -> 4549 bytes .../hello_world/static/apple-icon-114x114.png | Bin 5283 -> 5614 bytes .../hello_world/static/apple-icon-120x120.png | Bin 5690 -> 6030 bytes .../hello_world/static/apple-icon-144x144.png | Bin 7450 -> 7823 bytes .../hello_world/static/apple-icon-152x152.png | Bin 8074 -> 8466 bytes .../hello_world/static/apple-icon-180x180.png | Bin 10364 -> 10848 bytes .../hello_world/static/apple-icon-72x72.png | Bin 3096 -> 3261 bytes .../hello_world/static/apple-icon-76x76.png | Bin 3322 -> 3437 bytes .../static/apple-icon-precomposed.png | Bin 10868 -> 11279 bytes client/apps/hello_world/static/apple-icon.png | Bin 10868 -> 11279 bytes .../apps/hello_world/static/favicon-96x96.png | Bin 4303 -> 4549 bytes .../hello_world/static/ms-icon-144x144.png | Bin 7450 -> 7823 bytes .../hello_world/static/ms-icon-150x150.png | Bin 7982 -> 8276 bytes .../hello_world/static/ms-icon-310x310.png | Bin 24213 -> 25032 bytes 16 files changed, 0 insertions(+), 0 deletions(-) diff --git a/client/apps/hello_world/static/android-icon-144x144.png b/client/apps/hello_world/static/android-icon-144x144.png index 81bd229ab23c067e728c20ce5d24676214b60881..ecc83d515b29488fefbc3b599c5c048c784bbcdd 100644 GIT binary patch delta 7357 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 delta 3832 zcma)9XEYlC*G@EQMi&vQw57CaHYLO;iYif*8nrhu8&#`9%nB8&TAQl9sg;x%v1eOt zY%!{}w z`I!TVfhO)Czia}7rc*$3wTXbBrDTev}5DIF*8c7ns7My8364>-?&+D(UgnM zjs#_##6BqmiQLA2yXP`-;bw6E*D8>tN8MuR$7=;Crrjq~03b^ri4)qSc8iW z9UAHjP?edg9-)5mmoe)|$DroJ`Jf5nlscp8dW|RWrv`XoIg}&bc|dP6|26sF)guzO zFF^cnslZDKwuG$PCZF}I?fvp+cAVh?#)dA>#%zBpmD=<6g+Zd4%hQ~{;guihNzYt|hM>gjkG{VLCS&V; z!+0XfSljBpbiVhUkF^J6Dk4ZPlzkY-t8(?XNtnISvAb2AwYmDEV@?m5SYo=hhqCzQ zCLUKzmzV@#FyV^F_u6tAz(O&64^03IyMiypn5ATlM@Ah?w!^gtW&XY2^mO^UHtAU< zltGIF^h2VcvX4eaT}-x7sXvUnUEH=SvMn7GQnH}F0@r|WnJK@f!3-COH~r%l_62f- zvU2itAW3gFPl_b#2!h*{sOz-#aeg3fML{hTBTM8l^j)>*BIsXB?RP@S-pyVfczR9> zD6A?VY@RyX{9tPMLJr#@7k3)FSs1%z{od#J1%;Dr{i&kEtd;XGV3zO95}}cBDnLg` z>v^|oRECZUia>2idFAFgCQQ^tIa6}I7X(0cYhzQ#joSTLk1MAsITTEfHGlOvT{=o= zI2{I`b-U3nv}4Zz*8)}e>y|uQ$!87`6IJsXDh9gspWE69AV-aLHZOF_;-4Zk|p-LGxF+gY@VyMgWkD3rq4Q=s3maHd}^9 zVn?y<-lvaeX_t6Me?Jj>dqTM;M$e6T20N_q8K0DD>>NKMsBv35%CI}khLt@oA$Dkk z7H&Ky%BE>;|2995f!WkN&Vi_l(k$HvFE?7wd13#1Tb8pR_j&w&f+Z#}d^#Nc)zpH1 z_n|bd`=TcM&ts3DHuJtwb$zHOUrpOHJ9OcGLkTTTx+DGd6YyVjI((Bo z65*E6(v~}5l09FtO7yd~ueW}l+v-b_1r*z~A$R$7i|eAh=Bj7a{g*zgG%EO!-y=(9F(|G}f zLBnky*4jMM$I!%nS~u7{`OxL8X47Jy7w>D`vzd`{txV` zEz}P|=nSO#96;YHQv;al7rsrEj8A(oPGD>1Pm7((b4zqbSKE7dRmLCC)<}4|DnavY zi*%OZou`W_FYOezZQ1WdM=9HP?59o)WOCeh@mm>#Vup!ITUnnfJ4T3_H$uM9Y58i< zTs&q<;FP7Y1gE#h#{5tNK;h$tMyhmro#Zze)EV^ixsf^Zq0OMXJy@LE8lY^v%x_LB zb*3e>a((@-+jxmypQKH!pr;{CG5E(-|H)U*(_Pb*2dnrCVsQ3%*>g^#Q&) zer5LaP|R6<)BAZ%z#+LWNngK}_y@Z4Dn^$J-$hm}K1xp#_WyT3UTJyf=gJj=Hj)6# z%#4IF6tLot<3&xZN`J+*7x8NKcD8x}N-?sxOI$z47?QOh4JQ;Oo51K~uknU3^Bpba zkrjArfVg~-((pO~MmRv(leD$+!~f2fI;J}@7+@t)HO4*su3)Z^_*IUEvgoP`-Ana0 z+hn$Wh+K9$PR>0h^&0YVXk=!ZRmB>QPh?$f_XtrtOhzY7pqFcurX=Q`R*txb`EuDX z*{p>UdhOrTE5i>aHF@zX=hb@-61^HMmRRB2MBcVcoGN>Kk`JHENk3-~9&4O8MahXq z_3#UEAp!u15%(f@1E{-*7(RBG=dZhS&*mR$B)p;GmmNCk<~>$fD-U#kQ2JK3+od*u z`LSBmt}aUstHQBHY@rnn+~F##2&kfx(%&Z!%olWLv*Kg{$pPfXaDZd zU%2*L%_7wI{Ev(tgg$Ddw!5n4^WEK_yuJ7dOVZxl?L(GNZ=-lCb@ACZ^!3#!p*z=6 zB(O={#X4wY|iYQ4;_t7G7Pw^yX ztY>MP0NJ2rRT{J$xVE0EWPCh4+#XrC(dEAJ=a|f9oW*bN`dZzvZGpzOGE79GRHsnEm1LrncgHX$aq%Oecev)iEZo%A?ly^yS%6%eTko zJ5K%pk%Vyvga!r1eot^xs@O;uOCn(C-BoMf2=V|kE=gOgYsr5yhLtf^=7G7yFIP(L z(LyBLXg@73F6Mx3_kD59f>DFT*KzlrLH2=?D!=XZQ!vRYC5Qo#15?-yU`2>DF8{pP zbOVHIaoUwdW9W2xQez)-!s|&;H5gl~#C!KN$^3AN^$$N#y+1qgM8m6{*C zaK0{1lUNSsn=D1L$EWJtsu#%?8SU$5NzvV6+XF{jW(I`tgjp%_li8Sq1LD*)(&mU? z>4*oxv3!KqlUx*n@oY}==qj(Fd?VD)RNAOXZ!~MD9gxm|w@4&~xHmL1AWH>=EWcOS ziN)af!VwVo*-|!PT;BO9Jg@r`-2U2h1{*(|YWUV%>`n@|ngOD>m-uVg&h^7nl@(XD(1ulbPLpv@xEB_LjDQOT< znkXxpt#F=n`t=%W)vA4+3Iy2aGi{tci{c4h%setPF7@003}1>!y!8=sbb}tl<&qtY zdTPbb`wIqJ(=!|s{XQllBjap#=wIP_{gr=r6##&LFaD={Rn;<4d~P4&y~u%UZ_`zK zQd&?lgaenXa3Efy*!F{(DAq+VHvnMKo;le2Npxu|3f=gl3LXD*A;7ck$B$d}>)&`+ zWHi(3BEup%09$NU!|7M-e^_FW7D;&@`gsRA!J1$M0OPXrS@GX$#sBzn{lCxJUuCA9 zS!xQrL>mAA2>Ga+_}JU{ILO;QcQ`WuX-TQ1wF@j4B&Fn~;G&X}@{*F%$9tMd=PzFW zzrL~po#Q0gi~ks5lCtnO;P$vAg-iNySy@R*dns8*Sx2~?EgU8dlaq3AyeI7dmxbF( f+1faYyV!Y(dwDonIXxwufdjPEbstoyT4VnM9kNH6 diff --git a/client/apps/hello_world/static/apple-icon-114x114.png b/client/apps/hello_world/static/apple-icon-114x114.png index 40c3903b7a696206ceef2d149c2eea0ca0739014..69c8e1258e0050e33c95d5b281a8c575d95d0e45 100644 GIT binary patch delta 5131 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 delta 4797 zcmbW5Ran%~*2Y0V%0XlZ2|*gA1{h$ZMY>C1=p0HqB>lr6AdU185)vXIIW$O1$4Cq< zD2;SU9nR%$pF<{8Ia5SEQ^Yw*ME&pSCm|q9l^e?2Dw{Lk(zYah$kuq)cs76ZVsP(F zyd79-yf=nVcaq4u5G=D7cP~Lo8)t%(MCP9yu2K#c&L)`PX;3~+fhJ|}apeC)Y^P0F z^}uJgD=>EdcPxtQ(dpYEDXMrrv_k&KAjZp6BO2gYMt^ka-qiaMQfLs?_&1;2F55xK zCB{Oxd1dSoz&>+HS3ti1F^uf?5DS4@hHMk9Y1BECq3y9nGYi{H>23Gn2F!3D-S@L3 zkveMth5eW0p=_6$Vgt;0VVsmm#vkK^MmTa#iUu)$nYAk80AdeAp5-{;RaU7#QjPJ7 z29{8P#5yVsD@?M1e^k;Ec;kdNp}~;K_0d{dbFP{BiVblI|1=|WWS02kN*uoe7d^lB zcTYf#BGy5LWN1nAmbv3^P{tN9MPE27mRe|wN34m`RPr;pXitWEo%Cim972kiCBmhj zlW=KZRq;u+xbdR5?7F?_U(H;KPo#PTKz|xGi0Gv#uZ>o}@KwT~UnLzY{7Wj}ybY%8 zoou+FNOPiYhEb3)Oa%t{C8v}oQBo;M)sA&k=eC<4CE0-`ZaorNUu6^-MGL@@$SP#b zNNv9dLFTMvoSfpnSJ_R0csfMq&3+>FrZmj_2Dy}1XZ$Pkw-{JI+wb?kx=5b@9@Y4r z$aMpD>|(jEcaq|zhWx9#f(Dty)eMv|oC74=OEp@O^ZCl5)aH?*>i02n{>r_z z?~E}X9E<9EyEFb~&U$DX8K~@6!x~ zd`!>vS9shoIsuQ=ZZ0`3-4^b|HISxOLi@xNDrV$IA*^2AaG;Wg6u1uz9F(FSA!ZorVo2(0xW#-3Tuq3z8Nq>^-@(h)S*o6j>z9@n$3F2=~`wImZ`>|p-(Kd zN!b^dzrPST81Ki^h?xLh6`^BpHcCgWiqP1Nz1jIkJLH;)|t&5pJ5s5~wuQ1l4;Vk;3s(CE7JO_}jrKI^6{qb^gj7FkB5 zR$5aj*iyXn(M6`oc-ce(epkBdjwcbjaN;7xm}|1*Pmb z9QA@JzblTqH+Xyur6gDV4qWr}-j-|RV`k8u%nhetX6m8p@d23^6w}8~#BStk!zW9E zbPUG;Lss>9;aBzj+PKvvQ!8twoiT${O2qAc&pJXi`yx3p0okO~ut0=6k?0?FE|7d! zVq)j7V(dTt_?s@obvbX^&*VY1Kj{}wNqgxGtc|iAwo-Sa#2I4>onMORDZ9W|bdovA zS?c5*xrV6KD$wDkg3bPvyxE9NK0YyO;sH6p)@2Y<(M!cda!~aUMr6tG&(^hyPgDL5 zns+=#Nn-Eeng$5d&q-2}$H|z+GE8aCztzIbTP||1d@s9CDk`TyCrJzPxOo8n5!Zki z^*?N^k6&zgo%&vt&#Pg>gdX>S!mqy()>q3k?i7!?yus|)kE;i4l7{s?)?D`|kSIW% z8vE$u$3drFBoBY;{6B}Z3_(n{L8fHe(dy#}LdS3eRe~7ur}9w&RXX zVkcxfrYneb#mCQsx6$bxW74^sJNm%ReCf;Y=PWNbiE+GrxP5#w@ir$8kR^4rSX&gK z4iW6ORYa9Kf=F4(cmH$o%9YP+f7)(lda1YCA3WEw_PO=uo_(PL8FRxHGXXM~#=i5X zjTIIiDGXD~o8kp*@xUJu@rcMiNMhrHUe4k3M2Sz{BbYnoYP*(+`5Uy!TXJ{PH(p}hEY}A~(k+g%e&g+r9~|J9 zIjMWF5gWlU zx)F=yH(m2UB=ytHR2d)aNsGOM*n{SpsqhqII)qB(bj05I$~cQlHtC`WdaT)XIpDPG zNSg;gP#|hiGb$^SIF$T<-$~Zd?t=+8+QRp${B8}$vV^3MqdKaAzLl0*pYx8fRs&4k zAbziE6dPDIV(IE1nL~#0aEO-%nVM@QxnRvze+&*Brm_F0)Fi`^XKZY~qTw>{@#W=& zr|=pS9(X{KHvdNG@w=N#{D-%KQe{ie-YZ|*FBFbVbX(GESnSKKR{AF?>V#5`=~*B8 z3ijtPxF?_q()dY$gS;?~v$f^i$i*^Ob$)+clc$FMb*itzNQd69Cyavt#i|?K$+hhF#y$6jQ>(N}>#Gqe%|1W>KP6Ax>vr`R zl;m9oNbsrHyWaMI|wzGw!hxvszFO;ad8JI>q_*pt4w#o>8_? ziOJ!gQd3}nWVobP)hTKIRxT@VrUVqeDAiM8%BUmb-d2EE*}t#JQ{h*RWnDuxZ2uNh zo*B*x^7xG?2%oO^t=-cyoUjQo_0Q{S+VFENw!^sj1pGIVerEbun+F@KBC*1O{SR_-+|{+~8uXzLQo_V-;E8&$^} z2YJ5P79ukqh~+Shr`m%?%T+wKTeZ=9BK1ypaK~tY7hRz{*l*Z|;RbH3Wk;=8WD2wU^dlx6qb?zSwuX~M zF7dMrc6a~mo&|GaA=lacRz28A1D*OLf_8pB&+ybOW)XTlBKmW-WMP? zG^STL(?~Lrm`EA?_Q_ucPd4bvQ(OrGK(kzJzwXk?YgY(@&_th)Oc2%3Ej_?gFK@-u zwS$+x2d~}Xvut6dFy+HZ+U(M|VQs2}G+z4*=oQW(W!b`xyBmb+ZFw!%0I5uy@+U&+ z0I3maey03l&CkL^ISBVrb<3j3C)+b;qv*z8iR6~x#6OYdoWB0HE8m)qe^grlCKb7D zDpsm8nYDxAj((jKA~k{vZ)|loy*@H zmJ@7ejF5{8T_<+zi#7cOJ98C)pZCa%>$40p5`A@U;QogG=EPsu!gGWn^U@`9EI`Zi zl*e;d<;-k2n>*iYN9;oH0anX|3#G@05*=QV#PHC4<$12c2Dc=4O$O{`GI9J^N+Lj$ z#A+9d;Ue+Tb)m7?d)2JS5U8%!qO&c762vZy`%@Iy2Y=~2Fue-C-vKoCWzeaoq)Fcv zui7DPUz$}|Se4kACG}*Lh+wways0=k2GFprVn+)Lt(v`DglELcpA%&>*8|^Hd5|$r zsjhT}?nT8#BeK^h8d-(=1N{6Gq%P_gWWI?_P2+LRF}(6{wCIW#1y#EX+TbXBp)Fp7 zdR6+gjkdY%$29H_KtleRR*^ci|-)tYwRI4AXgBZU-IkAn3HFoVP+bu_+-8~HO#`!GW=vhA#Yx<(a!6kH% z=59_j;u-4;*3~xv?ws=@7EFfYYY(k7|kJHbtU<%z~+k7I#uO|zO z@>RG$_*DXD35ZLLcmomtGN;!qZ9Sh$74P7nTtvI;C+;_30uqDd_76T9DiaE;6!#%~ zx};C|(5bDJCES{{0?r^v>w1q2(Rt4l==+pG30RCmnGVd4*ex& zPy9-Jm>haiTX+{4o5U9iI>9wu9r;e z!HP`q9s+*e%NLlz6l1GY4;(!cy?LY5cNuqC14aEEnQ611-(@Lp>+~KbuY?IbqlFW< zWZU?xbF+|2r_;tQ!Tv0c%#yl9cq}y-;8g0hCC<|Ns;D#Q1SPu;DTNpJ)hgy}b7m&{z5k zr~8E@5TUUC#TNio7!>J2!l{MmdB3W#v#+vOc$OKVewH&vkU62xxQyzbnVIeV*Cl8^ z`BB^y{o#J40h*^Bfqi{%T_fEV1L;ecOJdsB#W?Vu!2CtG^Kge3@iNxPdU8bA;7co2 zw#`;=_cn0P^e^tS$ynF*0Pg_F&dbqS@>#UyO?(gdosv=?_nnHjhVuU3MSg} zL-rr-^0o?{%DHdL{^#$B-2YVnr+7Sw)UnqV-&3sq&7ujZ$gZiB}i4xTCGxBRjE;%sNGO|*CuLH zdz4yle($&U|_P{8c#HLKe^EP zyU?#p!3}Ivrch;3`$5U5qUL3-S3~zAcA`j|dcq`--SWb<%;fli`PWssJXyt3V}8MW z2jHiNs)-V}@86~%BelnN$~o=*?WUv*Cu6KZ>hAfMRWr%_MGh^r4owH&3@)@TDv{`M zuUNS7p|M1iA+1_Or;Wg{ka9BX93kSV_5bDY8bQSDH?g@0e=>rTeP9s!WX6d~>Y~TK z_FqLY+O=QY&}=PQY^-%_ID9d4L;lZ&(Qrhx44^Uam73pY{N*)(ihqVbdYTXGyV&}Y z{_JGos_;lc^Q}Tw)qL_ew+c>4 z4NeB27vD%Pst#LhK%gQjO9N=;9et=A-d`>Ojf*m zrU7HuLeWXg=^whHMGyXRS=CuXF-cE#I9ND8VF95^JiS}CJr3&`_D-%kAyT~-NA8a- zTr%go@e$!1^QezJBU90$SN=j)B)ijU>v=h3o4zq!bF)9c5V8tV(D=!_=# zrQc&WK*vJEBd95Oae#mLz_qKI0fi`wePRapODT>Ez&9cq(k`0EjcdTzGI^f2%`6Vx z9`tDj->_5L5f^@w5~!d3x923Jm7~ypAT5>dQ;-}Y#17b|5ym*&^l@-r<^`Efz*;;@ zPU$fgj}a8~E2b0zJ5pE8IK$BCxQVAay+RDL{#xL=yS_t5@em?T;z4(w4@kQ(4!EzQ z$hW{iKblz=Y~=8%cTa*h#6&3G%k;yX+%Hw^{!eOs$58i_)Drz+GmS~*H)uQ2UI>pB zk+g3^XakOsIm3NUFdfX*o88N$F`5C!mBfpt-}?^^Kjqcz)?gpgZa9|vY@^xrkGDT3 zWee&l-Fp*49H8fkX{xAC1b!ZTQ}q&hQo{lBRMa!9R{?1P70-%G^h<@jrfW3} z5-Y~)-sxtDDG_C637l=B8;G*xH@;ul#HITn=9oBqUWLtoBYl^Y<86EU^naxW@TI-i zu1nRPsbyO6j|;Ar@_RYX*N(s}|A#pn3rOQ~z%%)vNYJgZo}IL(*xqfF64 zh5ZTCH@^aI5$=uI`QW%i%x};>o*3|?g;yDo^*j2hxt)&|RnYS(v{{IPx4?sqj9E=QbLK3)HqLq9Ig&v{g~aABBK8?7$NtK|i{%2}fwql2-sN)f>7#eHs7h@u zO+vq3n+)j-Ox3`v&^h_yx?D{Nl6^|Uwpa2MwX!!f7~NP{c94h`qG9!j`Uth#H2si; zLE*qW)dd}&_t6qfElp=;KZP|k_^vi8U|MA82g_Kaz`;dcg)OaTTyD6=HeWEN6lqL1 zKLzYwHf-fneA9Yc$qcV7;mzwy0j6`t zdD^$)Z+XxrCW!`IS4gahdYLPjPA=W*6j7&>n*I(yj9Nz*ysWj-Z!y)!8hX3lQi<}5 zhga^jrQv`Monfk3x%6F24J4Uthirx6k>H~zJ^}v*SWro8A&$hEW8L`jf9uQLRtZ%v z%Vae7ic{VB-`UrVY$Q%NlL**M0MdHR)g}i)h)2M%8wVgs7mZZorgut}VvL4WT$P=F zAKd4;MLRlVnPg?v_4~O>+~h)a(n*o&q@XmypK@ckAa+gUbaIhT{#3Kq5AqyQl$66N zv*x1jWr$fg2R~^RP!_*`Hny$5Cg$1bMn`UQ$scRu#99hlKb$&tPMH!i?f5rfISk+P z0OaN3@g>i2O1Rz=QG_`)HVgEB@6pFd-?K!!{Yk1g_^U=Y)VeIf%_jOl`7Uxq8N(T0 z_oc*8Csd#po6KeLZw8n~dPl8@O~u?`dCmu#WebgdCb(g7`(}9`LO&&m@9Gm#r+`L1T-R>CM9~eoMJEuuA`mhfTHjD_Vq<-gsXzrG=m` z7_M~3dNdVBm}Hf*j>DvA!F9}J!t}~o$XMmc`W2Q`l+;zS6qq`ZZ=iia?)n?Ap1RYTLCS?z2If z2_zzv{6JA4WRw)(`FitO;Eto1_lAGQV8Pv|G#k^-0g>ykpbb3_1t8)(Wh|T`J_*>* zLX4^IK9yXEXlzpY*FJ~tKD-PS|3e;n}vN$~s$oHe4|`gvu9OJLx>Dj>j(i=$a8pp0arhFItrbHa3~m*0h2KNhrz;7)c2P!O=)||o`x264 z^-YuJ)w5J&3qHGb@ECulsY{>QJ_7&Z3X@A_x=h4g$ss zFs5?k)Hk&%gz1>cKd8|##BOk`$C*TZ(V{yBbubC-MosI`-QudQJ~%Lu8wl|Ii6$Ld0fj{w5d(XP~ZkI}YNqe5d0f5U>fbCr<*iUy1Q+JbJ z8a+Hm+ZT3Xfju)onO(eU=G*otA%@#=oGu63@+2FeOAqtZ*8aGBw}{j9h=}K4QYsWx zlgsf=$(WJ_SFQ?_{m-0`S@VJeE+|dvBh17z*@#1L{FN~*LXqE!7$Bx_I#|in+90AV zN#z-0pYmRKW7d$5&oB`Le8%%l_}9`>E4->p2HqcY4 zM1OpEh%R81ZAzvj--g~1!Vtb#+Sj{fTR)$2G_-iI=64nmMTUI}Q+B=`Eu94ibFhQ< z<}!6iBi^@pJzz7oy0B0W5ieSnHoSG8g@Fb1%x>$A`2GDyVz1Vwzsj-JxPP+?&Q|nj zgQ&DmY3nFm_uE*6uz71~B6ldpw9)zR;{i+^)vB^2j~#JSmZFt9V%(1VM3{&{%QsuU z;K{ls4Z<&W_25MyWg210Gw+n(am8$ryU+J*zS(@$HjcMF){D(12l+6|318=r{N5CZ zIJ(7>DbsepJ}dV#fz|XM`9}}DE~}bmeORB>RaPJ(Oqw04_$%?!absA>Y8~D2m^R37 z1VX7|7HMmi)Y;v~CU{!>`ly`4)muHUJ(${^DRejTR4~`Bt_#JblZ@%W1pa*4Fl?id zzJhDTWi-3An6@<^N`-n^goTk04aViArd^^Y^iryWS)C1%*nrL?CEE=8-PFQ4f1{zR z#GW>I0w@}%LGNxcNU*BcqVL3U76v#Z40Mh?{Bx~kvw@sti4~FONwIQPvTGl<8P|*D zj1y1aj}ou7!TpS-DQ}$1#|q97HTWcSkuHkICy{4tJ>9EPN1te@;orLXnNQArH#LMMy!3$(@9tbEEorbk&Cw`j1wM>^4V! z(dC_m7^p{MhwV*h&u=j{u|e&?Ci3}5qxlGI+c-IdSPbw-xr~HXNz6OYf#5K&{HX7D zlN00*t1W_EagDp@`p7LDY8IJaqAqcs&X0IxYyXMrzrxg&N%1~mcEEv|XCr?b^bk-G zDyKxGy8nk&0=;12Zpa$mens2$_EBRYc)HH8v%VW(8n)Z)-)8D0rX6I_G{Ih1e(J$hf$AeXV!098K53ykdpk9AH z)_Tb9RR~KT1C8)_I`V1Q=zQ|xrCdii2-otDrOLAji-Ls(`;Xm|m})~U9a{oA0qHt9 z>|Cy$zu#H9$?<3}XS0&j^y&#)tsgEK?CqJAkuR4^LLf{EM~-o~KC6Ez-b+X;_bx6? zRtWG%Csw9q^k;ZhyVus^vq21(FJVO8;YAB?fC&Le4I1gd{p|bfvy`W%QX)mS<2Uot zG7;jAUm!Ts7%K(FrL1%51X79@bu&CX5P~+&{>YL2GYJY6l7fi)HS`FWMYIl7H{L{3 zIGoI%b}-Tvt|s&C(M$YRz@$5|^jkUy-&_&iKgBzo8Vf8`ES4#cDGREhvTU!tqvoyH zFWe6$f=50R+eM|X)Qz3(8%BL7Xz*wtj1yuCC)W1)qM&Zeox~W__NOr^)Ag@cG537j zOWce*r|w1z5EMtRMt?M~S-oO6zEM+4#Wluy^o+37C&JV)oFR)l=L+ebUxmKcYF}edHfEi#K<(4j?PdzAw0eM1cRt8Xes+IL=1GBj zC+<|)nfx%SMzS4$y?DR7xaB&-B*#uKeeWTGN`(hI)8542Lt-_rTVk^eLzZl%EHO4GY3qq|y z8c~HU2b`^q36$URI#FpEzJnuga12hT(uq`~2G;#Jru37tGiR{gax)tjTHxoMU>l12 z0^C1)88kQB-gf+J4vfsr=41&0#K2Q)V9-=rJ#eNz; z)%irdemW^vpW|iULw^B-p#`VEKONO-VU_Bsz;=)mE(pelhgD?vBR5@ulQ+ zDW9LcXzW>yHnmka!PXB{M+lz{jCdW zt)SP66|L>GTsnl|`MleS?xKWlvySeoCc(V-RofnmP@H z?)5~hUo$Nq)p|T-4$(8{kmsB&T@)6WRNZOB|c6f#KH=N82-x3sf(WvmFEZS2rD)qwV1ynL^5Y!l$BkI27gqTv)6i!?g;bA$UJS0SP6vl^7v zUbIbf&mL*wne|u6<(NvU*`>aW;rn$9)XyS52j=N@gQh1XD0he7cM0YtInlQ*ctkF+ z=6gtmWb=qw?DV%FL#{~7V<>hZfCowxWYY_(%UM07kKKby82ztI8*I{opkM#WCsfnl{0bX0B-<0KE1oL)P+z)P)B8_El>P~G zp}3WX;7|iWjOKLRXX=>#lsLQA5%vTt%v{1Zqe~^!Q0#hOQ=f?CgY@Q~OBf#M;O#8t zV(T3y$QrZgtiKF8&D2DIsob}Cs^ZNLhVpH+qW31KRNlT|6vZRzf2q{J@53(oWaz%U zHWyG|*lPLkv|C!}SL48L@H8(xF@wyw_I7!Wb95K}yxy*Kn){yIk6c}UOc;5S5ciQ1 z>O=FeP4HDgijYlU($kp8^&QSvrcWr1%vQ5Z%|+AC^9bU^eaT+4;dxT^6q@Tx%VUl{ zvm8fPxSZsu+ynQHH}9GMgTpm=qF!l1fxVI$Pxx5&TRb;clQUjd>Fmh{h`=?{)$Ic5 zo(Pk^doOHcpvS+%zv?!t^@TZ<)xgyO8+0_nJpqPF248*3)pO|)NzWI+N(ugda~DA^T`8puR}@kbGLlL- z%yCL3qrR-8thB7dBXL`48wXo)I|)ZADF?ep_Ode4k00CHNj|m_b+PjlMS3{NRH}Fp P5e`J{`Ll9W>xlmY>nNR! delta 5206 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 K6)NQ{LjE5|vTXeT diff --git a/client/apps/hello_world/static/apple-icon-72x72.png b/client/apps/hello_world/static/apple-icon-72x72.png index 4826ae4ac58331a051ed91959e94b1a4d9e1c715..a21694153d7c4c532f624d653940548566f5fbf9 100644 GIT binary patch delta 2759 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 delta 2593 zcmZveXEYlO8-`mVN(qV=G20sHKoCXf2vuT)BBiY@v7@N1ZHzZYt<@KcD+P=lSv6&pB6{Se7U;4bPQ;yos<1`T9?8s4to+ z_6EN&5j^==xi_54iR*6wmA{Lv5TfsGK+YtqdKODAv(4z5-@kv0_4*~Q?&Y2G+R-H& zD+yyP<%_4C?3^)SAuU-C)?*pF-mvJDG2J{YwAb3vjWB zbkN@uVe9I(vY|1MJ|(&`Cp<3TqfWby`MO8h)d8g*1k60;Ld2u!(G8l7JNLngxHF}C z17nIC9FA+=;$vdm8FfG$=~;(lay&SI`5tWDPop)^=hhUi)&?7aY7H~52SshR0j(dI z&F-SPY&Cmh&Jf~?a%SB`$kh2d%vc>$u_~{$8`eOS?jXvhwEsv|OTb%cT`+zoE`=mc zNcxOz)f-RLzEL7I$6*o&)6z1}%}rV>7|nM0G`SKi;j4yd{mPc>h_K#q|3SGN0H(~i z%VBbcc=a2Lx^mta^U68#-c$0$%Lj#|(8>CZL7(W(k?@V3H_(EYeK*jKe=y>@Hw>O* z3^F1|6p*NhAGe^)mw0*iJ`?flZ5E|P#?)mGK2A`sLOyy}Y>O1}(w1HRjG ztQ46JRX4+8j4&YNZ2{PmL`IJVY4AJ%|ERk&92<$~7tb*TNo#a}vgqnFZ^YH~X<4EV z(NYDj9mu{A!m8ghuB$UqtKiG`-4|NLu1t*oHDxB=Ci-CtuhRKdZV!}`h(z188@f&F zBsI&YeUtvZKCN)lB8_9H^z~7Gl#;eX(U!lqse$R8tN%>f?2+AaCj?W+1A*}<8^XTz_l3s2Fw#;Q+WxRKfBV7CGX&_v(};L6?kmDMDY-gz zg9iDXVAg>5=K+>OtSUqL$vc2z^Uc|wgjK6GwUC{=%A~9GZ!ubGxc!jG3Z|Su!O4#%9C+5j7uBE+d0$5Tx z88Fk)+t`9rS-1HQ;X*-(B7;+FEraxTe%$@-%d;7u4hviYwOK()eY!3rVl^72pZFGjNZkb|#hOUjtT;W) zmd?kEl%Op9mf6oO=bD1~a_2A*6P}-;5DKlIgqzL0v?{Se)TtgeewZK@;O&>!(^d>x zy+SYQ58Zv$Q?NlqdX>sPXjNUDV+}gQ-fHB~51sy0Q_YnFMLB)9;3O;2b9n8qjS8HC z50hjYgUKkTN=A(7wc!pAMOslsYK&`|AHIkq+l3Rr!2_A}ViwZ4(O;m4ADyzl7QWro zhto>Qtxa-ozCM4Ph4?GwoMZPR?Vrj6$I10|_>XSIwiauPmdQ665J;C)t3}WVIN+C| z(I(o0VH3+Z=YGfm9>j+5w#q|LIgbYdcG=DCapU3y8i;qL*24$kR3F6#U^|12`|P{43oiay zQL;_1le+g6l^@gjO>Wy%e(Aihe6qB}+HtWe?UCIWVQY(!<>TF+IvD?vA39&uvu(rU zNg2g(Bv&cWo>=5-Mo!ji$Qj1z!7ADmWSL1oF1XMF2vr;tEsy6+Hk8K_szAJZl-vf+ z#_d5t3AihD)sv)M#YFn@=$N5|D2;Rkvc2cS?|lmXYRC|`qtU3Hm$MP1#}Zg<;T4Ny zUW>kcA?jsoRlH0@Lp`u@TZK%u>PUrz#UAvJ3W^t2hy=0y^Hhhbe2r%_qPC~rLTp4b3Tkux+3 z!P2DdqM5<)-S?(&Ts~6u)+Nee!t;@95~I@r+W16CvUz&BYIsf$g?y3FR95H3<-TV^ z#kxgQv{2-?6TV2pJg#}BUPoY$|FlnPwl@YWiO4q&TavuqY`4DX HoEvybS>sWo8 zA)BRo8|zvlSB#+=4U2M&gT@~Z40x~qx)Y5P9#;3#qam%Ubc*dIz0}BM8asy)Neo*& zwyQinOAz3gRei`S-3;VYdXeP{5E}A=Sd5Dl>^ly0qy;Fb-PH9Nkh)S-S-#Wgv;j4%*B|K33b6nztpqSt;JVIUCeKL z`A)?lgR6MLDmKvqH<$2t1W8fHrEgFi*7AKfw>BBR{zrDfgr-8XDVDh}_xRNf%W0Yq z^6l9)5)=6C5^oUGrXh)hAKx@CUKlarx8Y8LQ2`L=nnxz`s-^-C+?lix4Qdne?x6_{;jE%^}vFx z0=I=-ROX$BT@6x$GV*};swx`-ZkGlB1vrrZM>zk5ANtXWgG{gPTsloA?GyJoKBx*@ zMe`CA3Wq|+_qGhu4*z#XDKXhgQ$Brg3I^5COy*@IrNMY^Yiejfp%@hnR}EK97iUeF sDojfS>#DAb)zr{*R&jQ6Rq}9opycc0=HPax<;1a&`ly?gx{gu*0m>5T6951J diff --git a/client/apps/hello_world/static/apple-icon-76x76.png b/client/apps/hello_world/static/apple-icon-76x76.png index 6ed82fc5cf42b153b269268dea541005bde7a8df..55422b99fbaf2a1b8bd6e3eb03354c9b658f58b5 100644 GIT binary patch delta 2936 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 lH?JUD*C^E9gRkBw`R#92of-OLXR;9Ttp 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 delta 3832 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 diff --git a/client/apps/hello_world/static/ms-icon-144x144.png b/client/apps/hello_world/static/ms-icon-144x144.png index 81bd229ab23c067e728c20ce5d24676214b60881..ecc83d515b29488fefbc3b599c5c048c784bbcdd 100644 GIT binary patch delta 7357 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 delta 7544 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 H+D85t3@aL) literal 24213 zcmeENMLt^NX?vNNlnxVTxy1P^9hM~K=yW_t8?muxq z+=pkLd1m-9=bU%%eb!!U?I3wsF$`2dXiUoCLQGjpun_CNjx0l9( zGJ*&Q72#+PddR?MM0-UsA%xOl(p})gdjoMr83Y7Z8UzF{Uj&3Z;47~k1O!J`1cW_Z z1O(m$1Ox(`ltu+U;2$XZQexi_p8x%2wB$tt-@LIASGNb=#s7PW_L+kb5Hw#)d=pf5 zo;z$Ybt6@c+rDn%{&3yd>a!xN@PXboRy;CBxlpknF75PUeBEW;W!rjfWR2j;z|BH# zq`s-Bu}Jb>C1az!AFMQUs|4hmhfWrlRYxn;j{x6)t4T(Eqm<|oZ=LJZ&1p1jY z9F3rYCyf_%RI*cs@%CrHy6wB?F^A7-s1#hYWed||YvpXNrg(rpefil@{ZOhq)Z^d(VC)lPMOi$tZ z1-I?X?s@ui!jJik?&%d%6LTf>OM1~ePI?_SPILNLkp;d()W2b`dPIQb2x$nO&S9tP zke$y~eUFw9B=j1K82B@VD8pRTYlL@;4z=Uim}BZ#tBjpX4qhO|^a=*fAteUWtGz)x)%p<}|V|L2w1*Ha-tC$^Jg@gKzE4%G#>4gDPkLewRe|M1Rr_{^tIBSY3jC51A(KNN@d?XZ z>kK9bj^Pt~zIe|2{KZE#^S}P=p%EhtSBJ_DHS{nZ5iYc)S+6hSabrmXVq^lLz$(MZ zaQWqEQ5!<^_apS{<;LSwrAIWj;z3j2Uga{| z*)P2Mx7zNdL-Oa{I{GE(tnqwC+_=p7xxn)I`{eHq)#k2^99=0XQOqT3Q-z9I_MeaZ zfOUq4)-!dSXH?~XzVq&(kh?!1hpVA&A?CgTVG&En&7Z;IugqM(D577PD0+mVE&ECj zLJB$eUk=+6Fzeg%;p2wlR!1m3tj3IZI)Ca~CE$a(T#h0gogU;Xo;4%!Cy{j|DN9yp zR)UJZVtp*t%UXWjll$jQ@_M8~P#f+!Y`fO=Yao%>`3U&MbS8n%cUoF(ozR0CwoVcmxI5LpB9m5}+F4{dB&2|?tovc)@l!5>L!t-df z2CQQABgThdm#$xnNuJlPu;tW?T{G)6=6nGa!Qw9hxjfyHcf=IvCW|*O(b&cI1g*n! z%f#T5rL4a*6@S^`ndu3CPOX1DvuWRQrqlmDCi%_eI;aiL`i9X)M`(y?53-ek`Q(iP!mr>Bd6vNQS z;mzj1Ly|XP`jCYef^MSyW$pahI@eh*k0#kP#k=sP;*VsX-IiUijsQk)E*^iXUAerR zG1X}iip{0}>Y!1_EDOeDQcjsvw2V{?J`RcET`R}A69L}hAuNo`Pth);T*WFo*NSvM z-e=#yo{!b>SNS_8vU%E9C|~N#&TjKd$jDR4&TiBu_%Nkk=l< z-RubcIea5rGZpxrtRx)B56o|srEvp)!t{ooPl|Bc_;)|etkzSErgitj65&<(#%4R=ob#OC+q8okO9zQtnyIAsv*tq@I z7`n;kHl{l8<)T^M?A{xg8Qxa>Z-{y6b;C}Hqb+vw`gRs^2>~79(Ri~*=XNXse=TNk z{%ohSV2Zcw5QJG1!{u4C_c{w@IpCD2W2So5PfJ@%_v4t7GyTrt7`j6+PH*TJ{~B11 zvi~jhfVmjIljUSJ0p472cQxozT!Ef&N1+-I3YAj;F`PAcm3gvC4-uIOX2lNQHrLPq znf3r$^YQ-t$hd`@_cn;+=q~}^92zPPLN4|jQ;c7JpW=m|?(Y%PHBr^oDov>K5`gGO z8gbdEl+1mFYeF#!tNA`qV%yPBhG8EZXNPPRrqP{?K3V8o=jcc`MpVJY9+{UM)>)?# zYfeZ!hK}j%P)A?L$rB?!wYWCDWx|wF&f|f9>b*Yt6^zt#<@WFtGeW|0f8l7#5qT+p z;XIZa$X`NMet;`%55_aXPA-)3Y<&-%7;1v%fzVdBCdUFSstr4hVrsY&O4i^cUvfe^xN()a=~4k%(G+7H&yeXK{T9;8tp`o~B9<=9~JU z7yN3qi1X$_viJFJ**noKXCJbo}?sr!}~`vNBSFPE^^t2@|k@ zdV&2Pyyxm&!A+cPJV)p4%;CdMes2m$1R#uS*vhN@H4)b%$eK4ahE8xUyj>=F48!~T zn;4_=`KS?2*X810%EY|9xE=1WuuPgXRe1$rn;evAd%OH{NEoqeJkzUdSM)2ohnR1X zTotN7~ncuOX zQ2LS}UEVZzAS#a}_}H-I2t&|&GuP|n?nr0$BdbVL{bJ$@8JOjq@FP_rdrs_{Z zvxBb9^GsOiYB9`eG0jo#IJnqI_Kfg2k?haoil#ACJy|cK2S4+Mq;tLgtz0WTqE2Is zu?gdNJ5W&2ey;rZ_j0MxB%-xR3_hJj|D)6OVYpgKN&_(-#(N~8$*6?d_yzag$>m|s zD4oE`ZKJ9ZXTmqs2N_M-EDlKJhk05=)mCm0Xx@Kwv~jx*KTax61IPdN-5Dd71;?m9 z_1zvwQrHSyq^4bS$yQRYH5|O>IZ3>b#0n}^Q&G{Yu_%~;I$4ebfPwGZpuR%LywqJI z$8GV4qSgIur3dar+q?3S-;d<{i?H|ErOH#@+ft}M zjpxozZ@oPEai)SF1!%BxYQ$$$K>e!n!72xczL}0)d>0N3z*aU3a}+H}-_Ow1ged)p z@bR+O2>_M!{_dcV%liiazt*+4^~kwdPDY*UjnvXH9jSzjKqS)tCaQw70Q|>+EvDA( zo$mdYysJQ%yo~IW@Mzi)Dk5KVdG(rv^MH9!ed)2eTWnj{N{*0WGCj`M4v*#sC|F7* z$t^lv9|W#E&S;Zj8_i14l2KkiYi&4H`gao}JxdZ8$$@yj%HH9^k z2^x`31-0GlM2#pe+@7l7r5!XI3+AYyLZF8Dj0EMAEfn?T;7}>mu9nqSqD)&6JzYk7 zNiF*;7uH59E^V75C`7+?Xe0ume#r2kDj9x-S zj22^g@hwq$EL)-T$6{N`iNjcLEEHFcCeh}*X1shV zv9{`zj^~9Rr0B+rC+rT>%(Z3Tm&Htz0n&c2gsfZ0O#$-7%+bnXDO7RvYA2aUZ5u1h`;6!JHK^3zmXam0?X-bWckL}8p@cqd^U7atvSVJ z>AM1zEe-O#KS$nMmuA~R<8sy2-R_s|kBVx3gLzIhrgu#_$RAr@_EZJn)arbe&^VGN zcCwyK;XOF*mm;S^icGa!AT*~&#wbbnn%45}Z1pzc%ebA|2`fpkFw!TqxC&EY>WF++ z{Ae|Kd-@$SRUpOAX1C1cj9L?^{MLkE`f{2$+eDesM|!gkc}bK-ew_;ZKRw$>OZUayL$-<2 z(9vXpS?0=ei^PNqWrhXLbV<6nWdOYW*4{Nfzu=|S{1#KG-gSgMG+&ncxqg~TC!!J3 z68ZVg^$p7)ukE@O7_CW+L%5~?&D^IDV85)FK7weemWmbvwlnL0w8Nn&7P|Yxgpxk# zK7M!u@zX*}k9;c+-2R)2=PNfI4hLm%dLHn~YQut(S=Ww|P)*@VdJ*dYeO5?So&nVW zono+9N!olak7MWhj1;+#`w%n5sL949|K3Ps^N}<6UYMTkaj1q|${&8W&wBTMQKX6e z*_*f*ms#Kd?US8D6*?*drPK9d?@=YF0RGuhB5}Ibn+ASU!(KjY41QL8GsNQJ_KRvg zquHr>o;4FjvYbpGes=O4M|(#9Z9y>w+cWBLZk^LvwhzK5db-JPiPj|i-mfg_7k|{B z=cUUlmmN*hN-2Nz4w~M!+?{Sdi|VnKy|o}2n-Rxa6BcBlcC6W@@7N{~Ug9TV2OAvk zt$5~}BeaiJR+WM}kXIyc)+Y~PZRTdKb{ zzYO^07xOCT`#@Kj@USNO?U|df>EYjfGl{57z2ZUVFj=Bp0+0%$>3!hiEXNJe&fcg) zExjW6vQdXQ%h@WqC%Nb29O({xr@jBz5w5;3P{F#^iv?9qQ1;t)ZlD$o7@IsPgC+GrFueLuV>RIJ?Cv{0Ko?gGE1To zWA+O$bpPp3`ldJ@jGwj9x369rx%}r)BxvT0r%SO<6rQ^li$rcsdQM0@8pSSFLjOK< zm!2*l4wD7>VO|Vz6ZPRS8O(AtmEU_t)u0DXjY_MH6qIS0!?Gp#%m1Z5@Q~med;1yR z3=fE80rT*h@Idvl&%1u7R4HT3#(m-B)Gq>alR4)Y+)5r+^APatJ$&u@KJ33a`J#`|L)&k#&xku8n%TwjWVJ&lqg< z?l@QkA`O*;PZ!M8h$!@m9FrYkt*W;JnTT%Q)lu9eY=46s&K-Vlv6y+P1V_1cc2A2N ze(vJ@eE+@oi!oB^5-TW{+{FytWBq!^=_c#z77SXA1%E&Hx zDwngWlw_r3MxC|Me5cMj5>{C#0yJ;tY>ekv*~}9(IEstMZXojEXM9Xx%cfeBxwD`K zc<9p>j|Z3RjE7*Sf;6~jrcKFyFMs5;18m8o{*z!jxj2ewDE52(on>!RI&#V*gJBKn zZ4Q4wy@|J>Kp9(kvza=iIwl@e`{Q)2%m9>zJ>GZpRz^(WwEb=PxENHH{G5nLai*{& z7y?>C_*4~lu7mQhsT9OzuobW8AbCal(J}(0XuN-@d_Z_bx0Ra0A6!p7&l2KL4Ldqi zb(d}4fsdD#|Dw+4{CTEfK$Of1wbR!8awIKAr4%kPp_}@c^s5F|JdvEnhC805Tv!33 zk>wA##}&JFdHKuenLNBiILSg(fsykYcUnX~NMl$N)fwolYBcoRNn&4Y#i4WeV9W<_ z9{P2fD@Nu1bfl|&%O%JAdArXT;6K_BrsN1n7q?FX#=-Zs=Iw#~#_c5|`IL}n_`$mx zK?4v&EkoI)u0#LXb~qA1jFoGeSv@Bt)@f3FB3-04!*3I_LoG64Y}XCXO;EiQ)uJ^U zdCQDvX&aU2;#a)ZDYfQWVW}1^A$I>2$2(&jW`{sf3N!DyEuuV^!bm=*b+k@ao55$w zQi_X3U178^z(ni*Dwe#~wMfo#csj$IAx_T<_w}t=Ls>J%TVCLL7zjW#E)}m%EY4A9 z97t(vvs9y>Z3;G?T61IP=AEHpqB*_ad5e{Xq1idL_Hp0rOPz@<#U+oenwc04+d^se zg=Cn z{$*{ueA(IscKCV#Uu~!f2Rj5;?EM^)BJ7lYATgNo7)pL}$TYq~z1|lHQG72%g>-80 zMz3kwi4mtJr<2~+q9I0-QPQaX!l<`L=cVQYS9Y~iT|WIrhQ7mCWxf8J^-YdKN*m%{ zW88TZ4vjmb0JDdNu%U3AT723x=Fex|J#C&;T}vgzIt95T98M)nOd8CdIA^N_h|A%` zDk_!+ElW5d@=^BbIh?Z?jg6Ag&-0Ig#)1YTHD7T2+fv`$tQAEh`sJ%0lFPm0MwT0f zY~dR1M9Avecb=1*qgvBi zdO5J*MW*-H%#KqcC4$wRelNz(T!OeamKvhJ{ibvDU2*`N%?ixVnSa}SLa?+;h_If&B5otrFp55&` zPX0D{jg^iZ*q$uOYN;Vc6{W z+mf`LE_u4(6b>z|cug%U7)x71rlZB(?8&^6g@&kPpR0FPkH~FH2pjLY3DMIZmPZQ2 zZ~j<;KbisUI(*Y{pY9L!n6+_Zhl@Yp^sAtO>bfzqqSr3q7tSO@p=PJ9^Sl|!vQb(k zmiFtw9s}i`DowkNO32G7&Rx#y#eOEYix#LDET&|tRE30-ED4aD^lf@|DRyL`bBWKO z$4q4p*Oq^X%#wWDiNoXcZA!$x%3n%n;I570hy#G7!_>kRD?6FR!4&6WcRR|Jd6HZg zoO_fU%~P6dAz6jq!X_C|R$CAMPaRJJyDi1uF7u(#PJsYtu%qh|dy`3l%4QpF9+o1! z)eqoYkDUJolLRhb0MSXghVS>-#PPhYL9e~Ai9JEQYYg?y$5UpED_SObvZGlk+V}6m zo1a*1Q`lf%o3lM}3E%!{GUin%D-g_V9WLCvK!Kwb@*cBj0gE*c^c*>LTj7l z&5hz8F#=&4V*oM_p@^7O^ii>nl{r7=kF2_rBRxU}LD4NHr`>m0Dv~zFkb};mnytj? zS9+!*xmfsdmg5nge3{?r#OKAt6gX?rKHJVW1A9cyJlqBZ2A#IG^JE;bmgP`r8N;2J ziJt4yNgp*2=w?f_*Nocia0Wpy*iXnj5y^d*Cmi4l4i*dgeoT`&f7C7u>Mp>|_+GuT zNm-^>VAudAW^Y@t_(}frEa#KH!NhECZ!U#pkI(whETb9UpUDC`fua24m3#)3$xSYs}7LsulgIFu&FLX8u!H z7=F^hJiW@dS59u#c*^b+bR5LC=7`X9pVcfh%Iz}$%c-|BUgAur*V4qbZ|RnxUGckt z%zkAgXzEFwR7rS~;0@G&oT?jG?@Omo@KAr!=2pG)U!rkP1XoPz8$S^G6+`U>+<0~Sowfudh+)UU16iaQO9eCh8H-W;%1ShjE1~2<5qe-;LIcQH!hZUSq3*GR<*al)xh?V z4bz6n9FM3qJ)vg8`-j_yocAOm7F0+ui^7Umf9e1CbVZvPagYy@iEN%1`)~m&>_*$3 z0smRO^iPe(*qrU@d_+T+=+7t7u-BXH<>tX#z_m6VcISX=glKp6Ue}#Nz0BM%qP7y$ zP^JObwm>fwkX~d&XTtfkCZdV~VrcxdHo+0AaN#615hp?0N)RUVZ=dKnB;0qwZX5tv za6YCj^HViz_@#n!UY6kTn~pqyy1FwB1@I`ofQ58+Tyf&%Pjio-3|$2V;0~V;(t20| zbTB@gFG9($OTJl<{d+XV3Xx|N+Gg!o-NqPoG@W?gs1-Gcs#UA&OaZ#6Ap}Zxjs^ey zzajkFYS|#Clxrc6$EA0BDBc~#O_?7eg_Mo)Jm6?hf;;8N1t~Bdd67G>(2l9tfU3LFR9=KD^@36ytMqCU(6@r27;2Un81t@g1 zxxWK0On=DC!uK}pGQmAF7*Z4ezwT)UF+J_A4AWVl)Z3K+lzvXNA|XyT!QTvT z85^565GXHSi(YrP8^*xmvhpjQ$kjhyUS?F$C0FjPf49PH&+R$~y7h%h3C%2cj>9u^imhO4p zV{5$cCOQ|d_Ch0KUQs{_`m>WA8QqEzHnJ|dhQo530^U1+c&ioO8Y7ySZi4iv{~m;{=4cOW)hLIoO^NIUm1|e4%r9h zrtwNP(QxvzWM{cBnDG`5J}QoCs+`_or`O4fSMaB{&abMN78Ir4OYWI%m-P$bkR84R z!a})7l;LrVe8>|zuzj1F{Q|FKHQ!xZT zbo2|lIkdup)f+v<&ap!0>LCyZ%G&zxJUR&-{>N-QV-6yt|=HWTJh?&^GG@s(}&j+NkzvpxY)j5FymG zX>Y!t@bPq|Cb2>7*j9X4UI1dpr*nNKWi%5rJ0%24+%ecMD;d?M56KGQ%I6Fve}`;u zUHeMDhw{H3lV6xDJ>mQ5RjzK^UMmrlgy}Zb^j+)nc!L2Mzz2si%NxwwbtQo!)6gy0I58FD{v&zD+GU z%I$bFPm_K0#(%=m|Bj>rHyi`|5wF==naQd&U8Gm5%F&A%h1~ z?_C?gwTZ`l;b5hi`93^Jr1)11ZSqRn1M|i+K+XqGqnjJKSQg;{>L`dst-W%BxJ7(M z+N94|H(zY519}AiP&>)4Nr9G_@JX!<&Yh2|`;}^Kc0PybK%w$|&rqlpZ%VnPP*e-V zFJ*1h9pJEnW99T7QGOb}hZY##?zwf`Zws~FG*;x8c4!Mb9~zNU_n<X# z%vTM%AA03tb6{9Q_d>pu2sb7W#zYWKl<{k;c$%s8SNyf;W_%X>$e}|-GIaartv3uC zaugC;OdN32T@+2v$B*zoU&FUB^W3$+>{U3bMN7h~K{Q}`EzMe}J=I2P75f0BgxZNf zEof#d4un$`cN^8U<2!>uccM5t3GfNy7$m0wy?;w$W1OA-+8K|@7tGwD7X~fJkMW4e zh5s1v`Zn4(eK|mNkS@C#do1*A~PxjacDXLP-pPQ zSWQIEST_aS6vGnvpUByu8HG{4CPzSM<)ZyYq{@IUYh?l?hW3w7|Plw+D9lS!Xg!#8hOeXR_X-V7<>u#J&&mSUqMln1vxFG6v zo_YWL8!X4?JBP{%qf_%VAjKF=j6r6?r7t8W;hsfoV0&vuYIBi4#`x&x)KWW$`@wf8 zu5)-k{4jlRC98J;F)4=7z+lSiU4mYY1*N20^j_=`tV*1%Y)`?-J-xu71IYe2;!Egh zuYlgtnluPM=|Y4FSwV{ljCiSJ<34zDq)uNOE<3X|H;>Yc;+LX!k;kUJ_V35(78i&n3&6{t1HVG1f#(5{ zuTw4bhN5otZVR@My>dLkkMOug?D&x=q3>?{C@x_%Q37s5fNG4TNXxvAbv{e);- z1~^%Wy)h&OqseU(tLs3X zxJ**i1B1;_WwWR#oas7{;TbH9Swt+kuxSAtI72H^4ygjg>bg!dZv7LARx30@o8{PekwHhiw8@rmV68SCTfJ%&w)_Vrq95@zwy3O*kwo2-z zDGYT+JoRdgy6sy|KfApg0Dtl4AkxWw5j9E_UYi2cpKPVI@a=G)O39c)-ZRUFa^N+C=)HGXU@R zY<-kh)-Rk|j83)Q96Z3eMe5nNy@MDY=Hw?hInJ0VqqLc1)|fk93-hOlu*Rc=HMz zrtHd#XH5!_Yn=v$-_{vlGt`=r0J?UFEb-DU$I4)iSMoZb{mlp7(>5#?Mku9#56%Hz zQW%MNL@6P|rCZVEgZMEN|71zM;Yo7xsW`ICHCX&2x)BnG8)7)1Ll`YYLdk)LnZiH5x+R&~y^GY#m?x5lK zIHvGrP5PRU7K%?#t6_znKdLy$fRcGySSzI8Y-Z5PANCqJugJSxYU;@0zb)j}sV6Qj zZDQ6vFKsKE*vR`-ULgnO$a5%z9plxeUn&_3ErSo8FBulgR+V+TVHXqw!`73*V-5` zP<-Z6g9#~!b;StxFctPoTSSBM)PsM~I^2Lvb|&q`{t(Sw6CU8VAr;uEFmD2s)}UBx zh*&09_K0f z%U(RgTYEQ6gR0B3d;=eV3-C3qtUv)svZX`)^T&33a!X585>a|m_|O`?5QYwv>?{w{ z40`FlA>7@Ko3jtk{RLI2F#iVm5=M4HS1Xd2p|@V~jph0-fA#rED)wCGRSboaR=HwT zWVt$iTvnz>vzwR6ZJPfTSK_*KPiP}%dGh;R;&;B4amU?c15k<9sk_uHz@9ZuS&)BB zzgwhHH}dz?!M6P>TVi2nmg8W)fXBUayHhXyNfudf-C^{F2gGV=KFj|TfiRHw>{Yr+ z(807H#Ka^zkkg+Veq>2?I+r}nI*Rg^7Vd`qgh6TO`q10moCtvH3X$b^HJ2nUK>2-B zHv|gwi>%iBxMT(xiHrr=CKze6!tWg8RY2T59j={m#e}-=bGmj7%2mh5=`Crj-g_7T zYkFDmEH8#81Goc#3jf)C!eClOX38fcC2$X6M0Jo^4cta}cDw0yEQT=&Su;GL4~9H& zDz#>7l(laB)4u_EgI>VwP>mKcU>-NZ?APqZwbG;@Y&rxU!$@1Oq2L~725D@mf_~-P z=6!~ojD3&b8Ln+^ALmmf={6(k&IO@K<&vvUd+H%aD1NZ$cwB?WNfZSAerkH!lzb|+$`Me&R>6eJqGc3w{y zk#gg24i<0l zm^WM-*Sb~=9?$9<`<*B-J(1Iw@=`d6buLKWLh0g4(!fS*CMDmJ5XeScg}IOPDQh=^ z>D<~^yZdmuRJH0N1Pqj}!OBf*K3bB-F|#|-S)ZR*5jQcK4A<*G;rQx=o9viG71Ssv zssnMSL<5KP!m|jig~67j6}5O9AGzX9o4I8dxKMz{__`z`A{O_eMAiN6VeApqGG~Q! zx-7;YVsd-rzuHlSs9Nd=DCY3|BiU2jg7gh_iEZtf0++-5Y9|L=LCQn=&UF#E*VB+K z(Jk+_(Vuo0HT1>Pb02>2OuM)*hH1wrhifli?-uT2YEoEx7L!7)3d#xX4-7y@lMDn! zOMrX7vL%rmn#DVC;Dh6%z<^tf|Hm4|nlh@B74~$nPTN6Mj)sy(?9^L4GD7D_JorTR z=J^2SaTA?{`KcBO2po)3sF%{o6I-|+Sg{N4cKme~#D11Tp zL$_S)p#94{xmC)*sWVVq6N2tr8t3q6G4Gq51_AyjT7q-#!`c#SwFBJKm3}2U7(iaA z^d+2JocuC-_g|?PGgrY~@J9eaO0lu$OSlXn-7(B*l~DId>1Q!MBf;??q;P4}+P7v) zyp&bNw&r5cM+u+4WE_7_mo|Vw68b^#&asBpvQ9V0~TQJ-U#RW4ak$xtvf=xxNg7acpCUWCV&r4`-f z`TQ%&g=&&mZrX->iZtAulYU2TNIfo&Nf2bg0bS+g#naM)K}%;H&IFffu_(15Y$39+ za-#5jIBO#pl{uj+FNeEUBRDT<;c>;8_p_cG`b;P06=c@#P^CAK5%F9~rEv*IU=%Vy z81@!Kg_IO627Pko?E*}6^lfl~+{@@T>^**S6jT>LWF^lFb0+0qQ5fuZoU;6r<idR!y6iYyM36S?bLyep(CBHw{U@B{DI`xeh((;B}u74SJtO zlB!;cx+>51VnRT|h=xbvNd-)`)^OaGrct%&Jo>;M0uwS*=?oW~1 z>NF-w=JErRLym9vAO*QHp6Pa^ZO(^2?^ zdVQs%JbVd7ntvl1k6wciW`DfUY~->Obr|6j;~XPJNwOPo#|bc+7NWQ%E=^VNL zEY2H7mtC{I`3MxAtqSY#dcDs1?ez)v*zcfNkdD?Ts4FGlI-^8mBykJq7E&nbTi9u@ zw5 zsrIkd8sIm#6mi*>bt+?JPG=D#jPRouLKRa}3R*)0fnTKu35T`c-p(5%E-!GfE5_7c zh2~b%e8Ez|$5{Q!(T|%mqW8KhMgKk{w@GGo*B|lk$oJYySqi{?wvmF~d0ggtaX-{? zq6Szm07h*%lTgdQ0;iwGWds5g9XaovSDJ|Ccmp*WaTbuVF-?^U>-b!(nin&@Bm(H0 zAFJ!6Yz@=Jm?ARmIbRc|vndybhTV&`u<lL5CJqQwO!Ub?S(y=#X& z+P4L7d6WUA%CoN@Lg)^QzOVBr$-(Z40a}LmXRhUVZGHeAp1INEa#~4}l9;<}+rhYk ze5E^hHSG6zxr$$M9s02c{>f@rhUxD?(J<)b@_OJ{l9B!tYn2IoEM;nFX05zv31GPW zO~yON>6fDKG6^pKWz2^}O0flsT^X(}837ytHI=$ZQcLl1;lIHWzXtH6Ci%81z1LfT zT#A|q|7rw321ZE)JU={Q)9c{Bts}szA(k9qQ=>5?FBPZMC`i#>@1#uVmCQbj@O0Kx`UGy8h2~L5DJm<>@v7Dr+IoVnEHpBh6 z1%Wzk9D(6+pe*s!tDetC1In?h^S4LGZwe9k&CY zxw_moF*tl`M&&r>@SlwTCb}6>VQl+q2tybP#TnvSs=WYA58zG0EDN&|<;TVVoWH+# z0rd6>2{kepwE{F&eY<{|qQw55KgWzm-bxI3L#VoHPyihtpy)5%djoV{!tdGu3bstpF2@Z<9Z{P3 zBRVAqQ-+Vhb9StzZ_8 zqJ!@#pLei*-_b*zMDSY@()D%-r|<350jJ5(ZWcLh_>Dtt!QBf)k~%Sye3Upi;EUOQ z0dByxGnTyTSmSW45+Q*I2Bv&qDeWE1f72kYo55Rse}d~k@fPlX`ySiM`KG_tt=$BZmyut&SOs)Xynk)sjtCq3D#^xg zRDbflS7-Po^wwP*Ybe;NwhL|{| zbT4*k4sH_Vd&sw6N)pW~$TJG}u91gG>0zWaysN}zl4~HC4bgvQR(E*V6AV9k`+b>x zat6%uilnaF(C0o;N}rTy9;RVFS1j83s-ZoIFm$@=?VgP~jO9MEgc&Z}<#-H*tTlLKFQ zm@PA07VJkluGXLC3Keq@A`T9YL~hZz<9uG7F1VAq2kdTW*R~})`-%_u)9y>WM{pIB z119;PaiJVtr@v>nMz-gVTmHX^IpS(9HZT$#He?8$yx#q0*)T-92U?B1x2~ive~VZY zgQ#lml$;~_2GEV!ShBu{pN)mYa(aC__xDqm()k;8Mq*&sFG+O~2L|>+6VI7Xt!nH> z3upcn*K(pDt_aeo6KT z+Pn+^R~{_oo;qZG?@$YxDE7XkuD>V&s10Pz+a-C1dDl;SqRYO0Wx!bOg(E<3w!CoH zDqKqDnxNfEqk3c)fnPMdu^r6S1EO!TG(ih$L-E@cLf*n%fp)eLqF2vS`LZq)yHHs{ zA*8e_!jdmQN-P}&2!s(gX|QB%)q#`0w-N8>44;Zralh1Zkb>V!N&zMi0w)txqPEt- zjRRH6A|vd-(!|!()|z>JaE91I4@!9LXOim_!XJa@kl>3y}mSzQCr%?Jug3LoRn z@CsrAo%`dBIyGK#0*-#SIyb&H;VOHz0q-@CNy$lz$@bqy^Rl)d27Mwv&j4iG&%y$? zn^)tjOzWC0*%{AOy1jC6D7foHLOpr^UH-ypV8Mh`qA}yJZ_U>dN7o{Y^S5FR!1AB9 zJu2ZDfZDzse&WlJFcp!vY$c2F`$aw^&>UMh@>TnGSiTejjBo?q@7qU-^fV_XCagj> z;*Hy}4lXuR=i@4`aORhwZ-=jK&3i;&Ycw|kGc18K!%Rsf!Vpr^d82zJ4Q;q~j01bL zRm%GweQ4Q!7}{M!wf=lYm{X|#b&1Rqp~QT_q=~GfMSpqqkIk^cvHUK-2smt2TSljj zCYtM|d2Ipdit_^y7rukckYNw9G3}VJ%jM>OBK`WU__F#1i2z50?BAo3O1|9c9};cZlibVM&lkqj^QIlAMp-%oo`CMvq^H!fdOZrRFN&5 z-Iff|5Z7Wix&baEJB8Biz1Mlzx8iFVJ<9Q0Hz)cjbwoH$wQG3if~`xwO%yv-MKm3U zpdfv|^fvt|fhHbrylc5RY7MYouu8|A6~E3=lrK?hZPEK@n2ui#7-Zs#8|E7}8mg$@ z$(LzA-`HS}#;1+ury?J*oaSqjsruRU!|>~#4!sU}`WbcC1mq>Zi|M5n&L~HtznS(H zwrE~Imsd??cF`G_PczGkbaGF8rjT>sBBeTUrdNdf%BSi#b%_ziicNap%^Hllm{-9q z3OHtq&aTJatGlzBi0AbY&VJ6DMf&tsE5CFV-_sZCJEw^;7S_*?1-P+=M*Cj5337zx zBA%0x@U@{Y{^7%~{&`(eO{Gjk&^;XZ7*FHVThNhB1|)uYO0@wZ_K$2G8iczhqdv)> z0ojTCWMi<^p3jaJW*p$UhZ__iB_WxJu`u?Y#^L}cwYx6i3 z5D^}frWBPLYJku|iXcULF9{`-BoL}}rP@I0JxK2zgoI|KNs|uJJ3N3WNPB2X6Zi1W z&g{E8vwy(O><^hFlk1%OB=^aEpL1Q`@27ZCNM9J%;PC9bGb`x<3yZ>6(Xk>XhDXC{ zH;;*OEsrMi1f3>SUK&hd{95*s4Bi^3Q`A;7-}n3+XKU8rySoT6XzYk=2oTh(=na}kicdEYtnB?+3Q}uP z_}GoS&>h#lt~LS}`Tbpg8YVEI7-`k z%6>7;Ie*Wg!oorQl5LgZ`SM{h{k$cGOCGWNXy4hBDMd@M_S)0%B>KL|Nu~4IhD*1b zsnRz4)0ATyNS%KN7K0nuvu1Jx8~0(EB?m}<$z{%d19|+>(E^^Y^o+9$b_EGcqz>NKSS3 zqQXwI!*<*>Rk zKVmwun70__HL_ed@^C)0sMwg?63H^bkTjDk#{%HS-A;swdwPNHGmUKO?}mQ`8< zy=3Xg0VDeqQKi~9&2~p3<}OF-3wdpsJmuJ2sPKeR z?cCG7!p~#gyahVSXk76cl2*|QUY*E4vaZlzO_UbYpRP3zb#r5M)qSkYe8bvf_u%B$ zzWZDCx%anpg9Va0R_z=I4X(S)-xSOg%puE=?)=FXv;8wREtCCi>e?Jz+e#Num@3U7 zgc}@=H#HtZjL{YG%Tac`Gqb3_9~9511_~Y%5#{mkW0(dl{vsY}cRQl6fuw8VLtA;BO48f1t_W;s|EWA!Gj`XWnEN^dA0MQP_EN4SR_L zmyIp_cHO6uI8*2Q@m^wSaa#yr+M>LeH1V(YZOHQyLVbr2dvLgp$AOBvX02La-&+EqK4yQiy+VAC z&{l@Z=S1dp7A^=fk^T{O9_yZ%untmGcJgTj+xq%9kWz0Rj8hUz)5+c`DpuqBT*jU+Awf6pi_P|(r|Es#&^daeQr*J`??{CF` zwDge6C?%ES%mYrp{Ywg|h+?DX8XQsKCAW`Ox&;^{sGW`0s&fiVaPmzCa183UX}$@h z2*u<6QQ~q-N*g$_bBYaz8jhD|4Y<@cQIqwW*>j&)ek#TOOd!siIZ%-=Q9{ROU+~;v1 zRUTw@A67_(b=@J4;wo;PDMf?(cZ)-cISv0-4;*+~)%k-z*Z~fLnME9xnR*TG71alS zvIBP=RoUnrwSc%X^t<$GaIzUpp!0!Dl|j4lI6o{t{>R2hfC8WG&czDFpA4&^c_nOa zL7LgtIqA=VPk1sivE~}bFkT#3`LfJ1Al4aHQM&G9wH%=;GyEz+e<&|<(IN)FWNKa z!7-^PV+`978>P2X-GOEXRQ}pxG5 zH(6ZzG#fgBSbr-HpRfK^Q=^CVX%3IEi+Mt#5M{9>=_H4!kPPu4->2wSPPs`A4TA4d zxiPda0++(5&cCC@T!`VSO$XQ8K}HA$D!Pv=7-`y>dAdy~+3AxQ3UM|0;cu2V?!Ow2 z_8BI8aLyZDQk{K61{5d{x!rG>@$^b7=@oBTsMwSK-Z~#4wB^edv5*X2yU9P|1XUdF@8P&OCa4|}T zO|Wyf>v%!ag6(H3bvCXOv0LLuyi9Kd8T|ak9>u9E_P)|Mi}LFIIrXG%;xea`Sb?~E zhjFPYgz8vebGnfCtMQ{x%U7Or#(hb0sv@A?WhB!!KNt-SV@zpJ&y)lzsLw@ID{;k1 zJ9vG$drcayaUvTA%l0qs&rYY-+^sh`8LOeGUqn!8lvN>KW^3k3*yT=}kplHVnfdUz zpl2Sx(?;g#ZZ~jY-1?#ES3B0!eBS!EzqsRzRfXmxutTksmq$DAYp1cqXJv{9JcE9% z?ia}$hL}gNg}?SSuR4dTtgY{XgQX0@SPfmQaH%bqkA+^7f|Ehx@!hZG)iNE-Q{K`$R?~FA8VHJ)k}>B>D=0RHv2t} zO`j_Yj^t!)E?6_;%%S51GY8Q}I$ zBNN5C=d4U|PyTjwM@O$VbCFJgcwcX+tnjL&@)u5yYPFg_)8yOYx;F;AMPpU1hpr*Z zx{pm4(zd(DQN^aBQ)O#0bJ}Dd#jnhVFD>v4X!TU5@Q_waE|TnYETl zmKaZ)s(8V-e%bLkg0-js_)Hw`W{aQg*3zB&u74c&2`qU`ey0xzNyqf>+tCMFiZ96B z7G{o;=wwjarD(C|711nAIwXf`r0mo_Fm?*-T|NwI%J?Y%=)n~KviMlh`p#&LH;;&P z_tWsmmo?nq?j1^xdt-yms!@S=81)Xk!_+Lr-xf-z6XY0x&xZ$Z&3FUAviKK69Jtb! z;A3Mam z2cH&-8&VDO%peq5Yqp4u{XF3L2ntH1DyI54w%ZgG8TyBGqZ1tk9idT3lHuf1W=}_| zPKnO!yXo$q|_MKa?$hgP{OY#nVj6gg@<-hLMzOeqU|#PIUE>l;-tX zz8&aO+d;=u(G@HNi*O4?qxMpJQG7E!$GtxUF^JH_gP0?E0N79^Q*I1BMU5ka>y;gT z&+iRSRy?Ms=OdLdTKkeq`PvvBNjoVynUy~g%*ZnxcoP{j$nPieWfFjej z#pABYu(E^T3C#M!os|>Br=CAdwF+u>RyCJD~ccFDx)i=qm)h-nADqxDFAPK+blK$Z&B3qGy ztl?658;_5dG4bjV&%3U%ziLXYxRP4&DmCs>r*&3tk>Th#1eEb+=t3?(C3Y)u#=>}* zAG;yUuiEFJtg`j@Qq2&U{^CnjIYxE{HeCz@ZaPP19J#waow2pyfqd<=zXVQ3 zr&6lq+tiD`j(HTDUUlAhj>#^v$pljM^$i0rA6^QTkgRyR;YUjnpWLa-Ylz}eeZ=L$byZBX4&Bdj5B zYccUI`Vp{e;UhhRxd-vyb?S1?A9Nit=45D16LWq2?zaub41i4fHxw@1fsxv$12 zkY+}!4dl94I|z!E_mWR9m!fUx88mR6TzzNhXj_@Rv@|iTL7<#MBij*h=YD=;$+L4# zkc_>-&g%*$VEXDx1lxM?;t%Q~LoeUrhTPC>zPK;@4`kQPt8wGv>v3g9F6|2^w_Zb~ zeNzNZX1igMb;2>HJ$rB!WRdOnx0|+85?^6+Lh|+*E?=x}=I{fS!1UutftxQWpf=+) zINB1wWf>#qoWvSb{YVVM9Zm8vKE2fXIVMSq7LHNIdI;spDDIeR_gwU#kGs80VgLt|-TX4X|YK+o_K6i%vUCkel zo0$Ce`?cGQ<)g1*MiZP2vfR|<4`%2&cEiwFk?e;)9dZ~z-%|l~@2U6QD0G!8dX^m02$NN4-CO+ME6E)%Ut* zje!Q|fq?0>g|jK)#9|3=sePG^Cz>XHgnC5%NgjB}#?AcohBW+B`VeoZA3f0Tg0ep# zbG6C?^GW%Y{zBH|INWuEupok-Ur$^1@LQJPoT=Wqh|k^25tL5L4hE%nG{nt#%_lV2 zt$}^D{xh_mn=;QZbiEttTHy@mZ+GlmFwKtFx8BQczdn-yOd>*w`N?TvBO|`@)XM1s zjoxiV^_o2$m&Q6POkO2kyY};K;CnnSI6(66<$9Z@cP&A!nuY@cso`HXP6kAox-SZ*NrY@S@*>&sS`;J0S$9=Z@N?4T zQ{uVP#7?`7>>3-?sK`i?_9GeSZySlf*r;x*#=!?9#wk{XHhw}_^+yl`22?pTO5wkpe271M@N*(eEkMqFKC;_%&Y|QPVFg{0E7`td1i)px^ zAkkX2tFyH`;Jw9*0xm|=R3yH?!VHKBtE&w-m@`Cxu7vrY&6ns}fsJ#e{n6!vJX-2# z?F$}J#@9gu0g&nA3Do0Apt&XE-km46IQ5Y(IJ!g;Rwm{CX@yvk+8NJ9n_+?x6`4p3 z*Re33(`5*J{UVZ=Yu;h?M)wA5C<`dWK)%ARur3Q);B`tao)bT#rVJ%+9nO`Y5Bc7DO(r5f;B&uiM0EVk<~1a*Dav%6 z+76^8dwNz6XGQenTTr}7TovU;=zTu{2WlF3;#&Ekd)v1ULOt^Jj#R2elmPS4Jrx)F z%3p5A!$X#fqBPshEf2eH}%@WR~T{1WMPp|sTMIF3*o#|2OuPWzm| z5`DiN3{S1(7g5C;nU{?0_a0u=~I+9$;b4hl0xp1dRG=m2bV8xnfV%vnkmxRyVBu z7M}QzXehwNO1=C?gzM?Xzf3qEu$8P0L607={JI#1eVo8arLlmio0-V^^PiW`7Czl* zkgdTBR6dS!cGVy0B65ZGgS>uTLY&$(P{R<9)w>efF4|Qu3~i+`v;8^E;%wxrL0xzhFEMLs1t~I^sF8@Uj4(_FCdDrdUI@>h9;p4d1}<(WEaut&-k`it>l8Fly*PrW z8^+7m#sf{F?qXw)*0!<7+BvaG2ucb{L8V#2A;qA=;!v0ft3FJE)xpc_iHwktudlBl z_97ZQK(wHnhy7gW7U+=V&P9(#4&E-dGBV0;cHS;%S1%bEJrL?i0xSB{AoM?C{&h?l z83#1h-oc9mCM`lu;t>L3ZvR_9{~2S7MR_?~gp8K6k%JJ%e+$vZx}d$DJwcQFYg9r{ zTUrfQ1 Date: Wed, 14 Jun 2017 07:58:59 -0600 Subject: [PATCH 426/452] Upgrade to node 8.1.0 (#26) --- .nvmrc | 2 +- .travis.yml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.nvmrc b/.nvmrc index a2931d3..8104cab 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -7.5.0 \ No newline at end of file +8.1.0 diff --git a/.travis.yml b/.travis.yml index fea5eb3..cc4d75c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,8 +15,8 @@ branches: before_install: - cp .env.example .env - - nvm install 7.5.0 - - nvm use 7.5.0 + - nvm install 8.1.0 + - nvm use 8.1.0 - npm install -g yarn install: @@ -28,4 +28,4 @@ before_script: - "sh -e /etc/init.d/xvfb start" script: - - yarn test \ No newline at end of file + - yarn test From f79a6dec21a898588276bb33f71045aca62bd63e Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 14 Jun 2017 10:52:53 -0600 Subject: [PATCH 427/452] updates yarn lock --- client/apps/hello_world/yarn.lock | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/client/apps/hello_world/yarn.lock b/client/apps/hello_world/yarn.lock index 7c56d8b..120d5af 100644 --- a/client/apps/hello_world/yarn.lock +++ b/client/apps/hello_world/yarn.lock @@ -1637,20 +1637,13 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.10: +prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@~15.5.7: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" -prop-types@^15.5.6, prop-types@^15.5.7, prop-types@~15.5.7: - version "15.5.9" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.9.tgz#d478eef0e761396942f70c78e772f76e8be747c9" - dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" From 56ef61373d2f11a2513f4c331c03fe4939d19680 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 19 Jun 2017 23:39:33 -0600 Subject: [PATCH 428/452] Fix makeUrl --- client/libs/api/api.js | 2 +- client/libs/api/api.spec.js | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/client/libs/api/api.js b/client/libs/api/api.js index c0c5022..9314d96 100644 --- a/client/libs/api/api.js +++ b/client/libs/api/api.js @@ -115,7 +115,7 @@ export default class Api { * `apiUrl`. If `path` already contains "http", it is returned as-is. */ static makeUrl(part, apiUrl) { - if (part.indexOf('http') >= 0) { + if (_.startsWith(part, 'http')) { return part; } diff --git a/client/libs/api/api.spec.js b/client/libs/api/api.spec.js index 00306b7..4e309c0 100644 --- a/client/libs/api/api.spec.js +++ b/client/libs/api/api.spec.js @@ -116,6 +116,21 @@ describe('api', () => { }); }); + describe('makeUrl', () => { + it('adds on the api url', () => { + const result = api.makeUrl('/api/stuff', 'http://www.example.com'); + expect(result).toBe('http://www.example.com/api/stuff'); + }); + it('does not add an extra slash on the api url', () => { + const result = api.makeUrl('/api/stuff', 'http://www.example.com/'); + expect(result).toBe('http://www.example.com/api/stuff'); + }); + it('adds on the api url even when the query has http', () => { + const result = api.makeUrl('/api/stuff?return=https://www.example.com/return', 'http://www.example.com/'); + expect(result).toBe('http://www.example.com/api/stuff?return=https://www.example.com/return'); + }); + }); + describe('Pending Requests', () => { const url = 'http://www.example.com'; const requestMethod = () => {}; From 9412ff4eb7b4c980a3a5c4150dfb363d1dcc6712 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 13 Jul 2017 23:33:50 -0600 Subject: [PATCH 429/452] Adds option to build apps in a specific order --- client/libs/build/apps.js | 44 ++++++++++++++++++++++++------ client/libs/build/webpack_utils.js | 20 ++++++++------ 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 6ff1473..8fe92c9 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -38,19 +38,47 @@ function buildApp(appName, options) { }; } +// ----------------------------------------------------------------------------- +// Build apps in order one at a time +// ----------------------------------------------------------------------------- +function buildAppWait(app, options) { + return new Promise(resolve => { + const buildPromise = buildAppParts(app, options.onlyPack); + buildPromise.then(() => { + resolve({ + app, + buildPromise + }); + }); + }); +} + // ----------------------------------------------------------------------------- // Build all apps // ----------------------------------------------------------------------------- -function buildApps(options) { - return _.map(settings.apps(options), (app) => { - if (!options.noClean) { +async function buildApps(options) { + const apps = settings.apps(options); + + // Clean dirs + if (!options.noClean) { + _.each(apps, (app) => { fs.emptyDirSync(app.outputPath); + }); + } + + if (options.order) { + const results = []; + for (let i = 0; i < options.order.length; i += 1) { + const appName = options.order[i]; + results.push(await buildAppWait(apps[appName], options)); } - return { - app, - buildPromise: buildAppParts(app, options.onlyPack) - }; - }); + return results; + } + + return _.map(apps, app => ({ + app, + buildPromise: buildAppParts(app, options.onlyPack) + })); } module.exports = { diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index bf9899b..f081155 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -6,14 +6,18 @@ const urljoin = require('url-join'); // Loads webpack assets file // ----------------------------------------------------------------------------- function loadWebpackAssets(app) { - let webpackAssets = null; - const webpackAssetsFilePath = `${app.outputPath}/${app.name}-webpack-assets.json`; - if (fs.existsSync(webpackAssetsFilePath)) { - webpackAssets = _.mapValues(fs.readJsonSync(webpackAssetsFilePath), asset => - _.mapValues(asset, assetFilename => urljoin(app.publicPath, assetFilename)) - ); - } - return webpackAssets; + return _(fs.readdirSync(app.outputPath) + ).filter(filename => + _.endsWith(filename, '-webpack-assets.json') + ).reduce((result, filename) => { + const webpackAssetsFilePath = `${app.outputPath}${filename}`; + if (fs.existsSync(webpackAssetsFilePath)) { + return _.merge(result, _.mapValues(fs.readJsonSync(webpackAssetsFilePath), asset => + _.mapValues(asset, assetFilename => urljoin(app.publicPath, assetFilename)) + )); + } + return {}; + }, {}); } // ----------------------------------------------------------------------------- From f2d170a562a25891c5911b3ce6566be9a75c5215 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 28 Jul 2017 23:12:47 -0600 Subject: [PATCH 430/452] Move babel from webpack config into .babelrc. Add preact support. --- client/.babelrc | 31 +++++++++++++++++++++++- client/config/webpack.config.js | 42 +++++++++++++-------------------- 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/client/.babelrc b/client/.babelrc index ca578d2..81e9939 100644 --- a/client/.babelrc +++ b/client/.babelrc @@ -2,7 +2,36 @@ "presets": ["es2015", "react", "stage-0"], "env": { "test": { - "plugins": ["transform-runtime", "transform-decorators-legacy", "transform-class-properties", "babel-plugin-rewire"] + "plugins": [ + ["transform-runtime"], + ["transform-decorators-legacy"], + ["transform-class-properties"], + ["babel-plugin-rewire"], + ] + }, + "development": { + "plugins": [ + ["transform-runtime"], + ["transform-decorators-legacy"], + ["transform-class-properties"], + ] + }, + "hot": { + "plugins": [ + ["transform-runtime"], + ["transform-decorators-legacy"], + ["transform-class-properties"], + ["react-hot-loader/babel"], + ] + }, + "production": { + "plugins": [ + ["transform-runtime"], + ["transform-decorators-legacy"], + ["transform-class-properties"], + ["transform-react-constant-elements"], + ["transform-react-remove-prop-types"], + ] } } } diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 1b28158..e886b21 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -20,26 +20,7 @@ const _ = require('lodash'); // 'test' module.exports = function webpackConfig(app) { - let babelPlugins = 'plugins[]=transform-runtime' + // Externalise references to helpers and builtins, automatically polyfilling your code without polluting globals. - ',plugins[]=transform-decorators-legacy' + // A plugin for Babel 6 that (mostly) replicates the old decorator behavior from Babel 5. Decorators aren't part of the standard yet. This gives us a good enough solution for now. - ',plugins[]=transform-class-properties'; // Allows class instance fields and class static properties. - - const presets = 'presets[]=react' + // Include all plugins needed for React - ',presets[]=es2015' + // Include all plugins needed to handle es2015 syntax - ',presets[]=stage-0'; // Enables experimental ES features. - - if (app.production) { - babelPlugins += ',plugins[]=transform-react-constant-elements'; // Hoists static React components to reduce calls to createElement - babelPlugins += ',plugins[]=transform-react-remove-prop-types'; // Removes prop types from code - } else if (app.stage === 'hot') { - babelPlugins += ',plugins[]=react-hot-loader/babel'; - } else if (app.stage === 'test') { - // Add test plugins as needed - } - - const babelLoader = `babel-loader?${babelPlugins}&${presets}`; - - const jsLoaders = [babelLoader]; + const jsLoaders = ['babel-loader']; if (app.shouldLint) { jsLoaders.push('atomic-lint-loader'); } @@ -164,7 +145,8 @@ module.exports = function webpackConfig(app) { { test: /\.css$/i, use: app.extractCssOff ? cssLoaders : extractCSS.extract(cssLoaders) }, { test: /\.less$/i, use: app.extractCssOff ? lessLoaders : extractCSS.extract(lessLoaders) }, { test: /.*\.(gif|png|jpg|jpeg|svg)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, - { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] } + { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, + { test: /\.tpl$/, loader: 'lodash-template-webpack-loader' } ]; const entryPath = path.join(app.path, app.file); @@ -178,6 +160,19 @@ module.exports = function webpackConfig(app) { ]; } + const resolve = { + extensions: ['.js', '.json', '.jsx', '.scss', '.less', '.css'], + modules: ['node_modules', `${app.path}/node_modules`] + }; + + if (app.preact) { + resolve.alias = { + react: 'preact-compat', + 'react-dom': 'preact-compat', + 'create-react-class': 'preact-compat/lib/create-react-class' + }; + } + return { context: path.resolve('../apps', __dirname), entry, @@ -191,10 +186,7 @@ module.exports = function webpackConfig(app) { // http://webpack.github.io/docs/configuration.html#output-pathinfo pathinfo: !app.production }, - resolve: { - extensions: ['.js', '.json', '.jsx', '.scss', '.less', '.css'], - modules: ['node_modules', `${app.path}/node_modules`] - }, + resolve, cache: true, devtool: app.production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ stats: { colors: true }, From 40f0be002ec5276ee66d7980946a1531ab66cf04 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 4 Aug 2017 13:37:26 -0600 Subject: [PATCH 431/452] Fix single app hot run --- README.md | 2 +- client/libs/build/apps.js | 3 ++- client/webpack.hot.js | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2c4e445..4c0ae21 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ each new application that is started. If you have multiple applications you can run them one at a time with the application name: - `yarn hot hello_world` + `yarn hot -- --app hello_world` then visit `http://localhost:8080` diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 8fe92c9..3b6e382 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -28,7 +28,8 @@ function buildAppParts(app, onlyPack) { // Build a single app // ----------------------------------------------------------------------------- function buildApp(appName, options) { - const app = _.find(settings.apps(options).apps, (e, name) => appName === name); + const apps = settings.apps(options); + const app = _.find(apps, (e, name) => appName === name); if (!options.noClean) { fs.emptyDirSync(app.outputPath); } diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 919aa90..8d50138 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -11,7 +11,7 @@ const webpackConfigBuilder = require('./config/webpack.config'); const clientApps = require('./libs/build/apps'); const localIp = '0.0.0.0'; -const appName = _.trim(argv._[0]); +const appName = argv.app; const hotPack = argv.hotPack; const shouldLint = argv.lint; From 9ccba519fbcaa2971a77b603c128c28f8d31c823 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Mon, 7 Aug 2017 14:37:29 -0600 Subject: [PATCH 432/452] Fixes yarn hot --- client/webpack.hot.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 8d50138..7bb224c 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -65,16 +65,19 @@ if (appName) { } else if (hotPack) { options.onlyPack = true; options.appPerPort = false; - const results = clientApps.buildApps(options); - const apps = _.map(results, result => result.app); - const promises = _.map(results, result => result.buildPromise); - const serverApp = express(); - Promise.all(promises).then(() => { - setupMiddleware(serverApp, apps); - runServer(serverApp, settings.hotPort, settings.paths.devOutput); + clientApps.buildApps(options).then((results) => { + const apps = _.map(results, result => result.app); + const promises = _.map(results, result => result.buildPromise); + const serverApp = express(); + Promise.all(promises).then(() => { + setupMiddleware(serverApp, apps); + runServer(serverApp, settings.hotPort, settings.paths.devOutput); + }); }); } else { - _.each(clientApps.buildApps(options), (result) => { - result.buildPromise.then(() => launch(result.app)); + clientApps.buildApps(options).then((results) => { + _.each(results, (result) => { + result.buildPromise.then(() => launch(result.app)); + }); }); } From 67061892664b160a1cae697fa63e2e422d2c6937 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 8 Aug 2017 14:09:08 -0600 Subject: [PATCH 433/452] Fixes changes to hashed names --- client/libs/build/webpack_utils.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index f081155..8e206e9 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -1,4 +1,5 @@ const fs = require('fs-extra'); +const path = require('path'); const _ = require('lodash'); const urljoin = require('url-join'); @@ -10,7 +11,7 @@ function loadWebpackAssets(app) { ).filter(filename => _.endsWith(filename, '-webpack-assets.json') ).reduce((result, filename) => { - const webpackAssetsFilePath = `${app.outputPath}${filename}`; + const webpackAssetsFilePath = path.join(app.outputPath, filename); if (fs.existsSync(webpackAssetsFilePath)) { return _.merge(result, _.mapValues(fs.readJsonSync(webpackAssetsFilePath), asset => _.mapValues(asset, assetFilename => urljoin(app.publicPath, assetFilename)) From 9a107790c7d4b55ab64ac16e475804605a6c6f12 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Tue, 8 Aug 2017 17:39:19 -0600 Subject: [PATCH 434/452] Allow per app custom options --- .s3-website.json | 2 +- README.md | 30 +++++++++++++++++++++--------- client/config/settings.js | 24 ++++++++++++++---------- package.json | 2 +- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/.s3-website.json b/.s3-website.json index d9f6925..b513b08 100644 --- a/.s3-website.json +++ b/.s3-website.json @@ -19,7 +19,7 @@ "MaxAgeSeconds": 0 } ], - "enableCloudfront": true, + "enableCloudfront": false, "retries": 20, "domain": "reactclientstarterapp.com", "configFile": ".s3-website.json" diff --git a/README.md b/README.md index 4c0ae21..2120708 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,8 @@ and our [Firebase React starter appliction](https://github.com/atomicjolt/react_ #Demo: ----------------------- -[React Client Starter App Demo](http://reactclientstarterapp.com.s3-website-us-east-1.amazonaws.com) +[React Client Starter App Demo](https://reactclientstarterapp.s3-website-us-east-1.amazonaws.com/hello_world) + #Getting Started: ----------------------- @@ -49,15 +50,26 @@ applications. The build process will automatically add a new webpack entry point ## Custom Build Settings ----------- -Default build settings can be overridden by adding the following json files to the application directory: - -Change the output directory for an application by specifying "outName" which will override the default name -used when generating a path: +Default build settings can be overridden by adding an options.json file to the application directory. -In output_paths.json +### Options: +----------- +* outName - Change the output directory for an application by specifying "outName" which will override the default name +used when generating a path. +* port - Hard code a port for the application to run. Typically, you won't need to set this value as the build process +will calculate one for you. +* onlyPack - If true don't generate html files. Instead, only run the webpack process and output the resulting files. +* noClean - If true then don't delete files before starting a new build. +* rootOutput - Dump the application directly into the root directory. + +Example options.json ` { - "outName": "hello_world" + "outName": "hello_world", + "port": 8080, + "onlyPack": true, + "noClean": false, + "rootOutput": false } ` @@ -164,9 +176,9 @@ directly into the build/prod directory `yarn build_pack` After setting up .s3-website.json this will create a S3 bucket and set it as a website: - `yarn create` + `yarn ball` -Release a production build to the S3 website bucket created by `yarn create` +Release a production build to the S3 website bucket created by `yarn ball` `yarn release` Run a linter over the project: diff --git a/client/config/settings.js b/client/config/settings.js index 1c3affa..38e5169 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -87,13 +87,7 @@ function withNameIfRequired(name, relativeOutput, options) { // ----------------------------------------------------------------------------- function outputPaths(name, port, appPath, options) { - let outName = name; - - const customOutputPaths = `${appPath}/output_paths.json`; - if (fs.existsSync(customOutputPaths)) { - const custom = JSON.parse(fs.readFileSync(customOutputPaths, 'utf8')); - outName = custom.outName; - } + const outName = options.name || name; let rootOutputPath = devOutput; let outputPath = isNameRequired(options) ? path.join(devOutput, outName) : devOutput; @@ -106,7 +100,10 @@ function outputPaths(name, port, appPath, options) { if (isProduction(options.stage)) { rootOutputPath = prodOutput; outputPath = isNameRequired(options) ? path.join(prodOutput, outName) : prodOutput; - publicPath = urljoin(prodAssetsUrl, withNameIfRequired(outName, prodRelativeOutput, options)); + publicPath = urljoin( + prodAssetsUrl, + withNameIfRequired(outName, prodRelativeOutput, options) + ); } else { let devUrl = devAssetsUrl; // Include the port if we are running on localhost @@ -166,14 +163,21 @@ function appSettings(name, port, options) { const htmlPath = path.join(appPath, 'html'); const staticPath = path.join(appPath, 'static'); + const customOptionsPath = `${appPath}/options.json`; + let combinedOptions = options; + if (fs.existsSync(customOptionsPath)) { + customOptions = JSON.parse(fs.readFileSync(customOptionsPath, 'utf8')); + combinedOptions = _.merge(options, customOptions); + } + const app = _.merge({ htmlPath, staticPath, templateData: {}, // Object that will be passed to every page as it is rendered templateMap: {}, // Used to specify specific templates on a per file basis htmlOptions, - }, webpackSettings(name, 'app.jsx', appPath, port, options), - outputPaths(name, port, appPath, options)); + }, webpackSettings(name, 'app.jsx', appPath, port, combinedOptions), + outputPaths(name, port, appPath, combinedOptions)); app.templateDirs = templateDirs(app, ['layouts']); return { diff --git a/package.json b/package.json index 8625fe4..e0d9daf 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "build_dev_pack": "cd ./client && node ./build.js --onlyPack", "build": "cd ./client && node ./build.js --release", "build_pack": "cd ./client && node ./build.js --release --onlyPack", - "create": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js create", + "ball": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js create", "release": "cd ./client && node ./build.js --release && cd .. && ./client/node_modules/s3-website/s3-website.js deploy", "lint": "cd ./client && eslint js", "nuke": "rm -rf node_modules && cd ./client && yarn nuke" From 21d6941f76602b6cde8b77c7e0cbc3eb8e8f3aed Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 9 Aug 2017 17:54:54 -0600 Subject: [PATCH 435/452] Add font for testing --- .../styles/fonts/roboto-bold-webfont.woff | Bin 0 -> 26356 bytes .../styles/fonts/roboto-bold-webfont.woff2 | Bin 0 -> 19876 bytes .../styles/fonts/roboto-regular-webfont.woff | Bin 0 -> 26032 bytes .../styles/fonts/roboto-regular-webfont.woff2 | Bin 0 -> 19704 bytes .../hello_world/styles/modules/_mixins.scss | 18 ++++++++++++++++++ client/apps/hello_world/styles/styles.scss | 2 ++ 6 files changed, 20 insertions(+) create mode 100755 client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff create mode 100755 client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff2 create mode 100755 client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff create mode 100755 client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff2 create mode 100644 client/apps/hello_world/styles/modules/_mixins.scss diff --git a/client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff b/client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..8373f079460df884204236a94ea0a99290be3a43 GIT binary patch literal 26356 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 M00045i<|2J0EOWW&;S4c literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff2 b/client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..47aa1063370ef209ea840184be891267499d4b94 GIT binary patch literal 19876 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 bXi;bNXwHV{j>h}&65b?=TM6Ud|7-&Qpv7t@ literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff b/client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff new file mode 100755 index 0000000000000000000000000000000000000000..847e110c8c9a36701d484db9cf55798a1a26e3ef GIT binary patch literal 26032 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 literal 0 HcmV?d00001 diff --git a/client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff2 b/client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff2 new file mode 100755 index 0000000000000000000000000000000000000000..c8c60cdde30438c4e3419eeefacc308bfcca7831 GIT binary patch literal 19704 zcmV()K;OT2Pew8T0RR9108ID*6951J0Jnqy08EJh0wWRt00000000000000000000 z0000#Mn+Uk92z_urcNA$90p(jgK7vm34~=42nvFnFoFCn0X7081BWULgIE9rAO(hQ z2Zd)0fqOr9WnyLq8(E|W@SF+tyB(mXr(*7_a(h=%M>@+Hfni3n&H;j!+y5@%U9IH(`#pjXSl(uJ*GYFp6Y5g5 zmp&bpl4S@`(}f~BU5m6&A%oCO0sLRB>HkX*Ixb3+UI?IZNvkrxS`h5*QR(SoL>qPm zAU6Dm%XF@5i?q_|-0OEsg2W6UoK%Ja$OF*uU)ij(7YC?ID}q6i_8qlLcpwA2djv(-Us2vK z3+nzm6LnU&)H+#)2Av|W|Ksq>1_coC|C?%Wd+!WDK7iUl{TTV3i=IjjWyg7M0^htD zfD-_mnIT9cC=8(lfaL!msk1{s+5=MBV@gicI)>{1EUyzmP-{{AiK0`Er8^h3D;MRK zzbM_6F~k4&N6Kez7R|@t2mD}}fW>TC-@LTt*IoC8ceRhjPN={&q5ie@YDq@DiH{~@ z2xTTpe*oMIaDix#_x1yB0mu?4BnRkfM8+4$h)!f_Yc0n=`WME%aGTvp9=HUm)jWQa zOO9R3>Sc{aN4Bm|V$OEt5=e1W7wC{5uiNe4Y+~2&R_&5QB$ZTx1d&&}{XOa+b6JC+ z`@FAffif}}NeCkoZTssO)9T5!;+ImAAhso-Qk*J(KLH4UxAymYOMn-C8w ?Pu45 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 Date: Wed, 9 Aug 2017 17:55:19 -0600 Subject: [PATCH 436/452] Add notes and set rootOutput option for hotPack mode --- client/webpack.hot.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 7bb224c..bc57098 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -60,10 +60,14 @@ function launch(app) { const options = { hotPack, shouldLint, stage: 'hot', onlyPack: false, port: settings.hotPort, appPerPort: true }; if (appName) { + // Run a single app. Note that when using yarn hot in order to run a single + // application you will need to type 'yarn hot -- --app=my-app' const result = clientApps.buildApp(appName, options); result.buildPromise.then(() => launch(result.app)); } else if (hotPack) { + // Only run webpack. Do not run the rest of the build process options.onlyPack = true; + options.rootOutput = true; options.appPerPort = false; clientApps.buildApps(options).then((results) => { const apps = _.map(results, result => result.app); @@ -75,6 +79,7 @@ if (appName) { }); }); } else { + // Run and serve all applications clientApps.buildApps(options).then((results) => { _.each(results, (result) => { result.buildPromise.then(() => launch(result.app)); From 3ce9fed57ed548b4b383981dca3fa5d4cf0ce9b6 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 9 Aug 2017 17:55:32 -0600 Subject: [PATCH 437/452] Simplify server running production site --- client/server.js | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/client/server.js b/client/server.js index 6bb981a..c74970f 100644 --- a/client/server.js +++ b/client/server.js @@ -1,13 +1,11 @@ const path = require('path'); -const _ = require('lodash'); const express = require('express'); const settings = require('./config/settings'); const serverApp = express(); -const argv = require('minimist')(process.argv.slice(2)); -const appName = _.trim(argv._[0]); +const localIp = '0.0.0.0'; function launch(servePath, port) { serverApp.use(express.static(servePath)); @@ -16,21 +14,19 @@ function launch(servePath, port) { res.sendFile(path.join(servePath, req.url)); }); - serverApp.listen(port, '0.0.0.0', (err) => { + serverApp.listen(port, localIp, (err) => { if (err) { console.log(err); return; } - console.log(`Listening on: ${port}`); + console.log('*****************************************************************************************'); + console.log('Note that you must run "yarn build" before running "yarn live" to build production files.'); + console.log('Also note that if you have set "prodAssetsUrl" in settings.js to a CDN or other public '); + console.log('server value you will need to change it to an empty string to serve files from your '); + console.log('local computer.'); + console.log(`Listening on: http://${localIp}:${port}`); console.log(`Serving content from: ${servePath}`); }); } -if (appName) { - launch(path.join(settings.prodOutput, appName), settings.hotPort); -} else { - const options = { stage: 'production', onlyPack: false, port: settings.hotPort }; - _.each(settings.apps(options), (app) => { - launch(app.outputPath, app.port); - }); -} +launch(settings.prodOutput, settings.hotPort); From c65730e47bd126c6b3028fd8150e51a7694ed8fd Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 9 Aug 2017 18:00:05 -0600 Subject: [PATCH 438/452] Better handling of webpack publicPath --- client/config/settings.js | 27 +++++++++++++++++---------- client/config/webpack.config.js | 4 ++-- client/libs/build/utils.js | 18 +++++++++++++++--- client/libs/build/webpack_utils.js | 6 +++--- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/client/config/settings.js b/client/config/settings.js index 38e5169..c9a2367 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -1,7 +1,8 @@ const fs = require('fs-extra'); const path = require('path'); const _ = require('lodash'); -const urljoin = require('url-join'); + +const utils = require('../libs/build/utils'); // There is a warning if the .env file is missing // This is fine in a production setting, where settings @@ -24,7 +25,8 @@ const prodOutput = path.join(__dirname, '../../build/prod', prodRelativeOutput); // value as an empty string. This value could also be a CDN or // it could be the ssl version of your S3 bucket ie: // https://s3.amazonaws.com/' + deployConfig.domain; - +// For local testing set prodAssetsUrl to process.env.ASSETS_URL +// const prodAssetsUrl = `${process.env.ASSETS_URL}:${process.env.ASSETS_PORT}`; const prodAssetsUrl = `https://s3.amazonaws.com/${deployConfig.domain}`; const devAssetsUrl = process.env.ASSETS_URL; @@ -69,15 +71,15 @@ function isProduction(stage) { } function isNameRequired(options) { - return !options.onlyPack && !options.appPerPort && !options.rootOutput; + return !options.onlyPack && !options.rootOutput; } // ----------------------------------------------------------------------------- // Generates a path with the app name if needed // ----------------------------------------------------------------------------- function withNameIfRequired(name, relativeOutput, options) { - if (isNameRequired(options)) { - return urljoin(relativeOutput, name); + if (isNameRequired(options) && !options.appPerPort) { + return utils.joinUrlOrPath(relativeOutput, name); } return relativeOutput; } @@ -100,7 +102,7 @@ function outputPaths(name, port, appPath, options) { if (isProduction(options.stage)) { rootOutputPath = prodOutput; outputPath = isNameRequired(options) ? path.join(prodOutput, outName) : prodOutput; - publicPath = urljoin( + publicPath = utils.joinUrlOrPath( prodAssetsUrl, withNameIfRequired(outName, prodRelativeOutput, options) ); @@ -110,11 +112,14 @@ function outputPaths(name, port, appPath, options) { if (_.find(['localhost', '0.0.0.0', '127.0.0.1'], d => _.includes(devAssetsUrl, d))) { devUrl = `${devAssetsUrl}:${port}`; } - publicPath = urljoin(devUrl, withNameIfRequired(outName, devRelativeOutput, options)); + publicPath = utils.joinUrlOrPath( + devUrl, + withNameIfRequired(outName, devRelativeOutput, options) + ); } // Make sure the public path ends with a / or fonts will not have the correct path - if (!_.endsWith(publicPath)) { + if (!_.endsWith(publicPath, '/')) { publicPath = `${publicPath}/`; } @@ -166,7 +171,7 @@ function appSettings(name, port, options) { const customOptionsPath = `${appPath}/options.json`; let combinedOptions = options; if (fs.existsSync(customOptionsPath)) { - customOptions = JSON.parse(fs.readFileSync(customOptionsPath, 'utf8')); + const customOptions = JSON.parse(fs.readFileSync(customOptionsPath, 'utf8')); combinedOptions = _.merge(options, customOptions); } @@ -211,5 +216,7 @@ module.exports = { hotPort, outputPaths, apps, - isProduction + isProduction, + devOutput, + prodOutput, }; diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index e886b21..d6bb156 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -144,8 +144,8 @@ module.exports = function webpackConfig(app) { { test: /\.s[ac]ss$/i, use: app.extractCssOff ? scssLoaders : extractCSS.extract(scssLoaders) }, { test: /\.css$/i, use: app.extractCssOff ? cssLoaders : extractCSS.extract(cssLoaders) }, { test: /\.less$/i, use: app.extractCssOff ? lessLoaders : extractCSS.extract(lessLoaders) }, - { test: /.*\.(gif|png|jpg|jpeg|svg)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, - { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=5000&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, + { test: /.*\.(gif|png|jpg|jpeg|svg)$/, use: ['url-loader?limit=500&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, + { test: /.*\.(eot|woff2|woff|ttf)$/, use: ['url-loader?limit=500&hash=sha512&digest=hex&size=16&name=[name]-[hash].[ext]'] }, { test: /\.tpl$/, loader: 'lodash-template-webpack-loader' } ]; diff --git a/client/libs/build/utils.js b/client/libs/build/utils.js index 4989ea1..aabef14 100644 --- a/client/libs/build/utils.js +++ b/client/libs/build/utils.js @@ -1,5 +1,6 @@ -const path = require('path'); -const _ = require('lodash'); +const path = require('path'); +const _ = require('lodash'); +const urljoin = require('url-join'); // Regex used to parse date from file name const dateRegEx = /(\d{4})-(\d{1,2})-(\d{1,2})-(.*)/; @@ -35,7 +36,18 @@ function filename2date(filePath) { return result; } +// ----------------------------------------------------------------------------- +// Figures out whether to use url join or path join based on inputs +// ----------------------------------------------------------------------------- +function joinUrlOrPath(...args) { + if (_.startsWith(args[0], 'http')) { + return urljoin(...args); + } + return path.join(...args); +} + module.exports = { cleanTag, - filename2date + filename2date, + joinUrlOrPath, }; diff --git a/client/libs/build/webpack_utils.js b/client/libs/build/webpack_utils.js index 8e206e9..1c2477e 100644 --- a/client/libs/build/webpack_utils.js +++ b/client/libs/build/webpack_utils.js @@ -1,7 +1,7 @@ const fs = require('fs-extra'); const path = require('path'); const _ = require('lodash'); -const urljoin = require('url-join'); +const utils = require('./utils'); // ----------------------------------------------------------------------------- // Loads webpack assets file @@ -14,7 +14,7 @@ function loadWebpackAssets(app) { const webpackAssetsFilePath = path.join(app.outputPath, filename); if (fs.existsSync(webpackAssetsFilePath)) { return _.merge(result, _.mapValues(fs.readJsonSync(webpackAssetsFilePath), asset => - _.mapValues(asset, assetFilename => urljoin(app.publicPath, assetFilename)) + _.mapValues(asset, assetFilename => utils.joinUrlOrPath(app.publicPath, assetFilename)) )); } return {}; @@ -43,5 +43,5 @@ function apply(html, webpackAssets, buildSuffix) { module.exports = { apply, - loadWebpackAssets + loadWebpackAssets, }; From 9db0d16881ea39c02e9b569b0c51552968aa8dfa Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 9 Aug 2017 18:00:19 -0600 Subject: [PATCH 439/452] Adds note to home page to test font --- client/apps/hello_world/components/home.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/client/apps/hello_world/components/home.jsx b/client/apps/hello_world/components/home.jsx index 2885b4e..e03e763 100644 --- a/client/apps/hello_world/components/home.jsx +++ b/client/apps/hello_world/components/home.jsx @@ -7,6 +7,7 @@ export default function Home() { return (
    Atomic Jolt Logo +

    Welcome to the React Client starter app by Atomic Jolt

    ); } From 12fdab9976bbf6a81ead4103b23d5040b1e76495 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 9 Aug 2017 18:00:28 -0600 Subject: [PATCH 440/452] Updates yarn lock file --- client/yarn.lock | 1460 +++++++++++++++++++++++++--------------------- 1 file changed, 799 insertions(+), 661 deletions(-) diff --git a/client/yarn.lock b/client/yarn.lock index 22cc9ee..cf415b1 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -3,8 +3,8 @@ "@types/node@^6.0.46": - version "6.0.73" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.73.tgz#85dc4bb6f125377c75ddd2519a1eeb63f0a4ed70" + version "6.0.85" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.85.tgz#ec02bfe54a61044f2be44f13b389c6a0e8ee05ae" "@types/q@^0.0.32": version "0.0.32" @@ -52,12 +52,12 @@ acorn@^3.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^4.0.3, acorn@^4.0.4: - version "4.0.11" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.0.1, acorn@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" +acorn@^5.0.0, acorn@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" adm-zip@0.4.4: version "0.4.4" @@ -68,8 +68,8 @@ adm-zip@^0.4.7: resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" agent-base@2: - version "2.0.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" + version "2.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" dependencies: extend "~3.0.0" semver "~5.0.1" @@ -78,7 +78,7 @@ 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.11.2, ajv@^4.7.0, ajv@^4.9.1: +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: @@ -86,10 +86,12 @@ ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1: json-stable-stringify "^1.0.1" ajv@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.0.1.tgz#5fd1a8f5cc92b371aa86445b1152fd4dec844ac9" + version "5.2.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" dependencies: co "^4.6.0" + fast-deep-equal "^1.0.0" + json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" align-text@^0.1.1, align-text@^0.1.3: @@ -122,19 +124,23 @@ 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, ansi-regex@^2.1.1: +ansi-regex@*, ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" +ansi-styles@^3.0.0, ansi-styles@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: - color-convert "^1.0.0" + color-convert "^1.9.0" ansi-styles@~1.0.0: version "1.0.0" @@ -161,11 +167,11 @@ any-promise@^0.1.0: resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27" anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" dependencies: - arrify "^1.0.0" micromatch "^2.1.5" + normalize-path "^2.0.0" append-transform@^0.4.0: version "0.4.0" @@ -174,8 +180,8 @@ append-transform@^0.4.0: default-require-extensions "^1.0.0" aproba@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" + version "1.1.2" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" archive-type@^3.0.0: version "3.2.0" @@ -213,8 +219,8 @@ arr-diff@^2.0.0: arr-flatten "^1.0.1" arr-flatten@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" array-differ@^1.0.0: version "1.0.0" @@ -240,6 +246,13 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" +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" @@ -259,8 +272,8 @@ arrify@^1.0.0, arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" asap@^2.0.0, asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" asn1.js@^4.0.0: version "4.9.1" @@ -325,8 +338,8 @@ async@^0.9.0: resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.1.5: - version "2.4.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: lodash "^4.14.0" @@ -358,22 +371,23 @@ autoprefixer@^6.3.1: postcss-value-parser "^3.2.3" autoprefixer@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.1.tgz#97bc854c7d0b979f8d6489de547a0d17fb307f6d" + version "7.1.2" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.2.tgz#fbeaf07d48fd878e0682bf7cbeeade728adb2b18" dependencies: - browserslist "^2.1.3" - caniuse-lite "^1.0.30000670" + browserslist "^2.1.5" + caniuse-lite "^1.0.30000697" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.1" + postcss "^6.0.6" postcss-value-parser "^3.2.3" aws-sdk@^2.1.4, aws-sdk@^2.2.4, aws-sdk@^2.6.12: - version "2.50.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.50.0.tgz#6b2855741f8efe064f824a3db0bf4f3bc5bde018" + version "2.95.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.95.0.tgz#26e21db149443b1f063949dc87984f0d17700e6a" dependencies: - buffer "5.0.6" + buffer "4.9.1" crypto-browserify "1.0.9" + events "^1.1.1" jmespath "0.15.0" querystring "0.2.0" sax "1.2.1" @@ -399,19 +413,19 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: js-tokens "^3.0.0" babel-core@^6.0.0, babel-core@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" dependencies: babel-code-frame "^6.22.0" - babel-generator "^6.24.1" + babel-generator "^6.25.0" babel-helpers "^6.24.1" babel-messages "^6.23.0" babel-register "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" + babel-template "^6.25.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" convert-source-map "^1.1.0" debug "^2.1.1" json5 "^0.5.0" @@ -431,13 +445,13 @@ babel-eslint@^7.2.3: babel-types "^6.23.0" babylon "^6.17.0" -babel-generator@^6.18.0, babel-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" +babel-generator@^6.18.0, babel-generator@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" dependencies: babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" + babel-types "^6.25.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.2.0" @@ -579,10 +593,10 @@ babel-jest@^20.0.3: babel-preset-jest "^20.0.3" babel-loader@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.0.0.tgz#2e43a66bee1fff4470533d0402c8a4532fafbaf7" + version "7.1.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.1.tgz#b87134c8b12e3e4c2a94e0546085bc680a2b8488" dependencies: - find-cache-dir "^0.1.1" + find-cache-dir "^1.0.0" loader-utils "^1.0.2" mkdirp "^0.5.1" @@ -939,8 +953,8 @@ babel-plugin-transform-react-constant-elements@^6.23.0: babel-runtime "^6.22.0" babel-plugin-transform-react-display-name@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" dependencies: babel-runtime "^6.22.0" @@ -973,10 +987,10 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-runtime "^6.22.0" babel-plugin-transform-react-remove-prop-types@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.5.tgz#79d1958437ae23d4fbc0b11d1a041498ddb23877" + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.8.tgz#0aff04bc1d6564ec49cf23bcffb99c11881958db" dependencies: - babel-traverse "^6.24.1" + babel-traverse "^6.25.0" babel-plugin-transform-regenerator@^6.24.1: version "6.24.1" @@ -1097,60 +1111,64 @@ babel-register@^6.24.1: source-map-support "^0.4.2" babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.6.1: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" dependencies: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0, babel-template@^6.7.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0, babel-template@^6.3.0, babel-template@^6.7.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" lodash "^4.2.0" -babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" +babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" dependencies: babel-code-frame "^6.22.0" babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" + babel-types "^6.25.0" + babylon "^6.17.2" debug "^2.2.0" globals "^9.0.0" invariant "^2.2.0" lodash "^4.2.0" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" dependencies: babel-runtime "^6.22.0" esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0: - version "6.17.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" +babylon@^6.17.0, babylon@^6.17.2, babylon@^6.17.4: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" -balanced-match@^0.4.1, balanced-match@^0.4.2: +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" + base16@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" base64-js@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" base64url@2.0.0, base64url@^2.0.0: version "2.0.0" @@ -1171,8 +1189,8 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" + version "1.9.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b" bl@^1.0.0, bl@~1.1.2: version "1.1.2" @@ -1193,8 +1211,8 @@ blocking-proxy@0.0.5: minimist "^1.2.0" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" boom@2.x.x: version "2.10.1" @@ -1203,22 +1221,22 @@ boom@2.x.x: hoek "2.x.x" boxen@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" + version "1.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.1.tgz#0f11e7fe344edb9397977fc13ede7f64d956481d" dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" - chalk "^1.1.1" + chalk "^2.0.1" cli-boxes "^1.0.0" string-width "^2.0.0" - term-size "^0.1.0" + term-size "^1.2.0" widest-line "^1.0.0" brace-expansion@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: - balanced-match "^0.4.1" + balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: @@ -1297,12 +1315,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^2.1.3: - version "2.1.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" +browserslist@^2.1.5: + version "2.3.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.3.1.tgz#39500a2090330b2a090120ea6c7fc78b6e091c5e" dependencies: - caniuse-lite "^1.0.30000670" - electron-to-chromium "^1.3.11" + caniuse-lite "^1.0.30000712" + electron-to-chromium "^1.3.17" bser@1.0.2: version "1.0.2" @@ -1320,7 +1338,7 @@ 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-shims@^1.0.0, buffer-shims@~1.0.0: +buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" @@ -1337,14 +1355,7 @@ buffer-xor@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" -buffer@5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.6.tgz#2ea669f7eec0b6eda05b08f8b5ff661b28573588" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -buffer@^4.3.0: +buffer@4.9.1, buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: @@ -1426,12 +1437,12 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000666" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000666.tgz#951ed9f3d3bfaa08a06dafbb5089ab07cce6ab90" + version "1.0.30000713" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000713.tgz#ea01761840b5f148faf94ec5f34d0aa1d321966f" -caniuse-lite@^1.0.30000670: - version "1.0.30000679" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000679.tgz#0fb5bb3658d4d4448f8f86a1c48df15664aa05ef" +caniuse-lite@^1.0.30000697, caniuse-lite@^1.0.30000712: + version "1.0.30000713" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000713.tgz#33957ecb4a2154a5d40a60d13d8bf1cfa0881a8a" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1478,6 +1489,14 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chalk@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" @@ -1494,7 +1513,7 @@ chmodr@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chmodr/-/chmodr-1.0.2.tgz#04662b932d0f02ec66deaa2b0ea42811968e3eb9" -chokidar@^1.4.3: +chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -1514,8 +1533,8 @@ chownr@~1.0.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" chunk-manifest-webpack-plugin@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-1.1.0.tgz#21e73e5d31ed09e15f610e41385a276224d39af2" + version "1.1.2" + resolved "https://registry.yarnpkg.com/chunk-manifest-webpack-plugin/-/chunk-manifest-webpack-plugin-1.1.2.tgz#b332efb97c1a23bfd3ca5dcee13aa120df72df59" dependencies: webpack-core "^0.6.9" @@ -1524,24 +1543,25 @@ ci-info@^1.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" + 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.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" clap@^1.0.9: - version "1.1.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" + version "1.2.0" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.0.tgz#59c90fe3e137104746ff19469a27a634ff68c857" dependencies: chalk "^1.1.3" clean-css@4.1.x: - version "4.1.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.3.tgz#07cfe8980edb20d455ddc23aadcf1e04c6e509ce" + version "4.1.7" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.7.tgz#b9aea4f85679889cf3eae8b40349ec4ebdfdd032" dependencies: source-map "0.5.x" @@ -1581,14 +1601,13 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -clone-deep@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" +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 "^0.1.3" + for-own "^1.0.0" is-plain-object "^2.0.1" - kind-of "^3.0.2" - lazy-cache "^1.0.3" + kind-of "^3.2.2" shallow-clone "^0.1.2" clone-stats@^0.0.1: @@ -1631,8 +1650,8 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" coa@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3" + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" dependencies: q "^1.1.2" @@ -1640,15 +1659,15 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -color-convert@^1.0.0, color-convert@^1.3.0: +color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: color-name "^1.1.1" color-name@^1.0.0, color-name@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + 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" @@ -1689,11 +1708,9 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.x, commander@^2.6.0, commander@^2.9.0, commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" +commander@2.11.x, commander@^2.6.0, commander@^2.9.0, commander@~2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" commander@~2.8.1: version "2.8.1" @@ -1705,9 +1722,9 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" -complex.js@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.1.tgz#ea90c7a05aeceaf3a376d2c0f6a78421727d6879" +complex.js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.4.tgz#d8e7cfb9652d1e853e723386421c1a0ca7a48373" component-emitter@^1.2.0: version "1.2.1" @@ -1741,8 +1758,8 @@ config-chain@~1.1.10: proto-list "~1.2.1" configstore@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1" + 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" @@ -1808,16 +1825,16 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + version "2.5.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" -core-util-is@~1.0.0: +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" cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.3.tgz#952771eb0dddc1cb3fa2f6fbe51a522e93b3ee0a" + version "2.2.2" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" dependencies: is-directory "^0.3.1" js-yaml "^3.4.3" @@ -1860,21 +1877,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -create-react-class@^15.5.3: - version "15.5.3" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.5.3.tgz#fb0f7cae79339e9a179e194ef466efa3923820fe" +create-react-class@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" object-assign "^4.1.1" -cross-spawn-async@^2.1.1: - version "2.2.5" - resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" - dependencies: - lru-cache "^4.0.0" - which "^1.2.8" - cross-spawn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" @@ -1882,6 +1892,14 @@ cross-spawn@^3.0.0: lru-cache "^4.0.1" which "^1.2.9" +cross-spawn@^5.0.1: + 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" @@ -1893,8 +1911,8 @@ crypto-browserify@1.0.9: resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" crypto-browserify@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" + version "3.11.1" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f" dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -1934,14 +1952,6 @@ css-loader@^0.28.4: postcss-value-parser "^3.3.0" source-list-map "^0.1.7" -css-selector-tokenizer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^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" @@ -2042,24 +2052,12 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@2.6.7, debug@^2.6.3: - version "2.6.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" +debug@2, debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" -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.1.1, debug@^2.2.0: - version "2.6.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" - dependencies: - ms "0.7.3" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2068,9 +2066,9 @@ 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" -decimal.js@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-7.1.1.tgz#1adcad7d70d7a91c426d756f1eb6566c3be6cbcf" +decimal.js@7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-7.2.3.tgz#6434c3b8a8c375780062fc633d0d2bbdb264cc78" decompress-tar@^3.0.0: version "3.1.0" @@ -2156,6 +2154,13 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +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" @@ -2180,9 +2185,9 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.0, depd@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" +depd@1.1.1, depd@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" des.js@^1.0.0: version "1.0.0" @@ -2209,8 +2214,8 @@ dezalgo@^1.0.0, dezalgo@^1.0.1, dezalgo@^1.0.2, dezalgo@~1.0.3: wrappy "1" diff@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + version "3.3.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" diffie-hellman@^5.0.0: version "5.0.2" @@ -2255,8 +2260,8 @@ dot-prop@^2.0.0: is-obj "^1.0.0" dot-prop@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: is-obj "^1.0.0" @@ -2268,10 +2273,6 @@ dotenv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" -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" - download@^4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac" @@ -2319,10 +2320,10 @@ duplexer@^0.1.1, duplexer@~0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" duplexify@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" + version "3.5.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" dependencies: - end-of-stream "1.0.0" + end-of-stream "^1.0.0" inherits "^2.0.1" readable-stream "^2.0.0" stream-shift "^1.0.0" @@ -2369,12 +2370,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" ejs@^2.5.6: - version "2.5.6" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88" + version "2.5.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.11: - version "1.3.13" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.17: + version "1.3.17" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.17.tgz#41c13457cc7166c5c15e767ae61d86a8cacdee5d" elliptic@^6.0.0: version "6.4.0" @@ -2389,8 +2390,8 @@ elliptic@^6.0.0: minimalistic-crypto-utils "^1.0.0" emoji-regex@^6.1.0: - version "6.4.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.4.2.tgz#a30b6fee353d406d96cfb9fa765bdc82897eff6e" + version "6.5.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" emojis-list@^2.0.0: version "2.1.0" @@ -2406,22 +2407,22 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@1.0.0, end-of-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" +end-of-stream@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" dependencies: - once "~1.3.0" + once "^1.4.0" -enhanced-resolve@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" +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.5" + tapable "^0.2.7" -"errno@>=0.1.1 <0.2.0-0", errno@^0.1.1, errno@^0.1.3: +errno@^0.1.1, errno@^0.1.3, errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -2447,13 +2448,31 @@ error@^4.2.0: string-template "~0.2.0" xtend "~4.0.0" +es-abstract@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + es5-ext@0.8.x: version "0.8.2" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.16" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.16.tgz#1ef1b04f3d09db6a5d630226d62202f2e425e45a" + version "0.10.26" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.26.tgz#51b2128a531b70c4f6764093a73cbebb82186372" dependencies: es6-iterator "2" es6-symbol "~3.1" @@ -2536,8 +2555,10 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-airbnb-base@^11.1.0: - version "11.1.3" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.3.tgz#0e8db71514fa36b977fbcf977c01edcf863e0cf0" + version "11.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.1.tgz#c0ab108c9beed503cb999e4c60f4ef98eda0ed30" + dependencies: + eslint-restricted-globals "^0.1.1" eslint-config-airbnb@^14.1.0: version "14.1.0" @@ -2545,35 +2566,34 @@ eslint-config-airbnb@^14.1.0: dependencies: eslint-config-airbnb-base "^11.1.0" -eslint-import-resolver-node@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" +eslint-import-resolver-node@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" dependencies: - debug "^2.2.0" - object-assign "^4.0.1" - resolve "^1.1.6" + debug "^2.6.8" + resolve "^1.2.0" -eslint-module-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" +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.2.0" + debug "^2.6.8" pkg-dir "^1.0.0" eslint-plugin-babel@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.1.tgz#ef285c87039b67beb3bbd227f5b0eed4fb376b87" + version "4.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e" eslint-plugin-import@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.3.0.tgz#37c801e0ada0e296cbdf20c3f393acb5b52af36b" + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.7.0.tgz#21de33380b9efb55f5ef6d2e210ec0e07e7fa69f" dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" - debug "^2.2.0" + debug "^2.6.8" doctrine "1.5.0" - eslint-import-resolver-node "^0.2.0" - eslint-module-utils "^2.0.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" @@ -2591,12 +2611,16 @@ eslint-plugin-jsx-a11y@^4.0.0: object-assign "^4.0.1" eslint-plugin-react@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.1.tgz#e78107e1e559c6e2b17786bb67c2e2a010ad0d2f" + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.2.0.tgz#25c77a4ec307e3eebb248ea3350960e372ab6406" dependencies: doctrine "^2.0.0" has "^1.0.1" - jsx-ast-utils "^1.3.4" + jsx-ast-utils "^2.0.0" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" eslint@^3.19.0: version "3.19.0" @@ -2639,10 +2663,10 @@ eslint@^3.19.0: user-home "^2.0.0" espree@^3.4.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" + version "3.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" dependencies: - acorn "^5.0.1" + acorn "^5.1.1" acorn-jsx "^3.0.0" esprima-fb@~12001.1.0-dev-harmony-fb: @@ -2653,9 +2677,9 @@ esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" esquery@^1.0.0: version "1.0.0" @@ -2664,24 +2688,20 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" dependencies: - estraverse "~4.1.0" + estraverse "^4.1.0" object-assign "^4.0.1" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: +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" -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" - esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -2709,7 +2729,7 @@ event-stream@3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -events@^1.0.0: +events@^1.0.0, events@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" @@ -2729,15 +2749,16 @@ exec-sh@^0.2.0: dependencies: merge "^1.1.3" -execa@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" dependencies: - cross-spawn-async "^2.1.1" + cross-spawn "^5.0.1" + get-stream "^3.0.0" is-stream "^1.1.0" - npm-run-path "^1.0.0" - object-assign "^4.0.1" - path-key "^1.0.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" strip-eof "^1.0.0" exit-hook@^1.0.0: @@ -2761,8 +2782,8 @@ expand-range@^1.8.1: fill-range "^2.1.0" express@^4.15.2, express@^4.15.3: - version "4.15.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662" + version "4.15.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.4.tgz#032e2253489cf8fce02666beca3d11ed7a2daed1" dependencies: accepts "~1.3.3" array-flatten "1.1.1" @@ -2770,23 +2791,23 @@ express@^4.15.2, express@^4.15.3: content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" - debug "2.6.7" - depd "~1.1.0" + debug "2.6.8" + depd "~1.1.1" encodeurl "~1.0.1" escape-html "~1.0.3" etag "~1.8.0" - finalhandler "~1.0.3" + finalhandler "~1.0.4" fresh "0.5.0" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" parseurl "~1.3.1" path-to-regexp "0.1.7" - proxy-addr "~1.1.4" - qs "6.4.0" + proxy-addr "~1.1.5" + qs "6.5.0" range-parser "~1.2.0" - send "0.15.3" - serve-static "1.12.3" + send "0.15.4" + serve-static "1.12.4" setprototypeof "1.0.3" statuses "~1.3.1" type-is "~1.6.15" @@ -2810,13 +2831,13 @@ extglob@^0.3.1: is-extglob "^1.0.0" extract-text-webpack-plugin@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.0.tgz#69315b885f876dbf96d3819f6a9f1cca7aebf159" + version "2.1.2" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz#756ef4efa8155c3681833fbc34da53b941746d6c" dependencies: - ajv "^4.11.2" async "^2.1.2" loader-utils "^1.0.2" - webpack-sources "^0.1.0" + schema-utils "^0.3.0" + webpack-sources "^1.0.1" extract-zip@~1.5.0: version "1.5.0" @@ -2827,9 +2848,9 @@ extract-zip@~1.5.0: mkdirp "0.5.0" yauzl "2.4.1" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" fancy-log@^1.1.0: version "1.3.0" @@ -2838,6 +2859,10 @@ fancy-log@^1.1.0: chalk "^1.1.1" time-stamp "^1.0.0" +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-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -2859,8 +2884,8 @@ fb-watchman@^2.0.0: bser "^2.0.0" fbjs@^0.8.9: - version "0.8.12" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" + version "0.8.14" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2937,11 +2962,11 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" +finalhandler@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.4.tgz#18574f2e7c4b98b8ae3b230c21f201f31bdb3fb7" dependencies: - debug "2.6.7" + debug "2.6.8" encodeurl "~1.0.1" escape-html "~1.0.3" on-finished "~2.3.0" @@ -2949,13 +2974,13 @@ finalhandler@~1.0.3: statuses "~1.3.1" unpipe "~1.0.0" -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" +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" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" + make-dir "^1.0.0" + pkg-dir "^2.0.0" find-up@^1.0.0: version "1.1.2" @@ -2995,19 +3020,29 @@ 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.3, for-own@^0.1.4: +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@^2.1.1, form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" +form-data@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.2.0.tgz#9a5e3b9295f980b2623cf64fa238b14cebca707b" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" @@ -3021,6 +3056,14 @@ form-data@~1.0.0-rc4: combined-stream "^1.0.5" mime-types "^2.1.11" +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" + formidable@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9" @@ -3029,9 +3072,9 @@ forwarded@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" -fraction.js@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.0.tgz#73974e2f8b51ef709536d624cc90782e2bb61274" +fraction.js@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.2.tgz#0eae896626f334b1bde763371347a83b5575d7f0" fresh@0.5.0: version "0.5.0" @@ -3085,11 +3128,11 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" - node-pre-gyp "^0.6.29" + node-pre-gyp "^0.6.36" fstream-ignore@^1.0.0, fstream-ignore@^1.0.5: version "1.0.5" @@ -3115,7 +3158,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2: +function-bind@^1.0.2, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" @@ -3234,13 +3277,13 @@ glob@^5.0.15, glob@^5.0.3: path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@~7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + 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.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -3255,7 +3298,7 @@ glob@~7.0.6: once "^1.3.0" path-is-absolute "^1.0.0" -global@^4.3.0: +global@^4.3.0, global@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" dependencies: @@ -3263,8 +3306,8 @@ global@^4.3.0: process "~0.5.1" globals@^9.0.0, globals@^9.14.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" @@ -3278,11 +3321,11 @@ globby@^5.0.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f" + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" dependencies: glob "~7.1.1" - lodash "~4.16.4" + lodash "~4.17.4" minimatch "~3.0.2" glogg@^1.0.0: @@ -3436,8 +3479,8 @@ gzip-size@^3.0.0: duplexer "^0.1.1" handlebars@^4.0.1, handlebars@^4.0.3: - version "4.0.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.8.tgz#22b875cd3f0e6cbea30314f144e82bc7a72ff420" + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -3479,6 +3522,10 @@ 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@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" @@ -3502,10 +3549,11 @@ hash-base@^2.0.0: inherits "^2.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" dependencies: - inherits "^2.0.1" + inherits "^2.0.3" + minimalistic-assert "^1.0.0" hasha@~2.2.0: version "2.2.0" @@ -3547,9 +3595,9 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoist-non-react-statics@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" +hoist-non-react-statics@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.2.2.tgz#c0eca5a7d5a28c5ada3107eb763b01da6bfa81fb" home-or-tmp@^2.0.0: version "2.0.0" @@ -3577,12 +3625,12 @@ html-entities@^1.2.0: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" html-minifier@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7" + version "3.5.3" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.3.tgz#4a275e3b1a16639abb79b4c11191ff0d0fcf1ab9" dependencies: camel-case "3.0.x" clean-css "4.1.x" - commander "2.9.x" + commander "2.11.x" he "1.1.x" ncname "1.0.x" param-case "2.1.x" @@ -3593,11 +3641,11 @@ html-truncate@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/html-truncate/-/html-truncate-1.2.2.tgz#db2e331dcf1cba0bd432a507d16e988609f2575f" -http-errors@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" +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.0" + depd "1.1.1" inherits "2.0.3" setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" @@ -3633,9 +3681,9 @@ iconv-lite@0.4.13, iconv-lite@~0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -icss-replace-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.0.2.tgz#cb0b6054eb3af6edc9ab1d62d01933e2d4c8bfa5" +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" @@ -3652,12 +3700,16 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" ignore@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.0.tgz#3812d22cbe9125f2c2b4915755a1b8abd745a001" + version "3.3.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" image-size@~0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.3.tgz#5cbe9fafc8436386ceb7e9e3a9d90c5b71b70ad9" + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" imports-loader@^0.7.1: version "0.7.1" @@ -3666,7 +3718,7 @@ imports-loader@^0.7.1: loader-utils "^1.0.2" source-map "^0.5.6" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -3752,9 +3804,9 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ipaddr.js@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" +ipaddr.js@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.4.0.tgz#296aca878a821816e5b85d0a285a99bcff4582f0" is-absolute-url@^2.0.0: version "2.1.0" @@ -3790,19 +3842,27 @@ is-bzip2@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + is-ci@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: ci-info "^1.0.0" +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" @@ -3871,12 +3931,18 @@ is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" -is-number@^2.0.2, is-number@^2.1.0: +is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -3902,10 +3968,10 @@ is-plain-obj@^1.0.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.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.1.tgz#4d7ca539bc9db9b737b8acb612f2318ef92f294f" + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" dependencies: - isobject "^1.0.0" + isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" @@ -3923,6 +3989,12 @@ is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" +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-relative@^0.1.0: version "0.1.3" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82" @@ -3947,6 +4019,10 @@ is-svg@^2.0.0: 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-tar@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d" @@ -3983,16 +4059,16 @@ isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -isobject@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a" - 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" @@ -4005,14 +4081,14 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.1: - version "1.1.9" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" + version "1.1.11" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.11.tgz#fcc0b461e2b3bda71e305155138238768257d9de" dependencies: async "^2.1.4" fileset "^2.0.2" istanbul-lib-coverage "^1.1.1" istanbul-lib-hook "^1.0.7" - istanbul-lib-instrument "^1.7.2" + istanbul-lib-instrument "^1.7.4" istanbul-lib-report "^1.1.1" istanbul-lib-source-maps "^1.2.1" istanbul-reports "^1.1.1" @@ -4029,11 +4105,7 @@ istanbul-instrumenter-loader@^2.0.0: loader-utils "^0.2.16" object-assign "^4.1.0" -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" - -istanbul-lib-coverage@^1.1.1: +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" @@ -4043,27 +4115,15 @@ istanbul-lib-hook@^1.0.7: dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.1.3, istanbul-lib-instrument@^1.4.2: - version "1.7.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" +istanbul-lib-instrument@^1.1.3, istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2, istanbul-lib-instrument@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz#e9fd920e4767f3d19edc765e2d6b3f5ccbd0eea8" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.1.0" - semver "^5.3.0" - -istanbul-lib-instrument@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.13.0" + babylon "^6.17.4" istanbul-lib-coverage "^1.1.1" semver "^5.3.0" @@ -4111,22 +4171,26 @@ istanbul@0.4.5: which "^1.1.1" wordwrap "^1.0.0" -jasmine-core@^2.6.2, jasmine-core@~2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.6.2.tgz#74ea1f7cf428691af201107d631234027a09daab" +jasmine-core@^2.6.2, jasmine-core@~2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.7.0.tgz#50ff8c4f92d8ef5c0b2c1b846dd263ed85152091" jasmine@^2.5.3, jasmine@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.6.0.tgz#6b22e70883e8e589d456346153b4d206ddbe217f" + version "2.7.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.7.0.tgz#5cf0bb4e594b4600bb4235560366212ac5aea1b2" dependencies: exit "^0.1.2" glob "^7.0.6" - jasmine-core "~2.6.0" + jasmine-core "~2.7.0" jasminewd2@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.1.0.tgz#da595275d1ae631de736ac0a7c7d85c9f73ef652" +javascript-natural-sort@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + jest-changed-files@^20.0.3: version "20.0.3" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" @@ -4210,8 +4274,8 @@ jest-environment-node@^20.0.3: jest-util "^20.0.3" jest-haste-map@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" + version "20.0.5" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" @@ -4346,26 +4410,20 @@ jmespath@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - js-base64@^2.1.8, js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.7.0: - version "3.8.4" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + version "3.9.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" dependencies: argparse "^1.0.7" - esprima "^3.1.1" + esprima "^4.0.0" js-yaml@~3.7.0: version "3.7.0" @@ -4419,8 +4477,8 @@ json-diff@^0.3.1: dreamopt "~0.6.0" json-loader@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" json-parse-helpfulerror@^1.0.2: version "1.0.3" @@ -4428,6 +4486,10 @@ json-parse-helpfulerror@^1.0.2: dependencies: jju "^1.1.0" +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" @@ -4453,8 +4515,8 @@ jsonfile@^2.1.0: graceful-fs "^4.1.6" jsonfile@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" optionalDependencies: graceful-fs "^4.1.6" @@ -4467,18 +4529,24 @@ jsonpointer@^4.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" - extsprintf "1.0.2" + extsprintf "1.3.0" json-schema "0.2.3" - verror "1.3.6" + verror "1.10.0" -jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: +jsx-ast-utils@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" +jsx-ast-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.0.tgz#ec06a3d60cf307e5e119dac7bad81e89f096f0f8" + 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" @@ -4506,9 +4574,15 @@ kind-of@^2.0.1: dependencies: is-buffer "^1.0.2" -kind-of@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" +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" @@ -4532,10 +4606,6 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-req@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" - lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" @@ -4549,8 +4619,8 @@ lcid@^1.0.0: invert-kv "^1.0.0" less-loader@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.4.tgz#b4a8c43843e65c67d2ea2eb1465b5c4233d5006a" + version "4.0.5" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.5.tgz#ae155a7406cac6acd293d785587fcff0f478c4dd" dependencies: clone "^2.1.1" loader-utils "^1.1.0" @@ -4612,7 +4682,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.x: +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -4915,7 +4985,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4923,10 +4993,6 @@ lodash@~2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" -lodash@~4.16.4: - version "4.16.6" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" - log-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" @@ -4959,7 +5025,14 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" -lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@~4.0.1: +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" + +lru-cache@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" dependencies: @@ -4999,14 +5072,15 @@ math-expression-evaluator@^1.2.14: resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" mathjs@^3.11.5: - version "3.12.3" - resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.12.3.tgz#25c61ce3b5514b9c62f93141ac61d61be88486d6" + version "3.16.0" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.16.0.tgz#0e659bac855693e8f539cd16e110f2cc12dc7edd" dependencies: - complex.js "2.0.1" - decimal.js "7.1.1" - fraction.js "4.0.0" + complex.js "2.0.4" + decimal.js "7.2.3" + fraction.js "4.0.2" + javascript-natural-sort "0.7.1" seed-random "2.2.0" - tiny-emitter "1.0.2" + tiny-emitter "2.0.0" typed-function "0.10.5" media-typer@0.3.0: @@ -5084,23 +5158,23 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" +mime-db@~1.29.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + version "2.1.16" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" dependencies: - mime-db "~1.27.0" + mime-db "~1.29.0" mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" mime@1.3.x, mime@^1.2.11, mime@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.5.tgz#dc1ee70b80fee4999cb0775c9f94beefc9a779a3" + version "1.3.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" min-document@^2.19.0: version "2.19.0" @@ -5116,7 +5190,7 @@ 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.2, minimatch@~3.0.3: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2, minimatch@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -5153,14 +5227,6 @@ mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkd dependencies: minimist "0.0.8" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -ms@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -5210,8 +5276,8 @@ no-case@^2.2.0: lower-case "^1.1.1" node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + version "1.7.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -5221,8 +5287,8 @@ node-forge@^0.7.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" node-gyp@^3.3.1, node-gyp@~3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.1.tgz#19561067ff185464aded478212681f47fd578cbc" + 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" @@ -5279,9 +5345,9 @@ node-notifier@^5.0.2: shellwords "^0.1.0" which "^1.2.12" -node-pre-gyp@^0.6.29: - version "0.6.34" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" +node-pre-gyp@^0.6.36: + version "0.6.36" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" dependencies: mkdirp "^0.5.1" nopt "^4.0.1" @@ -5325,8 +5391,8 @@ node-uuid@~1.4.7: resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" node-watch@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.4.tgz#bdad41b23d23444e895c797d73ad5d49e3833309" + version "0.5.5" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.5.5.tgz#34865ba8bc6861ab086acdcc3403e40ed55c3274" "nopt@2 || 3", nopt@3.x, nopt@~3.0.6: version "3.0.6" @@ -5351,7 +5417,16 @@ normalize-git-url@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.3.5: +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, "normalize-package-data@~1.0.1 || ^2.0.0": + 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-package-data@~2.3.5: version "2.3.8" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" dependencies: @@ -5360,7 +5435,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1: +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: @@ -5413,11 +5488,11 @@ npm-registry-client@~7.2.1: optionalDependencies: npmlog "~2.0.0 || ~3.1.0" -npm-run-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" +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 "^1.0.0" + path-key "^2.0.0" npm-shrinkwrap@6.0.2: version "6.0.2" @@ -5518,8 +5593,8 @@ npm@^2.15.10: write-file-atomic "~1.1.4" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" + 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" @@ -5547,8 +5622,8 @@ number-is-nan@^1.0.0: 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.0" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.0.tgz#b4389362170e7ef9798c3c7716d80ebc0106fccf" + version "1.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" oauth-sign@~0.8.1: version "0.8.2" @@ -5566,6 +5641,10 @@ object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@ version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" @@ -5589,12 +5668,6 @@ once@1.x, once@^1.3.0, once@^1.3.3, once@^1.4.0, once@~1.4.0: dependencies: wrappy "1" -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" @@ -5657,6 +5730,10 @@ osenv@0, osenv@^0.1.4, osenv@~0.1.3: 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.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -5753,9 +5830,9 @@ path-is-inside@^1.0.1, path-is-inside@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" +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" @@ -5786,8 +5863,8 @@ pause-stream@0.0.11: through "~2.3" pbkdf2@^3.0.3: - version "3.0.12" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" + version "3.0.13" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.13.tgz#c37d295531e786b1da3e3eadc840426accb0ae25" dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -5821,6 +5898,10 @@ pify@^2.0.0, pify@^2.3.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" @@ -5837,6 +5918,12 @@ pkg-dir@^1.0.0: 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" @@ -5902,7 +5989,7 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" -postcss-load-config@^1.2.0, postcss-load-config@^1.x: +postcss-load-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" dependencies: @@ -5926,13 +6013,13 @@ postcss-load-plugins@^2.3.0: object-assign "^4.1.0" postcss-loader@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.5.tgz#c19d3e8b83eb1ac316f5621ef4c0ef5b3d1b8b3a" + version "2.0.6" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.6.tgz#8c7e0055a3df1889abc6bad52dd45b2f41bbc6fc" dependencies: - loader-utils "^1.x" - postcss "^6.x" - postcss-load-config "^1.x" - schema-utils "^0.x" + loader-utils "^1.1.0" + postcss "^6.0.2" + postcss-load-config "^1.2.0" + schema-utils "^0.3.0" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -5996,31 +6083,31 @@ postcss-minify-selectors@^2.0.4: postcss-selector-parser "^2.0.0" postcss-modules-extract-imports@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.0.1.tgz#8fb3fef9a6dd0420d3f6d4353cf1ff73f2b2a341" + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" dependencies: - postcss "^5.0.4" + postcss "^6.0.1" postcss-modules-local-by-default@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.1.1.tgz#29a10673fa37d19251265ca2ba3150d9040eb4ce" + 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.6.0" - postcss "^5.0.4" + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" postcss-modules-scope@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.0.2.tgz#ff977395e5e06202d7362290b88b1e8cd049de29" + 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.6.0" - postcss "^5.0.4" + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" postcss-modules-values@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.2.2.tgz#f0e7d476fe1ed88c5e4c7f97533a3e772ad94ca1" + 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.0.2" - postcss "^5.0.14" + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" postcss-normalize-charset@^1.1.0: version "1.1.1" @@ -6073,11 +6160,11 @@ postcss-sass@^0.1.0: mathjs "^3.11.5" postcss "^5.2.6" -postcss-scss@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.0.tgz#4957013097973dfd5bd9b1ad8a6dc13456a5d1ba" +postcss-scss@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.2.tgz#ff45cf3354b879ee89a4eb68680f46ac9bb14f94" dependencies: - postcss "^6.0.1" + postcss "^6.0.3" postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.3" @@ -6088,15 +6175,15 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: uniq "^1.0.1" postcss-smart-import@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.7.4.tgz#50cfb3d9a49b70a61f911451bc24d841f8dbf200" + version "0.7.5" + resolved "https://registry.yarnpkg.com/postcss-smart-import/-/postcss-smart-import-0.7.5.tgz#df9a9c6dd60d916e5e0670d1c57d03af5d3dcc31" dependencies: babel-runtime "^6.23.0" lodash "^4.17.4" object-assign "^4.1.1" - postcss "^6.0.1" + postcss "^6.0.6" postcss-sass "^0.1.0" - postcss-scss "^1.0.0" + postcss-scss "^1.0.2" postcss-value-parser "^3.3.0" promise-each "^2.2.0" read-cache "^1.0.0" @@ -6141,13 +6228,13 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.x: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.2, postcss@^6.0.3, postcss@^6.0.6: + version "6.0.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.8.tgz#89067a9ce8b11f8a84cbc5117efc30419a0857b3" dependencies: - chalk "^1.1.3" + chalk "^2.0.1" source-map "^0.5.6" - supports-color "^3.2.3" + supports-color "^4.2.0" prelude-ls@~1.1.2: version "1.1.2" @@ -6199,8 +6286,8 @@ promise-each@^2.2.0: any-promise "^0.1.0" promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" @@ -6241,18 +6328,18 @@ protractor@^5.1.2: webdriver-js-extender "^1.0.0" webdriver-manager "^12.0.6" -proxy-addr@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" +proxy-addr@~1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.5.tgz#71c0ee3b102de3f202f3b64f608d173fcba1a918" dependencies: forwarded "~0.1.0" - ipaddr.js "1.3.0" + ipaddr.js "1.4.0" prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -pseudomap@^1.0.1: +pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -6291,16 +6378,16 @@ punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" pure-color@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.2.0.tgz#702d2f2819dd545b1fde5116fca5f0c2dad2d18d" + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" q@1.4.1, q@^1.1.2, q@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qs@6.4.0, qs@^6.1.0, qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +qs@6.5.0, qs@^6.1.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" qs@~6.2.0: version "6.2.3" @@ -6310,6 +6397,10 @@ 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: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -6326,15 +6417,17 @@ querystring@0.2.0, querystring@^0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" randombytes@^2.0.0, randombytes@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" + version "2.0.5" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" range-parser@^1.0.3, range-parser@~1.2.0: version "1.2.0" @@ -6359,8 +6452,8 @@ react-base16-styling@^0.5.1: pure-color "^1.2.0" react-deep-force-update@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.0.1.tgz#4f7f6c12c3e7de42f345992a3c518236fa1ecad3" + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.0.tgz#1c5f36ea96bcbf411605ec063f36c568ea4df86c" react-dock@^0.2.4: version "0.2.4" @@ -6399,11 +6492,10 @@ react-pure-render@^1.0.2: resolved "https://registry.yarnpkg.com/react-pure-render/-/react-pure-render-1.0.2.tgz#9d8a928c7f2c37513c2d064e57b3e3c356e9fabb" react-redux@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.5.tgz#f8e8c7b239422576e52d6b7db06439469be9846a" + version "5.0.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946" dependencies: - create-react-class "^15.5.3" - hoist-non-react-statics "^1.0.3" + hoist-non-react-statics "^2.2.1" invariant "^2.0.0" lodash "^4.2.0" lodash-es "^4.2.0" @@ -6411,13 +6503,14 @@ react-redux@^5.0.5: prop-types "^15.5.10" react@^15.5.4: - version "15.5.4" - resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" + version "15.6.1" + resolved "https://registry.yarnpkg.com/react/-/react-15.6.1.tgz#baa8434ec6780bde997cdc380b79cd33b96393df" 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.7" + prop-types "^15.5.10" read-all-stream@^3.0.0: version "3.1.0" @@ -6446,8 +6539,8 @@ read-installed@~4.0.3: graceful-fs "^4.1.2" "read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@~2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.5.tgz#f93a64e641529df68a08c64de46389e8a3f88845" + version "2.0.10" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.10.tgz#dc0229f6dde6b4b705b39e25b2d970ebe95685ae" dependencies: glob "^7.1.1" json-parse-helpfulerror "^1.0.2" @@ -6492,15 +6585,15 @@ read@1, read@~1.0.1, read@~1.0.7: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, 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.2.6: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: - buffer-shims "~1.0.0" core-util-is "~1.0.0" - inherits "~2.0.1" + inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" - string_decoder "~1.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" util-deprecate "~1.0.1" "readable-stream@>=1.0.33-1 <1.1.0-0": @@ -6584,12 +6677,13 @@ rechoir@^0.6.2: resolve "^1.1.6" redbox-react@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.3.6.tgz#70314c57c066257eb70b0a24dc794b5cef4f1c4e" + 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" @@ -6660,13 +6754,13 @@ redux-devtools@^3.4.0: redux-devtools-instrument "^1.0.1" redux@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" + 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.2" + symbol-observable "^1.0.3" regenerate@^1.2.1: version "1.3.2" @@ -6735,8 +6829,8 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" repeat-element@^1.1.2: version "1.1.2" @@ -6867,9 +6961,9 @@ resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.3.2, resolve@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" +resolve@^1.1.6, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: path-parse "^1.0.5" @@ -6963,7 +7057,11 @@ s3-website@^3.1.0: object-assign "^4.1.0" s3-diff "^1.1.0" -safe-buffer@^5.0.1, safe-buffer@~5.0.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-buffer@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -6984,23 +7082,23 @@ sane@~1.6.0: watch "~0.10.0" sass-graph@^2.1.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.2.tgz#f4d6c95b546ea2a09d14176d0fc1a07ee2b48354" + 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.1" - yargs "^6.6.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" sass-loader@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.5.tgz#a847910f36442aa56c5985879d54eb519e24a328" + 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.2.4" + clone-deep "^0.3.0" loader-utils "^1.0.1" lodash.tail "^4.1.1" - pify "^2.3.0" + pify "^3.0.0" saucelabs@~1.3.0: version "1.3.0" @@ -7016,15 +7114,15 @@ sax@1.2.1, sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" -schema-utils@^0.3.0, schema-utils@^0.x: +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.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.1.tgz#07c0cc577bb7ab4d08fd900185adbf4bc844141d" +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" @@ -7064,9 +7162,9 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" semver@^4.0.3: version "4.3.6" @@ -7080,32 +7178,36 @@ semver@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19" -send@0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.15.4: + version "0.15.4" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.4.tgz#985faa3e284b0273c793364a35c6737bd93905b9" dependencies: - debug "2.6.7" - depd "~1.1.0" + debug "2.6.8" + depd "~1.1.1" destroy "~1.0.4" encodeurl "~1.0.1" escape-html "~1.0.3" etag "~1.8.0" fresh "0.5.0" - http-errors "~1.6.1" + http-errors "~1.6.2" mime "1.3.4" ms "2.0.0" on-finished "~2.3.0" range-parser "~1.2.0" statuses "~1.3.1" -serve-static@1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2" +serve-static@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.4.tgz#9b6aa98eeb7253c4eedc4c1f6fdbca609901a961" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" parseurl "~1.3.1" - send "0.15.3" + send "0.15.4" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -7145,9 +7247,19 @@ shallow-clone@^0.1.2: 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.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -7204,9 +7316,9 @@ source-list-map@^0.1.7, 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-list-map@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" +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-map-support@^0.4.2, source-map-support@~0.4.0: version "0.4.15" @@ -7214,7 +7326,7 @@ source-map-support@^0.4.2, source-map-support@~0.4.0: dependencies: source-map "^0.5.6" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.6, source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" @@ -7230,6 +7342,12 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +sourcemapped-stacktrace@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.7.tgz#17e05374ff78b71a9d89ad3975a49f22725ba935" + dependencies: + source-map "0.5.6" + sparkles@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" @@ -7259,8 +7377,8 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -7269,7 +7387,6 @@ sshpk@^1.7.0: optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" jsbn "~0.1.0" tweetnacl "~0.14.0" @@ -7312,8 +7429,8 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-http@^2.3.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.1.tgz#546a51741ad5a6b07e9e31b0b10441a917df528a" + version "2.7.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -7352,21 +7469,21 @@ string-width@^1.0.1, string-width@^1.0.2: strip-ansi "^3.0.0" string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + 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 "^3.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: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: - buffer-shims "~1.0.0" + safe-buffer "~5.1.0" stringstream@~0.0.4: version "0.0.5" @@ -7378,6 +7495,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1, strip-ansi@~3.0.1: 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-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" @@ -7454,8 +7577,8 @@ sum-up@^1.0.1: chalk "^1.0.0" superagent-mock@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/superagent-mock/-/superagent-mock-3.4.0.tgz#8c872abb2604531ffdf33cc3da7b83b736a5c490" + version "3.5.0" + resolved "https://registry.yarnpkg.com/superagent-mock/-/superagent-mock-3.5.0.tgz#ab6cefa4f18dc2b9d22bf5df4ad61d2c0ca5b7a9" superagent@^3.5.0: version "3.5.2" @@ -7482,6 +7605,12 @@ supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" +supports-color@^4.0.0, supports-color@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" + dependencies: + has-flag "^2.0.0" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -7494,7 +7623,7 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -symbol-observable@^1.0.2: +symbol-observable@^1.0.2, symbol-observable@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" @@ -7513,9 +7642,9 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" -tapable@^0.2.5, tapable@~0.2.5: - version "0.2.6" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" +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.0" @@ -7547,11 +7676,11 @@ tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: fstream "^1.0.2" inherits "2" -term-size@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" dependencies: - execa "^0.4.0" + execa "^0.7.0" test-exclude@^4.1.1: version "4.1.1" @@ -7568,10 +7697,8 @@ text-table@~0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" throat@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.1.0.tgz#ef22d8855963b3fdc626d043508f24c4cdf7d3c3" - dependencies: - double-ended-queue "^2.1.0-0" + version "3.2.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" throttleit@^1.0.0: version "1.0.0" @@ -7603,8 +7730,12 @@ through@2, through@^2.3.6, through@~2.3, through@~2.3.1: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" time-stamp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +time-stamp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" timed-out@^3.0.0: version "3.1.3" @@ -7615,14 +7746,15 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" timers-browserify@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + version "2.0.3" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.3.tgz#41fd0bdc926a5feedc33a17a8e1f7d491925f7fc" dependencies: + global "^4.3.2" setimmediate "^1.0.4" -tiny-emitter@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-1.0.2.tgz#8e49470d3f55f89e247210368a6bb9fb51aa1601" +tiny-emitter@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.0.tgz#bad327adb1804b42a231afa741532bd884cd09ad" tmp@0.0.24: version "0.0.24" @@ -7720,19 +7852,19 @@ typedarray@^0.0.6, typedarray@~0.0.5: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + version "0.7.14" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca" uglify-js@3.0.x: - version "3.0.15" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.15.tgz#aacb323a846b234602270dead8a32441a8806f42" + version "3.0.27" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034" dependencies: - commander "~2.9.0" + commander "~2.11.0" source-map "~0.5.1" uglify-js@^2.6, uglify-js@^2.8.27: - version "2.8.28" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.28.tgz#e335032df9bb20dcb918f164589d5af47f38834a" + 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" @@ -7787,8 +7919,8 @@ unique-string@^1.0.0: crypto-random-string "^1.0.0" universalify@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" unpipe@~1.0.0: version "1.0.0" @@ -7803,15 +7935,15 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" update-notifier@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" + version "2.2.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" dependencies: boxen "^1.0.0" chalk "^1.0.0" configstore "^3.0.0" + import-lazy "^2.1.0" is-npm "^1.0.0" latest-version "^3.0.0" - lazy-req "^2.0.0" semver-diff "^2.0.0" xdg-basedir "^3.0.0" @@ -7828,8 +7960,8 @@ url-join@^2.0.2: resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.2.tgz#c072756967ad24b8b59e5741551caac78f50b8b7" url-loader@^0.5.8: - version "0.5.8" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.8.tgz#b9183b1801e0f847718673673040bc9dc1c715c5" + 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" @@ -7878,7 +8010,7 @@ utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" -uuid@3.0.1, uuid@^3.0.0: +uuid@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" @@ -7886,6 +8018,10 @@ uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" +uuid@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" @@ -7917,11 +8053,13 @@ vendors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" vinyl-assign@^1.0.1: version "1.2.1" @@ -7998,11 +8136,11 @@ watch@~0.10.0: resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" watchpack@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" + version "1.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" dependencies: async "^2.1.2" - chokidar "^1.4.3" + chokidar "^1.7.0" graceful-fs "^4.1.2" wcwidth@^1.0.0: @@ -8043,10 +8181,10 @@ webidl-conversions@^4.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" webpack-bundle-analyzer@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.8.2.tgz#8b6240c29a9d63bc72f09d920fb050adbcce9fe8" + version "2.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.9.0.tgz#b58bc34cc30b27ffdbaf3d00bf27aba6fa29c6e3" dependencies: - acorn "^5.0.3" + acorn "^5.1.1" chalk "^1.1.3" commander "^2.9.0" ejs "^2.5.6" @@ -8066,47 +8204,41 @@ webpack-core@^0.6.9: source-map "~0.4.1" webpack-dev-middleware@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz#2e252ce1dfb020dbda1ccb37df26f30ab014dbd1" + version "1.12.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz#d34efefb2edda7e1d3b5dbe07289513219651709" dependencies: memory-fs "~0.4.1" mime "^1.3.4" path-is-absolute "^1.0.0" range-parser "^1.0.3" + time-stamp "^2.0.0" webpack-hot-middleware@^2.18.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.18.0.tgz#a16bb535b83a6ac94a78ac5ebce4f3059e8274d3" + version "2.18.2" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.18.2.tgz#84dee643f037c3d59c9de142548430371aa8d3b2" dependencies: ansi-html "0.0.7" html-entities "^1.2.0" querystring "^0.2.0" strip-ansi "^3.0.0" -webpack-sources@^0.1.0: - version "0.1.5" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750" - dependencies: - source-list-map "~0.1.7" - source-map "~0.5.3" - -webpack-sources@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" +webpack-sources@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" dependencies: - source-list-map "^1.1.1" + source-list-map "^2.0.0" source-map "~0.5.3" webpack@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.1.tgz#2e0457f0abb1ac5df3ab106c69c672f236785f07" + 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.0.0" + enhanced-resolve "^3.3.0" interpret "^1.0.0" json-loader "^0.5.4" json5 "^0.5.1" @@ -8120,7 +8252,7 @@ webpack@^2.6.1: tapable "~0.2.5" uglify-js "^2.8.27" watchpack "^1.3.1" - webpack-sources "^0.2.3" + webpack-sources "^1.0.1" yargs "^6.0.0" whatwg-encoding@^1.0.1: @@ -8148,7 +8280,13 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@1, which@^1.1.1, which@^1.2.12, which@^1.2.8, which@^1.2.9, which@~1.2.10, which@~1.2.11: +which@1, which@^1.1.1, which@^1.2.12, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +which@~1.2.10, which@~1.2.11: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: @@ -8183,11 +8321,11 @@ wordwrap@~0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" worker-farm@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + version "1.4.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.4.1.tgz#a438bc993a7a7d133bcb6547c95eca7cff4897d8" dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" + errno "^0.1.4" + xtend "^4.0.1" wrap-ansi@^2.0.0: version "2.1.0" @@ -8207,8 +8345,8 @@ wrappy@1, wrappy@~1.0.2: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" write-file-atomic@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.0.0.tgz#bb99a5440d0d31dd860a68da392bffeef66251a1" + version "2.1.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -8274,7 +8412,7 @@ xmlbuilder@4.2.1, xmlbuilder@>=1.0.0, xmlbuilder@^4.1.0: dependencies: lodash "^4.0.0" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -8288,7 +8426,7 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -yallist@^2.0.0: +yallist@^2.0.0, yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -8304,7 +8442,7 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" -yargs@^6.0.0, yargs@^6.6.0: +yargs@^6.0.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: @@ -8322,7 +8460,7 @@ yargs@^6.0.0, yargs@^6.6.0: y18n "^3.2.1" yargs-parser "^4.2.0" -yargs@^7.0.2: +yargs@^7.0.0, yargs@^7.0.2: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" dependencies: From 2c2d380c3c5a59fd929d8626ae5592a72e4733e3 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 9 Aug 2017 18:00:46 -0600 Subject: [PATCH 441/452] deploy without .com so we can use ssl --- .s3-website.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.s3-website.json b/.s3-website.json index b513b08..9fca73c 100644 --- a/.s3-website.json +++ b/.s3-website.json @@ -21,6 +21,6 @@ ], "enableCloudfront": false, "retries": 20, - "domain": "reactclientstarterapp.com", + "domain": "reactclientstarterapp", "configFile": ".s3-website.json" } \ No newline at end of file From 4e2b5bb6cb4bbf390587e9863a823c9c36c70038 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 9 Aug 2017 18:05:25 -0600 Subject: [PATCH 442/452] Add GET and HEAD to CORS (required to serve fonts) --- .s3-website.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.s3-website.json b/.s3-website.json index 9fca73c..71072e3 100644 --- a/.s3-website.json +++ b/.s3-website.json @@ -6,6 +6,8 @@ "corsConfiguration": [ { "AllowedMethods": [ + "GET", + "HEAD", "POST", "PUT", "DELETE" From d9dc4daccaddda2eed50ec31ba6a6fcbb66ee503 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 10 Aug 2017 16:26:53 -0600 Subject: [PATCH 443/452] don't ignore apps --- client/config/jest_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/config/jest_config.json b/client/config/jest_config.json index 061e166..730386d 100644 --- a/client/config/jest_config.json +++ b/client/config/jest_config.json @@ -10,7 +10,7 @@ ], "moduleFileExtensions": ["js", "jsx"], "moduleDirectories": ["node_modules"], - "testPathIgnorePatterns": ["/node_modules/", "/apps/"], + "testPathIgnorePatterns": ["/node_modules/"], "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js", "\\.(css|less|scss)$": "identity-obj-proxy" From 6da72cca4c8ab06fe9d2955e57ced47d297f3366 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 10 Aug 2017 17:08:07 -0600 Subject: [PATCH 444/452] Updates api specs --- client/libs/api/api.spec.js | 154 ++++++++++++---------- client/libs/store/configure_store.spec.js | 2 +- client/package.json | 2 +- client/yarn.lock | 58 +++++++- 4 files changed, 137 insertions(+), 79 deletions(-) diff --git a/client/libs/api/api.spec.js b/client/libs/api/api.spec.js index 4e309c0..1843571 100644 --- a/client/libs/api/api.spec.js +++ b/client/libs/api/api.spec.js @@ -1,134 +1,144 @@ -import superAgentMock from 'superagent-mock'; -import Request from 'superagent'; +import nock from 'nock'; import api from './api'; import Network from '../constants/network'; -import config from './superagent-mock-config'; -import Helper from '../../specs_support/helper'; +import Helper from '../../specs_support/helper'; describe('api', () => { - let superagentMock; - const url = '/api/test/12'; const jwt = 'jwt_token'; const apiUrl = 'http://www.example.com'; const csrf = 'csrf_value'; const params = {}; const body = {}; const headers = {}; + let expectedHeaders; beforeEach(() => { - superagentMock = superAgentMock(Request, config); + expectedHeaders = { + Accept: 'application/json', + }; }); afterEach(() => { - superagentMock.unset(); + nock.cleanAll(); }); it('calls Get', () => { - expect.assertions(3); - api.get( - url, - apiUrl, - jwt, - csrf, - params, - headers - ).then((data) => { - expect(data.body.status).toBe(200); - expect(data.body.contentType).toContain('application/json'); - expect(data.body.responseText).toContain('Starter App'); + const url = '/api/test/1'; + expectedHeaders.Authorization = `Bearer ${jwt}`; + expectedHeaders['X-CSRF-Token'] = csrf; + const nockRequest = Helper.mockRequest('get', apiUrl, url, expectedHeaders); + + api.get(url, apiUrl, jwt, csrf, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + expect(result.text).toEqual(Helper.testPayload()); }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls Get without a jwt', () => { - api.get( - url, - apiUrl, - null, - csrf, - params, - headers - ).then(data => expect(data.body.statusText).toContain('Unauthorized')); + const url = '/api/test/2'; + expectedHeaders['X-CSRF-Token'] = csrf; + const nockRequest = Helper.mockRequest('get', apiUrl, url, expectedHeaders); + + api.get(url, apiUrl, null, csrf, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls Get without a csrf', () => { - api.get( - url, - apiUrl, - jwt, - null, - params, - headers - ).then(result => - expect(result.body.status).toBe(401)); + const url = '/api/test/3'; + expectedHeaders.Authorization = `Bearer ${jwt}`; + const nockRequest = Helper.mockRequest('get', apiUrl, url, expectedHeaders); + + api.get(url, apiUrl, jwt, null, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls Get with a full url', () => { - const url = 'http://www.example.com/api/test/full'; - api.get(url, apiUrl, jwt, csrf, params, headers).then(data => - expect(data.body.status).toBe(200)); + const url = '/api/test/full'; + const nockRequest = Helper.mockRequest('get', apiUrl, url, expectedHeaders); + + api.get(`${apiUrl}${url}`, apiUrl, jwt, null, params, headers).then((result) => { + expect(result.statusCode).toBe(200); + }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls Post', () => { const url = '/api/test'; + const nockRequest = Helper.mockRequest('post', apiUrl, url, expectedHeaders); + api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { - expect(result.code).toBe(201); + expect(result.statusCode).toBe(200); }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls Post with a full url', () => { - const url = 'http://www.example.com/api/test/full'; - api.post(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { - expect(result.code).toBe(201); + const url = '/api/test/full'; + const nockRequest = Helper.mockRequest('post', apiUrl, url, expectedHeaders); + + api.post(`${apiUrl}${url}`, apiUrl, jwt, csrf, params, body, headers).then((result) => { + expect(result.statusCode).toBe(200); }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls Put', () => { + const url = '/api/test/4'; + const nockRequest = Helper.mockRequest('put', apiUrl, url, expectedHeaders); + api.put(url, apiUrl, jwt, csrf, params, body, headers).then((result) => { - expect(result.code).toBe(202); + expect(result.statusCode).toBe(200); + const request = result.req; + expect(request.method.toLowerCase()).toEqual(Network.PUT); }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls Delete', () => { + const url = '/api/test/5'; + const nockRequest = Helper.mockRequest('delete', apiUrl, url, expectedHeaders); + api.del(url, apiUrl, jwt, csrf, params, headers).then((result) => { - expect(result.code).toBe(204); + expect(result.statusCode).toBe(200); }); - }); - it('calls execRequest directly', () => { - api.execRequest(Network.GET, url, apiUrl, jwt, csrf, params, headers).then((result) => { - expect(result.body.status).toBe(200); - expect(result.body.responseText).toEqual(Helper.testPayload()); - }); + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls execRequest directly', () => { - api.execRequest(Network.GET, url, apiUrl, null, null).then((data) => { - expect(data.body.status).toBe(401); - expect(data.body.responseText).toBeUndefined(); + const url = '/api/test/6'; + const nockRequest = Helper.mockRequest('get', apiUrl, url, expectedHeaders); + + api.execRequest(Network.GET, url, apiUrl, null, null).then((result) => { + expect(result.statusCode).toBe(200); + expect(result.text).toEqual(Helper.testPayload()); }); + + expect(nockRequest.isDone()).toBeTruthy(); }); it('calls execRequest with optional timeout', () => { + const url = '/api/test/7'; const timeout = 1000; - api.execRequest(Network.GET, url, apiUrl, jwt, csrf, {}, {}, {}, timeout).then((result) => { - expect(result.body.status).toBe(200); - expect(result.body.responseText).toEqual(Helper.testPayload()); - }); - }); + const nockRequest = Helper.mockRequest('get', apiUrl, url, expectedHeaders); - describe('makeUrl', () => { - it('adds on the api url', () => { - const result = api.makeUrl('/api/stuff', 'http://www.example.com'); - expect(result).toBe('http://www.example.com/api/stuff'); - }); - it('does not add an extra slash on the api url', () => { - const result = api.makeUrl('/api/stuff', 'http://www.example.com/'); - expect(result).toBe('http://www.example.com/api/stuff'); - }); - it('adds on the api url even when the query has http', () => { - const result = api.makeUrl('/api/stuff?return=https://www.example.com/return', 'http://www.example.com/'); - expect(result).toBe('http://www.example.com/api/stuff?return=https://www.example.com/return'); + api.execRequest(Network.GET, url, apiUrl, null, null, {}, {}, {}, timeout).then((result) => { + expect(result.statusCode).toBe(200); + expect(result.text).toEqual(Helper.testPayload()); }); + expect(nockRequest.isDone()).toBeTruthy(); }); describe('Pending Requests', () => { diff --git a/client/libs/store/configure_store.spec.js b/client/libs/store/configure_store.spec.js index 607a840..418144b 100644 --- a/client/libs/store/configure_store.spec.js +++ b/client/libs/store/configure_store.spec.js @@ -1,7 +1,7 @@ import configureStore from './configure_store'; describe('configure store', () => { - it('setups up initial state', () => { + it('sets up initial state', () => { const settings = { csrf : 'csrf_token', apiUrl : 'http://www.example.com', diff --git a/client/package.json b/client/package.json index 30a5d38..b7de073 100644 --- a/client/package.json +++ b/client/package.json @@ -56,6 +56,7 @@ "lodash": "^4.17.4", "marked": "^0.3.6", "minimist": "1.2.0", + "nock": "^9.0.14", "node-sass": "^4.5.3", "node-watch": "^0.5.4", "npm-shrinkwrap": "6.0.2", @@ -77,7 +78,6 @@ "s3-website": "^3.1.0", "sass-loader": "^6.0.5", "style-loader": "^0.18.2", - "superagent-mock": "^3.4.0", "url-join": "^2.0.2", "url-loader": "^0.5.8", "webpack": "^2.6.1", diff --git a/client/yarn.lock b/client/yarn.lock index cf415b1..fc729da 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -124,7 +124,7 @@ 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@*, ansi-regex@^2.0.0, ansi-regex@^2.1.1: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -301,6 +301,10 @@ assert@^1.1.1: dependencies: util "0.10.3" +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + assets-webpack-plugin@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/assets-webpack-plugin/-/assets-webpack-plugin-3.5.1.tgz#931ce0d66d42e88ed5e7f18d65522943c57a387d" @@ -1479,6 +1483,14 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +"chai@>=1.9.2 <4.0.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" + dependencies: + assertion-error "^1.0.1" + deep-eql "^0.1.3" + type-detect "^1.0.0" + chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2134,6 +2146,16 @@ deep-diff@^0.3.4: version "0.3.8" resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" +deep-eql@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +deep-equal@^1.0.0: + 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" @@ -3718,7 +3740,7 @@ imports-loader@^0.7.1: loader-utils "^1.0.2" source-map "^0.5.6" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4500,7 +4522,7 @@ json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -4985,7 +5007,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@~4.17.2, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -5275,6 +5297,20 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +nock@^9.0.14: + version "9.0.14" + resolved "https://registry.yarnpkg.com/nock/-/nock-9.0.14.tgz#2211550253173ce298bcd89fca825e83813ca72b" + dependencies: + chai ">=1.9.2 <4.0.0" + debug "^2.2.0" + deep-equal "^1.0.0" + json-stringify-safe "^5.0.1" + lodash "~4.17.2" + mkdirp "^0.5.0" + propagate "0.4.0" + qs "^6.0.2" + semver "^5.3.0" + node-fetch@^1.0.1: version "1.7.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" @@ -6304,6 +6340,10 @@ prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, fbjs "^0.8.9" loose-envify "^1.3.1" +propagate@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-0.4.0.tgz#f3fcca0a6fe06736a7ba572966069617c130b481" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -6385,7 +6425,7 @@ q@1.4.1, q@^1.1.2, q@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qs@6.5.0, qs@^6.1.0: +qs@6.5.0, qs@^6.0.2, qs@^6.1.0: version "6.5.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.0.tgz#8d04954d364def3efc55b5a0793e1e2c8b1e6e49" @@ -7836,6 +7876,14 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +type-detect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" + type-is@~1.6.15: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" From fdae92fdd8ffcbcf4a19b828f198321c3c0f2633 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 18 Aug 2017 16:05:33 -0600 Subject: [PATCH 445/452] Adds tool versions for asdf --- .tool-versions | 1 + 1 file changed, 1 insertion(+) create mode 100644 .tool-versions diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..00609e7 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +node 8.1.0 From b4b0f9a0b33d5aafe74544bc7cc2a43185c5e02a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Fri, 18 Aug 2017 16:54:05 -0600 Subject: [PATCH 446/452] Fixes tool versions --- .tool-versions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.tool-versions b/.tool-versions index 00609e7..d14ab03 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -node 8.1.0 +nodejs 8.1.0 From 5c460d13f57a131df4f3221f7cb9056abaa22a84 Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Wed, 6 Sep 2017 09:19:23 -0600 Subject: [PATCH 447/452] Use a single webpack instance (#27) * Use a single webpack instance * pretty print * Single build * Works with hack * some_diff * some diff * vendor * adds plugin to do html build * adds some pretty output * remove log * change back the url * adds flow * makes multile server apps not compile multiple times --- .eslintrc.yml | 1 + .flowconfig | 10 + client/.babelrc | 12 + client/apps/hello_world/.flowconfig | 9 + client/apps/hello_world/components/home.jsx | 6 +- .../hello_world/components/layout/index.jsx | 19 +- client/build.js | 8 +- client/config/settings.js | 8 +- client/config/webpack.config.js | 59 ++-- client/libs/build/apps.js | 87 ++---- client/libs/build/build.js | 101 ++---- client/libs/build/content.js | 4 +- client/libs/plugins/flow_compiler.js | 45 +++ client/libs/plugins/html_builder.js | 36 +++ client/package.json | 10 +- client/webpack.hot.js | 55 ++-- client/yarn.lock | 288 ++++++++++++++---- package.json | 4 +- yarn.lock | 31 +- 19 files changed, 504 insertions(+), 289 deletions(-) create mode 100644 .flowconfig create mode 100644 client/apps/hello_world/.flowconfig create mode 100644 client/libs/plugins/flow_compiler.js create mode 100644 client/libs/plugins/html_builder.js diff --git a/.eslintrc.yml b/.eslintrc.yml index 609ad8f..f6195e3 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -59,3 +59,4 @@ rules: - forbid: - any import/extensions: 0 + react/prop-types: 0 diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 0000000..97c0e59 --- /dev/null +++ b/.flowconfig @@ -0,0 +1,10 @@ +[ignore] +.*/node_modules/.* +.*/apps/.* +[include] + +[libs] + +[lints] + +[options] diff --git a/client/.babelrc b/client/.babelrc index 81e9939..f0b8b06 100644 --- a/client/.babelrc +++ b/client/.babelrc @@ -7,6 +7,9 @@ ["transform-decorators-legacy"], ["transform-class-properties"], ["babel-plugin-rewire"], + ], + "ignore": [ + "node_modules", ] }, "development": { @@ -14,6 +17,9 @@ ["transform-runtime"], ["transform-decorators-legacy"], ["transform-class-properties"], + ], + "ignore": [ + "node_modules", ] }, "hot": { @@ -22,6 +28,9 @@ ["transform-decorators-legacy"], ["transform-class-properties"], ["react-hot-loader/babel"], + ], + "ignore": [ + "node_modules", ] }, "production": { @@ -31,6 +40,9 @@ ["transform-class-properties"], ["transform-react-constant-elements"], ["transform-react-remove-prop-types"], + ], + "ignore": [ + "node_modules", ] } } diff --git a/client/apps/hello_world/.flowconfig b/client/apps/hello_world/.flowconfig new file mode 100644 index 0000000..2f9d13d --- /dev/null +++ b/client/apps/hello_world/.flowconfig @@ -0,0 +1,9 @@ +[ignore] +.*/node_modules/.* +[include] + +[libs] + +[lints] + +[options] diff --git a/client/apps/hello_world/components/home.jsx b/client/apps/hello_world/components/home.jsx index e03e763..7d71df8 100644 --- a/client/apps/hello_world/components/home.jsx +++ b/client/apps/hello_world/components/home.jsx @@ -1,7 +1,9 @@ -import React from 'react'; +// @flow + +import * as React from 'react'; import assets from '../libs/assets'; -export default function Home() { +export default function Home() :React.Node { const img = assets('./images/atomicjolt.jpg'); return ( diff --git a/client/apps/hello_world/components/layout/index.jsx b/client/apps/hello_world/components/layout/index.jsx index f9bcfc3..bb585de 100644 --- a/client/apps/hello_world/components/layout/index.jsx +++ b/client/apps/hello_world/components/layout/index.jsx @@ -1,15 +1,11 @@ -import React from 'react'; -import PropTypes from 'prop-types'; +// @flow +import * as React from 'react'; -export default class Index extends React.Component { - - static propTypes = { - children: PropTypes.node, - }; +type Props = { + children?: React.Node +} - static defaultProps = { - children: '', - } +export default class Index extends React.Component { constructor() { super(); @@ -19,9 +15,8 @@ export default class Index extends React.Component { render() { return (
    - {this.props.children} + {this.props.children || ''}
    ); } - } diff --git a/client/build.js b/client/build.js index 913119b..1af3fe1 100644 --- a/client/build.js +++ b/client/build.js @@ -1,5 +1,5 @@ const apps = require('./libs/build/apps'); - +const log = require('./libs/build/log'); const argv = require('minimist')(process.argv.slice(2)); const stage = argv.release ? 'production' : 'development'; @@ -12,4 +12,8 @@ const options = { rootOutput: argv.rootOutput }; -apps.buildApps(options); +apps.buildAppsForOneServer(options).webpackCompiler.run((err) => { + if (err) { + log.error(err); + } +}); diff --git a/client/config/settings.js b/client/config/settings.js index c9a2367..f285e8d 100644 --- a/client/config/settings.js +++ b/client/config/settings.js @@ -195,13 +195,19 @@ function appSettings(name, port, options) { // ----------------------------------------------------------------------------- function iterateDirAndPorts(dir, options, cb) { let port = options.port; - return fs.readdirSync(dir) + const iteratedApps = fs.readdirSync(dir) .filter(file => fs.statSync(path.join(dir, file)).isDirectory()) .reduce((result, appName) => { const app = cb(appName, port, options); port = options.appPerPort ? port + 1 : options.port; return _.merge(result, app); }, {}); + if (options.order && options.order.length > 0) { + return iteratedApps.sort((a, b) => + (options.order.indexOf(a.name) > options.order.indexOf(b.name)) + ); + } + return iteratedApps; } // ----------------------------------------------------------------------------- diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index d6bb156..11bfb09 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -4,6 +4,9 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); const ChunkManifestPlugin = require('chunk-manifest-webpack-plugin'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const AssetsPlugin = require('assets-webpack-plugin'); +const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin'); +const HtmlBuilderPlugin = require('../libs/plugins/html_builder'); +const FlowCompilerPlugin = require('../libs/plugins/flow_compiler'); const _ = require('lodash'); // @@ -18,19 +21,20 @@ const _ = require('lodash'); // 'staging' (Will result in same output as production but will output to /staging) // 'hot' (Development mode with hot reload) // 'test' -module.exports = function webpackConfig(app) { +const outputSourceMaps = true; + +module.exports = function webpackConfig(app, options = {}) { const jsLoaders = ['babel-loader']; if (app.shouldLint) { jsLoaders.push('atomic-lint-loader'); } - const isDevelopment = app.state === 'development' || app.state === 'hot'; const cssLoaders = [ { loader: 'css-loader', options: { - sourceMap: isDevelopment, + sourceMap: outputSourceMaps, includePaths: [ `${app.path}/node_modules` ], @@ -39,7 +43,7 @@ module.exports = function webpackConfig(app) { } }, { loader: 'postcss-loader', - options: { sourceMap: isDevelopment } + options: { sourceMap: outputSourceMaps } } ]; @@ -47,7 +51,7 @@ module.exports = function webpackConfig(app) { cssLoaders.unshift({ loader: 'style-loader', options: { - sourceMap: isDevelopment, + sourceMap: outputSourceMaps, } }); } @@ -56,7 +60,7 @@ module.exports = function webpackConfig(app) { scssLoaders.push({ loader: 'sass-loader', options: { - sourceMap: isDevelopment, + sourceMap: outputSourceMaps, includePaths: [ `${app.path}/node_modules` ], @@ -69,7 +73,7 @@ module.exports = function webpackConfig(app) { lessLoaders.push({ loader: 'less-loader', options: { - sourceMap: isDevelopment, + sourceMap: outputSourceMaps, includePaths: [ `${app.path}/node_modules` ] @@ -79,10 +83,12 @@ module.exports = function webpackConfig(app) { const extractCSS = new ExtractTextPlugin(app.production ? '[name]-[chunkhash].css' : '[name].css'); - let plugins = []; + let plugins = [ + new HtmlBuilderPlugin(app, options), + ]; if (!app.codeSplittingOff) { - plugins = [ + plugins = _.concat(plugins, [ // Use to extract common code from multiple entry points into a single init.js new webpack.optimize.CommonsChunkPlugin({ name: `${app.name}_vendor`, @@ -98,13 +104,21 @@ module.exports = function webpackConfig(app) { fullPath: false, filename: `${app.name}-webpack-assets.json` }) - ]; + ]); } if (!app.extractCssOff) { plugins.push(extractCSS); } + if (!app.production) { + plugins = _.concat(plugins, [ + new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), + new FriendlyErrorsPlugin({ clearConsole: false }), + new FlowCompilerPlugin(app), + ]); + } + if (app.production) { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"production"', __DEV__: false }), @@ -119,23 +133,14 @@ module.exports = function webpackConfig(app) { new BundleAnalyzerPlugin({ analyzerMode: 'static', openAnalyzer: false - }) + }), ]); } else if (app.stage === 'hot') { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), - new webpack.HotModuleReplacementPlugin(), - new webpack.NoEmitOnErrorsPlugin() - ]); - } else if (app.stage === 'development') { - plugins = _.concat(plugins, [ - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }) + // new webpack.HotModuleReplacementPlugin(), + // new webpack.NoEmitOnErrorsPlugin(), ]); - } else { - plugins = [ - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), - extractCSS - ]; } const rules = [ @@ -156,6 +161,7 @@ module.exports = function webpackConfig(app) { // Add hot reload to entry entry[app.name] = [ 'eventsource-polyfill', + // `webpack-hot-middleware/client?name=${app.name}`, entryPath ]; } @@ -175,6 +181,7 @@ module.exports = function webpackConfig(app) { return { context: path.resolve('../apps', __dirname), + name: app.name, entry, output: { publicPath: app.publicPath, @@ -189,14 +196,8 @@ module.exports = function webpackConfig(app) { resolve, cache: true, devtool: app.production ? 'source-map' : 'cheap-module-eval-source-map', // https://webpack.js.org/configuration/devtool/ - stats: { colors: true }, + stats: 'minimal', plugins, module: { rules }, - devServer: { - stats: { - cached: false, - exclude: [/node_modules[\\/]react(-router)?[\\/]/] - } - } }; }; diff --git a/client/libs/build/apps.js b/client/libs/build/apps.js index 3b6e382..369d747 100644 --- a/client/libs/build/apps.js +++ b/client/libs/build/apps.js @@ -1,27 +1,17 @@ const fs = require('fs-extra'); const _ = require('lodash'); - +const webpack = require('webpack'); const settings = require('../../config/settings'); -const build = require('./build'); -const log = require('./log'); +const webpackConfigBuilder = require('../../config/webpack.config'); -// ----------------------------------------------------------------------------- -// Build a single app -// ----------------------------------------------------------------------------- -function buildAppParts(app, onlyPack) { - if (onlyPack) { - const buildPromise = build.buildWebpackEntries(app); - buildPromise.then(() => { - log.out(`Finished Javascript for ${app.name}`); +// clean up old build +function clean(apps, options) { + // Clean dirs + if (!options.noClean) { + _.each(apps, (app) => { + fs.emptyDirSync(app.outputPath); }); - return buildPromise; } - const buildPromise = build.build(app); - buildPromise.then((result) => { - log.out(`Finished Javascript for ${app.name}.`); - log.out(`Built ${result.pages.length} pages.`); - }); - return buildPromise; } // ----------------------------------------------------------------------------- @@ -30,59 +20,42 @@ function buildAppParts(app, onlyPack) { function buildApp(appName, options) { const apps = settings.apps(options); const app = _.find(apps, (e, name) => appName === name); - if (!options.noClean) { - fs.emptyDirSync(app.outputPath); - } + const webpackCompiler = webpack(webpackConfigBuilder(app, options)); + + clean([app], options); + return { app, - buildPromise: buildAppParts(app, options.onlyPack) + webpackCompiler, }; } -// ----------------------------------------------------------------------------- -// Build apps in order one at a time -// ----------------------------------------------------------------------------- -function buildAppWait(app, options) { - return new Promise(resolve => { - const buildPromise = buildAppParts(app, options.onlyPack); - buildPromise.then(() => { - resolve({ - app, - buildPromise - }); - }); - }); +function buildAppsForMultipleServers(options) { + const apps = settings.apps(options); + clean(apps, options); + return _.map(apps, app => ({ + app, + webpackCompiler: webpack(webpackConfigBuilder(app, options)), + })); } // ----------------------------------------------------------------------------- // Build all apps // ----------------------------------------------------------------------------- -async function buildApps(options) { +function buildAppsForOneServer(options) { const apps = settings.apps(options); + clean(apps, options); + const webpackConfigs = _.map(apps, app => webpackConfigBuilder(app, options)); + const webpackCompiler = webpack(webpackConfigs); - // Clean dirs - if (!options.noClean) { - _.each(apps, (app) => { - fs.emptyDirSync(app.outputPath); - }); - } - - if (options.order) { - const results = []; - for (let i = 0; i < options.order.length; i += 1) { - const appName = options.order[i]; - results.push(await buildAppWait(apps[appName], options)); - } - return results; - } - - return _.map(apps, app => ({ - app, - buildPromise: buildAppParts(app, options.onlyPack) - })); + return { + apps, + webpackCompiler, + }; } module.exports = { buildApp, - buildApps + buildAppsForMultipleServers, + buildAppsForOneServer }; diff --git a/client/libs/build/build.js b/client/libs/build/build.js index 7d08658..ac8d480 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -1,43 +1,16 @@ const fs = require('fs-extra'); const _ = require('lodash'); -const webpack = require('webpack'); const nodeWatch = require('node-watch'); const exec = require('child_process').exec; const content = require('./content'); const webpackUtils = require('./webpack_utils'); -const log = require('./log'); - -// Settings -const webpackConfigBuilder = require('../../config/webpack.config'); - -// ----------------------------------------------------------------------------- -// run webpack to build entries -// ----------------------------------------------------------------------------- -function buildWebpackEntries(app) { - return new Promise((resolve, reject) => { - const webpackConfig = webpackConfigBuilder(app); - const bundler = webpack(webpackConfig); - const bundle = (err, stats) => { - if (err) { - log.error(`webpack error: ${err}`); - reject(err); - } - // log.out(`webpack: ${stats.toString({ colors: true })}`); - resolve({ - webpackConfig, - webpackStats: stats.toJson() - }); - }; - bundler.run(bundle); - }); -} // ----------------------------------------------------------------------------- // copy over static files to build directory // ----------------------------------------------------------------------------- -function buildStatic(app) { - log.out(`Copying static files in ${app.staticPath}`); +function buildStatic(app, logger = () => {}) { + logger('info', 'COPYING', `Copying static files in ${app.staticPath}`); exec(`cp -r ${app.staticPath}/. ${app.outputPath}`); } @@ -45,10 +18,10 @@ function buildStatic(app) { // watchStatic // Used to copy over static files if they change // ----------------------------------------------------------------------------- -function watchStatic(app) { - log.out(`Watching static files in ${app.staticPath}`); +function watchStatic(app, logger = () => {}) { + logger('info', 'WATCHING', `Watching static files in ${app.staticPath}`); nodeWatch(app.staticPath, { recursive: true }, (evt, filePath) => { - log.out(`Change in static file ${filePath}`); + logger('info', 'CHANGE', `Change in static file ${filePath}`); fs.copySync(filePath, app.outputPath); }); } @@ -57,18 +30,19 @@ function watchStatic(app) { // watchHtml // Used to rebuild html or templates if files change. // ----------------------------------------------------------------------------- -function watchHtml(webpackAssets, app) { - log.out(`Watching html files in ${app.htmlPath}`); +function watchHtml(webpackAssets, app, logger = () => {}) { + logger('info', 'WATCHING', `Watching html files in ${app.htmlPath}`); nodeWatch(app.htmlPath, { recursive: true }, (evt, fullInputPath) => { - log.out(`Change in html file ${fullInputPath}`); + logger('info', 'CHANGE', `Change in html file ${fullInputPath}`); content.writeContent( fullInputPath, webpackAssets, - app); + app + ); }); } -function buildHtml(app, webpackAssets) { +function buildHtml(app, webpackAssets, logger = () => {}) { const pages = content.buildContents( app.htmlPath, app, @@ -76,7 +50,7 @@ function buildHtml(app, webpackAssets) { ); if (app.stage === 'hot' && fs.existsSync(app.htmlPath)) { - watchHtml(webpackAssets, app); + watchHtml(webpackAssets, app, logger); } return pages; @@ -85,46 +59,31 @@ function buildHtml(app, webpackAssets) { // ----------------------------------------------------------------------------- // main build // ----------------------------------------------------------------------------- -function build(app) { - - return new Promise((resolve) => { - - if (fs.existsSync(app.staticPath)) { - // Copy static files to build directory - buildStatic(app); - if (app.stage === 'hot') { - watchStatic(app); - } +function build(app, logger = () => {}) { + + logger('info', 'COPYING', `Copying static files for ${app.name}`); + if (fs.existsSync(app.staticPath)) { + // Copy static files to build directory + buildStatic(app, logger); + if (app.stage === 'hot') { + watchStatic(app, logger); } + } - // Webpack build - log.out(`Webpacking ${app.name}`); - - buildWebpackEntries(app).then((packResults) => { - - _.each(packResults.webpackStats.errors, (error) => { - log.error(error); - }); - - const webpackAssets = webpackUtils.loadWebpackAssets(app); - - // Build html - log.out(`Building html for ${app.name}`); - const pages = buildHtml(app, webpackAssets); + const webpackAssets = webpackUtils.loadWebpackAssets(app); - resolve({ - app, - webpackConfig : packResults.webpackConfig, - webpackAssets, - pages, - }); - }); + // Build html + logger('info', 'BUILDING', `Building html for ${app.name}`); + const pages = buildHtml(app, webpackAssets, logger); - }); + return { + app, + webpackAssets, + pages, + }; } module.exports = { build, buildHtml, - buildWebpackEntries }; diff --git a/client/libs/build/content.js b/client/libs/build/content.js index dd72893..2b47153 100644 --- a/client/libs/build/content.js +++ b/client/libs/build/content.js @@ -58,6 +58,7 @@ function buildContent(fullPath, app, webpackAssets, ext) { } } catch (err) { log.error(`Unable to compile html from ${fullPath}`); + throw err; // Uncomment the following for more details // log.error(err); // log.error('Call stack'); @@ -98,12 +99,10 @@ function writeContent( webpackAssets, ext); const out = outFilePath(page, app.outputPath, inputFilePath, app.htmlPath); - log.replace(`Writing ${inputFilePath} to: ${out}`); page.outputFilePath = file.write(out, page.html); return page; } const out = outFilePath(null, app.outputPath, inputFilePath, app.htmlPath); - log.replace(`Copying ${inputFilePath} to: ${out}`); file.copy(inputFilePath, out); return null; } @@ -148,7 +147,6 @@ function buildContents( } } }); - log.out(''); return results; } diff --git a/client/libs/plugins/flow_compiler.js b/client/libs/plugins/flow_compiler.js new file mode 100644 index 0000000..a633819 --- /dev/null +++ b/client/libs/plugins/flow_compiler.js @@ -0,0 +1,45 @@ +const execFile = require('child_process').execFile; +const output = require('friendly-errors-webpack-plugin/src/output'); + +module.exports = class FlowCompilerPlugin { + constructor(app, options) { + this.app = app; + this.options = options; + this.promise = new Promise(() => {}); + } + + apply(compiler) { + this.promise = this.flowCheckTypes(); + compiler.plugin('after-emit', (compilation, callback) => { + this.promise.then((res) => { + if (res.error) { + output.title('info', 'FLOW ERROR', 'There was a flow type error'); + output.log(res.out); + } else { + output.title('success', 'FLOW SUCCESS', 'No type errors found'); + } + // eventually we will could provide the option to fail the build + // when flow fails + callback(); + }); + }); + compiler.plugin('invalid', () => { + this.promise = this.flowCheckTypes(); + }); + } + + flowCheckTypes() { + return new Promise((resolve) => { + execFile( + require('flow-bin'), + [this.app.path, '--show-all-errors'], + (error, out) => { + resolve({ + out, + error, + }); + } + ); + }); + } +}; diff --git a/client/libs/plugins/html_builder.js b/client/libs/plugins/html_builder.js new file mode 100644 index 0000000..612b055 --- /dev/null +++ b/client/libs/plugins/html_builder.js @@ -0,0 +1,36 @@ +const build = require('../build/build'); +const output = require('friendly-errors-webpack-plugin/src/output'); + +class HtmlBuilderPlugin { + constructor(app, options) { + this.app = app; + this.options = options; + this.shouldBuild = true; + } + + buildAppParts() { + if (!this.options.onlyPack) { + const result = build.build(this.app, (...args) => output.title(...args)); + output.title('info', 'BUILD', `Built ${result.pages.length} html pages for ${this.app.name}.`); + } + } + + apply(compiler) { + compiler.plugin('after-emit', (compilation, callback) => { + // we kick off the initial build but then handle the watching and + // rebuilding of the html ourselves + if (this.shouldBuild) { + try { + this.buildAppParts(); + this.shouldBuild = false; + output.title('success', 'DONE', `Finished compiling html for ${this.app.name}`); + } catch (err) { + output.title('error', 'ERROR', err); + } + } + callback(); + }); + } +} + +module.exports = HtmlBuilderPlugin; diff --git a/client/package.json b/client/package.json index b7de073..aa1be2d 100644 --- a/client/package.json +++ b/client/package.json @@ -12,9 +12,9 @@ "assets-webpack-plugin": "^3.5.1", "atomic-lint-loader": "^1.0.1", "autoprefixer": "^7.1.1", - "babel-core": "^6.24.1", + "babel-core": "^6.26.0", "babel-eslint": "^7.2.3", - "babel-loader": "^7.0.0", + "babel-loader": "^7.1.2", "babel-plugin-rewire": "^1.1.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-decorators-legacy": "^1.3.4", @@ -39,8 +39,10 @@ "event-stream": "3.3.4", "eventsource-polyfill": "^0.9.6", "express": "^4.15.3", - "extract-text-webpack-plugin": "^2.1.0", + "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^0.11.2", + "flow-bin": "^0.54.0", + "friendly-errors-webpack-plugin": "^1.6.1", "front-matter": "^2.1.1", "fs-extra": "^3.0.1", "html-minifier": "^3.5.2", @@ -80,7 +82,7 @@ "style-loader": "^0.18.2", "url-join": "^2.0.2", "url-loader": "^0.5.8", - "webpack": "^2.6.1", + "webpack": "^3.5.5", "webpack-bundle-analyzer": "^2.8.2", "webpack-dev-middleware": "^1.10.2", "webpack-hot-middleware": "^2.18.0" diff --git a/client/webpack.hot.js b/client/webpack.hot.js index bc57098..615faa6 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -1,13 +1,11 @@ const _ = require('lodash'); const express = require('express'); -const webpack = require('webpack'); + const webpackMiddleware = require('webpack-dev-middleware'); -const webpackHotMiddleware = require('webpack-hot-middleware'); +// const webpackHotMiddleware = require('webpack-hot-middleware'); const path = require('path'); const argv = require('minimist')(process.argv.slice(2)); const settings = require('./config/settings'); - -const webpackConfigBuilder = require('./config/webpack.config'); const clientApps = require('./libs/build/apps'); const localIp = '0.0.0.0'; @@ -15,25 +13,20 @@ const appName = argv.app; const hotPack = argv.hotPack; const shouldLint = argv.lint; -function setupMiddleware(serverApp, apps) { - - const webpackConfigs = _.map(apps, app => webpackConfigBuilder(app)); - - const compiler = webpack(webpackConfigs); - +function setupMiddleware(serverApp, compiler) { const webpackMiddlewareInstance = webpackMiddleware(compiler, { + quiet: true, noInfo: true, watch: true, headers: { 'Access-Control-Allow-Origin': '*' } }); serverApp.use(webpackMiddlewareInstance); - serverApp.use(webpackHotMiddleware(compiler, { - log: false, - heartbeat: 2000, - timeout: 20000, - reload: true - })); - + // serverApp.use(webpackHotMiddleware(compiler, { + // log: (data) => { log.out(data); }, + // heartbeat: 2000, + // timeout: 20000, + // reload: true + // })); } function runServer(serverApp, port, servePath) { @@ -51,9 +44,9 @@ function runServer(serverApp, port, servePath) { }); } -function launch(app) { +function launch(app, compiler) { const serverApp = express(); - setupMiddleware(serverApp, [app]); + setupMiddleware(serverApp, compiler); runServer(serverApp, app.port, app.outputPath); } @@ -63,26 +56,22 @@ if (appName) { // Run a single app. Note that when using yarn hot in order to run a single // application you will need to type 'yarn hot -- --app=my-app' const result = clientApps.buildApp(appName, options); - result.buildPromise.then(() => launch(result.app)); + launch(result.app, result.webpackCompiler); } else if (hotPack) { // Only run webpack. Do not run the rest of the build process options.onlyPack = true; options.rootOutput = true; options.appPerPort = false; - clientApps.buildApps(options).then((results) => { - const apps = _.map(results, result => result.app); - const promises = _.map(results, result => result.buildPromise); - const serverApp = express(); - Promise.all(promises).then(() => { - setupMiddleware(serverApp, apps); - runServer(serverApp, settings.hotPort, settings.paths.devOutput); - }); - }); + const results = clientApps.buildAppsForOneServer(options); + const serverApp = express(); + setupMiddleware(serverApp, results.webpackCompiler); + runServer(serverApp, settings.hotPort, settings.paths.devOutput); } else { // Run and serve all applications - clientApps.buildApps(options).then((results) => { - _.each(results, (result) => { - result.buildPromise.then(() => launch(result.app)); - }); + const results = clientApps.buildAppsForMultipleServers(options); + // results.webpackCompiler.run(() => { + _.each(results, (result) => { + launch(result.app, result.webpackCompiler); }); + // }); } diff --git a/client/yarn.lock b/client/yarn.lock index fc729da..0117713 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -74,10 +74,14 @@ agent-base@2: extend "~3.0.0" semver "~5.0.1" -ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: +ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +ajv-keywords@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" + ajv@^4.7.0, ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -85,7 +89,7 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0: +ajv@^5.0.0, ajv@^5.1.5: version "5.2.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" dependencies: @@ -341,7 +345,7 @@ async@^0.9.0: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" -async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.1.5: +async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.1.5, async@^2.4.1: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: @@ -416,6 +420,14 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + babel-core@^6.0.0, babel-core@^6.24.1: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" @@ -440,6 +452,30 @@ babel-core@^6.0.0, babel-core@^6.24.1: slash "^1.0.0" source-map "^0.5.0" +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" @@ -462,6 +498,19 @@ babel-generator@^6.18.0, babel-generator@^6.25.0: source-map "^0.5.0" trim-right "^1.0.1" +babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.6" + trim-right "^1.0.1" + babel-helper-bindify-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" @@ -596,9 +645,9 @@ babel-jest@^20.0.3: babel-plugin-istanbul "^4.0.0" babel-preset-jest "^20.0.3" -babel-loader@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.1.tgz#b87134c8b12e3e4c2a94e0546085bc680a2b8488" +babel-loader@^7.1.2: + 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" @@ -1114,6 +1163,18 @@ babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" +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.22.0, babel-runtime@^6.23.0, babel-runtime@^6.6.1: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" @@ -1121,6 +1182,13 @@ babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtim core-js "^2.4.0" regenerator-runtime "^0.10.0" +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0, babel-template@^6.3.0, babel-template@^6.7.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" @@ -1131,6 +1199,16 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0, babel-te babylon "^6.17.2" lodash "^4.2.0" +babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" @@ -1145,6 +1223,20 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr invariant "^2.2.0" lodash "^4.2.0" +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" @@ -1154,10 +1246,23 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 lodash "^4.2.0" to-fast-properties "^1.0.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.17.2, babylon@^6.17.4: version "6.17.4" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -1423,7 +1528,7 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -camelcase@^4.0.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -1816,7 +1921,7 @@ content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" -convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0, convert-source-map@^1.4.0: +convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1836,7 +1941,7 @@ 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.4.0: +core-js@^2.4.0, core-js@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" @@ -2435,7 +2540,7 @@ end-of-stream@^1.0.0: dependencies: once "^1.4.0" -enhanced-resolve@^3.3.0: +enhanced-resolve@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" dependencies: @@ -2462,6 +2567,12 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" +error-stack-parser@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.1.tgz#a3202b8fb03114aa9b40a0e3669e48b2b65a010a" + dependencies: + stackframe "^1.0.3" + error@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/error/-/error-4.4.0.tgz#bf69ff251fb4a279c19adccdaa6b61e90d9bf12a" @@ -2852,12 +2963,12 @@ extglob@^0.3.1: 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" +extract-text-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.0.tgz#90caa7907bc449f335005e3ac7532b41b00de612" dependencies: - async "^2.1.2" - loader-utils "^1.0.2" + async "^2.4.1" + loader-utils "^1.1.0" schema-utils "^0.3.0" webpack-sources "^1.0.1" @@ -3034,6 +3145,10 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +flow-bin@^0.54.0: + version "0.54.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.54.0.tgz#f2fb0478e9e99702b623c9ed84079a39903bba77" + for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" @@ -3102,6 +3217,14 @@ fresh@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" +friendly-errors-webpack-plugin@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.6.1.tgz#e32781c4722f546a06a9b5d7a7cfa28520375d70" + dependencies: + chalk "^1.1.3" + error-stack-parser "^2.0.0" + string-length "^1.0.1" + from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" @@ -3327,7 +3450,7 @@ global@^4.3.0, global@^4.3.2: min-document "^2.19.0" process "~0.5.1" -globals@^9.0.0, globals@^9.14.0: +globals@^9.0.0, globals@^9.14.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -3816,7 +3939,7 @@ interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -invariant@^2.0.0, invariant@^2.2.0: +invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -4436,7 +4559,7 @@ js-base64@^2.1.8, js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -js-tokens@^3.0.0: +js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -5109,6 +5232,12 @@ 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.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" @@ -5198,6 +5327,10 @@ mime@1.3.x, mime@^1.2.11, mime@^1.3.4: version "1.3.6" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -5755,6 +5888,14 @@ os-locale@^1.4.0: 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, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -5858,7 +5999,7 @@ 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.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" @@ -6295,7 +6436,7 @@ pretty-format@^20.0.3: ansi-regex "^2.1.1" ansi-styles "^3.0.0" -private@^0.1.6: +private@^0.1.6, private@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -6810,6 +6951,10 @@ regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + regenerator-transform@0.9.11: version "0.9.11" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" @@ -7360,6 +7505,12 @@ 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-map-support@^0.4.15: + version "0.4.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8" + dependencies: + source-map "^0.5.6" + source-map-support@^0.4.2, source-map-support@~0.4.0: version "0.4.15" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" @@ -7434,6 +7585,10 @@ stackframe@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" +stackframe@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" + stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" @@ -7616,10 +7771,6 @@ sum-up@^1.0.1: dependencies: chalk "^1.0.0" -superagent-mock@^3.4.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/superagent-mock/-/superagent-mock-3.5.0.tgz#ab6cefa4f18dc2b9d22bf5df4ad61d2c0ca5b7a9" - superagent@^3.5.0: version "3.5.2" resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.5.2.tgz#3361a3971567504c351063abeaae0faa23dbf3f8" @@ -7651,6 +7802,12 @@ supports-color@^4.0.0, supports-color@^4.2.0: dependencies: has-flag "^2.0.0" +supports-color@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -7682,7 +7839,7 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" -tapable@^0.2.7, tapable@~0.2.5: +tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -7820,7 +7977,7 @@ 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.1: +to-fast-properties@^1.0.1, 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" @@ -7910,7 +8067,7 @@ uglify-js@3.0.x: commander "~2.11.0" source-map "~0.5.1" -uglify-js@^2.6, uglify-js@^2.8.27: +uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: @@ -7923,6 +8080,14 @@ 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" +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + uid-number@0.0.6, uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -8183,7 +8348,7 @@ watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" -watchpack@^1.3.1: +watchpack@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" dependencies: @@ -8277,31 +8442,32 @@ webpack-sources@^1.0.1: source-list-map "^2.0.0" source-map "~0.5.3" -webpack@^2.6.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.7.0.tgz#b2a1226804373ffd3d03ea9c6bd525067034f6b1" +webpack@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.5.tgz#3226f09fc8b3e435ff781e7af34f82b68b26996c" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" - ajv "^4.7.0" - ajv-keywords "^1.1.1" + ajv "^5.1.5" + ajv-keywords "^2.0.0" async "^2.1.2" - enhanced-resolve "^3.3.0" + enhanced-resolve "^3.4.0" + escope "^3.6.0" interpret "^1.0.0" json-loader "^0.5.4" json5 "^0.5.1" loader-runner "^2.3.0" - loader-utils "^0.2.16" + loader-utils "^1.1.0" 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" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" webpack-sources "^1.0.1" - yargs "^6.0.0" + yargs "^8.0.2" whatwg-encoding@^1.0.1: version "1.0.1" @@ -8328,6 +8494,10 @@ 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.1.1, which@^1.2.12, which@^1.2.9: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" @@ -8478,21 +8648,21 @@ yallist@^2.0.0, yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" dependencies: camelcase "^3.0.0" -yargs@^6.0.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +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@^7.0.0, yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" dependencies: camelcase "^3.0.0" cliui "^3.2.0" @@ -8506,25 +8676,25 @@ yargs@^6.0.0: string-width "^1.0.2" which-module "^1.0.0" y18n "^3.2.1" - yargs-parser "^4.2.0" + yargs-parser "^5.0.0" -yargs@^7.0.0, yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" dependencies: - camelcase "^3.0.0" + camelcase "^4.1.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" + 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 "^1.0.2" - which-module "^1.0.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^5.0.0" + yargs-parser "^7.0.0" yargs@~3.10.0: version "3.10.0" diff --git a/package.json b/package.json index e0d9daf..989fa8c 100644 --- a/package.json +++ b/package.json @@ -31,10 +31,10 @@ "react" ], "dependencies": { - "del": "^2.2.2" + "del": "^3.0.0" }, "devDependencies": { "jest": "^20.0.4", - "nock": "^9.0.13" + "nock": "^9.0.14" } } diff --git a/yarn.lock b/yarn.lock index b627085..97cd297 100644 --- a/yarn.lock +++ b/yarn.lock @@ -488,16 +488,15 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -del@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" dependencies: - globby "^5.0.0" + globby "^6.1.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" + p-map "^1.1.1" + pify "^3.0.0" rimraf "^2.2.8" delayed-stream@~1.0.0: @@ -713,12 +712,11 @@ globals@^9.0.0: version "9.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" dependencies: array-union "^1.0.1" - arrify "^1.0.0" glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" @@ -1416,9 +1414,9 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -nock@^9.0.13: - version "9.0.13" - resolved "https://registry.yarnpkg.com/nock/-/nock-9.0.13.tgz#d0bc39ef43d3179981e22b2e8ea069f916c5781a" +nock@^9.0.14: + version "9.0.14" + resolved "https://registry.yarnpkg.com/nock/-/nock-9.0.14.tgz#2211550253173ce298bcd89fca825e83813ca72b" dependencies: chai ">=1.9.2 <4.0.0" debug "^2.2.0" @@ -1428,6 +1426,7 @@ nock@^9.0.13: mkdirp "^0.5.0" propagate "0.4.0" qs "^6.0.2" + semver "^5.3.0" node-int64@^0.4.0: version "0.4.0" @@ -1589,6 +1588,10 @@ pify@^2.0.0, pify@^2.3.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" From 6e34f38aabb0aaed40bf5620e2c7744b5c97565a Mon Sep 17 00:00:00 2001 From: Justin Ball Date: Thu, 7 Sep 2017 17:48:50 -0600 Subject: [PATCH 448/452] Commment out unused code (#28) * Commment out unused code * Remove commented code * ensure dir exists before copying static files --- client/config/webpack.config.js | 13 +++++++------ client/libs/build/build.js | 7 +++++-- client/webpack.hot.js | 8 -------- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index 11bfb09..a3d1f4a 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -135,13 +135,14 @@ module.exports = function webpackConfig(app, options = {}) { openAnalyzer: false }), ]); - } else if (app.stage === 'hot') { - plugins = _.concat(plugins, [ - new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), - // new webpack.HotModuleReplacementPlugin(), - // new webpack.NoEmitOnErrorsPlugin(), - ]); } + // TODO fix the hot reload + // else if (app.stage === 'hot') { + // plugins = _.concat(plugins, [ + // // new webpack.HotModuleReplacementPlugin(), + // // new webpack.NoEmitOnErrorsPlugin(), + // ]); + // } const rules = [ { test: /\.js$/, use: jsLoaders, exclude: /node_modules/ }, diff --git a/client/libs/build/build.js b/client/libs/build/build.js index ac8d480..d673d43 100644 --- a/client/libs/build/build.js +++ b/client/libs/build/build.js @@ -1,5 +1,4 @@ const fs = require('fs-extra'); -const _ = require('lodash'); const nodeWatch = require('node-watch'); const exec = require('child_process').exec; @@ -61,7 +60,11 @@ function buildHtml(app, webpackAssets, logger = () => {}) { // ----------------------------------------------------------------------------- function build(app, logger = () => {}) { - logger('info', 'COPYING', `Copying static files for ${app.name}`); + logger('info', 'COPYING', `Copying static files for ${app.name} to ${app.outputPath}`); + + // Ensure directory exists + fs.ensureDirSync(app.outputPath); + if (fs.existsSync(app.staticPath)) { // Copy static files to build directory buildStatic(app, logger); diff --git a/client/webpack.hot.js b/client/webpack.hot.js index 615faa6..6d1e7b1 100644 --- a/client/webpack.hot.js +++ b/client/webpack.hot.js @@ -21,12 +21,6 @@ function setupMiddleware(serverApp, compiler) { headers: { 'Access-Control-Allow-Origin': '*' } }); serverApp.use(webpackMiddlewareInstance); - // serverApp.use(webpackHotMiddleware(compiler, { - // log: (data) => { log.out(data); }, - // heartbeat: 2000, - // timeout: 20000, - // reload: true - // })); } function runServer(serverApp, port, servePath) { @@ -69,9 +63,7 @@ if (appName) { } else { // Run and serve all applications const results = clientApps.buildAppsForMultipleServers(options); - // results.webpackCompiler.run(() => { _.each(results, (result) => { launch(result.app, result.webpackCompiler); }); - // }); } From 1f0172d3a49d61a4630bd2e1268f45c15ab01dfa Mon Sep 17 00:00:00 2001 From: James Carbine Date: Sun, 1 Oct 2017 18:02:15 -0600 Subject: [PATCH 449/452] Remove ember version code --- .eslintrc | 40 - .gitignore | 2 - 404.html | 19 - CNAME | 1 - README | 1 - ...ub-com-a61387f216f7a02b003737aa09f09c89.js | 5 - ...b-com-d41d8cd98f00b204e9800998ecf8427e.css | 0 ...endor-1148a0ca383f043a219bddec84251895.css | 5 - ...vendor-51a1adf02e7251a3a7225a37fd6eeb76.js | 19 - bfcoder-github-com/.bowerrc | 4 - bfcoder-github-com/.editorconfig | 20 - bfcoder-github-com/.ember-cli | 9 - bfcoder-github-com/.eslintrc.js | 13 - bfcoder-github-com/.gitignore | 17 - bfcoder-github-com/.nvmrc | 1 - bfcoder-github-com/.travis.yml | 24 - bfcoder-github-com/.watchmanconfig | 3 - bfcoder-github-com/README.md | 52 - bfcoder-github-com/app/app.js | 18 - bfcoder-github-com/app/components/.gitkeep | 0 .../app/components/twitter-widget.js | 12 - bfcoder-github-com/app/controllers/.gitkeep | 0 bfcoder-github-com/app/helpers/.gitkeep | 0 bfcoder-github-com/app/index.html | 26 - bfcoder-github-com/app/models/.gitkeep | 0 bfcoder-github-com/app/resolver.js | 3 - bfcoder-github-com/app/router.js | 14 - bfcoder-github-com/app/routes/.gitkeep | 0 bfcoder-github-com/app/routes/index.js | 10 - bfcoder-github-com/app/routes/projects.js | 10 - bfcoder-github-com/app/styles/app.css | 0 .../app/templates/application.hbs | 62 - .../app/templates/components/.gitkeep | 0 bfcoder-github-com/app/templates/index.hbs | 43 - bfcoder-github-com/app/templates/projects.hbs | 139 - bfcoder-github-com/bower.json | 6 - bfcoder-github-com/config/environment.js | 50 - bfcoder-github-com/ember-cli-build.js | 23 - bfcoder-github-com/package.json | 43 - bfcoder-github-com/public/crossdomain.xml | 15 - bfcoder-github-com/public/robots.txt | 3 - bfcoder-github-com/testem.js | 12 - bfcoder-github-com/tests/.eslintrc.js | 5 - .../tests/helpers/destroy-app.js | 5 - .../tests/helpers/module-for-acceptance.js | 23 - bfcoder-github-com/tests/helpers/resolver.js | 11 - bfcoder-github-com/tests/helpers/start-app.js | 15 - bfcoder-github-com/tests/index.html | 33 - bfcoder-github-com/tests/integration/.gitkeep | 0 bfcoder-github-com/tests/test-helper.js | 6 - bfcoder-github-com/tests/unit/.gitkeep | 0 bfcoder-github-com/vendor/.gitkeep | 0 bfcoder-github-com/yarn.lock | 5322 ----------------- crossdomain.xml | 15 - fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes fonts/glyphicons-halflings-regular.svg | 288 - fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes google8b48bc100ead68b2.html | 1 - index.html | 27 - robots.txt | 3 - 62 files changed, 6478 deletions(-) delete mode 100644 .eslintrc delete mode 100644 .gitignore delete mode 100644 404.html delete mode 100644 CNAME delete mode 100644 README delete mode 100644 assets/bfcoder-github-com-a61387f216f7a02b003737aa09f09c89.js delete mode 100644 assets/bfcoder-github-com-d41d8cd98f00b204e9800998ecf8427e.css delete mode 100644 assets/vendor-1148a0ca383f043a219bddec84251895.css delete mode 100644 assets/vendor-51a1adf02e7251a3a7225a37fd6eeb76.js delete mode 100644 bfcoder-github-com/.bowerrc delete mode 100644 bfcoder-github-com/.editorconfig delete mode 100644 bfcoder-github-com/.ember-cli delete mode 100644 bfcoder-github-com/.eslintrc.js delete mode 100644 bfcoder-github-com/.gitignore delete mode 100644 bfcoder-github-com/.nvmrc delete mode 100644 bfcoder-github-com/.travis.yml delete mode 100644 bfcoder-github-com/.watchmanconfig delete mode 100644 bfcoder-github-com/README.md delete mode 100644 bfcoder-github-com/app/app.js delete mode 100644 bfcoder-github-com/app/components/.gitkeep delete mode 100644 bfcoder-github-com/app/components/twitter-widget.js delete mode 100644 bfcoder-github-com/app/controllers/.gitkeep delete mode 100644 bfcoder-github-com/app/helpers/.gitkeep delete mode 100644 bfcoder-github-com/app/index.html delete mode 100644 bfcoder-github-com/app/models/.gitkeep delete mode 100644 bfcoder-github-com/app/resolver.js delete mode 100644 bfcoder-github-com/app/router.js delete mode 100644 bfcoder-github-com/app/routes/.gitkeep delete mode 100644 bfcoder-github-com/app/routes/index.js delete mode 100644 bfcoder-github-com/app/routes/projects.js delete mode 100644 bfcoder-github-com/app/styles/app.css delete mode 100644 bfcoder-github-com/app/templates/application.hbs delete mode 100644 bfcoder-github-com/app/templates/components/.gitkeep delete mode 100644 bfcoder-github-com/app/templates/index.hbs delete mode 100644 bfcoder-github-com/app/templates/projects.hbs delete mode 100644 bfcoder-github-com/bower.json delete mode 100644 bfcoder-github-com/config/environment.js delete mode 100644 bfcoder-github-com/ember-cli-build.js delete mode 100644 bfcoder-github-com/package.json delete mode 100644 bfcoder-github-com/public/crossdomain.xml delete mode 100644 bfcoder-github-com/public/robots.txt delete mode 100644 bfcoder-github-com/testem.js delete mode 100644 bfcoder-github-com/tests/.eslintrc.js delete mode 100644 bfcoder-github-com/tests/helpers/destroy-app.js delete mode 100644 bfcoder-github-com/tests/helpers/module-for-acceptance.js delete mode 100644 bfcoder-github-com/tests/helpers/resolver.js delete mode 100644 bfcoder-github-com/tests/helpers/start-app.js delete mode 100644 bfcoder-github-com/tests/index.html delete mode 100644 bfcoder-github-com/tests/integration/.gitkeep delete mode 100644 bfcoder-github-com/tests/test-helper.js delete mode 100644 bfcoder-github-com/tests/unit/.gitkeep delete mode 100644 bfcoder-github-com/vendor/.gitkeep delete mode 100644 bfcoder-github-com/yarn.lock delete mode 100644 crossdomain.xml delete mode 100644 fonts/glyphicons-halflings-regular.eot delete mode 100644 fonts/glyphicons-halflings-regular.svg delete mode 100644 fonts/glyphicons-halflings-regular.ttf delete mode 100644 fonts/glyphicons-halflings-regular.woff delete mode 100644 fonts/glyphicons-halflings-regular.woff2 delete mode 100644 google8b48bc100ead68b2.html delete mode 100644 index.html delete mode 100644 robots.txt diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 03e6d8e..0000000 --- a/.eslintrc +++ /dev/null @@ -1,40 +0,0 @@ ---- -ecmaFeatures: - modules: true -env: - browser: true - es6: true -parser: babel-eslint -rules: - camelcase: 0 - comma-dangle: 0 - global-strict: - - 0 - - never - indent: - - 2 - - 2 - - - SwitchCase: 1 - linebreak-style: - - 2 - - unix - no-multi-spaces: - - 2 - - - exceptions: - AssignmentPattern: true - ImportDeclaration: true - VariableDeclarator: true - AssignmentExpression: true - no-underscore-dangle: 0 - no-unused-vars: 1 - quotes: 0 - semi: - - 2 - - always - strict: - - 0 - - global - eol-last: 1 # end of file newline - no-trailing-spaces: 1 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 68ceb28..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Mac finder artifacts -.DS_Store diff --git a/404.html b/404.html deleted file mode 100644 index cafa916..0000000 --- a/404.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Page Not Found - - - -
    - - -
    -

    Looks like the page you’re after doesn’t exist. Guess you’re going to have to go home and try again!

    -
    - - diff --git a/CNAME b/CNAME deleted file mode 100644 index 0e54a1c..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -www.bfcoder.com \ No newline at end of file diff --git a/README b/README deleted file mode 100644 index a7244d6..0000000 --- a/README +++ /dev/null @@ -1 +0,0 @@ -This is my Website. diff --git a/assets/bfcoder-github-com-a61387f216f7a02b003737aa09f09c89.js b/assets/bfcoder-github-com-a61387f216f7a02b003737aa09f09c89.js deleted file mode 100644 index 6a311a7..0000000 --- a/assets/bfcoder-github-com-a61387f216f7a02b003737aa09f09c89.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict";define("bfcoder-github-com/app",["exports","ember","bfcoder-github-com/resolver","ember-load-initializers","bfcoder-github-com/config/environment"],function(e,t,n,a,r){var l=void 0;t.default.MODEL_FACTORY_INJECTIONS=!0,l=t.default.Application.extend({modulePrefix:r.default.modulePrefix,podModulePrefix:r.default.podModulePrefix,Resolver:n.default}),(0,a.default)(l,r.default.modulePrefix),e.default=l}),define("bfcoder-github-com/components/app-version",["exports","ember-cli-app-version/components/app-version","bfcoder-github-com/config/environment"],function(e,t,n){var a=n.default.APP.name,r=n.default.APP.version;e.default=t.default.extend({version:r,name:a})}),define("bfcoder-github-com/components/bs-accordion-item",["exports","ember-bootstrap/components/bs-accordion-item"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-accordion",["exports","ember-bootstrap/components/bs-accordion"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-alert",["exports","ember-bootstrap/components/bs-alert"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-button-group",["exports","ember-bootstrap/components/bs-button-group"],function(e,t){e.default=t.default}),define("bfcoder-github-com/components/bs-button",["exports","ember-bootstrap/components/bs-button"],function(e,t){e.default=t.default}),define("bfcoder-github-com/components/bs-collapse",["exports","ember-bootstrap/components/bs-collapse"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-dropdown-button",["exports","ember-bootstrap/components/bs-dropdown-button"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-dropdown-menu",["exports","ember-bootstrap/components/bs-dropdown-menu"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-dropdown-toggle",["exports","ember-bootstrap/components/bs-dropdown-toggle"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-dropdown",["exports","ember-bootstrap/components/bs-dropdown"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-form-element",["exports","ember-bootstrap/components/bs-form-element"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-form-group",["exports","ember-bootstrap/components/bs-form-group"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-form",["exports","ember-bootstrap/components/bs-form"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-input",["exports","ember-bootstrap/components/bs-input"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-modal-backdrop",["exports","ember-bootstrap/components/bs-modal-backdrop"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-modal-body",["exports","ember-bootstrap/components/bs-modal-body"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-modal-dialog",["exports","ember-bootstrap/components/bs-modal-dialog"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-modal-footer",["exports","ember-bootstrap/components/bs-modal-footer"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-modal-header",["exports","ember-bootstrap/components/bs-modal-header"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-modal",["exports","ember-bootstrap/components/bs-modal"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-nav-item",["exports","ember-bootstrap/components/bs-nav-item"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-nav",["exports","ember-bootstrap/components/bs-nav"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-navbar-content",["exports","ember-bootstrap/components/bs-navbar-content"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-navbar-nav",["exports","ember-bootstrap/components/bs-navbar-nav"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-navbar-toggle",["exports","ember-bootstrap/components/bs-navbar-toggle"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-navbar",["exports","ember-bootstrap/components/bs-navbar"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-progress-bar",["exports","ember-bootstrap/components/bs-progress-bar"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-progress",["exports","ember-bootstrap/components/bs-progress"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-select",["exports","ember-bootstrap/components/bs-select"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-tab-pane",["exports","ember-bootstrap/components/bs-tab-pane"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-tab",["exports","ember-bootstrap/components/bs-tab"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/bs-textarea",["exports","ember-bootstrap/components/bs-textarea"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/ember-wormhole",["exports","ember-wormhole/components/ember-wormhole"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}})}),define("bfcoder-github-com/components/twitter-widget",["exports","ember"],function(e,t){e.default=t.default.Component.extend({didInsertElement:function(){var e=document.createElement("script");e.type="text/javascript",e.innerHTML="!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');",this.$().append(e)}})}),define("bfcoder-github-com/helpers/bs-contains",["exports","ember-bootstrap/helpers/bs-contains"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"bsContains",{enumerable:!0,get:function(){return t.bsContains}})}),define("bfcoder-github-com/helpers/bs-eq",["exports","ember-bootstrap/helpers/bs-eq"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"eq",{enumerable:!0,get:function(){return t.eq}})}),define("bfcoder-github-com/helpers/bs-not",["exports","ember-bootstrap/helpers/bs-not"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"not",{enumerable:!0,get:function(){return t.not}})}),define("bfcoder-github-com/helpers/bs-read-path",["exports","ember-bootstrap/helpers/bs-read-path"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"readPath",{enumerable:!0,get:function(){return t.readPath}})}),define("bfcoder-github-com/initializers/app-version",["exports","ember-cli-app-version/initializer-factory","bfcoder-github-com/config/environment"],function(e,t,n){e.default={name:"App Version",initialize:(0,t.default)(n.default.APP.name,n.default.APP.version)}}),define("bfcoder-github-com/initializers/bootstrap-linkto",["exports","ember-bootstrap/initializers/bootstrap-linkto"],function(e,t){Object.defineProperty(e,"default",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"initialize",{enumerable:!0,get:function(){return t.initialize}})}),define("bfcoder-github-com/initializers/container-debug-adapter",["exports","ember-resolver/container-debug-adapter"],function(e,t){e.default={name:"container-debug-adapter",initialize:function(){var e=arguments[1]||arguments[0];e.register("container-debug-adapter:main",t.default),e.inject("container-debug-adapter:main","namespace","application:main")}}}),define("bfcoder-github-com/initializers/export-application-global",["exports","ember","bfcoder-github-com/config/environment"],function(e,t,n){function a(){var e=arguments[1]||arguments[0];if(n.default.exportApplicationGlobal!==!1){var a,r=n.default.exportApplicationGlobal;a="string"==typeof r?r:t.default.String.classify(n.default.modulePrefix),window[a]||(window[a]=e,e.reopen({willDestroy:function(){this._super.apply(this,arguments),delete window[a]}}))}}e.initialize=a,e.default={name:"export-application-global",initialize:a}}),define("bfcoder-github-com/initializers/load-bootstrap-config",["exports","bfcoder-github-com/config/environment","ember-bootstrap/config"],function(e,t,n){function a(){n.default.load(t.default["ember-bootstrap"]||{})}e.initialize=a,e.default={name:"load-bootstrap-config",initialize:a}}),define("bfcoder-github-com/initializers/modals-container",["exports","ember-bootstrap/initializers/modals-container"],function(e,t){e.default=t.default}),define("bfcoder-github-com/resolver",["exports","ember-resolver"],function(e,t){e.default=t.default}),define("bfcoder-github-com/router",["exports","ember","bfcoder-github-com/config/environment"],function(e,t,n){var a=t.default.Router.extend({location:n.default.locationType,rootURL:n.default.rootURL});a.map(function(){this.route("projects"),this.route("photos")}),e.default=a}),define("bfcoder-github-com/routes/index",["exports","ember"],function(e,t){e.default=t.default.Route.extend({setupController:function(){this._super.apply(this,arguments),document.title="The bfcoder"}})}),define("bfcoder-github-com/routes/projects",["exports","ember"],function(e,t){e.default=t.default.Route.extend({setupController:function(){this._super.apply(this,arguments),document.title="The bfcoder: Projects"}})}),define("bfcoder-github-com/templates/application",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:3,column:4},end:{line:8,column:4}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"class","sr-only");var a=e.createTextNode("Toggle navigation");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"class","icon-bar"),e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"class","icon-bar"),e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"class","icon-bar"),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:9,column:4},end:{line:9,column:52}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode("bfcoder");return e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}(),n=function(){var e=function(){var e=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:14,column:22},end:{line:14,column:47}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode("About");return e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:14,column:6},end:{line:14,column:59}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","link-to",["index"],[],0,null,["loc",[null,[14,22],[14,59]]]]],locals:[],templates:[e]}}(),t=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:15,column:22},end:{line:15,column:53}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode("Projects");return e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:15,column:6},end:{line:15,column:65}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","link-to",["projects"],[],0,null,["loc",[null,[15,22],[15,65]]]]],locals:[],templates:[e]}}(),n=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:18,column:8},end:{line:18,column:64}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode("Other ");e.appendChild(t,n);var n=e.createElement("span");return e.setAttribute(n,"class","caret"),e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:19,column:8},end:{line:22,column:8}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("li"),a=e.createElement("a");e.setAttribute(a,"target","_blank"),e.setAttribute(a,"href","http://blog.bfcoder.com");var r=e.createTextNode("Blog");e.appendChild(a,r),e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createElement("li"),a=e.createElement("a");e.setAttribute(a,"target","_blank"),e.setAttribute(a,"href","https://github.com/bfcoder");var r=e.createTextNode("GitHub");e.appendChild(a,r),e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:17,column:6},end:{line:23,column:6}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(2);return a[0]=e.createMorphAt(t,1,1,n),a[1]=e.createMorphAt(t,3,3,n),e.insertBoundary(t,null),a},statements:[["block","bs-dropdown-toggle",[],[],0,null,["loc",[null,[18,8],[18,87]]]],["block","bs-dropdown-menu",[],[],1,null,["loc",[null,[19,8],[22,29]]]]],locals:[],templates:[e,t]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:13,column:4},end:{line:24,column:4}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n\n");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(3);return a[0]=e.createMorphAt(t,1,1,n),a[1]=e.createMorphAt(t,3,3,n),a[2]=e.createMorphAt(t,5,5,n),e.insertBoundary(t,null),a},statements:[["block","bs-nav-item",[],[],0,null,["loc",[null,[14,6],[14,75]]]],["block","bs-nav-item",[],[],1,null,["loc",[null,[15,6],[15,81]]]],["block","bs-dropdown",[],["tagName","li"],2,null,["loc",[null,[17,6],[23,22]]]]],locals:[],templates:[e,t,n]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:12,column:2},end:{line:25,column:2}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","bs-navbar-nav",[],[],0,null,["loc",[null,[13,4],[24,22]]]]],locals:[],templates:[e]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:27,column:0}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","navbar-header");var a=e.createTextNode("\n");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode(" ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createMorphAt(a,1,1),r[1]=e.createMorphAt(a,3,3),r[2]=e.createMorphAt(t,3,3,n),r},statements:[["block","bs-navbar-toggle",[],[],0,null,["loc",[null,[3,4],[8,25]]]],["block","link-to",["index"],["class","navbar-brand"],1,null,["loc",[null,[9,4],[9,64]]]],["block","bs-navbar-content",[],[],2,null,["loc",[null,[12,2],[25,24]]]]],locals:[],templates:[e,t,n]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:63,column:0}},moduleName:"bfcoder-github-com/templates/application.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","container-fluid");var a=e.createTextNode("\n\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n\n ");e.appendChild(n,a);var a=e.createElement("hr");e.appendChild(n,a);var a=e.createTextNode("\n\n ");e.appendChild(n,a);var a=e.createElement("footer"),r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createComment(" Stack Overflow ");e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("a");e.setAttribute(l,"href","http://stackoverflow.com/users/1477165/bfcoder");var o=e.createTextNode("\n ");e.appendChild(l,o);var o=e.createElement("img");e.setAttribute(o,"src","http://stackoverflow.com/users/flair/1477165.png?theme=dark"),e.setAttribute(o,"width","208"),e.setAttribute(o,"height","58"),e.setAttribute(o,"alt","profile for bfcoder at Stack Overflow, Q&A for professional and enthusiast programmers"),e.setAttribute(o,"title","profile for bfcoder at Stack Overflow, Q&A for professional and enthusiast programmers"),e.appendChild(l,o);var o=e.createTextNode("\n ");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createComment(" End Stack Overflow ");e.appendChild(a,r);var r=e.createTextNode("\n\n ");e.appendChild(a,r);var r=e.createComment(" Twitter ");e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("a");e.setAttribute(l,"href","https://twitter.com/bfcoder"),e.setAttribute(l,"class","twitter-follow-button"),e.setAttribute(l,"data-show-count","false"),e.setAttribute(l,"data-dnt","true");var o=e.createTextNode("Follow @bfcoder");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createComment("");e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createComment(" End Twitter ");e.appendChild(a,r);var r=e.createTextNode("\n\n ");e.appendChild(a,r);var r=e.createComment(" Linkedin ");e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("a");e.setAttribute(l,"href","http://www.linkedin.com/pub/james-carbine/b/74/628");var o=e.createTextNode("\n ");e.appendChild(l,o);var o=e.createElement("img");e.setAttribute(o,"src","http://www.linkedin.com/img/webpromo/btn_liprofile_blue_80x15.png"),e.setAttribute(o,"width","80"),e.setAttribute(o,"height","15"),e.setAttribute(o,"alt","View James Carbine's profile on LinkedIn"),e.appendChild(l,o);var o=e.createTextNode("\n ");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createComment(" End Linkedin ");e.appendChild(a,r);var r=e.createTextNode("\n\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("© bfcoder 2015");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment(" /container ");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[2]),r=new Array(3);return r[0]=e.createMorphAt(t,0,0,n),r[1]=e.createMorphAt(a,1,1),r[2]=e.createMorphAt(e.childAt(a,[5,9]),3,3),e.insertBoundary(t,0),r},statements:[["block","bs-navbar",[],[],0,null,["loc",[null,[1,0],[27,14]]]],["content","outlet",["loc",[null,[31,2],[31,12]]],0,0,0,0],["content","twitter-widget",["loc",[null,[47,6],[47,24]]],0,0,0,0]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/bs-accordion-item",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:8,column:0},end:{line:12,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-accordion-item.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","panel-body");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(e.childAt(t,[1]),1,1),a},statements:[["content","yield",["loc",[null,[10,8],[10,17]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:13,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-accordion-item.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("div");e.setAttribute(n,"role","tab");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("h4");e.setAttribute(a,"class","panel-title");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("a");e.setAttribute(r,"href","#");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createComment("");e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[0]),r=new Array(4);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createElementMorph(a),r[2]=e.createMorphAt(e.childAt(a,[1,1]),1,1),r[3]=e.createMorphAt(t,2,2,n),e.insertBoundary(t,null),r},statements:[["attribute","class",["concat",["panel-heading ",["subexpr","if",[["get","collapsed",["loc",[null,[1,68],[1,77]]],0,0,0,0],"collapsed","expanded"],[],["loc",[null,[1,63],[1,102]]],0,0]],0,0,0,0,0],0,0,0,0],["element","action",["toggleActive"],[],["loc",[null,[1,16],[1,41]]],0,0],["content","title",["loc",[null,[4,12],[4,21]]],0,0,0,0],["block","bs-collapse",[],["collapsed",["subexpr","@mut",[["get","collapsed",["loc",[null,[8,25],[8,34]]],0,0,0,0]],[],[],0,0],"class","panel-collapse"],0,null,["loc",[null,[8,0],[12,16]]]]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/bs-alert",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:2,column:0},end:{line:4,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-alert.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("button");e.setAttribute(n,"type","button"),e.setAttribute(n,"class","close"),e.setAttribute(n,"aria-label","Close");var a=e.createElement("span");e.setAttribute(a,"aria-hidden","true");var r=e.createTextNode("×");e.appendChild(a,r),e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(1);return r[0]=e.createElementMorph(a),r},statements:[["element","action",["dismiss"],[],["loc",[null,[3,59],[3,79]]],0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:6,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-alert.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(2);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","dismissible",["loc",[null,[2,6],[2,17]]],0,0,0,0]],[],0,null,["loc",[null,[2,0],[4,7]]]],["content","yield",["loc",[null,[5,0],[5,9]]],0,0,0,0]],locals:[],templates:[e]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:7,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-alert.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","unless",[["get","hidden",["loc",[null,[1,10],[1,16]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[6,11]]]]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/bs-button",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:1,column:37}},moduleName:"bfcoder-github-com/templates/components/bs-button.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("i");e.appendChild(t,n);var n=e.createTextNode(" ");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[0]),r=new Array(1);return r[0]=e.createAttrMorph(a,"class"),r},statements:[["attribute","class",["concat",[["get","icon",["loc",[null,[1,24],[1,28]]],0,0,0,0]],0,0,0,0,0],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:1,column:61}},moduleName:"bfcoder-github-com/templates/components/bs-button.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(3);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),a[2]=e.createMorphAt(t,2,2,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","icon",["loc",[null,[1,6],[1,10]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[1,44]]]],["content","text",["loc",[null,[1,44],[1,52]]],0,0,0,0],["content","yield",["loc",[null,[1,52],[1,61]]],0,0,0,0]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/bs-form-element",["exports"],function(e){ -e.default=Ember.HTMLBars.template(function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:1,column:31}},moduleName:"bfcoder-github-com/templates/components/bs-form-element.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["inline","partial",[["get","formElementTemplate",["loc",[null,[1,10],[1,29]]],0,0,0,0]],[],["loc",[null,[1,0],[1,31]]],0,0]],locals:[],templates:[]}}())}),define("bfcoder-github-com/templates/components/bs-form-group",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:2,column:0},end:{line:4,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-form-group.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"aria-hidden","true"),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(1);return r[0]=e.createAttrMorph(a,"class"),r},statements:[["attribute","class",["concat",["form-control-feedback ",["get","iconName",["loc",[null,[3,41],[3,49]]],0,0,0,0]],0,0,0,0,0],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:4,column:7}},moduleName:"bfcoder-github-com/templates/components/bs-form-group.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(2);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,2,2,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["content","yield",["loc",[null,[1,0],[1,9]]],0,0,0,0],["block","if",[["get","hasFeedback",["loc",[null,[2,6],[2,17]]],0,0,0,0]],[],0,null,["loc",[null,[2,0],[4,7]]]]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/bs-form",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:1,column:9}},moduleName:"bfcoder-github-com/templates/components/bs-form.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["content","yield",["loc",[null,[1,0],[1,9]]],0,0,0,0]],locals:[],templates:[]}}())}),define("bfcoder-github-com/templates/components/bs-modal-dialog",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:3,column:8},end:{line:5,column:8}},moduleName:"bfcoder-github-com/templates/components/bs-modal-dialog.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","bs-modal-header",[],["title",["subexpr","@mut",[["get","title",["loc",[null,[4,36],[4,41]]],0,0,0,0]],[],[],0,0],"closeButton",["subexpr","@mut",[["get","closeButton",["loc",[null,[4,54],[4,65]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,12],[4,67]]],0,0]],locals:[],templates:[]}}(),t=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:7,column:12},end:{line:9,column:12}},moduleName:"bfcoder-github-com/templates/components/bs-modal-dialog.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["content","yield",["loc",[null,[8,16],[8,25]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:6,column:8},end:{line:10,column:8}},moduleName:"bfcoder-github-com/templates/components/bs-modal-dialog.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","bs-modal-body",[],[],0,null,["loc",[null,[7,12],[9,30]]]]],locals:[],templates:[e]}}(),n=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:10,column:8},end:{line:12,column:8}},moduleName:"bfcoder-github-com/templates/components/bs-modal-dialog.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["content","yield",["loc",[null,[11,12],[11,21]]],0,0,0,0]],locals:[],templates:[]}}(),a=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:14,column:8},end:{line:16,column:8}},moduleName:"bfcoder-github-com/templates/components/bs-modal-dialog.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["content","bs-modal-footer",["loc",[null,[15,12],[15,31]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:18,column:6}},moduleName:"bfcoder-github-com/templates/components/bs-modal-dialog.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("div"),a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","modal-content");var r=e.createTextNode("\n");e.appendChild(a,r);var r=e.createComment("");e.appendChild(a,r);var r=e.createComment("");e.appendChild(a,r);var r=e.createTextNode("\n");e.appendChild(a,r);var r=e.createComment("");e.appendChild(a,r);var r=e.createTextNode(" ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");return e.appendChild(n,a),e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[0]),r=e.childAt(a,[1]),l=new Array(4);return l[0]=e.createAttrMorph(a,"class"),l[1]=e.createMorphAt(r,1,1),l[2]=e.createMorphAt(r,2,2),l[3]=e.createMorphAt(r,4,4),l},statements:[["attribute","class",["concat",["modal-dialog ",["get","sizeClass",["loc",[null,[1,27],[1,36]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["block","if",[["get","header",["loc",[null,[3,14],[3,20]]],0,0,0,0]],[],0,null,["loc",[null,[3,8],[5,15]]]],["block","if",[["get","body",["loc",[null,[6,14],[6,18]]],0,0,0,0]],[],1,2,["loc",[null,[6,8],[12,15]]]],["block","if",[["get","footer",["loc",[null,[14,14],[14,20]]],0,0,0,0]],[],3,null,["loc",[null,[14,8],[16,15]]]]],locals:[],templates:[e,t,n,a]}}())}),define("bfcoder-github-com/templates/components/bs-modal-footer",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","this",["loc",[null,[2,12],[2,16]]],0,0,0,0]],[],["loc",[null,[2,4],[2,18]]],0,0]],locals:[],templates:[]}}(),t=function(){var e=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:5,column:8},end:{line:5,column:66}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["content","closeTitle",["loc",[null,[5,52],[5,66]]],0,0,0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:6,column:8},end:{line:6,column:96}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["content","submitTitle",["loc",[null,[6,81],[6,96]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:4,column:4},end:{line:7,column:4}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(2);return a[0]=e.createMorphAt(t,1,1,n),a[1]=e.createMorphAt(t,3,3,n),a},statements:[["block","bs-button",[],["type","default","action","close"],0,null,["loc",[null,[5,8],[5,80]]]],["block","bs-button",[],["type","primary","buttonType","submit","disabled",["subexpr","@mut",[["get","submitDisabled",["loc",[null,[6,65],[6,79]]],0,0,0,0]],[],[],0,0]],1,null,["loc",[null,[6,8],[6,110]]]]],locals:[],templates:[e,t]}}(),t=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:8,column:8},end:{line:8,column:66}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["content","closeTitle",["loc",[null,[8,52],[8,66]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:7,column:4},end:{line:9,column:4}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["block","bs-button",[],["type","primary","action","close"],0,null,["loc",[null,[8,8],[8,80]]]]],locals:[],templates:[e]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:3,column:0},end:{line:10,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","hasSubmitButton",["loc",[null,[4,10],[4,25]]],0,0,0,0]],[],0,1,["loc",[null,[4,4],[9,11]]]]],locals:[],templates:[e,t]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:10,column:7}},moduleName:"bfcoder-github-com/templates/components/bs-modal-footer.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","hasBlock",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,1,["loc",[null,[1,0],[10,7]]]]],locals:[],templates:[e,t]}}())}),define("bfcoder-github-com/templates/components/bs-modal-header",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal-header.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("button");e.setAttribute(n,"type","button"),e.setAttribute(n,"class","close"),e.setAttribute(n,"aria-label","Close");var a=e.createElement("span");e.setAttribute(a,"aria-hidden","true");var r=e.createTextNode("×");e.appendChild(a,r),e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(1);return r[0]=e.createElementMorph(a),r},statements:[["element","action",["close"],[],["loc",[null,[2,59],[2,77]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:4,column:0},end:{line:6,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal-header.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","this",["loc",[null,[5,12],[5,16]]],0,0,0,0]],[],["loc",[null,[5,4],[5,18]]],0,0]],locals:[],templates:[]}}(),n=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:6,column:0},end:{line:8,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal-header.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("h4");e.setAttribute(n,"class","modal-title");var a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(e.childAt(t,[1]),0,0),a},statements:[["content","title",["loc",[null,[7,28],[7,37]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:9,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal-header.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(2);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","closeButton",["loc",[null,[1,6],[1,17]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]],["block","if",[["get","hasBlock",["loc",[null,[4,6],[4,14]]],0,0,0,0]],[],1,2,["loc",[null,[4,0],[8,7]]]]],locals:[],templates:[e,t,n]}}())}),define("bfcoder-github-com/templates/components/bs-modal",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:3,column:0},end:{line:5,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","this",["loc",[null,[4,10],[4,14]]],0,0,0,0]],[],["loc",[null,[4,2],[4,16]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:7,column:0},end:{line:9,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("div");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(2);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createAttrMorph(a,"id"),r},statements:[["attribute","class",["concat",["modal-backdrop ",["subexpr","if",[["get","fade",["loc",[null,[8,34],[8,38]]],0,0,0,0],"fade"],[],["loc",[null,[8,29],[8,47]]],0,0]," ",["subexpr","if",[["get","in",["loc",[null,[8,53],[8,55]]],0,0,0,0],"in"],[],["loc",[null,[8,48],[8,62]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","id",["concat",[["get","backdropId",["loc",[null,[8,70],[8,80]]],0,0,0,0]],0,0,0,0,0],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:11,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-modal.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(2);return a[0]=e.createMorphAt(t,1,1,n),a[1]=e.createMorphAt(t,3,3,n),a},statements:[["block","bs-modal-dialog",[],["close",["subexpr","action",["close"],[],["loc",[null,[3,25],[3,41]]],0,0],"fade",["subexpr","@mut",[["get","fade",["loc",[null,[3,47],[3,51]]],0,0,0,0]],[],[],0,0],"in",["subexpr","@mut",[["get","in",["loc",[null,[3,55],[3,57]]],0,0,0,0]],[],[],0,0],"id",["subexpr","@mut",[["get","modalId",["loc",[null,[3,61],[3,68]]],0,0,0,0]],[],[],0,0],"title",["subexpr","@mut",[["get","title",["loc",[null,[3,75],[3,80]]],0,0,0,0]],[],[],0,0],"closeButton",["subexpr","@mut",[["get","closeButton",["loc",[null,[3,93],[3,104]]],0,0,0,0]],[],[],0,0],"keyboard",["subexpr","@mut",[["get","keyboard",["loc",[null,[3,114],[3,122]]],0,0,0,0]],[],[],0,0],"header",["subexpr","@mut",[["get","header",["loc",[null,[3,130],[3,136]]],0,0,0,0]],[],[],0,0],"body",["subexpr","@mut",[["get","body",["loc",[null,[3,142],[3,146]]],0,0,0,0]],[],[],0,0],"footer",["subexpr","@mut",[["get","footer",["loc",[null,[3,154],[3,160]]],0,0,0,0]],[],[],0,0],"size",["subexpr","@mut",[["get","size",["loc",[null,[3,166],[3,170]]],0,0,0,0]],[],[],0,0],"backdropClose",["subexpr","@mut",[["get","backdropClose",["loc",[null,[3,185],[3,198]]],0,0,0,0]],[],[],0,0]],0,null,["loc",[null,[3,0],[5,20]]]],["block","if",[["get","showBackdrop",["loc",[null,[7,6],[7,18]]],0,0,0,0]],[],1,null,["loc",[null,[7,0],[9,7]]]]],locals:[],templates:[e,t]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:11,column:19}},moduleName:"bfcoder-github-com/templates/components/bs-modal.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","ember-wormhole",[],["to","ember-bootstrap-modal-container","renderInPlace",["subexpr","@mut",[["get","renderInPlace",["loc",[null,[1,69],[1,82]]],0,0,0,0]],[],[],0,0]],0,null,["loc",[null,[1,0],[11,19]]]]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/bs-progress-bar",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:3,column:4},end:{line:5,column:4}},moduleName:"bfcoder-github-com/templates/components/bs-progress-bar.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","percentRounded",["loc",[null,[4,16],[4,30]]],0,0,0,0]],[],["loc",[null,[4,8],[4,32]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:5,column:4},end:{line:7,column:4}},moduleName:"bfcoder-github-com/templates/components/bs-progress-bar.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("%\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["content","percentRounded",["loc",[null,[6,8],[6,26]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:2,column:0},end:{line:8,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-progress-bar.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","hasBlock",["loc",[null,[3,10],[3,18]]],0,0,0,0]],[],0,1,["loc",[null,[3,4],[7,11]]]]],locals:[],templates:[e,t]}}(),t=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:9,column:4},end:{line:11,column:4}},moduleName:"bfcoder-github-com/templates/components/bs-progress-bar.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"class","sr-only");var a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(e.childAt(t,[1]),0,0),a},statements:[["inline","yield",[["get","percentRounded",["loc",[null,[10,38],[10,52]]],0,0,0,0]],[],["loc",[null,[10,30],[10,54]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:11,column:4},end:{line:13,column:4}},moduleName:"bfcoder-github-com/templates/components/bs-progress-bar.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"class","sr-only");var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("%");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(e.childAt(t,[1]),0,0),a},statements:[["content","percentRounded",["loc",[null,[12,30],[12,48]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:8,column:0},end:{line:15,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-progress-bar.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","hasBlock",["loc",[null,[9,10],[9,18]]],0,0,0,0]],[],0,1,["loc",[null,[9,4],[13,11]]]]],locals:[],templates:[e,t]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:16,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-progress-bar.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),e.insertBoundary(t,null),a},statements:[["block","if",[["get","showLabel",["loc",[null,[2,6],[2,15]]],0,0,0,0]],[],0,1,["loc",[null,[2,0],[15,7]]]]],locals:[],templates:[e,t]}}())}),define("bfcoder-github-com/templates/components/bs-progress",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:2,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-progress.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),a},statements:[["content","yield",["loc",[null,[1,0],[1,9]]],0,0,0,0]],locals:[],templates:[]}}())}),define("bfcoder-github-com/templates/components/bs-select",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:5,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("option");e.setAttribute(n,"disabled","");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(2);return r[0]=e.createAttrMorph(a,"selected"),r[1]=e.createMorphAt(a,1,1),r},statements:[["attribute","selected",["subexpr","bs-not",[["get","value",["loc",[null,[2,39],[2,44]]],0,0,0,0]],[],["loc",[null,[null,null],[2,46]]],0,0],0,0,0,0],["content","prompt",["loc",[null,[3,8],[3,18]]],0,0,0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:7,column:0},end:{line:12,column:0}},moduleName:"bfcoder-github-com/templates/components/bs-select.hbs"},isEmpty:!1,arity:1,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("option"),a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createAttrMorph(a,"value"),r[1]=e.createAttrMorph(a,"selected"),r[2]=e.createMorphAt(a,1,1),r},statements:[["attribute","value",["concat",[["subexpr","bs-read-path",[["get","item",["loc",[null,[8,34],[8,38]]],0,0,0,0],["get","optionValuePath",["loc",[null,[8,39],[8,54]]],0,0,0,0]],[],["loc",[null,[8,19],[8,56]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","selected",["subexpr","bs-eq",[["get","item",["loc",[null,[9,29],[9,33]]],0,0,0,0],["get","value",["loc",[null,[9,34],[9,39]]],0,0,0,0]],[],["loc",[null,[null,null],[9,41]]],0,0],0,0,0,0],["inline","bs-read-path",[["get","item",["loc",[null,[10,23],[10,27]]],0,0,0,0],["get","optionLabelPath",["loc",[null,[10,28],[10,43]]],0,0,0,0]],[],["loc",[null,[10,8],[10,45]]],0,0]],locals:["item"],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:12,column:9}},moduleName:"bfcoder-github-com/templates/components/bs-select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(2);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,2,2,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","prompt",["loc",[null,[1,6],[1,12]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[5,7]]]],["block","each",[["get","content",["loc",[null,[7,8],[7,15]]],0,0,0,0]],["key","@identity"],1,null,["loc",[null,[7,0],[12,9]]]]],locals:[],templates:[e,t]}}())}),define("bfcoder-github-com/templates/components/form-element/errors",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/errors.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"class","help-block");var a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(e.childAt(t,[1]),0,0),a},statements:[["content","validationMessages.firstObject",["loc",[null,[2,29],[2,63]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:7}},moduleName:"bfcoder-github-com/templates/components/form-element/errors.hbs" -},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","showValidationMessages",["loc",[null,[1,6],[1,28]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/form-element/feedback-icon",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/feedback-icon.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("span");e.setAttribute(n,"aria-hidden","true"),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(1);return r[0]=e.createAttrMorph(a,"class"),r},statements:[["attribute","class",["concat",["form-control-feedback ",["get","iconName",["loc",[null,[2,41],[2,49]]],0,0,0,0]],0,0,0,0,0],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:7}},moduleName:"bfcoder-github-com/templates/components/form-element/feedback-icon.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","hasFeedback",["loc",[null,[1,6],[1,17]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/form-element/horizontal/checkbox",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:8,column:6}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/checkbox.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("div"),a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","checkbox");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("label"),l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createComment("");e.appendChild(r,l);var l=e.createTextNode(" ");e.appendChild(r,l);var l=e.createComment("");e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n");return e.appendChild(n,a),e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[0]),r=e.childAt(a,[1,1]),l=new Array(4);return l[0]=e.createAttrMorph(a,"class"),l[1]=e.createMorphAt(r,1,1),l[2]=e.createMorphAt(r,3,3),l[3]=e.createMorphAt(a,3,3),l},statements:[["attribute","class",["concat",[["get","horizontalInputGridClass",["loc",[null,[1,14],[1,38]]],0,0,0,0]," ",["get","horizontalInputOffsetGridClass",["loc",[null,[1,43],[1,73]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["inline","input",[],["name",["subexpr","@mut",[["get","name",["loc",[null,[4,25],[4,29]]],0,0,0,0]],[],[],0,0],"type","checkbox","checked",["subexpr","@mut",[["get","value",["loc",[null,[4,54],[4,59]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[4,69],[4,77]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[4,87],[4,95]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,12],[4,97]]],0,0],["content","label",["loc",[null,[4,98],[4,107]]],0,0,0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[7,4],[7,48]]],0,0]],locals:[],templates:[]}}())}),define("bfcoder-github-com/templates/components/form-element/horizontal/default",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:4,column:8},end:{line:6,column:8}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","value",["loc",[null,[5,20],[5,25]]],0,0,0,0],["get","formElementId",["loc",[null,[5,26],[5,39]]],0,0,0,0],["get","validation",["loc",[null,[5,40],[5,50]]],0,0,0,0]],[],["loc",[null,[5,12],[5,52]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:6,column:8},end:{line:8,column:8}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","bs-input",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[7,26],[7,39]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[7,45],[7,49]]],0,0,0,0]],[],[],0,0],"type",["subexpr","@mut",[["get","controlType",["loc",[null,[7,55],[7,66]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[7,73],[7,78]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[7,91],[7,102]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[7,113],[7,122]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[7,132],[7,140]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[7,150],[7,158]]],0,0,0,0]],[],[],0,0]],["loc",[null,[7,12],[7,160]]],0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:12,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createElement("div"),a=e.createTextNode("\n");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode(" ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=e.childAt(t,[3]),l=new Array(7);return l[0]=e.createAttrMorph(a,"class"),l[1]=e.createAttrMorph(a,"for"),l[2]=e.createMorphAt(a,0,0),l[3]=e.createAttrMorph(r,"class"),l[4]=e.createMorphAt(r,1,1),l[5]=e.createMorphAt(r,3,3),l[6]=e.createMorphAt(r,5,5),l},statements:[["attribute","class",["concat",["control-label ",["get","horizontalLabelGridClass",["loc",[null,[2,34],[2,58]]],0,0,0,0]," ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,66],[2,80]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,61],[2,92]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,101],[2,114]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,118],[2,127]]],0,0,0,0],["attribute","class",["concat",[["get","horizontalInputGridClass",["loc",[null,[3,18],[3,42]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["block","if",[["get","hasBlock",["loc",[null,[4,14],[4,22]]],0,0,0,0]],[],0,1,["loc",[null,[4,8],[8,15]]]],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[9,8],[9,59]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[10,8],[10,52]]],0,0]],locals:[],templates:[e,t]}}(),t=function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:14,column:8},end:{line:16,column:8}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","value",["loc",[null,[15,20],[15,25]]],0,0,0,0],["get","formElementId",["loc",[null,[15,26],[15,39]]],0,0,0,0],["get","validation",["loc",[null,[15,40],[15,50]]],0,0,0,0]],[],["loc",[null,[15,12],[15,52]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:16,column:8},end:{line:18,column:8}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","bs-input",[],["name",["subexpr","@mut",[["get","name",["loc",[null,[17,28],[17,32]]],0,0,0,0]],[],[],0,0],"type",["subexpr","@mut",[["get","controlType",["loc",[null,[17,38],[17,49]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[17,56],[17,61]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[17,74],[17,85]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[17,96],[17,105]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[17,115],[17,123]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[17,133],[17,141]]],0,0,0,0]],[],[],0,0]],["loc",[null,[17,12],[17,143]]],0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:12,column:0},end:{line:22,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("div"),a=e.createTextNode("\n");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode(" ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(4);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createMorphAt(a,1,1),r[2]=e.createMorphAt(a,3,3),r[3]=e.createMorphAt(a,5,5),r},statements:[["attribute","class",["concat",[["get","horizontalInputGridClass",["loc",[null,[13,18],[13,42]]],0,0,0,0]," ",["get","horizontalInputOffsetGridClass",["loc",[null,[13,47],[13,77]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["block","if",[["get","hasBlock",["loc",[null,[14,14],[14,22]]],0,0,0,0]],[],0,1,["loc",[null,[14,8],[18,15]]]],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[19,8],[19,59]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[20,8],[20,52]]],0,0]],locals:[],templates:[e,t]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:23,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,1,["loc",[null,[1,0],[22,7]]]]],locals:[],templates:[e,t]}}())}),define("bfcoder-github-com/templates/components/form-element/horizontal/select",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:8,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createElement("div"),a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=e.childAt(t,[3]),l=new Array(7);return l[0]=e.createAttrMorph(a,"class"),l[1]=e.createAttrMorph(a,"for"),l[2]=e.createMorphAt(a,0,0),l[3]=e.createAttrMorph(r,"class"),l[4]=e.createMorphAt(r,1,1),l[5]=e.createMorphAt(r,3,3),l[6]=e.createMorphAt(r,5,5),l},statements:[["attribute","class",["concat",["control-label ",["get","horizontalLabelGridClass",["loc",[null,[2,34],[2,58]]],0,0,0,0]," ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,66],[2,80]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,61],[2,92]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,101],[2,114]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,118],[2,127]]],0,0,0,0],["attribute","class",["concat",[["get","horizontalInputGridClass",["loc",[null,[3,18],[3,42]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["inline","bs-select",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[4,23],[4,36]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[4,42],[4,46]]],0,0,0,0]],[],[],0,0],"content",["subexpr","@mut",[["get","choices",["loc",[null,[4,55],[4,62]]],0,0,0,0]],[],[],0,0],"optionValuePath",["subexpr","@mut",[["get","choiceValueProperty",["loc",[null,[4,79],[4,98]]],0,0,0,0]],[],[],0,0],"optionLabelPath",["subexpr","@mut",[["get","choiceLabelProperty",["loc",[null,[4,115],[4,134]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[4,141],[4,146]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[4,156],[4,164]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[4,174],[4,182]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,8],[4,184]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[5,8],[5,59]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[6,8],[6,52]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:8,column:0},end:{line:14,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("div"),a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(4);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createMorphAt(a,1,1),r[2]=e.createMorphAt(a,3,3),r[3]=e.createMorphAt(a,5,5),r},statements:[["attribute","class",["concat",[["get","horizontalInputGridClass",["loc",[null,[9,18],[9,42]]],0,0,0,0]," ",["get","horizontalInputOffsetGridClass",["loc",[null,[9,47],[9,77]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["inline","bs-select",[],["name",["subexpr","@mut",[["get","name",["loc",[null,[10,25],[10,29]]],0,0,0,0]],[],[],0,0],"content",["subexpr","@mut",[["get","choices",["loc",[null,[10,38],[10,45]]],0,0,0,0]],[],[],0,0],"optionValuePath",["subexpr","@mut",[["get","choiceValueProperty",["loc",[null,[10,62],[10,81]]],0,0,0,0]],[],[],0,0],"optionLabelPath",["subexpr","@mut",[["get","choiceLabelProperty",["loc",[null,[10,98],[10,117]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[10,124],[10,129]]],0,0,0,0]],[],[],0,0]],["loc",[null,[10,8],[10,131]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[11,8],[11,59]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[12,8],[12,52]]],0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:15,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,1,["loc",[null,[1,0],[14,7]]]]],locals:[],templates:[e,t]}}())}),define("bfcoder-github-com/templates/components/form-element/horizontal/textarea",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:8,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/textarea.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n ");e.appendChild(t,n);var n=e.createElement("div"),a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=e.childAt(t,[3]),l=new Array(7);return l[0]=e.createAttrMorph(a,"class"),l[1]=e.createAttrMorph(a,"for"),l[2]=e.createMorphAt(a,0,0),l[3]=e.createAttrMorph(r,"class"),l[4]=e.createMorphAt(r,1,1),l[5]=e.createMorphAt(r,3,3),l[6]=e.createMorphAt(r,5,5),l},statements:[["attribute","class",["concat",["control-label ",["get","horizontalLabelGridClass",["loc",[null,[2,34],[2,58]]],0,0,0,0]," ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,66],[2,80]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,61],[2,92]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,101],[2,114]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,118],[2,127]]],0,0,0,0],["attribute","class",["concat",[["get","horizontalInputGridClass",["loc",[null,[3,18],[3,42]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["inline","bs-textarea",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[4,25],[4,38]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[4,44],[4,48]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[4,55],[4,60]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[4,73],[4,84]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[4,95],[4,104]]],0,0,0,0]],[],[],0,0],"cols",["subexpr","@mut",[["get","cols",["loc",[null,[4,110],[4,114]]],0,0,0,0]],[],[],0,0],"rows",["subexpr","@mut",[["get","rows",["loc",[null,[4,120],[4,124]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[4,134],[4,142]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[4,152],[4,160]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,8],[4,162]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[5,8],[5,59]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[6,8],[6,52]]],0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:8,column:0},end:{line:14,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/textarea.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("div"),a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createComment("");e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(4);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createMorphAt(a,1,1),r[2]=e.createMorphAt(a,3,3),r[3]=e.createMorphAt(a,5,5),r},statements:[["attribute","class",["concat",[["get","horizontalInputGridClass",["loc",[null,[9,18],[9,42]]],0,0,0,0]," ",["get","horizontalInputOffsetGridClass",["loc",[null,[9,47],[9,77]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["inline","bs-textarea",[],["name",["subexpr","@mut",[["get","name",["loc",[null,[10,27],[10,31]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[10,38],[10,43]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[10,56],[10,67]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[10,78],[10,87]]],0,0,0,0]],[],[],0,0],"cols",["subexpr","@mut",[["get","cols",["loc",[null,[10,93],[10,97]]],0,0,0,0]],[],[],0,0],"rows",["subexpr","@mut",[["get","rows",["loc",[null,[10,103],[10,107]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[10,117],[10,125]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[10,135],[10,143]]],0,0,0,0]],[],[],0,0]],["loc",[null,[10,8],[10,145]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[11,8],[11,59]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[12,8],[12,52]]],0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:15,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/horizontal/textarea.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,0,0,n),e.insertBoundary(t,0),e.insertBoundary(t,null),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,1,["loc",[null,[1,0],[14,7]]]]],locals:[],templates:[e,t]}}())}),define("bfcoder-github-com/templates/components/form-element/inline/checkbox",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:5,column:6}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/checkbox.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("div");e.setAttribute(n,"class","checkbox");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("label"),r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createComment("");e.appendChild(a,r);var r=e.createTextNode(" ");e.appendChild(a,r);var r=e.createComment("");e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");return e.appendChild(n,a),e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[0,1]),r=new Array(2);return r[0]=e.createMorphAt(a,1,1),r[1]=e.createMorphAt(a,3,3),r},statements:[["inline","input",[],["name",["subexpr","@mut",[["get","name",["loc",[null,[3,21],[3,25]]],0,0,0,0]],[],[],0,0],"type","checkbox","checked",["subexpr","@mut",[["get","value",["loc",[null,[3,50],[3,55]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[3,65],[3,73]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[3,83],[3,91]]],0,0,0,0]],[],[],0,0]],["loc",[null,[3,8],[3,93]]],0,0],["content","label",["loc",[null,[3,94],[3,103]]],0,0,0,0]],locals:[],templates:[]}}())}),define("bfcoder-github-com/templates/components/form-element/inline/default",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createAttrMorph(a,"for"),r[2]=e.createMorphAt(a,0,0),r},statements:[["attribute","class",["concat",["control-label ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,37],[2,51]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,32],[2,63]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,72],[2,85]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,89],[2,98]]],0,0,0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:4,column:0},end:{line:6,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","value",["loc",[null,[5,12],[5,17]]],0,0,0,0],["get","formElementId",["loc",[null,[5,18],[5,31]]],0,0,0,0],["get","validation",["loc",[null,[5,32],[5,42]]],0,0,0,0]],[],["loc",[null,[5,4],[5,44]]],0,0]],locals:[],templates:[]}}(),n=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:6,column:0},end:{line:8,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","bs-input",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[7,18],[7,31]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[7,37],[7,41]]],0,0,0,0]],[],[],0,0],"type",["subexpr","@mut",[["get","controlType",["loc",[null,[7,47],[7,58]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[7,65],[7,70]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[7,83],[7,94]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[7,105],[7,114]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[7,124],[7,132]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[7,142],[7,150]]],0,0,0,0]],[],[],0,0]],["loc",[null,[7,4],[7,152]]],0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:10,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(3);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),a[2]=e.createMorphAt(t,2,2,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]],["block","if",[["get","hasBlock",["loc",[null,[4,6],[4,14]]],0,0,0,0]],[],1,2,["loc",[null,[4,0],[8,7]]]],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[9,0],[9,51]]],0,0]],locals:[],templates:[e,t,n]}}())}),define("bfcoder-github-com/templates/components/form-element/inline/select",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a), -e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createAttrMorph(a,"for"),r[2]=e.createMorphAt(a,0,0),r},statements:[["attribute","class",["concat",["control-label ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,37],[2,51]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,32],[2,63]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,72],[2,85]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,89],[2,98]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:6,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(3);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),a[2]=e.createMorphAt(t,3,3,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]],["inline","bs-select",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[4,15],[4,28]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[4,34],[4,38]]],0,0,0,0]],[],[],0,0],"content",["subexpr","@mut",[["get","choices",["loc",[null,[4,47],[4,54]]],0,0,0,0]],[],[],0,0],"optionValuePath",["subexpr","@mut",[["get","choiceValueProperty",["loc",[null,[4,71],[4,90]]],0,0,0,0]],[],[],0,0],"optionLabelPath",["subexpr","@mut",[["get","choiceLabelProperty",["loc",[null,[4,107],[4,126]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[4,133],[4,138]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[4,148],[4,156]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[4,166],[4,174]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,0],[4,176]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[5,0],[5,51]]],0,0]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/form-element/inline/textarea",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/textarea.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createAttrMorph(a,"for"),r[2]=e.createMorphAt(a,0,0),r},statements:[["attribute","class",["concat",["control-label ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,37],[2,51]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,32],[2,63]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,72],[2,85]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,89],[2,98]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:7,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/inline/textarea.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(4);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),a[2]=e.createMorphAt(t,3,3,n),a[3]=e.createMorphAt(t,5,5,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]],["inline","bs-textarea",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[4,17],[4,30]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[4,36],[4,40]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[4,47],[4,52]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[4,65],[4,76]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[4,87],[4,96]]],0,0,0,0]],[],[],0,0],"cols",["subexpr","@mut",[["get","cols",["loc",[null,[4,102],[4,106]]],0,0,0,0]],[],[],0,0],"rows",["subexpr","@mut",[["get","rows",["loc",[null,[4,112],[4,116]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[4,126],[4,134]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[4,144],[4,152]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,0],[4,154]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[5,0],[5,51]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[6,0],[6,44]]],0,0]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/form-element/vertical/checkbox",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:6,column:44}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/checkbox.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("div");e.setAttribute(n,"class","checkbox");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("label"),r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createComment("");e.appendChild(a,r);var r=e.createTextNode(" ");e.appendChild(a,r);var r=e.createComment("");e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[0,1]),r=new Array(3);return r[0]=e.createMorphAt(a,1,1),r[1]=e.createMorphAt(a,3,3),r[2]=e.createMorphAt(t,2,2,n),e.insertBoundary(t,null),r},statements:[["inline","input",[],["name",["subexpr","@mut",[["get","name",["loc",[null,[3,21],[3,25]]],0,0,0,0]],[],[],0,0],"type","checkbox","checked",["subexpr","@mut",[["get","value",["loc",[null,[3,50],[3,55]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[3,65],[3,73]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[3,83],[3,91]]],0,0,0,0]],[],[],0,0]],["loc",[null,[3,8],[3,93]]],0,0],["content","label",["loc",[null,[3,94],[3,103]]],0,0,0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[6,0],[6,44]]],0,0]],locals:[],templates:[]}}())}),define("bfcoder-github-com/templates/components/form-element/vertical/default",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createAttrMorph(a,"for"),r[2]=e.createMorphAt(a,0,0),r},statements:[["attribute","class",["concat",["control-label ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,37],[2,51]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,32],[2,63]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,72],[2,85]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,89],[2,98]]],0,0,0,0]],locals:[],templates:[]}}(),t=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:4,column:0},end:{line:6,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","yield",[["get","value",["loc",[null,[5,12],[5,17]]],0,0,0,0],["get","formElementId",["loc",[null,[5,18],[5,31]]],0,0,0,0],["get","validation",["loc",[null,[5,32],[5,42]]],0,0,0,0]],[],["loc",[null,[5,4],[5,44]]],0,0]],locals:[],templates:[]}}(),n=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:6,column:0},end:{line:8,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(t,1,1,n),a},statements:[["inline","bs-input",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[7,18],[7,31]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[7,37],[7,41]]],0,0,0,0]],[],[],0,0],"type",["subexpr","@mut",[["get","controlType",["loc",[null,[7,47],[7,58]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[7,65],[7,70]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[7,83],[7,94]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[7,105],[7,114]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[7,124],[7,132]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[7,142],[7,150]]],0,0,0,0]],[],[],0,0]],["loc",[null,[7,4],[7,152]]],0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:11,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/default.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(4);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),a[2]=e.createMorphAt(t,2,2,n),a[3]=e.createMorphAt(t,4,4,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]],["block","if",[["get","hasBlock",["loc",[null,[4,6],[4,14]]],0,0,0,0]],[],1,2,["loc",[null,[4,0],[8,7]]]],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[9,0],[9,51]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[10,0],[10,44]]],0,0]],locals:[],templates:[e,t,n]}}())}),define("bfcoder-github-com/templates/components/form-element/vertical/select",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createAttrMorph(a,"for"),r[2]=e.createMorphAt(a,0,0),r},statements:[["attribute","class",["concat",["control-label ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,37],[2,51]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,32],[2,63]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,72],[2,85]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,89],[2,98]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:7,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/select.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(4);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),a[2]=e.createMorphAt(t,3,3,n),a[3]=e.createMorphAt(t,5,5,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]],["inline","bs-select",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[4,15],[4,28]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[4,34],[4,38]]],0,0,0,0]],[],[],0,0],"content",["subexpr","@mut",[["get","choices",["loc",[null,[4,47],[4,54]]],0,0,0,0]],[],[],0,0],"optionValuePath",["subexpr","@mut",[["get","choiceValueProperty",["loc",[null,[4,71],[4,90]]],0,0,0,0]],[],[],0,0],"optionLabelPath",["subexpr","@mut",[["get","choiceLabelProperty",["loc",[null,[4,107],[4,126]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[4,133],[4,138]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[4,148],[4,156]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[4,166],[4,174]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,0],[4,176]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[5,0],[5,51]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[6,0],[6,44]]],0,0]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/components/form-element/vertical/textarea",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:3,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/textarea.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode(" ");e.appendChild(t,n);var n=e.createElement("label"),a=e.createComment("");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=e.childAt(t,[1]),r=new Array(3);return r[0]=e.createAttrMorph(a,"class"),r[1]=e.createAttrMorph(a,"for"),r[2]=e.createMorphAt(a,0,0),r},statements:[["attribute","class",["concat",["control-label ",["subexpr","if",[["get","invisibleLabel",["loc",[null,[2,37],[2,51]]],0,0,0,0],"sr-only"],[],["loc",[null,[2,32],[2,63]]],0,0]],0,0,0,0,0],0,0,0,0],["attribute","for",["concat",[["get","formElementId",["loc",[null,[2,72],[2,85]]],0,0,0,0]],0,0,0,0,0],0,0,0,0],["content","label",["loc",[null,[2,89],[2,98]]],0,0,0,0]],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:7,column:0}},moduleName:"bfcoder-github-com/templates/components/form-element/vertical/textarea.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createComment("");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createComment("");e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(4);return a[0]=e.createMorphAt(t,0,0,n),a[1]=e.createMorphAt(t,1,1,n),a[2]=e.createMorphAt(t,3,3,n),a[3]=e.createMorphAt(t,5,5,n),e.insertBoundary(t,0),a},statements:[["block","if",[["get","hasLabel",["loc",[null,[1,6],[1,14]]],0,0,0,0]],[],0,null,["loc",[null,[1,0],[3,7]]]],["inline","bs-textarea",[],["id",["subexpr","@mut",[["get","formElementId",["loc",[null,[4,17],[4,30]]],0,0,0,0]],[],[],0,0],"value",["subexpr","@mut",[["get","value",["loc",[null,[4,37],[4,42]]],0,0,0,0]],[],[],0,0],"name",["subexpr","@mut",[["get","name",["loc",[null,[4,48],[4,52]]],0,0,0,0]],[],[],0,0],"placeholder",["subexpr","@mut",[["get","placeholder",["loc",[null,[4,65],[4,76]]],0,0,0,0]],[],[],0,0],"autofocus",["subexpr","@mut",[["get","autofocus",["loc",[null,[4,87],[4,96]]],0,0,0,0]],[],[],0,0],"disabled",["subexpr","@mut",[["get","disabled",["loc",[null,[4,106],[4,114]]],0,0,0,0]],[],[],0,0],"required",["subexpr","@mut",[["get","required",["loc",[null,[4,124],[4,132]]],0,0,0,0]],[],[],0,0],"cols",["subexpr","@mut",[["get","cols",["loc",[null,[4,138],[4,142]]],0,0,0,0]],[],[],0,0],"rows",["subexpr","@mut",[["get","rows",["loc",[null,[4,148],[4,152]]],0,0,0,0]],[],[],0,0]],["loc",[null,[4,0],[4,154]]],0,0],["inline","partial",["components/form-element/feedback-icon"],[],["loc",[null,[5,0],[5,51]]],0,0],["inline","partial",["components/form-element/errors"],[],["loc",[null,[6,0],[6,44]]],0,0]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/index",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){var e=function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:11,column:386},end:{line:11,column:417}},moduleName:"bfcoder-github-com/templates/index.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createTextNode("Projects");return e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}();return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:44,column:0}},moduleName:"bfcoder-github-com/templates/index.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("div");e.setAttribute(n,"class","jumbotron");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","text-center");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("I am bfcoder, aka James Carbine");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-6");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h4"),o=e.createTextNode("Profession");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("I am a software developer. I write code for ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://www.atomicjolt.com/");var d=e.createTextNode("Atomic Jolt");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(". I worked for Tatemae from November 2011 - November 2014. I was hired on with Atomic Jolt in November 2014. Prior to that I worked for the Sam's Club Pharmacy as a Pharmacy Technician for 6 years while I studied Computer Science at USU. Take a look at some of the ");e.appendChild(l,o);var o=e.createComment("");e.appendChild(l,o);var o=e.createTextNode(" I have done.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-6");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h4"),o=e.createTextNode("Education");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("I studied Computer Science at Utah State University in Logan, Utah. I graduated with a BS in Computer Science in May 2013. ");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-6");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h4"),o=e.createTextNode("Experience");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://rubyonrails.org/");var d=e.createTextNode("Ruby on Rails");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"href","http://yuiblog.com/crockford/");var d=e.createTextNode("Javascript");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(" (including ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://jquery.com/");var d=e.createTextNode("jQuery");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(", ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://emberjs.com/");var d=e.createTextNode("Ember.js");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(", ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://coffeescript.org/");var d=e.createTextNode("CoffeeScript");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(", ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://nodejs.org/");var d=e.createTextNode("Node.js");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(", and ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","https://facebook.github.io/react/");var d=e.createTextNode("React.js");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(")");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://www.html5rocks.com/");var d=e.createTextNode("HTML5");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://www.iron.io/");var d=e.createTextNode("Iron.io");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("C#");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("C++");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://www.phoenixframework.org/");var d=e.createTextNode("Phoenix");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("postgres");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-6");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h4"),o=e.createTextNode("Barefeet");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Yes indeed, I am a barefoot advocate. I started going barefoot in the Fall of 2010. I wear shoes on very few occasions, and not for long when I do. When I ride my motorcycle, I wear shoes. When I'm working with the horses, I wear shoes. When I'm working with power tools/machinery(lawn mower), I wear shoes. But pretty much other than that, I have nixed shoes. I especially dislike shoes with a heal. My wife owns no high heels. Period. I hiked all over Moab and Arches National Park while being barefoot. I've done 5 mile hikes through the mountains barefoot. I love being barefoot. I believe my body has strengthened itself since going barefoot. Back pains have gone, unless of course I have done something to incite pain. Like sleeping on a rock in the middle of my back I'm sure would incite pain. Barefeet FTW!");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(e,t,n){var a=new Array(1);return a[0]=e.createMorphAt(e.childAt(t,[2,1,1,3]),3,3),a},statements:[["block","link-to",["projects"],[],0,null,["loc",[null,[11,386],[11,429]]]]],locals:[],templates:[e]}}())}),define("bfcoder-github-com/templates/projects",["exports"],function(e){e.default=Ember.HTMLBars.template(function(){return{meta:{revision:"Ember@2.7.1",loc:{source:null,start:{line:1,column:0},end:{line:140,column:0}},moduleName:"bfcoder-github-com/templates/projects.hbs"},isEmpty:!1,arity:0,cachedFragment:null,hasRendered:!1,buildFragment:function(e){var t=e.createDocumentFragment(),n=e.createElement("div");e.setAttribute(n,"class","jumbotron");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","container");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("h1"),l=e.createTextNode("My Projects");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("Here are the projects I have been involved with.");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("Open Tapestry");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Finding open educational resources and clipping them for others to see and use. This web app allows teachers to gather open educational resources from about the web, and place them into tapestries for their students to view. Or perhaps make lessons to show the class. Possibilities are numerous. It can also be very useful to corporations wanting to train their employees and give them quizzes to make sure they understand the training. Anyone can build up a course for someone to take.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, Javascript, mysql");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://www.opentapestry.com/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("Hacking Instructure's Canvas");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("I took Instructure's Canvas and modified it for the EDC Maine EM2 Project. It now has the ability to enter misconception probabilities for an assessment. So when the student takes an assessment, it calculates the probability that they have a misconception. It does not show a score to the student or the teacher. The teacher can pull up a report that shows them which students have misconceptions about mathematics. I also incorporated new features into taking an assessment. The student can type in an explanation. They can also draw an explanation as to why they feel the answer they chose is correct."); -e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, Javascript, mysql");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://maine.edc.org/file.php/1/em2/em2.html");var d=e.createTextNode("View details »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("Saylor.org");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Online free educational institution called ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://www.saylor.org/");var d=e.createTextNode("Saylor.org");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(". I helped develop the ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://eportfolio.saylor.org/");var d=e.createTextNode(" ePortfolio");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(" for the site.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Check it out if you want some free education. Very cool.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, Javascript, mysql");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://eportfolio.saylor.org/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("Matti - graph theory");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Created some interactive modules to teach students about graph theory. This included Euler Circuits, Minimum Spanning Tree - Kruskal's Algorithm, and Map Coloring. The modules are included with this book \"");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://www.wiley.com/WileyCDA/WileyTitle/productCd-EHEP002457.html");var d=e.createTextNode("The Heart of Mathematics: An Invitation to Effective Thinking, 4th Edition");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode('."');e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: HTML5, Javascript (KineticJS)");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("Matti - Base Blocks");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Base Blocks had previously been written by my boss ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://www.joelduffin.com/");var d=e.createTextNode("Joel Duffin");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(" however it was written in Java. It can be found on the ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://enlvm.usu.edu/ma/nav/index.jsp");var d=e.createTextNode("eNLVM");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(": ");e.appendChild(l,o);var o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"href","http://enlvm.usu.edu/ma/nav/activity.jsp?sid=nlvm&cid=4_2&lid=152");var d=e.createTextNode("Base Blocks");e.appendChild(o,d),e.appendChild(l,o);var o=e.createTextNode(". This made it useless to be ran on an iOS device. So I was enlisted to re-write the code in HTML5 so it could be ran on mobile devices as well. I wrote a lot of it and Kami Wilson took over the project so I could focus on other projects.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: HTML5, Javascript (KineticJS)");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4 well");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("h2"),l=e.createTextNode("Octopi");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("Another project that wanted Instructure's Canvas modified for use in an adaptive math testing environment. I made the system work, however the guy never got the funding to complete it.");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("p"),l=e.createTextNode("Technology: Ruby on Rails, Javascript, mysql");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("Open Assessments");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("This is a project that we built and was funded by MIT. It is a way for anyone to create online assessments and embed them anywhere on the web. Put them inside Instructure's Canvas, or put them on your blog. Doesn't really matter. After people have taken the assessment, you can view the statistics. It was built with Ruby on Rails. We will switch it over to Ruby on Rails combined with Ember.js eventually.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, Javascript");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://www.openassessments.com/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("CMAT");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("CMAT stands for Concept Map Authoring Tool. You can build concept maps with it.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, HTML5, Javascript (KineticJS, Ember)");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://cmat.herokuapp.com/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("OEIT Player");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("I rebuilt the MIT OEIT Player to work with html5 using JW Player 6. If you check it out, go to the bottom left video of Walter Lewin for a good example. I made it so they can easily put new videos together and using data tags set the parameters of the video.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: HTML5, Javascript, JW Player 6");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://iihs.herokuapp.com/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("OEIT Player Authoring");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("I built an authoring interface for MIT to build the html for the players.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: HTML5, Javascript");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://iihs.herokuapp.com/admin/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("panOpen");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("panOpen is an app that an instructor can create a course with a book. The students can read the book and take quizzes for the chapters. The instructor can view the statistics for each student in the class. Statistics include the time they have spent reading the book and each of their attempts at the quizzes. I also wrote a node app that accepts an image request with user and book id's. It stores that information in Redis. While the student is reading the book, every 15 seconds it sends a request for the image, thus recording that they are reading the book. I then wrote an iron.io task that gets all that data out of Redis and crunches it to compute how long they have been reading for. It then sends that data to rails to store in the database.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("After some time, we decided we needed a faster system. So I converted from a node app to a phoenix elixir app. We no longer send image requests. We just POST to it with CORS as it is on a separate domain, and store it in postgres. During the POST I do an upsert on the data. Each day gets it own entry in the database. So now I no longer need iron.io to compute the data. I can just query the database on demand.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, Javascript (Ember, React, Phoenix), postgres");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://www.panopen.com/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("FreightLink Tracker");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("FreightLink Tracker is an app that enables you to create and track shipments via Truck, Ship, Plane, and Train. I have been re-implementing the shipments pages from Rails to Ember.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, Javascript (Ember), postgres");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n\n");e.appendChild(t,n);var n=e.createElement("h1"),a=e.createTextNode("School Projects");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("CS5460 Final Project");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("My CS5460 Computer Securities final project for authenticating a user.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: Ruby on Rails, Javascript");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://finalproject.bfcoder.com/");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("CS5100 HTML5 Project");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Made a site with Scott Biery that highlighted HTML5 and gave some examples. I wrote the two HTML5 canvas examples and Scott formatted the site and put together the HTML5 examples page. It was a lot of fun to write the javascript for this project. And yes, it works with an iPad. :]");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: HTML5");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://www.ninjascott.com/CS5100/about-html5.php");var d=e.createTextNode("Check it out »");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n\n");e.appendChild(t,n);var n=e.createElement("h1"),a=e.createTextNode("Volunteer Projects");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");e.appendChild(t,n);var n=e.createElement("div");e.setAttribute(n,"class","row");var a=e.createTextNode("\n ");e.appendChild(n,a);var a=e.createElement("div");e.setAttribute(a,"class","col-md-4");var r=e.createTextNode("\n ");e.appendChild(a,r);var r=e.createElement("div");e.setAttribute(r,"class","well");var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("h2"),o=e.createTextNode("The Living Planet Aquarium");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Currently building a page to highlight a Sea Turtle that has been rescued.");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createTextNode("Technology: HTML5, Javascript (Ember)");e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l);var l=e.createElement("p"),o=e.createElement("a");e.setAttribute(o,"target","_blank"),e.setAttribute(o,"class","btn btn-default"),e.setAttribute(o,"href","http://www.thelivingplanet.com/index.php");var d=e.createTextNode("The Living Planet Aquarium");e.appendChild(o,d),e.appendChild(l,o),e.appendChild(r,l);var l=e.createTextNode("\n ");e.appendChild(r,l),e.appendChild(a,r);var r=e.createTextNode("\n ");e.appendChild(a,r),e.appendChild(n,a);var a=e.createTextNode("\n");e.appendChild(n,a),e.appendChild(t,n);var n=e.createTextNode("\n");return e.appendChild(t,n),t},buildRenderNodes:function(){return[]},statements:[],locals:[],templates:[]}}())}),define("bfcoder-github-com/config/environment",["ember"],function(e){var t="bfcoder-github-com";try{var n=t+"/config/environment",a=e.default.$('meta[name="'+n+'"]').attr("content"),r=JSON.parse(unescape(a));return{default:r}}catch(e){throw new Error('Could not read config from meta tag with name "'+n+'".')}}),runningTests||require("bfcoder-github-com/app").default.create({name:"bfcoder-github-com",version:"0.0.0+8a56283e"}); \ No newline at end of file diff --git a/assets/bfcoder-github-com-d41d8cd98f00b204e9800998ecf8427e.css b/assets/bfcoder-github-com-d41d8cd98f00b204e9800998ecf8427e.css deleted file mode 100644 index e69de29..0000000 diff --git a/assets/vendor-1148a0ca383f043a219bddec84251895.css b/assets/vendor-1148a0ca383f043a219bddec84251895.css deleted file mode 100644 index 7076114..0000000 --- a/assets/vendor-1148a0ca383f043a219bddec84251895.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}hr,img{border:0}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.dropdown-menu,.modal-content{-webkit-background-clip:padding-box}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.carousel-inner,.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;line-break:auto;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.carousel-control,.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;text-align:left;text-align:start;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;text-align:left;text-align:start;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}} \ No newline at end of file diff --git a/assets/vendor-51a1adf02e7251a3a7225a37fd6eeb76.js b/assets/vendor-51a1adf02e7251a3a7225a37fd6eeb76.js deleted file mode 100644 index 0693f11..0000000 --- a/assets/vendor-51a1adf02e7251a3a7225a37fd6eeb76.js +++ /dev/null @@ -1,19 +0,0 @@ -function createDeprecatedModule(e){define(e,["exports","ember-resolver/resolver","ember"],function(t,r,n){n.default.deprecate("Usage of `"+e+"` module is deprecated, please update to `ember-resolver`.",!1,{id:"ember-resolver.legacy-shims",until:"3.0.0"}),t.default=r.default})}window.EmberENV={FEATURES:{}};var runningTests=!1,loader,define,requireModule,require,requirejs;!function(e){"use strict";function t(){u={define:0,require:0,reify:0,findDeps:0,modules:0,exports:0,resolve:0,resolveRelative:0,findModule:0,pendingQueueLength:0},requirejs._stats=u}function r(e){throw new Error("an unsupported module was defined, expected `define(name, deps, module)` instead got: `"+e+"` arguments to define`")}function n(e,t,r,n){u.modules++,this.id=h++,this.name=e,this.deps=!t.length&&r.length?m:t,this.module={exports:{}},this.callback=r,this.finalized=!1,this.hasExportsAsDep=!1,this.isAlias=n,this.reified=new Array(t.length),this._foundDeps=!1,this.isPending=!1}function i(e){this.name=e}function o(e,t){throw new Error("Could not find module `"+e+"` imported from `"+t+"`")}function a(e,t,r){u.findModule++;for(var n=f[e]||f[e+"/index"];n&&n.isAlias;)n=f[n.name];return n||o(e,t),!r||n.finalized||n.isPending||(n.findDeps(r),r.push(n),u.pendingQueueLength++),n}function s(e,t){if(u.resolve++,"."!==e.charAt(0))return e;u.resolveRelative++;for(var r=e.split("/"),n=t.split("/"),i=n.slice(0,-1),o=0,a=r.length;o=0;n--)t[n].exports();return r.module.exports},t(),loader={noConflict:function(t){var r,n;for(r in t)t.hasOwnProperty(r)&&c.hasOwnProperty(r)&&(n=t[r],e[n]=e[r],e[r]=c[r])}};var d;d=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var f={},p={},h=0,m=["require","exports","module"];n.prototype.makeDefaultExport=function(){var e=this.module.exports;null===e||"object"!=typeof e&&"function"!=typeof e||void 0!==e.default||(e.default=e)},n.prototype.exports=function(){if(this.finalized)return this.module.exports;u.exports++,this.finalized=!0,this.isPending=!1,loader.wrapModules&&(this.callback=loader.wrapModules(this.name,this.callback)),this.reify();var e=this.callback.apply(this,this.reified);return this.hasExportsAsDep&&void 0===e||(this.module.exports=e),this.makeDefaultExport(),this.module.exports},n.prototype.unsee=function(){this.finalized=!1,this._foundDeps=!1,this.isPending=!1,this.module={exports:{}}},n.prototype.reify=function(){u.reify++;for(var e=this.reified,t=0;t0&&t-1 in e)}function n(e,t,r){if(oe.isFunction(t))return oe.grep(e,function(e,n){return!!t.call(e,n,e)!==r});if(t.nodeType)return oe.grep(e,function(e){return e===t!==r});if("string"==typeof t){if(me.test(t))return oe.filter(t,e,r);t=oe.filter(t,e)}return oe.grep(e,function(e){return Z.call(t,e)>-1!==r})}function i(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function o(e){var t={};return oe.each(e.match(we)||[],function(e,r){t[r]=!0}),t}function a(){Q.removeEventListener("DOMContentLoaded",a),e.removeEventListener("load",a),oe.ready()}function s(){this.expando=oe.expando+s.uid++}function l(e,t,r){var n;if(void 0===r&&1===e.nodeType)if(n="data-"+t.replace(Ae,"-$&").toLowerCase(),r=e.getAttribute(n),"string"==typeof r){try{r="true"===r||"false"!==r&&("null"===r?null:+r+""===r?+r:Te.test(r)?oe.parseJSON(r):r)}catch(e){}Ne.set(e,t,r)}else r=void 0;return r}function u(e,t,r,n){var i,o=1,a=20,s=n?function(){return n.cur()}:function(){return oe.css(e,t,"")},l=s(),u=r&&r[3]||(oe.cssNumber[t]?"":"px"),c=(oe.cssNumber[t]||"px"!==u&&+l)&&Se.exec(oe.css(e,t));if(c&&c[3]!==u){u=u||c[3],r=r||[],c=+l||1;do o=o||".5",c/=o,oe.style(e,t,c+u);while(o!==(o=s()/l)&&1!==o&&--a)}return r&&(c=+c||+l||0,i=r[1]?c+(r[1]+1)*r[2]:+r[2],n&&(n.unit=u,n.start=c,n.end=i)),i}function c(e,t){var r="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&oe.nodeName(e,t)?oe.merge([e],r):r}function d(e,t){for(var r=0,n=e.length;r-1)i&&i.push(o);else if(u=oe.contains(o.ownerDocument,o),a=c(p.appendChild(o),"script"),u&&d(a),r)for(f=0;o=a[f++];)je.test(o.type||"")&&r.push(o);return p}function p(){return!0}function h(){return!1}function m(){try{return Q.activeElement}catch(e){}}function b(e,t,r,n,i,o){var a,s;if("object"==typeof t){"string"!=typeof r&&(n=n||r,r=void 0);for(s in t)b(e,s,r,n,t[s],o);return e}if(null==n&&null==i?(i=r,n=r=void 0):null==i&&("string"==typeof r?(i=n,n=void 0):(i=n,n=r,r=void 0)),i===!1)i=h;else if(!i)return e;return 1===o&&(a=i,i=function(e){return oe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=oe.guid++)),e.each(function(){oe.event.add(this,t,i,n,r)})}function v(e,t){return oe.nodeName(e,"table")&&oe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function g(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function y(e){var t=Ue.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _(e,t){var r,n,i,o,a,s,l,u;if(1===t.nodeType){if(ke.hasData(e)&&(o=ke.access(e),a=ke.set(t,o),u=o.events)){delete a.handle,a.events={};for(i in u)for(r=0,n=u[i].length;r1&&"string"==typeof m&&!ne.checkClone&&Be.test(m))return e.each(function(i){var o=e.eq(i);b&&(t[0]=m.call(this,i,o.html())),x(o,t,r,n)});if(p&&(i=f(t,e[0].ownerDocument,!1,e,n),o=i.firstChild,1===i.childNodes.length&&(i=o),o||n)){for(a=oe.map(c(i,"script"),g),s=a.length;d")).appendTo(t.documentElement),t=Ke[0].contentDocument,t.write(),t.close(),r=E(e,t),Ke.detach()),$e[e]=r),r}function N(e,t,r){var n,i,o,a,s=e.style;return r=r||Ye(e),a=r?r.getPropertyValue(t)||r[t]:void 0,""!==a&&void 0!==a||oe.contains(e.ownerDocument,e)||(a=oe.style(e,t)),r&&!ne.pixelMarginRight()&&Qe.test(a)&&Ge.test(t)&&(n=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=r.width,s.width=n,s.minWidth=i,s.maxWidth=o),void 0!==a?a+"":a}function T(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function A(e){if(e in nt)return e;for(var t=e[0].toUpperCase()+e.slice(1),r=rt.length;r--;)if(e=rt[r]+t,e in nt)return e}function O(e,t,r){var n=Se.exec(t);return n?Math.max(0,n[2]-(r||0))+(n[3]||"px"):t}function S(e,t,r,n,i){for(var o=r===(n?"border":"content")?4:"width"===t?1:0,a=0;o<4;o+=2)"margin"===r&&(a+=oe.css(e,r+Pe[o],!0,i)),n?("content"===r&&(a-=oe.css(e,"padding"+Pe[o],!0,i)),"margin"!==r&&(a-=oe.css(e,"border"+Pe[o]+"Width",!0,i))):(a+=oe.css(e,"padding"+Pe[o],!0,i),"padding"!==r&&(a+=oe.css(e,"border"+Pe[o]+"Width",!0,i)));return a}function P(e,t,r){var n=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Ye(e),a="border-box"===oe.css(e,"boxSizing",!1,o);if(i<=0||null==i){if(i=N(e,t,o),(i<0||null==i)&&(i=e.style[t]),Qe.test(i))return i;n=a&&(ne.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+S(e,t,r||(a?"border":"content"),n,o)+"px"}function R(e,t){for(var r,n,i,o=[],a=0,s=e.length;a=0&&r=0},isPlainObject:function(e){var t;if("object"!==oe.type(e)||e.nodeType||oe.isWindow(e))return!1;if(e.constructor&&!re.call(e,"constructor")&&!re.call(e.constructor.prototype||{},"isPrototypeOf"))return!1;for(t in e);return void 0===t||re.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?ee[te.call(e)]||"object":typeof e},globalEval:function(e){var t,r=eval;e=oe.trim(e),e&&(1===e.indexOf("use strict")?(t=Q.createElement("script"),t.text=e,Q.head.appendChild(t).parentNode.removeChild(t)):r(e))},camelCase:function(e){return e.replace(se,"ms-").replace(le,ue)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,i=0;if(r(e))for(n=e.length;ix.cacheLength&&delete e[t.shift()],e[r+" "]=n}var t=[];return e}function n(e){return e[V]=!0,e}function i(e){var t=R.createElement("div");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var r=e.split("|"),n=r.length;n--;)x.attrHandle[r[n]]=t}function a(e,t){var r=t&&e,n=r&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||$)-(~e.sourceIndex||$);if(n)return n;if(r)for(;r=r.nextSibling;)if(r===t)return-1;return e?1:-1}function s(e){return function(t){var r=t.nodeName.toLowerCase();return"input"===r&&t.type===e}}function l(e){return function(t){var r=t.nodeName.toLowerCase();return("input"===r||"button"===r)&&t.type===e}}function u(e){return n(function(t){return t=+t,n(function(r,n){for(var i,o=e([],r.length,t),a=o.length;a--;)r[i=o[a]]&&(r[i]=!(n[i]=r[i]))})})}function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function d(){}function f(e){for(var t=0,r=e.length,n="";t1?function(t,r,n){for(var i=e.length;i--;)if(!e[i](t,r,n))return!1;return!0}:e[0]}function m(e,r,n){for(var i=0,o=r.length;i-1&&(n[u]=!(a[u]=d))}}else y=b(y===a?y.splice(h,y.length):y),o?o(null,a,y,l):J.apply(a,y)})}function g(e){for(var t,r,n,i=e.length,o=x.relative[e[0].type],a=o||x.relative[" "],s=o?1:0,l=p(function(e){return e===t},a,!0),u=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,r,n){var i=!o&&(n||r!==A)||((t=r).nodeType?l(e,r,n):u(e,r,n));return t=null,i}];s1&&h(c),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),r,s0,o=e.length>0,a=function(n,a,s,l,u){var c,d,f,p=0,h="0",m=n&&[],v=[],g=A,y=n||o&&x.find.TAG("*",u),_=q+=null==g?1:Math.random()||.1,w=y.length;for(u&&(A=a===R||a||u);h!==w&&null!=(c=y[h]);h++){if(o&&c){for(d=0,a||c.ownerDocument===R||(P(c),s=!M);f=e[d++];)if(f(c,a||R,s)){l.push(c);break}u&&(q=_)}i&&((c=!f&&c)&&p--,n&&m.push(c))}if(p+=h,i&&h!==p){for(d=0;f=r[d++];)f(m,v,a,s);if(n){if(p>0)for(;h--;)m[h]||v[h]||(v[h]=Y.call(l));v=b(v)}J.apply(l,v),u&&!n&&v.length>0&&p+r.length>1&&t.uniqueSort(l)}return u&&(q=_,A=g),m};return i?n(a):a}var _,w,x,C,E,k,N,T,A,O,S,P,R,D,M,j,L,I,F,V="sizzle"+1*new Date,H=e.document,q=0,z=0,B=r(),U=r(),W=r(),K=function(e,t){return e===t&&(S=!0),0},$=1<<31,G={}.hasOwnProperty,Q=[],Y=Q.pop,X=Q.push,J=Q.push,Z=Q.slice,ee=function(e,t){for(var r=0,n=e.length;r+~]|"+re+")"+re+"*"),ce=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),de=new RegExp(oe),fe=new RegExp("^"+ne+"$"),pe={ID:new RegExp("^#("+ne+")"),CLASS:new RegExp("^\\.("+ne+")"),TAG:new RegExp("^("+ne+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,be=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ge=/[+~]/,ye=/'|\\/g,_e=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),we=function(e,t,r){var n="0x"+t-65536;return n!==n||r?t:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},xe=function(){P()};try{J.apply(Q=Z.call(H.childNodes),H.childNodes),Q[H.childNodes.length].nodeType}catch(e){J={apply:Q.length?function(e,t){X.apply(e,Z.call(t))}:function(e,t){for(var r=e.length,n=0;e[r++]=t[n++];);e.length=r-1}}}w=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},P=t.setDocument=function(e){var t,r,n=e?e.ownerDocument||e:H;return n!==R&&9===n.nodeType&&n.documentElement?(R=n,D=R.documentElement,M=!E(R),(r=R.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",xe,!1):r.attachEvent&&r.attachEvent("onunload",xe)),w.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),w.getElementsByTagName=i(function(e){return e.appendChild(R.createComment("")),!e.getElementsByTagName("*").length}),w.getElementsByClassName=be.test(R.getElementsByClassName),w.getById=i(function(e){return D.appendChild(e).id=V,!R.getElementsByName||!R.getElementsByName(V).length}),w.getById?(x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&M){var r=t.getElementById(e);return r?[r]:[]}},x.filter.ID=function(e){var t=e.replace(_e,we);return function(e){return e.getAttribute("id")===t}}):(delete x.find.ID,x.filter.ID=function(e){var t=e.replace(_e,we);return function(e){var r="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return r&&r.value===t}}),x.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var r,n=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;r=o[i++];)1===r.nodeType&&n.push(r);return n}return o},x.find.CLASS=w.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&M)return t.getElementsByClassName(e)},L=[],j=[],(w.qsa=be.test(R.querySelectorAll))&&(i(function(e){D.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&j.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||j.push("\\["+re+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+V+"-]").length||j.push("~="),e.querySelectorAll(":checked").length||j.push(":checked"),e.querySelectorAll("a#"+V+"+*").length||j.push(".#.+[+~]")}),i(function(e){var t=R.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&j.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||j.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),j.push(",.*:")})),(w.matchesSelector=be.test(I=D.matches||D.webkitMatchesSelector||D.mozMatchesSelector||D.oMatchesSelector||D.msMatchesSelector))&&i(function(e){w.disconnectedMatch=I.call(e,"div"),I.call(e,"[s!='']:x"),L.push("!=",oe)}),j=j.length&&new RegExp(j.join("|")),L=L.length&&new RegExp(L.join("|")),t=be.test(D.compareDocumentPosition),F=t||be.test(D.contains)?function(e,t){var r=9===e.nodeType?e.documentElement:e,n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(r.contains?r.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},K=t?function(e,t){if(e===t)return S=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r?r:(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&r||!w.sortDetached&&t.compareDocumentPosition(e)===r?e===R||e.ownerDocument===H&&F(H,e)?-1:t===R||t.ownerDocument===H&&F(H,t)?1:O?ee(O,e)-ee(O,t):0:4&r?-1:1)}:function(e,t){if(e===t)return S=!0,0;var r,n=0,i=e.parentNode,o=t.parentNode,s=[e],l=[t];if(!i||!o)return e===R?-1:t===R?1:i?-1:o?1:O?ee(O,e)-ee(O,t):0;if(i===o)return a(e,t);for(r=e;r=r.parentNode;)s.unshift(r);for(r=t;r=r.parentNode;)l.unshift(r);for(;s[n]===l[n];)n++;return n?a(s[n],l[n]):s[n]===H?-1:l[n]===H?1:0},R):R},t.matches=function(e,r){return t(e,null,null,r)},t.matchesSelector=function(e,r){if((e.ownerDocument||e)!==R&&P(e),r=r.replace(ce,"='$1']"),w.matchesSelector&&M&&!W[r+" "]&&(!L||!L.test(r))&&(!j||!j.test(r)))try{var n=I.call(e,r);if(n||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){}return t(r,R,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==R&&P(e),F(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==R&&P(e);var r=x.attrHandle[t.toLowerCase()],n=r&&G.call(x.attrHandle,t.toLowerCase())?r(e,t,!M):void 0;return void 0!==n?n:w.attributes||!M?e.getAttribute(t):(n=e.getAttributeNode(t))&&n.specified?n.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,r=[],n=0,i=0;if(S=!w.detectDuplicates,O=!w.sortStable&&e.slice(0),e.sort(K),S){for(;t=e[i++];)t===e[i]&&(n=r.push(i));for(;n--;)e.splice(r[n],1)}return O=null,e},C=t.getText=function(e){var t,r="",n=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)r+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[n++];)r+=C(t);return r},x=t.selectors={cacheLength:50,createPseudo:n,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(_e,we), -e[3]=(e[3]||e[4]||e[5]||"").replace(_e,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,r=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":r&&de.test(r)&&(t=k(r,!0))&&(t=r.indexOf(")",r.length-t)-r.length)&&(e[0]=e[0].slice(0,t),e[2]=r.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(_e,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=B[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&B(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,r,n){return function(i){var o=t.attr(i,e);return null==o?"!="===r:!r||(o+="","="===r?o===n:"!="===r?o!==n:"^="===r?n&&0===o.indexOf(n):"*="===r?n&&o.indexOf(n)>-1:"$="===r?n&&o.slice(-n.length)===n:"~="===r?(" "+o.replace(ae," ")+" ").indexOf(n)>-1:"|="===r&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,r,n,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===n&&0===i?function(e){return!!e.parentNode}:function(t,r,l){var u,c,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",b=t.parentNode,v=s&&t.nodeName.toLowerCase(),g=!l&&!s,y=!1;if(b){if(o){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?b.firstChild:b.lastChild],a&&g){for(f=b,d=f[V]||(f[V]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===q&&u[1],y=p&&u[2],f=p&&b.childNodes[p];f=++p&&f&&f[m]||(y=p=0)||h.pop();)if(1===f.nodeType&&++y&&f===t){c[e]=[q,p,y];break}}else if(g&&(f=t,d=f[V]||(f[V]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),u=c[e]||[],p=u[0]===q&&u[1],y=p),y===!1)for(;(f=++p&&f&&f[m]||(y=p=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++y||(g&&(d=f[V]||(f[V]={}),c=d[f.uniqueID]||(d[f.uniqueID]={}),c[e]=[q,y]),f!==t)););return y-=i,y===n||y%n===0&&y/n>=0}}},PSEUDO:function(e,r){var i,o=x.pseudos[e]||x.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[V]?o(r):o.length>1?(i=[e,e,"",r],x.setFilters.hasOwnProperty(e.toLowerCase())?n(function(e,t){for(var n,i=o(e,r),a=i.length;a--;)n=ee(e,i[a]),e[n]=!(t[n]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:n(function(e){var t=[],r=[],i=N(e.replace(se,"$1"));return i[V]?n(function(e,t,r,n){for(var o,a=i(e,null,n,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,n,o){return t[0]=e,i(t,null,o,r),t[0]=null,!r.pop()}}),has:n(function(e){return function(r){return t(e,r).length>0}}),contains:n(function(e){return e=e.replace(_e,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:n(function(e){return fe.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(_e,we).toLowerCase(),function(t){var r;do if(r=M?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return r=r.toLowerCase(),r===e||0===r.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var r=e.location&&e.location.hash;return r&&r.slice(1)===t.id},root:function(e){return e===D},focus:function(e){return e===R.activeElement&&(!R.hasFocus||R.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!x.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,r){return[r<0?r+t:r]}),even:u(function(e,t){for(var r=0;r=0;)e.push(n);return e}),gt:u(function(e,t,r){for(var n=r<0?r+t:r;++n2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&M&&x.relative[o[1].type]){if(t=(x.find.ID(a.matches[0].replace(_e,we),t)||[])[0],!t)return r;u&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!x.relative[s=a.type]);)if((l=x.find[s])&&(n=l(a.matches[0].replace(_e,we),ge.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),e=n.length&&f(o),!e)return J.apply(r,n),r;break}}return(u||N(e,d))(n,t,!M,r,!t||ge.test(e)&&c(t.parentNode)||t),r},w.sortStable=V.split("").sort(K).join("")===V,w.detectDuplicates=!!S,P(),w.sortDetached=i(function(e){return 1&e.compareDocumentPosition(R.createElement("div"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,r){if(!r)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),w.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,r){if(!r&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,r){var n;if(!r)return e[t]===!0?t.toLowerCase():(n=e.getAttributeNode(t))&&n.specified?n.value:null}),t}(e);oe.find=ce,oe.expr=ce.selectors,oe.expr[":"]=oe.expr.pseudos,oe.uniqueSort=oe.unique=ce.uniqueSort,oe.text=ce.getText,oe.isXMLDoc=ce.isXML,oe.contains=ce.contains;var de=function(e,t,r){for(var n=[],i=void 0!==r;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&oe(e).is(r))break;n.push(e)}return n},fe=function(e,t){for(var r=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&r.push(e);return r},pe=oe.expr.match.needsContext,he=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,me=/^.[^:#\[\.,]*$/;oe.filter=function(e,t,r){var n=t[0];return r&&(e=":not("+e+")"),1===t.length&&1===n.nodeType?oe.find.matchesSelector(n,e)?[n]:[]:oe.find.matches(e,oe.grep(t,function(e){return 1===e.nodeType}))},oe.fn.extend({find:function(e){var t,r=this.length,n=[],i=this;if("string"!=typeof e)return this.pushStack(oe(e).filter(function(){for(t=0;t1?oe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(n(this,e||[],!1))},not:function(e){return this.pushStack(n(this,e||[],!0))},is:function(e){return!!n(this,"string"==typeof e&&pe.test(e)?oe(e):e||[],!1).length}});var be,ve=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ge=oe.fn.init=function(e,t,r){var n,i;if(!e)return this;if(r=r||be,"string"==typeof e){if(n="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:ve.exec(e),!n||!n[1]&&t)return!t||t.jquery?(t||r).find(e):this.constructor(t).find(e);if(n[1]){if(t=t instanceof oe?t[0]:t,oe.merge(this,oe.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:Q,!0)),he.test(n[1])&&oe.isPlainObject(t))for(n in t)oe.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}return i=Q.getElementById(n[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=Q,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):oe.isFunction(e)?void 0!==r.ready?r.ready(e):e(oe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),oe.makeArray(e,this))};ge.prototype=oe.fn,be=oe(Q);var ye=/^(?:parents|prev(?:Until|All))/,_e={children:!0,contents:!0,next:!0,prev:!0};oe.fn.extend({has:function(e){var t=oe(e,this),r=t.length;return this.filter(function(){for(var e=0;e-1:1===r.nodeType&&oe.find.matchesSelector(r,e))){o.push(r);break}return this.pushStack(o.length>1?oe.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?Z.call(oe(e),this[0]):Z.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(oe.uniqueSort(oe.merge(this.get(),oe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),oe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return de(e,"parentNode")},parentsUntil:function(e,t,r){return de(e,"parentNode",r)},next:function(e){return i(e,"nextSibling")},prev:function(e){return i(e,"previousSibling")},nextAll:function(e){return de(e,"nextSibling")},prevAll:function(e){return de(e,"previousSibling")},nextUntil:function(e,t,r){return de(e,"nextSibling",r)},prevUntil:function(e,t,r){return de(e,"previousSibling",r)},siblings:function(e){return fe((e.parentNode||{}).firstChild,e)},children:function(e){return fe(e.firstChild)},contents:function(e){return e.contentDocument||oe.merge([],e.childNodes)}},function(e,t){oe.fn[e]=function(r,n){var i=oe.map(this,t,r);return"Until"!==e.slice(-5)&&(n=r),n&&"string"==typeof n&&(i=oe.filter(n,i)),this.length>1&&(_e[e]||oe.uniqueSort(i),ye.test(e)&&i.reverse()),this.pushStack(i)}});var we=/\S+/g;oe.Callbacks=function(e){e="string"==typeof e?o(e):oe.extend({},e);var t,r,n,i,a=[],s=[],l=-1,u=function(){for(i=e.once,n=t=!0;s.length;l=-1)for(r=s.shift();++l-1;)a.splice(r,1),r<=l&&l--}),this},has:function(e){return e?oe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=r="",this},disabled:function(){return!a},lock:function(){return i=s=[],r||(a=r=""),this},locked:function(){return!!i},fireWith:function(e,r){return i||(r=r||[],r=[e,r.slice?r.slice():r],s.push(r),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},oe.extend({Deferred:function(e){var t=[["resolve","done",oe.Callbacks("once memory"),"resolved"],["reject","fail",oe.Callbacks("once memory"),"rejected"],["notify","progress",oe.Callbacks("memory")]],r="pending",n={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return oe.Deferred(function(r){oe.each(t,function(t,o){var a=oe.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&oe.isFunction(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[o[0]+"With"](this===n?r.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?oe.extend(e,n):n}},i={};return n.pipe=n.then,oe.each(t,function(e,o){var a=o[2],s=o[3];n[o[1]]=a.add,s&&a.add(function(){r=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?n:this,arguments),this},i[o[0]+"With"]=a.fireWith}),n.promise(i),e&&e.call(i,i),i},when:function(e){var t,r,n,i=0,o=Y.call(arguments),a=o.length,s=1!==a||e&&oe.isFunction(e.promise)?a:0,l=1===s?e:oe.Deferred(),u=function(e,r,n){return function(i){r[e]=this,n[e]=arguments.length>1?Y.call(arguments):i,n===t?l.notifyWith(r,n):--s||l.resolveWith(r,n)}};if(a>1)for(t=new Array(a),r=new Array(a),n=new Array(a);i0||(xe.resolveWith(Q,[oe]),oe.fn.triggerHandler&&(oe(Q).triggerHandler("ready"),oe(Q).off("ready"))))}}),oe.ready.promise=function(t){return xe||(xe=oe.Deferred(),"complete"===Q.readyState||"loading"!==Q.readyState&&!Q.documentElement.doScroll?e.setTimeout(oe.ready):(Q.addEventListener("DOMContentLoaded",a),e.addEventListener("load",a))),xe.promise(t)},oe.ready.promise();var Ce=function(e,t,r,n,i,o,a){var s=0,l=e.length,u=null==r;if("object"===oe.type(r)){i=!0;for(s in r)Ce(e,t,s,r[s],!0,o,a)}else if(void 0!==n&&(i=!0,oe.isFunction(n)||(a=!0),u&&(a?(t.call(e,n),t=null):(u=t,t=function(e,t,r){return u.call(oe(e),r)})),t))for(;s-1&&void 0!==r&&Ne.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Ne.remove(this,e)})}}),oe.extend({queue:function(e,t,r){var n;if(e)return t=(t||"fx")+"queue",n=ke.get(e,t),r&&(!n||oe.isArray(r)?n=ke.access(e,t,oe.makeArray(r)):n.push(r)),n||[]},dequeue:function(e,t){t=t||"fx";var r=oe.queue(e,t),n=r.length,i=r.shift(),o=oe._queueHooks(e,t),a=function(){oe.dequeue(e,t)};"inprogress"===i&&(i=r.shift(),n--),i&&("fx"===t&&r.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!n&&o&&o.empty.fire()},_queueHooks:function(e,t){var r=t+"queueHooks";return ke.get(e,r)||ke.access(e,r,{empty:oe.Callbacks("once memory").add(function(){ke.remove(e,[t+"queue",r])})})}}),oe.fn.extend({queue:function(e,t){var r=2;return"string"!=typeof e&&(t=e,e="fx",r--),arguments.length",""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};Le.optgroup=Le.option,Le.tbody=Le.tfoot=Le.colgroup=Le.caption=Le.thead,Le.th=Le.td;var Ie=/<|&#?\w+;/;!function(){var e=Q.createDocumentFragment(),t=e.appendChild(Q.createElement("div")),r=Q.createElement("input");r.setAttribute("type","radio"),r.setAttribute("checked","checked"),r.setAttribute("name","t"),t.appendChild(r),ne.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",ne.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Fe=/^key/,Ve=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,He=/^([^.]*)(?:\.(.+)|)/;oe.event={global:{},add:function(e,t,r,n,i){var o,a,s,l,u,c,d,f,p,h,m,b=ke.get(e);if(b)for(r.handler&&(o=r,r=o.handler,i=o.selector),r.guid||(r.guid=oe.guid++),(l=b.events)||(l=b.events={}),(a=b.handle)||(a=b.handle=function(t){return"undefined"!=typeof oe&&oe.event.triggered!==t.type?oe.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(we)||[""],u=t.length;u--;)s=He.exec(t[u])||[],p=m=s[1],h=(s[2]||"").split(".").sort(),p&&(d=oe.event.special[p]||{},p=(i?d.delegateType:d.bindType)||p,d=oe.event.special[p]||{},c=oe.extend({type:p,origType:m,data:n,handler:r,guid:r.guid,selector:i,needsContext:i&&oe.expr.match.needsContext.test(i),namespace:h.join(".")},o),(f=l[p])||(f=l[p]=[],f.delegateCount=0,d.setup&&d.setup.call(e,n,h,a)!==!1||e.addEventListener&&e.addEventListener(p,a)),d.add&&(d.add.call(e,c),c.handler.guid||(c.handler.guid=r.guid)),i?f.splice(f.delegateCount++,0,c):f.push(c),oe.event.global[p]=!0)},remove:function(e,t,r,n,i){var o,a,s,l,u,c,d,f,p,h,m,b=ke.hasData(e)&&ke.get(e);if(b&&(l=b.events)){for(t=(t||"").match(we)||[""],u=t.length;u--;)if(s=He.exec(t[u])||[],p=m=s[1],h=(s[2]||"").split(".").sort(),p){for(d=oe.event.special[p]||{},p=(n?d.delegateType:d.bindType)||p,f=l[p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=f.length;o--;)c=f[o],!i&&m!==c.origType||r&&r.guid!==c.guid||s&&!s.test(c.namespace)||n&&n!==c.selector&&("**"!==n||!c.selector)||(f.splice(o,1),c.selector&&f.delegateCount--,d.remove&&d.remove.call(e,c));a&&!f.length&&(d.teardown&&d.teardown.call(e,h,b.handle)!==!1||oe.removeEvent(e,p,b.handle),delete l[p])}else for(p in l)oe.event.remove(e,p+t[u],r,n,!0);oe.isEmptyObject(l)&&ke.remove(e,"handle events")}},dispatch:function(e){e=oe.event.fix(e);var t,r,n,i,o,a=[],s=Y.call(arguments),l=(ke.get(this,"events")||{})[e.type]||[],u=oe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!u.preDispatch||u.preDispatch.call(this,e)!==!1){for(a=oe.event.handlers.call(this,e,l),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,r=0;(o=i.handlers[r++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,n=((oe.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==n&&(e.result=n)===!1&&(e.preventDefault(),e.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,e),e.result}},handlers:function(e,t){var r,n,i,o,a=[],s=t.delegateCount,l=e.target;if(s&&l.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(n=[],r=0;r-1:oe.find(i,this,null,[l]).length),n[i]&&n.push(o);n.length&&a.push({elem:l,handlers:n})}return s]*)\/>/gi,ze=/\s*$/g;oe.extend({htmlPrefilter:function(e){return e.replace(qe,"<$1>")},clone:function(e,t,r){var n,i,o,a,s=e.cloneNode(!0),l=oe.contains(e.ownerDocument,e);if(!(ne.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||oe.isXMLDoc(e)))for(a=c(s),o=c(e),n=0,i=o.length;n0&&d(a,!l&&c(e,"script")),s},cleanData:function(e){for(var t,r,n,i=oe.event.special,o=0;void 0!==(r=e[o]);o++)if(Ee(r)){if(t=r[ke.expando]){if(t.events)for(n in t.events)i[n]?oe.event.remove(r,n):oe.removeEvent(r,n,t.handle);r[ke.expando]=void 0}r[Ne.expando]&&(r[Ne.expando]=void 0)}}}),oe.fn.extend({domManip:x,detach:function(e){return C(this,e,!0)},remove:function(e){return C(this,e)},text:function(e){return Ce(this,function(e){return void 0===e?oe.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return x(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=v(this,e);t.appendChild(e)}})},prepend:function(){return x(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=v(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return x(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return x(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(oe.cleanData(c(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return oe.clone(this,e,t)})},html:function(e){return Ce(this,function(e){var t=this[0]||{},r=0,n=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ze.test(e)&&!Le[(Me.exec(e)||["",""])[1].toLowerCase()]){e=oe.htmlPrefilter(e);try{for(;r1)},show:function(){return R(this,!0)},hide:function(){return R(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Re(this)?oe(this).show():oe(this).hide()})}}),oe.Tween=D,D.prototype={constructor:D,init:function(e,t,r,n,i,o){this.elem=e,this.prop=r,this.easing=i||oe.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=n,this.unit=o||(oe.cssNumber[r]?"":"px")},cur:function(){var e=D.propHooks[this.prop];return e&&e.get?e.get(this):D.propHooks._default.get(this)},run:function(e){var t,r=D.propHooks[this.prop];return this.options.duration?this.pos=t=oe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),r&&r.set?r.set(this):D.propHooks._default.set(this),this}},D.prototype.init.prototype=D.prototype,D.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=oe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){oe.fx.step[e.prop]?oe.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[oe.cssProps[e.prop]]&&!oe.cssHooks[e.prop]?e.elem[e.prop]=e.now:oe.style(e.elem,e.prop,e.now+e.unit)}}},D.propHooks.scrollTop=D.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},oe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},oe.fx=D.prototype.init,oe.fx.step={};var it,ot,at=/^(?:toggle|show|hide)$/,st=/queueHooks$/;oe.Animation=oe.extend(V,{tweeners:{"*":[function(e,t){var r=this.createTween(e,t);return u(r.elem,e,Se.exec(t),r),r}]},tweener:function(e,t){oe.isFunction(e)?(t=e,e=["*"]):e=e.match(we);for(var r,n=0,i=e.length;n1)},removeAttr:function(e){return this.each(function(){oe.removeAttr(this,e)})}}),oe.extend({attr:function(e,t,r){var n,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?oe.prop(e,t,r):(1===o&&oe.isXMLDoc(e)||(t=t.toLowerCase(),i=oe.attrHooks[t]||(oe.expr.match.bool.test(t)?lt:void 0)),void 0!==r?null===r?void oe.removeAttr(e,t):i&&"set"in i&&void 0!==(n=i.set(e,r,t))?n:(e.setAttribute(t,r+""),r):i&&"get"in i&&null!==(n=i.get(e,t))?n:(n=oe.find.attr(e,t),null==n?void 0:n))},attrHooks:{type:{set:function(e,t){if(!ne.radioValue&&"radio"===t&&oe.nodeName(e,"input")){var r=e.value;return e.setAttribute("type",t),r&&(e.value=r),t}}}},removeAttr:function(e,t){var r,n,i=0,o=t&&t.match(we);if(o&&1===e.nodeType)for(;r=o[i++];)n=oe.propFix[r]||r,oe.expr.match.bool.test(r)&&(e[n]=!1),e.removeAttribute(r)}}),lt={set:function(e,t,r){return t===!1?oe.removeAttr(e,r):e.setAttribute(r,r),r}},oe.each(oe.expr.match.bool.source.match(/\w+/g),function(e,t){var r=ut[t]||oe.find.attr;ut[t]=function(e,t,n){var i,o;return n||(o=ut[t],ut[t]=i,i=null!=r(e,t,n)?t.toLowerCase():null,ut[t]=o),i}});var ct=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;oe.fn.extend({prop:function(e,t){return Ce(this,oe.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[oe.propFix[e]||e]})}}),oe.extend({prop:function(e,t,r){var n,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&oe.isXMLDoc(e)||(t=oe.propFix[t]||t,i=oe.propHooks[t]),void 0!==r?i&&"set"in i&&void 0!==(n=i.set(e,r,t))?n:e[t]=r:i&&"get"in i&&null!==(n=i.get(e,t))?n:e[t]},propHooks:{tabIndex:{get:function(e){var t=oe.find.attr(e,"tabindex");return t?parseInt(t,10):ct.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),ne.optSelected||(oe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),oe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){oe.propFix[this.toLowerCase()]=this});var ft=/[\t\r\n\f]/g;oe.fn.extend({addClass:function(e){var t,r,n,i,o,a,s,l=0;if(oe.isFunction(e))return this.each(function(t){oe(this).addClass(e.call(this,t,H(this)))});if("string"==typeof e&&e)for(t=e.match(we)||[];r=this[l++];)if(i=H(r),n=1===r.nodeType&&(" "+i+" ").replace(ft," ")){for(a=0;o=t[a++];)n.indexOf(" "+o+" ")<0&&(n+=o+" ");s=oe.trim(n),i!==s&&r.setAttribute("class",s)}return this},removeClass:function(e){var t,r,n,i,o,a,s,l=0;if(oe.isFunction(e))return this.each(function(t){oe(this).removeClass(e.call(this,t,H(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(we)||[];r=this[l++];)if(i=H(r),n=1===r.nodeType&&(" "+i+" ").replace(ft," ")){for(a=0;o=t[a++];)for(;n.indexOf(" "+o+" ")>-1;)n=n.replace(" "+o+" "," ");s=oe.trim(n),i!==s&&r.setAttribute("class",s)}return this},toggleClass:function(e,t){var r=typeof e;return"boolean"==typeof t&&"string"===r?t?this.addClass(e):this.removeClass(e):oe.isFunction(e)?this.each(function(r){oe(this).toggleClass(e.call(this,r,H(this),t),t)}):this.each(function(){var t,n,i,o;if("string"===r)for(n=0,i=oe(this),o=e.match(we)||[];t=o[n++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==r||(t=H(this),t&&ke.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":ke.get(this,"__className__")||""))})},hasClass:function(e){var t,r,n=0;for(t=" "+e+" ";r=this[n++];)if(1===r.nodeType&&(" "+H(r)+" ").replace(ft," ").indexOf(t)>-1)return!0;return!1}});var pt=/\r/g,ht=/[\x20\t\r\n\f]+/g;oe.fn.extend({val:function(e){var t,r,n,i=this[0];{if(arguments.length)return n=oe.isFunction(e),this.each(function(r){var i;1===this.nodeType&&(i=n?e.call(this,r,oe(this).val()):e,null==i?i="":"number"==typeof i?i+="":oe.isArray(i)&&(i=oe.map(i,function(e){return null==e?"":e+""})),t=oe.valHooks[this.type]||oe.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=oe.valHooks[i.type]||oe.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(r=t.get(i,"value"))?r:(r=i.value,"string"==typeof r?r.replace(pt,""):null==r?"":r)}}}),oe.extend({valHooks:{option:{get:function(e){var t=oe.find.attr(e,"value");return null!=t?t:oe.trim(oe.text(e)).replace(ht," ")}},select:{get:function(e){for(var t,r,n=e.options,i=e.selectedIndex,o="select-one"===e.type||i<0,a=o?null:[],s=o?i+1:n.length,l=i<0?s:o?i:0;l-1)&&(r=!0);return r||(e.selectedIndex=-1),o}}}}),oe.each(["radio","checkbox"],function(){oe.valHooks[this]={set:function(e,t){if(oe.isArray(t))return e.checked=oe.inArray(oe(e).val(),t)>-1}},ne.checkOn||(oe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var mt=/^(?:focusinfocus|focusoutblur)$/;oe.extend(oe.event,{trigger:function(t,r,n,i){var o,a,s,l,u,c,d,f=[n||Q],p=re.call(t,"type")?t.type:t,h=re.call(t,"namespace")?t.namespace.split("."):[];if(a=s=n=n||Q,3!==n.nodeType&&8!==n.nodeType&&!mt.test(p+oe.event.triggered)&&(p.indexOf(".")>-1&&(h=p.split("."),p=h.shift(),h.sort()),u=p.indexOf(":")<0&&"on"+p,t=t[oe.expando]?t:new oe.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=n),r=null==r?[t]:oe.makeArray(r,[t]),d=oe.event.special[p]||{},i||!d.trigger||d.trigger.apply(n,r)!==!1)){if(!i&&!d.noBubble&&!oe.isWindow(n)){for(l=d.delegateType||p,mt.test(l+p)||(a=a.parentNode);a;a=a.parentNode)f.push(a),s=a;s===(n.ownerDocument||Q)&&f.push(s.defaultView||s.parentWindow||e)}for(o=0;(a=f[o++])&&!t.isPropagationStopped();)t.type=o>1?l:d.bindType||p,c=(ke.get(a,"events")||{})[t.type]&&ke.get(a,"handle"),c&&c.apply(a,r),c=u&&a[u],c&&c.apply&&Ee(a)&&(t.result=c.apply(a,r),t.result===!1&&t.preventDefault());return t.type=p,i||t.isDefaultPrevented()||d._default&&d._default.apply(f.pop(),r)!==!1||!Ee(n)||u&&oe.isFunction(n[p])&&!oe.isWindow(n)&&(s=n[u],s&&(n[u]=null),oe.event.triggered=p,n[p](),oe.event.triggered=void 0,s&&(n[u]=s)),t.result}},simulate:function(e,t,r){var n=oe.extend(new oe.Event,r,{type:e,isSimulated:!0});oe.event.trigger(n,null,t)}}),oe.fn.extend({trigger:function(e,t){return this.each(function(){oe.event.trigger(e,t,this)})},triggerHandler:function(e,t){var r=this[0];if(r)return oe.event.trigger(e,t,r,!0)}}),oe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){oe.fn[t]=function(e,r){return arguments.length>0?this.on(t,null,e,r):this.trigger(t)}}),oe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ne.focusin="onfocusin"in e,ne.focusin||oe.each({focus:"focusin",blur:"focusout"},function(e,t){var r=function(e){oe.event.simulate(t,e.target,oe.event.fix(e))};oe.event.special[t]={setup:function(){var n=this.ownerDocument||this,i=ke.access(n,t);i||n.addEventListener(e,r,!0),ke.access(n,t,(i||0)+1)},teardown:function(){var n=this.ownerDocument||this,i=ke.access(n,t)-1;i?ke.access(n,t,i):(n.removeEventListener(e,r,!0),ke.remove(n,t))}}});var bt=e.location,vt=oe.now(),gt=/\?/;oe.parseJSON=function(e){return JSON.parse(e+"")},oe.parseXML=function(t){var r;if(!t||"string"!=typeof t)return null;try{r=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){r=void 0}return r&&!r.getElementsByTagName("parsererror").length||oe.error("Invalid XML: "+t),r};var yt=/#.*$/,_t=/([?&])_=[^&]*/,wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,xt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ct=/^(?:GET|HEAD)$/,Et=/^\/\//,kt={},Nt={},Tt="*/".concat("*"),At=Q.createElement("a");At.href=bt.href,oe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:xt.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Tt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":oe.parseJSON,"text xml":oe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?B(B(e,oe.ajaxSettings),t):B(oe.ajaxSettings,e)},ajaxPrefilter:q(kt),ajaxTransport:q(Nt),ajax:function(t,r){function n(t,r,n,s){var u,d,g,y,w,C=r;2!==_&&(_=2,l&&e.clearTimeout(l),i=void 0,a=s||"",x.readyState=t>0?4:0,u=t>=200&&t<300||304===t,n&&(y=U(f,x,n)),y=W(f,y,x,u),u?(f.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(oe.lastModified[o]=w),w=x.getResponseHeader("etag"),w&&(oe.etag[o]=w)),204===t||"HEAD"===f.type?C="nocontent":304===t?C="notmodified":(C=y.state,d=y.data,g=y.error,u=!g)):(g=C,!t&&C||(C="error",t<0&&(t=0))),x.status=t,x.statusText=(r||C)+"",u?m.resolveWith(p,[d,C,x]):m.rejectWith(p,[x,C,g]),x.statusCode(v),v=void 0,c&&h.trigger(u?"ajaxSuccess":"ajaxError",[x,f,u?d:g]),b.fireWith(p,[x,C]),c&&(h.trigger("ajaxComplete",[x,f]),--oe.active||oe.event.trigger("ajaxStop")))}"object"==typeof t&&(r=t,t=void 0),r=r||{};var i,o,a,s,l,u,c,d,f=oe.ajaxSetup({},r),p=f.context||f,h=f.context&&(p.nodeType||p.jquery)?oe(p):oe.event,m=oe.Deferred(),b=oe.Callbacks("once memory"),v=f.statusCode||{},g={},y={},_=0,w="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(2===_){if(!s)for(s={};t=wt.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===_?a:null},setRequestHeader:function(e,t){var r=e.toLowerCase();return _||(e=y[r]=y[r]||e,g[e]=t),this},overrideMimeType:function(e){return _||(f.mimeType=e),this},statusCode:function(e){var t;if(e)if(_<2)for(t in e)v[t]=[v[t],e[t]];else x.always(e[x.status]);return this},abort:function(e){var t=e||w;return i&&i.abort(t),n(0,t),this}};if(m.promise(x).complete=b.add,x.success=x.done,x.error=x.fail,f.url=((t||f.url||bt.href)+"").replace(yt,"").replace(Et,bt.protocol+"//"),f.type=r.method||r.type||f.method||f.type,f.dataTypes=oe.trim(f.dataType||"*").toLowerCase().match(we)||[""],null==f.crossDomain){u=Q.createElement("a");try{u.href=f.url,u.href=u.href,f.crossDomain=At.protocol+"//"+At.host!=u.protocol+"//"+u.host}catch(e){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=oe.param(f.data,f.traditional)),z(kt,f,r,x),2===_)return x;c=oe.event&&f.global,c&&0===oe.active++&&oe.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Ct.test(f.type),o=f.url,f.hasContent||(f.data&&(o=f.url+=(gt.test(o)?"&":"?")+f.data,delete f.data),f.cache===!1&&(f.url=_t.test(o)?o.replace(_t,"$1_="+vt++):o+(gt.test(o)?"&":"?")+"_="+vt++)),f.ifModified&&(oe.lastModified[o]&&x.setRequestHeader("If-Modified-Since",oe.lastModified[o]),oe.etag[o]&&x.setRequestHeader("If-None-Match",oe.etag[o])),(f.data&&f.hasContent&&f.contentType!==!1||r.contentType)&&x.setRequestHeader("Content-Type",f.contentType),x.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+Tt+"; q=0.01":""):f.accepts["*"]);for(d in f.headers)x.setRequestHeader(d,f.headers[d]);if(f.beforeSend&&(f.beforeSend.call(p,x,f)===!1||2===_))return x.abort();w="abort";for(d in{success:1,error:1,complete:1})x[d](f[d]);if(i=z(Nt,f,r,x)){if(x.readyState=1,c&&h.trigger("ajaxSend",[x,f]),2===_)return x;f.async&&f.timeout>0&&(l=e.setTimeout(function(){x.abort("timeout")},f.timeout));try{_=1,i.send(g,n)}catch(e){if(!(_<2))throw e;n(-1,e)}}else n(-1,"No Transport");return x},getJSON:function(e,t,r){return oe.get(e,t,r,"json")},getScript:function(e,t){return oe.get(e,void 0,t,"script")}}),oe.each(["get","post"],function(e,t){oe[t]=function(e,r,n,i){return oe.isFunction(r)&&(i=i||n,n=r,r=void 0),oe.ajax(oe.extend({url:e,type:t,dataType:i,data:r,success:n},oe.isPlainObject(e)&&e))}}),oe._evalUrl=function(e){return oe.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},oe.fn.extend({wrapAll:function(e){var t;return oe.isFunction(e)?this.each(function(t){oe(this).wrapAll(e.call(this,t))}):(this[0]&&(t=oe(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return oe.isFunction(e)?this.each(function(t){oe(this).wrapInner(e.call(this,t))}):this.each(function(){var t=oe(this),r=t.contents();r.length?r.wrapAll(e):t.append(e)})},wrap:function(e){var t=oe.isFunction(e);return this.each(function(r){oe(this).wrapAll(t?e.call(this,r):e)})},unwrap:function(){return this.parent().each(function(){oe.nodeName(this,"body")||oe(this).replaceWith(this.childNodes)}).end()}}),oe.expr.filters.hidden=function(e){return!oe.expr.filters.visible(e)},oe.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Ot=/%20/g,St=/\[\]$/,Pt=/\r?\n/g,Rt=/^(?:submit|button|image|reset|file)$/i,Dt=/^(?:input|select|textarea|keygen)/i;oe.param=function(e,t){var r,n=[],i=function(e,t){t=oe.isFunction(t)?t():null==t?"":t,n[n.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=oe.ajaxSettings&&oe.ajaxSettings.traditional),oe.isArray(e)||e.jquery&&!oe.isPlainObject(e))oe.each(e,function(){i(this.name,this.value)});else for(r in e)K(r,e[r],t,i);return n.join("&").replace(Ot,"+")},oe.fn.extend({serialize:function(){return oe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=oe.prop(this,"elements");return e?oe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!oe(this).is(":disabled")&&Dt.test(this.nodeName)&&!Rt.test(e)&&(this.checked||!De.test(e))}).map(function(e,t){var r=oe(this).val();return null==r?null:oe.isArray(r)?oe.map(r,function(e){return{name:t.name,value:e.replace(Pt,"\r\n")}}):{name:t.name,value:r.replace(Pt,"\r\n")}}).get()}}),oe.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Mt={0:200,1223:204},jt=oe.ajaxSettings.xhr();ne.cors=!!jt&&"withCredentials"in jt,ne.ajax=jt=!!jt,oe.ajaxTransport(function(t){var r,n;if(ne.cors||jt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);r=function(e){return function(){r&&(r=n=s.onload=s.onerror=s.onabort=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Mt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=r(),n=s.onerror=r("error"),void 0!==s.onabort?s.onabort=n:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){r&&n()})},r=r("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(r)throw e}},abort:function(){r&&r()}}}),oe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return oe.globalEval(e),e}}}),oe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),oe.ajaxTransport("script",function(e){if(e.crossDomain){var t,r;return{send:function(n,i){t=oe("",""===t.firstChild.innerHTML}(s),c=s&&function(e){var t=e.createElement("div");return t.innerHTML="Test: Value","Test:"===t.childNodes[0].nodeValue&&" Value"===t.childNodes[2].nodeValue}(s),d=s&&function(e){var t,r,n=e.createElement("table");try{n.innerHTML=""}catch(e){}finally{r=0===n.childNodes.length}r&&(t={colgroup:["table"],table:[],tbody:["table"],tfoot:["table"],thead:["table"],tr:["table","tbody"]});var i=e.createElement("select");return i.innerHTML="",i.childNodes[0]||(t=t||{},t.select=[]),t}(s);a=u?function(e,r,i){return e=n(e,r),r=i.cloneNode(r,!1),t(r,e),r.childNodes}:function(e,t,r){return e=n(e,t),t=r.cloneNode(t,!1),t.innerHTML=e,t.childNodes};var f;f=d||c?function(e,t,n){var i=[],o=[];"string"==typeof e&&(e=e.replace(/(\s*)()(\s*)/g,function(e,t,r){return o.push(r),t}));var s;s=d[t.tagName.toLowerCase()]?r(e,t):a(e,t,n);var l,u,c,f,p=[];for(l=0;l0&&(m=n.document.createTextNode(b),h.parentNode.insertBefore(m,h)),v=o[l],v&&v.length>0&&(m=n.document.createTextNode(v),h.parentNode.insertBefore(m,h.nextSibling));return s}:a;var p;l?e.buildHTMLDOM=p=function(e,t,r){return i[t.tagName]?f(e,document.createElement("div"),r):f(e,t,r)}:e.buildHTMLDOM=p=f,e.buildHTMLDOM=p}),e("dom-helper/classes",["exports"],function(e){"use strict";function t(e){var t=e.getAttribute("class")||"";return""!==t&&" "!==t?t.split(" "):[]}function r(e,t){for(var r=0,n=e.length,i=0,o=t.length,a=new Array(o);r0?i.join(" "):"")}function i(e,n){for(var i=t(e),o=r(n,i),a=!1,s=[],l=0,u=i.length;l0?s.join(" "):"")}var o,a,s="undefined"!=typeof document&&document,l=s&&function(){var e=document.createElement("div");return!!e.classList&&(e.classList.add("boo"),e.classList.add("boo","baz"),"boo baz"===e.className)}();l?(e.addClasses=o=function(e,t){e.classList?1===t.length?e.classList.add(t[0]):2===t.length?e.classList.add(t[0],t[1]):e.classList.add.apply(e.classList,t):n(e,t)},e.removeClasses=a=function(e,t){e.classList?1===t.length?e.classList.remove(t[0]):2===t.length?e.classList.remove(t[0],t[1]):e.classList.remove.apply(e.classList,t):i(e,t)}):(e.addClasses=o=n,e.removeClasses=a=i),e.addClasses=o,e.removeClasses=a}),e("dom-helper/prop",["exports"],function(e){"use strict";function t(e){return null===e||void 0===e}function r(e,t){var r,i;if(t in e)i=t,r="prop";else{var o=t.toLowerCase();o in e?(r="prop",i=o):(r="attr",i=t)}return"prop"!==r||"style"!==i.toLowerCase()&&!n(e.tagName,i)||(r="attr"),{normalized:i,type:r}}function n(e,t){var r=i[e.toUpperCase()];return r&&r[t.toLowerCase()]||!1}e.isAttrRemovalValue=t,e.normalizeProperty=r;var i={BUTTON:{type:!0,form:!0},INPUT:{list:!0,type:!0,form:!0,autocorrect:!0},SELECT:{form:!0},OPTION:{form:!0},TEXTAREA:{form:!0},LABEL:{form:!0},FIELDSET:{form:!0},LEGEND:{form:!0},OBJECT:{form:!0}}}),e("ember-application/index",["exports","ember-metal/core","ember-metal/features","ember-runtime/system/lazy_load","ember-application/system/resolver","ember-application/system/application","ember-application/system/application-instance","ember-application/system/engine","ember-application/system/engine-instance"],function(e,t,r,n,i,o,a,s,l){"use strict";t.default.Application=o.default,t.default.Resolver=i.Resolver,t.default.DefaultResolver=i.default,n.runLoadHooks("Ember.Application",o.default)}),e("ember-application/system/application-instance",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/run_loop","ember-metal/computed","ember-runtime/mixins/registry_proxy","ember-metal/assign","ember-environment","ember-runtime/ext/rsvp","ember-views/system/jquery","ember-application/system/engine-instance"],function(e,t,r,n,i,o,a,s,l,u,c,d){"use strict";var f=void 0,p=d.default.extend({application:null,customEvents:null,rootElement:null,init:function(){this._super.apply(this,arguments),this.register("-application-instance:main",this,{instantiate:!1})},_bootSync:function(e){if(this._booted)return this;if(e=new f(e),this.setupRegistry(e),e.rootElement?this.rootElement=e.rootElement:this.rootElement=this.application.rootElement,e.location){var t=r.get(this,"router");n.set(t,"location",e.location)}return this.application.runInstanceInitializers(this),e.isInteractive&&this.setupEventDispatcher(),this._booted=!0,this},setupRegistry:function(e){var t=this.__registry__;t.register("-environment:main",e.toEnvironment(),{instantiate:!1}),t.injection("view","_environment","-environment:main"),t.injection("route","_environment","-environment:main"),t.register("service:-document",e.document,{instantiate:!1}),e.isInteractive?(t.injection("view","renderer","renderer:-dom"),t.injection("component","renderer","renderer:-dom")):(t.injection("view","renderer","renderer:-inert"),t.injection("component","renderer","renderer:-inert"))},router:o.computed(function(){return this.lookup("router:main"); -}).readOnly(),didCreateRootView:function(e){e.appendTo(this.rootElement)},startRouting:function(){var e=r.get(this,"router");e.startRouting(),this._didSetupRouter=!0},setupRouter:function(){if(!this._didSetupRouter){this._didSetupRouter=!0;var e=r.get(this,"router");e.setupRouter()}},handleURL:function(e){var t=r.get(this,"router");return this.setupRouter(),t.handleURL(e)},setupEventDispatcher:function(){var e=this.lookup("event_dispatcher:main"),t=r.get(this.application,"customEvents"),n=r.get(this,"customEvents"),i=s.default({},t,n);return e.setup(i,this.rootElement),e},getURL:function(){var e=r.get(this,"router");return r.get(e,"url")},visit:function(e){var t=this;this.setupRouter();var n=r.get(this,"router"),o=function(){return new u.default.Promise(function(e){i.default.next(null,e,t)})},a=function(e){if(e.error)throw e.error;if("TransitionAborted"===e.name&&n.router.activeTransition)return n.router.activeTransition.then(o,a);throw"TransitionAborted"===e.name?new Error(e.message):e},s=r.get(n,"location");return s.setURL(e),n.handleURL(s.getURL()).then(o,a)}});f=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.jQuery=c.default,this.isInteractive=l.environment.hasDOM,void 0!==e.isBrowser?this.isBrowser=!!e.isBrowser:this.isBrowser=l.environment.hasDOM,this.isBrowser||(this.jQuery=null,this.isInteractive=!1,this.location="none"),void 0!==e.shouldRender?this.shouldRender=!!e.shouldRender:this.shouldRender=!0,this.shouldRender||(this.jQuery=null,this.isInteractive=!1),e.document?this.document=e.document:this.document="undefined"!=typeof document?document:null,e.rootElement&&(this.rootElement=e.rootElement),void 0!==e.location&&(this.location=e.location),void 0!==e.jQuery&&(this.jQuery=e.jQuery),void 0!==e.isInteractive&&(this.isInteractive=!!e.isInteractive)},f.prototype.toEnvironment=function(){var e=s.default({},l.environment);return e.hasDOM=this.isBrowser,e.options=this,e},Object.defineProperty(p.prototype,"container",{configurable:!0,enumerable:!1,get:function(){var e=this;return{lookup:function(){return e.lookup.apply(e,arguments)}}}}),Object.defineProperty(p.prototype,"registry",{configurable:!0,enumerable:!1,get:function(){return a.buildFakeRegistryWithDeprecations(this,"ApplicationInstance")}}),e.default=p}),e("ember-application/system/application",["exports","ember-environment","ember-metal/debug","ember-metal/libraries","ember-metal/testing","ember-metal/property_get","ember-runtime/system/namespace","ember-runtime/system/lazy_load","ember-metal/run_loop","ember-views/views/view","ember-views/system/event_dispatcher","ember-views/system/jquery","ember-routing/system/route","ember-routing/system/router","ember-routing/location/hash_location","ember-routing/location/history_location","ember-routing/location/auto_location","ember-routing/location/none_location","ember-routing/system/cache","ember-application/system/application-instance","ember-runtime/mixins/registry_proxy","container/registry","ember-runtime/ext/rsvp","ember-application/system/engine","require"],function(e,t,r,n,i,o,a,s,l,u,c,d,f,p,h,m,b,v,g,y,_,w,x,C,E){"use strict";function k(e,t){return e.raw=t,e}function N(){R=!1,D=!1}function T(e){e.register("-view-registry:main",{create:function(){return{}}}),e.register("route:basic",f.default),e.register("event_dispatcher:main",c.default),e.injection("router:main","namespace","application:main"),e.register("location:auto",b.default),e.register("location:hash",h.default),e.register("location:history",m.default),e.register("location:none",v.default),e.register(w.privatize(S),g.default)}function A(){P||(P=!0,t.environment.hasDOM&&n.default.registerCoreLibrary("jQuery",d.default().jquery))}function O(){if(t.ENV.LOG_VERSION){t.ENV.LOG_VERSION=!1;for(var e=n.default._registry,r=e.map(function(e){return o.get(e,"name.length")}),i=Math.max.apply(this,r),a=0;a-1&&(i=i.replace(/\.(.)/g,function(e){return e.charAt(1).toUpperCase()})),n.indexOf("_")>-1&&(i=i.replace(/_(.)/g,function(e){return e.charAt(1).toUpperCase()})),n.indexOf("-")>-1&&(i=i.replace(/-(.)/g,function(e){return e.charAt(1).toUpperCase()})),r+":"+i}return e},resolve:function(e){var t,r=this.parseName(e),n=r.resolveMethodName;return this[n]&&(t=this[n](r)),t=t||this.resolveOther(r),r.root&&r.root.LOG_RESOLVER&&this._logLookup(t,r),t&&a.default(t,r),t},parseName:function(e){return this._parseNameCache[e]||(this._parseNameCache[e]=this._parseName(e))},_parseName:function(e){var t=e.split(":"),i=t[0],a=t[1],s=a,l=r.get(this,"namespace"),u=l,c=s.lastIndexOf("/"),d=c!==-1?s.slice(0,c):null;if("template"!==i&&c!==-1){var f=s.split("/");s=f[f.length-1];var p=n.capitalize(f.slice(0,-1).join("."));u=o.default.byName(p)}var h="main"===a?"Main":n.classify(i);if(!s||!i)throw new TypeError("Invalid fullName: `"+e+"`, must be of the form `type:name` ");return{fullName:e,type:i,fullNameWithoutType:a,dirname:d,name:s,root:u,resolveMethodName:"resolve"+h}},lookupDescription:function(e){var t,r=this.parseName(e);return"template"===r.type?"template at "+r.fullNameWithoutType.replace(/\./g,"/"):(t=r.root+"."+n.classify(r.name).replace(/\./g,""),"model"!==r.type&&(t+=n.classify(r.type)),t)},makeToString:function(e,t){return e.toString()},useRouterNaming:function(e){e.name=e.name.replace(/\./g,"_"),"basic"===e.name&&(e.name="")},resolveTemplate:function(e){var t=e.fullNameWithoutType.replace(/\./g,"/");return l.get(t)||l.get(n.decamelize(t))},resolveView:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveController:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveRoute:function(e){return this.useRouterNaming(e),this.resolveOther(e)},resolveModel:function(e){var t=n.classify(e.name),i=r.get(e.root,t);if(i)return i},resolveHelper:function(e){return this.resolveOther(e)},resolveOther:function(e){var t=n.classify(e.name)+n.classify(e.type),i=r.get(e.root,t);if(i)return i},resolveMain:function(e){var t=n.classify(e.type);return r.get(e.root,t)},_logLookup:function(e,t){var r,n;r=e?"[✓]":"[ ]",n=t.fullName.length>60?".":new Array(60-t.fullName.length).join(".")},knownForType:function(e){for(var t=r.get(this,"namespace"),i=n.classify(e),o=new RegExp(i+"$"),a=s.default(null),l=Object.keys(t),u=0;u1?t-1:0),n=1;n1?t-1:0),n=1;n1?this.set("models",this._getModels(t)):this.set("models",[])}});p.toString=function(){return"LinkComponent"},p.reopenClass({positionalParams:"params"}),e.default=p}),e("ember-htmlbars/components/text_area",["exports","ember-htmlbars/component","ember-views/mixins/text_support"],function(e,t,r){"use strict";e.default=t.default.extend(r.default,{instrumentDisplay:"{{textarea}}",classNames:["ember-text-area"],tagName:"textarea",attributeBindings:["rows","cols","name","selectionEnd","selectionStart","wrap","lang","dir","value"],rows:null,cols:null})}),e("ember-htmlbars/components/text_field",["exports","ember-metal/computed","ember-environment","ember-htmlbars/component","ember-views/mixins/text_support","ember-metal/empty_object"],function(e,t,r,n,i,o){"use strict";function a(e){if(e in l)return l[e];if(!r.environment.hasDOM)return l[e]=e,e;s||(s=document.createElement("input"));try{s.type=e}catch(e){}return l[e]=s.type===e}var s,l=new o.default;e.default=n.default.extend(i.default,{instrumentDisplay:'{{input type="text"}}',classNames:["ember-text-field"],tagName:"input",attributeBindings:["accept","autocomplete","autosave","dir","formaction","formenctype","formmethod","formnovalidate","formtarget","height","inputmode","lang","list","max","min","multiple","name","pattern","size","step","type","value","width"],defaultLayout:null,value:"",type:t.computed({get:function(){return"text"},set:function(e,t){var r="text";return a(t)&&(r=t),r}}),size:null,pattern:null,min:null,max:null})}),e("ember-htmlbars/env",["exports","ember-environment","htmlbars-runtime","ember-metal/assign","ember-htmlbars/hooks/subexpr","ember-htmlbars/hooks/concat","ember-htmlbars/hooks/link-render-node","ember-htmlbars/hooks/create-fresh-scope","ember-htmlbars/hooks/bind-shadow-scope","ember-htmlbars/hooks/bind-self","ember-htmlbars/hooks/bind-scope","ember-htmlbars/hooks/bind-local","ember-htmlbars/hooks/bind-block","ember-htmlbars/hooks/update-self","ember-htmlbars/hooks/get-root","ember-htmlbars/hooks/get-child","ember-htmlbars/hooks/get-block","ember-htmlbars/hooks/get-value","ember-htmlbars/hooks/get-cell-or-value","ember-htmlbars/hooks/cleanup-render-node","ember-htmlbars/hooks/destroy-render-node","ember-htmlbars/hooks/did-render-node","ember-htmlbars/hooks/will-cleanup-tree","ember-htmlbars/hooks/did-cleanup-tree","ember-htmlbars/hooks/classify","ember-htmlbars/hooks/component","ember-htmlbars/hooks/lookup-helper","ember-htmlbars/hooks/has-helper","ember-htmlbars/hooks/invoke-helper","ember-htmlbars/hooks/element","ember-htmlbars/helpers","ember-htmlbars/keywords","ember-htmlbars/system/dom-helper","ember-htmlbars/keywords/debugger","ember-htmlbars/keywords/with","ember-htmlbars/keywords/outlet","ember-htmlbars/keywords/unbound","ember-htmlbars/keywords/view","ember-htmlbars/keywords/component","ember-htmlbars/keywords/element-component","ember-htmlbars/keywords/partial","ember-htmlbars/keywords/input","ember-htmlbars/keywords/textarea","ember-htmlbars/keywords/yield","ember-htmlbars/keywords/mut","ember-htmlbars/keywords/readonly","ember-htmlbars/keywords/get","ember-htmlbars/keywords/action","ember-htmlbars/keywords/render","ember-htmlbars/keywords/element-action"],function(e,t,r,n,i,o,a,s,l,u,c,d,f,p,h,m,b,v,g,y,_,w,x,C,E,k,N,T,A,O,S,P,R,D,M,j,L,I,F,V,H,q,z,B,U,W,K,$,G,Q){"use strict";var Y=n.default({},r.hooks);Y.keywords=P.default,n.default(Y,{linkRenderNode:a.default,createFreshScope:s.default,createChildScope:s.createChildScope,bindShadowScope:l.default,bindSelf:u.default,bindScope:c.default,bindLocal:d.default,bindBlock:f.default,updateSelf:p.default,getBlock:b.default,getRoot:h.default,getChild:m.default,getValue:v.default,getCellOrValue:g.default,subexpr:i.default,concat:o.default,cleanupRenderNode:y.default,destroyRenderNode:_.default,willCleanupTree:x.default,didCleanupTree:C.default,didRenderNode:w.default,classify:E.default,component:k.default,lookupHelper:N.default,hasHelper:T.default,invokeHelper:A.default,element:O.default}),P.registerKeyword("debugger",D.default),P.registerKeyword("with",M.default),P.registerKeyword("outlet",j.default),P.registerKeyword("unbound",L.default),P.registerKeyword("component",F.default),P.registerKeyword("@element_component",V.default),P.registerKeyword("partial",H.default),P.registerKeyword("input",q.default),P.registerKeyword("textarea",z.default),P.registerKeyword("yield",B.default),P.registerKeyword("mut",U.default),P.registerKeyword("@mut",U.privateMut),P.registerKeyword("readonly",W.default),P.registerKeyword("get",K.default),P.registerKeyword("action",$.default),P.registerKeyword("render",G.default),P.registerKeyword("@element_action",Q.default),t.ENV._ENABLE_LEGACY_VIEW_SUPPORT&&P.registerKeyword("view",I.default),e.default={hooks:Y,helpers:S.default,useFragmentCache:!0};var X=t.environment.hasDOM?new R.default:null;e.domHelper=X}),e("ember-htmlbars/helper",["exports","ember-runtime/system/object"],function(e,t){"use strict";function r(e){return{isHelperInstance:!0,compute:e}}e.helper=r;var n=t.default.extend({isHelperInstance:!0,recompute:function(){this._stream.notify()}});n.reopenClass({isHelperFactory:!0}),e.default=n}),e("ember-htmlbars/helpers",["exports","ember-metal/empty_object"],function(e,t){"use strict";function r(e,t){n[e]=t}e.registerHelper=r;var n=new t.default;e.default=n}),e("ember-htmlbars/helpers/-html-safe",["exports","htmlbars-util/safe-string"],function(e,t){"use strict";function r(e){var r=e[0];return new t.default(r)}e.default=r}),e("ember-htmlbars/helpers/-join-classes",["exports"],function(e){"use strict";function t(e){for(var t=[],r=0;r0&&t(a):"boolean"==typeof l?!!l&&t(a):t(a)},"ShouldDisplay");return n.addDependency(a,i),n.addDependency(a,o),a}function c(e){return!!e}function d(e){return e}function f(e,t){return n.isStream(e)?e.getKey(t):e&&e[t]}e.default=a,e.linkParamsFor=s}),e("ember-htmlbars/hooks/lookup-helper",["exports","ember-htmlbars/system/lookup-helper"],function(e,t){"use strict";function r(e,r,n){return t.default(n,r.getSelf(),e)}e.default=r}),e("ember-htmlbars/hooks/subexpr",["exports","ember-htmlbars/system/lookup-helper","ember-htmlbars/system/invoke-helper","ember-htmlbars/streams/utils","ember-htmlbars/hooks/link-render-node"],function(e,t,r,n,i){"use strict";function o(e,n,o,s,l){var u=e.hooks.keywords[o];if(u)return u(null,e,n,s,l,null,null);i.linkParamsFor(o,s);for(var c=a(s,l,o),d=t.default(o,n.getSelf(),e),f=r.buildHelperStream(d,s,l,null,e,n,c),p=0;p0?function(){for(var u=a,c=arguments.length,d=Array(c),f=0;f0&&(u=a.concat(d)),o&&u.length>0&&(u[0]=i.get(u[0],o));var p={target:t,args:u,label:r.labelFor(e)};return l.flaggedInstrument("interaction.ember-action",p,function(){return s.default.join.apply(s.default,[t,n].concat(u))})}:function(){for(var a=arguments.length,u=Array(a),c=0;c0&&(u[0]=i.get(u[0],o));var d={target:t,args:u,label:r.labelFor(e)};return l.flaggedInstrument("interaction.ember-action",d,function(){return s.default.join.apply(s.default,[t,n].concat(u))})},u[p]=!0,u}e.default=c;var f=n.default("INVOKE");e.INVOKE=f;var p=n.default("ACTION");e.ACTION=p}),e("ember-htmlbars/keywords/closure-component",["exports","ember-metal/debug","ember-metal/is_empty","ember-metal/is_none","ember-metal/symbol","ember-htmlbars/streams/stream","ember-metal/empty_object","ember-htmlbars/streams/utils","ember-htmlbars/hooks/subexpr","ember-metal/assign","ember-htmlbars/utils/lookup-component","ember-htmlbars/utils/extract-positional-params"],function(e,t,r,n,i,o,a,s,l,u,c,d){"use strict";function f(e,t,r){var n=t[0],i=t.slice(1),o=new k(e,n,i,r);return o.addDependency(n),i.forEach(function(e){return o.addDependency(e)}),Object.keys(r).forEach(function(e){return o.addDependency(r[e])}),o}function p(e,t,r,n,i){var o=s.read(t),l=u.default(new a.default,n);return h(o)?m(o,r,l):v(e,o,r,l)}function h(e){return e&&e[w]}function m(e,t,r){var n;return b(e,t,r),n={},n[x]=e[x],n[E]=y(e[E],r,e[C],t),n[C]=e[C],n[w]=!0,n}function b(e,t,r){var n=e[C];d.processPositionalParams(null,n,t,r)}function v(e,t,r,n){var i,o=g(e.owner,t);return d.processPositionalParams(null,o,r,n),i={},i[x]=t,i[E]=n,i[C]=o,i[w]=!0,i}function g(e,t){if(!t)return[];var r=c.default(e,t),n=r.component;return n&&n.positionalParams?n.positionalParams:[]}function y(e,t){var n=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],i=arguments.length<=3||void 0===arguments[3]?[]:arguments[3],o=u.default({},e,t);if(d.isRestPositionalParams(n)&&r.default(i)){var a=n;o[a]=e[a]}return o}e.default=f,e.isComponentCell=h,e.processPositionalParamsFromCell=b,e.mergeInNewHash=y;var _=i.default("COMPONENT_REFERENCE");e.COMPONENT_REFERENCE=_;var w=i.default("COMPONENT_CELL");e.COMPONENT_CELL=w;var x=i.default("COMPONENT_PATH");e.COMPONENT_PATH=x;var C=i.default("COMPONENT_POSITIONAL_PARAMS");e.COMPONENT_POSITIONAL_PARAMS=C;var E=i.default("COMPONENT_HASH");e.COMPONENT_HASH=E;var k=o.default.extend({init:function(e,t,r,n){this._env=e,this._path=t,this._params=r,this._hash=n,this.label=l.labelForSubexpr([t].concat(r),n,"component"),this[_]=!0},compute:function(){return p(this._env,this._path,this._params,this._hash,this.label)}})}),e("ember-htmlbars/keywords/component",["exports","htmlbars-runtime/hooks","ember-htmlbars/keywords/closure-component","ember-metal/empty_object","ember-metal/assign"],function(e,t,r,n,i){"use strict";e.default=function(e,o,a,s,l,u,c,d){if(!e)return r.default(o,s,l);var f=i.default(new n.default,l);return t.keyword("@element_component",e,o,a,s,f,u,c,d),!0}}),e("ember-htmlbars/keywords/debugger",["exports","ember-metal/debug"],function(e,t){"use strict";function r(e,t,r){t.hooks.getValue(r.getLocal("view")),t.hooks.getValue(r.getSelf());return!0}e.default=r}),e("ember-htmlbars/keywords/element-action",["exports","ember-metal/debug","ember-metal/utils","ember-htmlbars/streams/utils","ember-metal/run_loop","ember-views/system/utils","ember-views/system/action_manager"],function(e,t,r,n,i,o,a){"use strict";function s(e,t){if("undefined"==typeof t){if(c.test(e.type))return o.isSimpleClick(e);t=""}if(t.indexOf("any")>=0)return!0;for(var r=0;r1?r-1:0),i=1;i1){var N=v._lookupFactory(C)||s.generateControllerFactory(v,x);E=N.create({model:o.read(b),target:k}),e.addDestruction(E)}else E=v.lookup(C)||s.default(v,x),E.setProperties({target:k});_&&_.set("controller",E),h.controller=E,c.viewName=a.camelize(m),d&&d.raw&&(d=d.raw);var T={layout:null,self:E};_&&(T.component=_);var A=l.default.create(e,t,c,T,h.parentView,null,null,d);h.manager=A,g&&1===u.length&&g._connectActiveComponentNode(m,A),A.render(t,c,p)},rerender:function(e,t,r,n,i,a,s,l){if(n.length>1){var u=o.read(n[1]);e.getState().controller.set("model",u)}}}}),e("ember-htmlbars/keywords/textarea",["exports"],function(e){"use strict";function t(e,t,r,n,i,o,a,s){return t.hooks.component(e,t,r,"-text-area",n,i,{default:o,inverse:a},s),!0}e.default=t}),e("ember-htmlbars/keywords/unbound",["exports","ember-metal/debug","ember-htmlbars/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r,n){"use strict";function i(e,t,r,n,i,a,s,l){if(null===e)return new o(n[0]);var u=void 0;return e.linkedResult?u=e.linkedResult:(u=new o(n[0]),e.linkedResult=u),t.hooks.range(e,t,r,null,u,l),!0}e.default=i;var o=r.default.extend({init:function(e){this.label="(volatile "+e.label+")",this.source=e,this.addDependency(e)},value:function(){return n.read(this.source)},notify:function(){}})}),e("ember-htmlbars/keywords/view",["exports","ember-htmlbars/streams/utils","ember-views/views/view","ember-htmlbars/node-managers/view-node-manager"],function(e,t,r,n){"use strict";function i(e,n){var i;return i=e?t.readViewFactory(e,n):n?n._lookupFactory("view:toplevel"):r.default}function o(e,t,r){var n={};for(var i in e)i===t?n[r]=e[i]:n[i]=e[i];return n}e.default={setupState:function(e,t,r,n,o){var a=t.hooks.getValue,s=a(r.getSelf()),l=e.viewClassOrInstance;l||(l=i(a(n[0]),t.owner));var u=r.hasLocal("view")?null:a(r.getSelf());return{manager:e.manager,parentView:t.view,controller:u,targetObject:s,viewClassOrInstance:l}},rerender:function(e,t,r,n,i,o,a,s){if(Object.keys(i).length)return e.getState().manager.rerender(t,i,s,!0)},render:function(e,t,r,i,a,s,l,u){a.tag&&(a=o(a,"tag","tagName")),a.classNameBindings&&(a.classNameBindings=a.classNameBindings.split(" "));var c=e.getState(),d=c.parentView,f={component:c.viewClassOrInstance,layout:null};f.createOptions={},c.controller&&(f.createOptions._controller=c.controller),c.targetObject&&(f.createOptions._targetObject=c.targetObject),c.manager&&(c.manager.destroy(),c.manager=null);var p=n.default.create(e,t,a,f,d,null,r,s);c.manager=p,p.render(t,a,u)}}}),e("ember-htmlbars/keywords/with",["exports","ember-metal/debug","htmlbars-runtime"],function(e,t,r){"use strict";e.default={isStable:function(){return!0},isEmpty:function(e){return!1},render:function(e,t,n,i,o,a,s,l){r.internal.continueBlock(e,t,n,"with",i,o,a,s,l)},rerender:function(e,t,n,i,o,a,s,l){r.internal.continueBlock(e,t,n,"with",i,o,a,s,l)}}}),e("ember-htmlbars/keywords/yield",["exports"],function(e){"use strict";function t(e,t,r,n,i,o,a,s){var l=t.hooks.getValue(i.to)||"default",u=r.getBlock(l);return u&&u.invoke(t,n,i.self,e,r,s),!0}e.default=t}),e("ember-htmlbars/morphs/attr-morph",["exports","ember-metal/debug","dom-helper","ember-metal/is_none"],function(e,t,r,n){"use strict";function i(e,t){}var o=r.default.prototype.AttrMorphClass,a="Binding style attributes may introduce cross-site scripting vulnerabilities; please ensure that values being bound are properly escaped. For more information, including how to disable this warning, see http://emberjs.com/deprecations/v1.x/#toc_binding-style-attributes.";e.styleWarning=a;var s=o.prototype;s.didInit=function(){this.streamUnsubscribers=null},s.willSetContent=function(e){i(this,e)},e.default=o}),e("ember-htmlbars/morphs/morph",["exports","dom-helper","ember-metal/debug"],function(e,t,r){"use strict";function n(e,t){this.HTMLBarsMorph$constructor(e,t),this.emberView=null,this.emberToDestroy=null,this.streamUnsubscribers=null,this.guid=o++,this.shouldReceiveAttrs=!1}var i=t.default.prototype.MorphClass,o=1,a=n.prototype=Object.create(i.prototype);a.HTMLBarsMorph$constructor=i,a.HTMLBarsMorph$clear=i.prototype.clear,a.addDestruction=function(e){this.emberToDestroy=this.emberToDestroy||[],this.emberToDestroy.push(e)},a.cleanup=function(){var e=this.emberView;if(e){var t=e.parentView;t&&e.ownerView._destroyingSubtreeForView===t&&t.removeChild(e)}var r=this.emberToDestroy;if(r){for(var n=0;n1&&(t=n[1],3===n.length&&(r=n[2]),o=":"+t,r&&(o+=":"+r)),{path:i,classNames:o,className:""===t?void 0:t,falsyClassName:r}}function s(e,t,i,a){if(n.isArray(t)&&(t=0!==r.get(t,"length")),i||a)return i&&t?i:a&&!t?a:null;if(t===!0){var s=e.split(".");return o.dasherize(s[s.length-1])}return t!==!1&&null!=t?t:null}function l(e,t,r){r=r||"";var n=a(t);if(""===n.path)return s(n.path,!0,n.className,n.falsyClassName);var o=e.getStream(r+n.path);return i.chain(o,function(){return s(n.path,i.read(o),n.className,n.falsyClassName)})}e.parsePropertyPath=a,e.classStringForValue=s,e.streamifyClassNameBinding=l}),e("ember-htmlbars/streams/dependency",["exports","ember-metal/debug","ember-metal/assign","ember-htmlbars/streams/utils"],function(e,t,r,n){"use strict";function i(e,t){this.next=null,this.prev=null,this.depender=e,this.dependee=t,this.unsubscription=null}r.default(i.prototype,{subscribe:function(){this.unsubscription=n.subscribe(this.dependee,this.depender.notify,this.depender)},unsubscribe:function(){this.unsubscription&&(this.unsubscription(),this.unsubscription=null)},replace:function(e){return this.dependee!==e&&(this.dependee=e,this.unsubscription&&(this.unsubscribe(),this.subscribe()),!0)},getValue:function(){return n.read(this.dependee)},setValue:function(e){return n.setValue(this.dependee,e)}}),e.default=i}),e("ember-htmlbars/streams/helper-factory",["exports","ember-htmlbars/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r){"use strict";var n=t.default.extend({init:function(e,t,r,n){this.helperFactory=e,this.params=t,this.hash=r,this.linkable=!0,this.helper=null,this.label=n},compute:function(){return this.helper||(this.helper=this.helperFactory.create({_stream:this})),this.helper.compute(r.getArrayValues(this.params),r.getHashValues(this.hash))},deactivate:function(){this.super$deactivate(),this.helper&&(this.helper.destroy(),this.helper=null)},super$deactivate:t.default.prototype.deactivate});e.default=n}),e("ember-htmlbars/streams/helper-instance",["exports","ember-htmlbars/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r){"use strict";var n=t.default.extend({init:function(e,t,r,n){this.helper=e,this.params=t,this.hash=r,this.linkable=!0,this.label=n},compute:function(){return this.helper.compute(r.getArrayValues(this.params),r.getHashValues(this.hash))}});e.default=n}),e("ember-htmlbars/streams/key-stream",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/observer","ember-htmlbars/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r,n,i,o,a){"use strict";function s(e,t){return e.label?e.label+"."+t:t}e.default=o.default.extend({init:function(e,t){var r=s(e,t);this.path=r,this.observedObject=null,this.key=t,this.sourceDep=this.addMutableDependency(e),this.label=r},compute:function(){var e=this.sourceDep.getValue(),t=typeof e;if(e&&"boolean"!==t)return"object"===t?r.get(e,this.key):e[this.key]},setValue:function(e){var t=this.sourceDep.getValue();t&&n.set(t,this.key,e)},setSource:function(e){this.sourceDep.replace(e),this.notify()},_super$revalidate:o.default.prototype.revalidate,revalidate:function(e){this._super$revalidate(e);var t=this.sourceDep.getValue();t!==this.observedObject&&(this._clearObservedObject(),t&&"object"==typeof t&&(i.addObserver(t,this.key,this,this.notify),this.observedObject=t))},_super$deactivate:o.default.prototype.deactivate,_clearObservedObject:function(){this.observedObject&&(i.removeObserver(this.observedObject,this.key,this,this.notify),this.observedObject=null)},deactivate:function(){this._super$deactivate(),this._clearObservedObject()}})}),e("ember-htmlbars/streams/proxy-stream",["exports","ember-runtime/system/object","ember-htmlbars/streams/stream"],function(e,t,r){"use strict";var n=r.default.extend({init:function(e,t){this.label=t,this.sourceDep=this.addMutableDependency(e)},compute:function(){return this.sourceDep.getValue()},setValue:function(e){this.sourceDep.setValue(e)},setSource:function(e){var r=this.sourceDep.replace(e);!r&&e instanceof t.default||this.notify()}});n.extend=r.default.extend,e.default=n}),e("ember-htmlbars/streams/should_display",["exports","ember-metal/debug","ember-metal/property_get","ember-runtime/utils","ember-htmlbars/streams/stream","ember-htmlbars/streams/utils"],function(e,t,r,n,i,o){"use strict";function a(e){if(o.isStream(e))return new s(e);var t=typeof e;if("boolean"===t)return e;if(t&&"object"===t&&null!==e){var i=r.get(e,"isTruthy");if("boolean"==typeof i)return i}return n.isArray(e)?0!==r.get(e,"length"):!!e; -}e.default=a;var s=i.default.extend({init:function(e){var t=e.get("isTruthy");this.init(),this.predicate=e,this.isTruthy=t,this.lengthDep=null,this.addDependency(e),this.addDependency(t)},compute:function(){var e=o.read(this.isTruthy);return"boolean"==typeof e?e:this.lengthDep?0!==this.lengthDep.getValue():!!o.read(this.predicate)},revalidate:function(){n.isArray(o.read(this.predicate))?this.lengthDep||(this.lengthDep=this.addMutableDependency(this.predicate.get("length"))):this.lengthDep&&(this.lengthDep.destroy(),this.lengthDep=null)}})}),e("ember-htmlbars/streams/stream",["exports","ember-metal/assign","ember-metal/debug","ember-metal/path_cache","ember-metal/observer","ember-htmlbars/streams/utils","ember-metal/empty_object","ember-htmlbars/streams/subscriber","ember-htmlbars/streams/dependency","ember-metal/utils","require","ember-metal/symbol"],function(e,t,r,n,i,o,a,s,l,u,c,d){"use strict";function f(e){this._init(e)}function p(e,t,r){return o.isStream(e)?e:new t(e,r)}function h(e){return void 0===e?"(no label)":e}e.wrap=p;var m=d.default("IS_STREAM");e.IS_STREAM=m;var b,v;f.prototype={_init:function(e){this[m]=!0,this.label=h(e),this.isActive=!1,this.isDirty=!0,this.isDestroyed=!1,this.cache=void 0,this.children=void 0,this.subscriberHead=null,this.subscriberTail=null,this.dependencyHead=null,this.dependencyTail=null,this.observedProxy=null,this.__ember_meta__=null,this[u.GUID_KEY]=null},_makeChildStream:function(e){return new(b=b||c.default("ember-htmlbars/streams/key-stream").default)(this,e)},removeChild:function(e){delete this.children[e]},getKey:function(e){void 0===this.children&&(this.children=new a.default);var t=this.children[e];return void 0===t&&(t=this._makeChildStream(e),this.children[e]=t),t},get:function(e){var t=n.getFirstKey(e),r=n.getTailPath(e);void 0===this.children&&(this.children=new a.default);var i=this.children[t];return void 0===i&&(i=this._makeChildStream(t,e),this.children[t]=i),void 0===r?i:i.get(r)},value:function(){this.isActive||(this.isDirty=!0);var e=!1;return!this.isActive&&this.subscriberHead&&(this.activate(),e=!0),this.isDirty&&(this.isActive&&(e=!0),this.cache=this.compute(),this.isDirty=!1),e&&this.revalidate(this.cache),this.cache},addMutableDependency:function(e){var t=new l.default(this,e);if(this.isActive&&t.subscribe(),null===this.dependencyHead)this.dependencyHead=this.dependencyTail=t;else{var r=this.dependencyTail;r.next=t,t.prev=r,this.dependencyTail=t}return t},addDependency:function(e){o.isStream(e)&&this.addMutableDependency(e)},subscribeDependencies:function(){for(var e=this.dependencyHead;e;){var t=e.next;e.subscribe(),e=t}},unsubscribeDependencies:function(){for(var e=this.dependencyHead;e;){var t=e.next;e.unsubscribe(),e=t}},maybeDeactivate:function(){!this.subscriberHead&&this.isActive&&(this.isActive=!1,this.unsubscribeDependencies(),this.deactivate())},activate:function(){this.isActive=!0,this.subscribeDependencies()},revalidate:function(e){e!==this.observedProxy&&(this._clearObservedProxy(),v=v||c.default("ember-runtime/mixins/-proxy").default,v.detect(e)&&(i.addObserver(e,"content",this,this.notify),this.observedProxy=e))},_clearObservedProxy:function(){this.observedProxy&&(i.removeObserver(this.observedProxy,"content",this,this.notify),this.observedProxy=null)},deactivate:function(){this._clearObservedProxy()},compute:function(){throw new Error("Stream error: compute not implemented")},setValue:function(){throw new Error("Stream error: setValue not implemented")},notify:function(){this.notifyExcept()},notifyExcept:function(e,t){this.isDirty||(this.isDirty=!0,this.notifySubscribers(e,t))},subscribe:function(e,t){var r=new s.default(e,t,this);if(null===this.subscriberHead)this.subscriberHead=this.subscriberTail=r;else{var n=this.subscriberTail;n.next=r,r.prev=n,this.subscriberTail=r}var i=this;return function(e){r.removeFrom(i),e&&i.prune()}},prune:function(){null===this.subscriberHead&&this.destroy(!0)},unsubscribe:function(e,t){for(var r=this.subscriberHead;r;){var n=r.next;r.callback===e&&r.context===t&&r.removeFrom(this),r=n}},notifySubscribers:function(e,t){for(var r=this.subscriberHead;r;){var n=r.next,i=r.callback,o=r.context;r=n,i===e&&o===t||(void 0===o?i(this):i.call(o,this))}},destroy:function(e){if(!this.isDestroyed){this.isDestroyed=!0,this.subscriberHead=this.subscriberTail=null,this.maybeDeactivate();var t=this.dependencies;if(t)for(var r=0;r1?t-1:0),n=1;n("+this._from+" -> "+this._to+")"+e},connect:function(e){var t=void 0,n=void 0,i=void 0;if(c.isGlobalPath(this._from)){var s=c.getFirstKey(this._from);i=r.context.lookup[s],i&&(t=i,n=c.getTailPath(this._from))}return void 0===t&&(t=e,n=this._from),a.trySet(e,this._to,o.get(t,n)),u.addObserver(t,n,this,"fromDidChange"),this._oneWay||u.addObserver(e,this._to,this,"toDidChange"),l.addListener(e,"willDestroy",this,"disconnect"),f(e,this._to,this._from,i,this._oneWay,!i&&!this._oneWay),this._readyToSync=!0,this._fromObj=t,this._fromPath=n,this._toObj=e,this},disconnect:function(){return u.removeObserver(this._fromObj,this._fromPath,this,"fromDidChange"),this._oneWay||u.removeObserver(this._toObj,this._to,this,"toDidChange"),this._readyToSync=!1,this},fromDidChange:function(e){this._scheduleSync("fwd")},toDidChange:function(e){this._scheduleSync("back")},_scheduleSync:function(e){var t=this._direction;void 0===t&&(n.default.schedule("sync",this,"_sync"),this._direction=e),"back"===t&&"fwd"===e&&(this._direction="fwd")},_sync:function(){var e=r.ENV.LOG_BINDINGS,n=this._toObj;if(!n.isDestroyed&&this._readyToSync){var i=this._direction,s=this._fromObj,l=this._fromPath;if(this._direction=void 0,"fwd"===i){var c=o.get(s,l);e&&t.default.log(" ",this.toString(),"->",c,s),this._oneWay?a.trySet(n,this._to,c):u._suspendObserver(n,this._to,this,"toDidChange",function(){a.trySet(n,this._to,c)})}else if("back"===i){var d=o.get(n,this._to);e&&t.default.log(" ",this.toString(),"<-",d,n),u._suspendObserver(s,l,this,"fromDidChange",function(){a.trySet(s,l,d)})}}}},p(d,{from:function(e){var t=this;return new t(void 0,e)},to:function(e){var t=this;return new t(e,void 0)}}),e.Binding=d}),e("ember-metal/cache",["exports","ember-metal/empty_object"],function(e,t){"use strict";function r(e,r){this.store=new t.default,this.size=0,this.misses=0,this.hits=0,this.limit=e,this.func=r}e.default=r;var n=function(){};r.prototype={set:function(e,t){return this.limit>this.size&&(this.size++,void 0===t?this.store[e]=n:this.store[e]=t),t},get:function(e){var t=this.store[e];return void 0===t?(this.misses++,t=this.set(e,this.func(e))):t===n?(this.hits++,t=void 0):this.hits++,t},purge:function(){this.store=new t.default,this.size=0,this.hits=0,this.misses=0}}}),e("ember-metal/chains",["exports","ember-metal/property_get","ember-metal/meta","ember-metal/watch_key","ember-metal/empty_object","ember-metal/watch_path"],function(e,t,r,n,i,o){"use strict";function a(e){return e.match(b)[0]}function s(e){return e&&"object"==typeof e}function l(e){return!(s(e)&&e.isDescriptor&&e._volatile===!1)}function u(){this.chains=new i.default}function c(){return new u}function d(e,t,i){if(s(e)){var o=r.meta(e);o.writableChainWatchers(c).add(t,i),n.watchKey(e,t,o)}}function f(e,t,i){if(s(e)){var o=r.peekMeta(e);o&&o.readableChainWatchers()&&(o=r.meta(e),o.readableChainWatchers().remove(t,i),n.unwatchKey(e,t,o))}}function p(e,t,r){this._parent=e,this._key=t,this._watching=void 0===r,this._chains=void 0,this._object=void 0,this.count=0,this._value=r,this._paths={},this._watching&&(this._object=e.value(),this._object&&d(this._object,this._key,this))}function h(e,n){if(e){var i=r.peekMeta(e);if(!i||i.proto!==e){if(l(e[n]))return t.get(e,n);var o=i.readableCache();return o&&n in o?o[n]:void 0}}}function m(e){var t=r.peekMeta(e);if(t){t=r.meta(e);var n=t.readableChainWatchers();n&&n.revalidateAll(),t.readableChains()&&t.writableChains(o.makeChainNode)}}e.finishChains=m;var b=/^([^\.]+)/;u.prototype={add:function(e,t){var r=this.chains[e];void 0===r?this.chains[e]=[t]:r.push(t)},remove:function(e,t){var r=this.chains[e];if(r)for(var n=0;n0&&t[e]--;var r=a(e),n=e.slice(r.length+1);this.unchain(r,n)},chain:function(e,t){var r,n=this._chains;void 0===n?n=this._chains=new i.default:r=n[e],void 0===r&&(r=n[e]=new p(this,e,void 0)),r.count++,t&&(e=a(t),t=t.slice(e.length+1),r.chain(e,t))},unchain:function(e,t){var r=this._chains,n=r[e];if(t&&t.length>1){var i=a(t),o=t.slice(i.length+1);n.unchain(i,o)}n.count--,n.count<=0&&(r[n._key]=void 0,n.destroy())},notify:function(e,t){if(e&&this._watching){var r=this._parent.value();r!==this._object&&(f(this._object,this._key,this),this._object=r,d(r,this._key,this)),this._value=void 0}var n,i=this._chains;if(i)for(var o in i)n=i[o],void 0!==n&&n.notify(e,t);t&&this._parent&&this._parent.populateAffected(this._key,1,t)},populateAffected:function(e,t,r){this._key&&(e=this._key+"."+e),this._parent?this._parent.populateAffected(e,t+1,r):t>1&&r.push(this.value(),e)}},e.removeChainWatcher=f,e.ChainNode=p}),e("ember-metal/computed",["exports","ember-metal/debug","ember-metal/property_set","ember-metal/utils","ember-metal/meta","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys"],function(e,t,r,n,i,o,a,s,l,u){"use strict";function c(){}function d(e,t){this.isDescriptor=!0,"function"==typeof e?this._getter=e:(this._getter=e.get,this._setter=e.set),this._dependentKeys=void 0,this._suspended=void 0,this._meta=void 0,this._volatile=!1,this._dependentKeys=t&&t.dependentKeys,this._readOnly=!1}function f(e){var t;arguments.length>1&&(t=[].slice.call(arguments),e=t.pop());var r=new d(e);return t&&r.property.apply(r,t),r}function p(e,t){var r=i.peekMeta(e),n=r&&r.source===e&&r.readableCache(),o=n&&n[t];if(o!==c)return o}e.default=f;d.prototype=new s.Descriptor;var h=d.prototype;h.volatile=function(){return this._volatile=!0,this},h.readOnly=function(){return this._readOnly=!0,this},h.property=function(){var e,t=function(t){ -e.push(t)};e=[];for(var r=0;r=0;i-=3)if(t===e[i]&&r===e[i+1]){n=i;break}return n}function a(e,t,r){var i=n.peekMeta(e);if(i){for(var a=i.matchingListeners(t),s=[],l=a.length-3;l>=0;l-=3){var u=a[l],c=a[l+1],d=a[l+2],f=o(r,u,c);f===-1&&(r.push(u,c,d),s.push(u,c,d))}return s}}function s(e,t,r,o,a){o||"function"!=typeof r||(o=r,r=null);var s=0;a&&(s|=i.ONCE),n.meta(e).addToListeners(t,r,o,s),"function"==typeof e.didAddListener&&e.didAddListener(t,r,o)}function l(e,t,r,i){i||"function"!=typeof r||(i=r,r=null),n.meta(e).removeFromListeners(t,r,i,function(){"function"==typeof e.didRemoveListener&&e.didRemoveListener.apply(e,arguments)})}function u(e,t,r,n,i){return c(e,[t],r,n,i)}function c(e,t,r,i,o){return i||"function"!=typeof r||(i=r,r=null),n.meta(e).suspendListeners(t,r,i,o)}function d(e){return n.meta(e).watchedEvents()}function f(e,t,o,a){if(!a){var s=n.peekMeta(e);a=s&&s.matchingListeners(t)}if(a&&0!==a.length){for(var u=a.length-3;u>=0;u-=3){var c=a[u],d=a[u+1],f=a[u+2];d&&(f&i.SUSPENDED||(f&i.ONCE&&l(e,t,c,d),c||(c=e),"string"==typeof d?o?r.applyStr(c,d,o):c[d]():o?d.apply(c,o):d.call(c)))}return!0}}function p(e,t){var r=n.peekMeta(e);return!!r&&r.matchingListeners(t).length>0}function h(e,t){var r=[],i=n.peekMeta(e),o=i&&i.matchingListeners(t);if(!o)return r;for(var a=0;a=0&&(a=n(a,l.split(","),s))}for(var s=0;s-1&&o.splice(a,1),this.size=o.length,!0}return!1},isEmpty:function(){return 0===this.size},has:function(e){if(0===this.size)return!1;var r=t.guidFor(e),n=this.presenceSet;return n[r]===!0},forEach:function(e){if("function"!=typeof e&&n(e),0!==this.size){var t,r=this.list;if(2===arguments.length)for(t=0;t=0;a-=4)if(o[a]===e&&(!r||o[a+1]===t&&o[a+2]===r)){if(i!==this)return this._finalizeListeners(),this.removeFromListeners(e,t,r);"function"==typeof n&&n(e,t,o[a+2]),o.splice(a,4)}if(i._listenersFinalized)break;i=i.parent}},matchingListeners:function(e){for(var r=this,i=[];r;){var o=r._listeners;if(o)for(var a=0;a=0;o-=3)i[o+1]===t&&i[o+2]===r&&e.indexOf(i[o])!==-1&&i.splice(o,3)}},watchedEvents:function(){for(var e=this,t={};e;){var r=e._listeners;if(r)for(var n=0;n=0||"concatenatedProperties"===t||"mergedProperties"===t?r=g(e,t,r,o):l&&l.indexOf(t)>=0?r=y(e,t,r,o):p(r)&&(r=v(e,t,r,o,i)),i[t]=void 0,o[t]=r}function w(e,t,r,n,i,a){function s(e){delete r[e],delete n[e]}for(var l,u,c,d,f,p,b=0;b1?t-1:0),n=1;n0){for(var n=new Array(r),o=0;o=0;)if(D(o[a],t,r))return!0;return!1}function M(e,t,r){if(!r[i.guidFor(t)])if(r[i.guidFor(t)]=!0,t.properties)for(var n=Object.keys(t.properties),o=0;o0,u&&u.teardown(e,t),r instanceof o)d=r,e[t]=d,r.setup&&r.setup(e,t);else if(null==r){d=a;e[t]=a}else d=r,Object.defineProperty(e,t,r);return c&&i.overrideChains(e,t,s),e.didDefineProperty&&e.didDefineProperty(e,t,d),this}e.Descriptor=o,e.MANDATORY_SETTER_FUNCTION=a,e.DEFAULT_GETTER_FUNCTION=s,e.INHERITING_GETTER_FUNCTION=l,e.defineProperty=u;(function(){var e=Object.create(Object.prototype,{prop:{configurable:!0,value:1}});return Object.defineProperty(e,"prop",{configurable:!0,value:2}),2===e.prop})()}),e("ember-metal/property_events",["exports","ember-metal/utils","ember-metal/meta","ember-metal/events","ember-metal/tags","ember-metal/observer_set","ember-metal/symbol"],function(e,t,r,n,i,o,a){"use strict";function s(e,t){var n=r.peekMeta(e);if(!n||n.isInitialized(e)){var i=n&&n.peekWatching(t)>0,o=e[t],a=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0;a&&a.willChange&&a.willChange(e,t),i&&(u(e,t,n),f(e,t,n),g(e,t))}}function l(e,t){var n=r.peekMeta(e);if(!n||n.isInitialized(e)){var o=n&&n.peekWatching(t)>0,a=e[t],s=null!==a&&"object"==typeof a&&a.isDescriptor?a:void 0;s&&s.didChange&&s.didChange(e,t),o&&(n.hasDeps(t)&&c(e,t,n),p(e,t,n,!1),y(e,t)),e[_]&&e[_](t),i.markObjectAsDirty(n)}}function u(e,t,r){if(!e.isDestroying&&r&&r.hasDeps(t)){var n=w,i=!n;i&&(n=w={}),d(s,e,t,n,r),i&&(w=null)}}function c(e,t,r){if(!e.isDestroying&&r&&r.hasDeps(t)){var n=x,i=!n;i&&(n=x={}),d(l,e,t,n,r),i&&(x=null)}}function d(e,r,n,i,o){var a,s,l=t.guidFor(r),u=i[l];u||(u=i[l]={}),u[n]||(u[n]=!0,o.forEachInDeps(n,function(t,n){n&&(a=r[t],s=null!==a&&"object"==typeof a&&a.isDescriptor?a:void 0,s&&s._suspended===r||e(r,t))}))}function f(e,t,r){var n=r.readableChainWatchers();n&&n.notify(t,!1,s)}function p(e,t,r){var n=r.readableChainWatchers();n&&n.notify(t,!0,l)}function h(e,t,r){var n=r.readableChainWatchers();n&&n.revalidate(t)}function m(){k++}function b(){k--,k<=0&&(C.clear(),E.flush())}function v(e,t){m();try{e.call(t)}finally{b.call(t)}}function g(e,t){if(!e.isDestroying){var r,i,o=t+":before";k?(r=C.add(e,t,o),i=n.accumulateListeners(e,o,r),n.sendEvent(e,o,[e,t],i)):n.sendEvent(e,o,[e,t])}}function y(e,t){if(!e.isDestroying){var r,i=t+":change";k?(r=E.add(e,t,i),n.accumulateListeners(e,i,r)):n.sendEvent(e,i,[e,t])}}var _=a.default("PROPERTY_DID_CHANGE");e.PROPERTY_DID_CHANGE=_;var w,x,C=new o.default,E=new o.default,k=0;e.propertyWillChange=s,e.propertyDidChange=l,e.overrideChains=h,e.beginPropertyChanges=m,e.endPropertyChanges=b,e.changeProperties=v}),e("ember-metal/property_get",["exports","ember-metal/debug","ember-metal/path_cache"],function(e,t,r){"use strict";function n(e,t){if(""===t)return e;var n,o=e[t],a=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0;return void 0===a&&r.isPath(t)?i(e,t):a?a.get(e,t):(n=o,void 0!==n||"object"!=typeof e||t in e||"function"!=typeof e.unknownProperty?n:e.unknownProperty(t))}function i(e,t){for(var r=e,i=t.split("."),a=0;au?u:d,o<=0&&(o=0),a=s.splice(0,u),a=[c,o].concat(a),c+=u,d-=o,l=l.concat(r.apply(e,a));return l}e.default=t;var r=Array.prototype.splice}),e("ember-metal/run_loop",["exports","ember-metal/debug","ember-metal/testing","ember-metal/error_handler","ember-metal/utils","ember-metal/property_events","backburner"],function(e,t,r,n,i,o,a){"use strict";function s(e){u.currentRunLoop=e}function l(e,t){u.currentRunLoop=t}function u(){return d.run.apply(d,arguments)}e.default=u;var c={get onerror(){return n.getOnerror()},set onerror(e){return n.setOnerror(e)}},d=new a.default(["sync","actions","destroy"],{GUID_KEY:i.GUID_KEY,sync:{before:o.beginPropertyChanges,after:o.endPropertyChanges},defaultQueue:"actions",onBegin:s,onEnd:l,onErrorTarget:c,onErrorMethod:"onerror"});u.join=function(){return d.join.apply(d,arguments)},u.bind=function(){for(var e=arguments.length,t=Array(e),r=0;r-1;return e?function(e){return E.test(k.call(e))}:function(){return!0}}();e.checkHasSuper=N,o.__hasSuper=!1;var T=Object.prototype.toString;e.GUID_KEY=_,e.makeArray=d,e.canInvoke=u}),e("ember-metal/watch_key",["exports","ember-metal/features","ember-metal/meta","ember-metal/properties","ember-metal/utils"],function(e,t,r,n,i){"use strict";function o(e,t,n){var i=n||r.meta(e);if(i.peekWatching(t))i.writeWatching(t,(i.peekWatching(t)||0)+1);else{i.writeWatching(t,1);var o=e[t],a=null!==o&&"object"==typeof o&&o.isDescriptor?o:void 0;a&&a.willWatch&&a.willWatch(e,t),"function"==typeof e.willWatchProperty&&e.willWatchProperty(t)}}function a(e,t,n){var i=n||r.meta(e),o=i.peekWatching(t);if(1===o){i.writeWatching(t,0);var a=e[t],s=null!==a&&"object"==typeof a&&a.isDescriptor?a:void 0;s&&s.didUnwatch&&s.didUnwatch(e,t),"function"==typeof e.didUnwatchProperty&&e.didUnwatchProperty(t)}else o>1&&i.writeWatching(t,o-1)}e.watchKey=o,e.unwatchKey=a}),e("ember-metal/watch_path",["exports","ember-metal/meta","ember-metal/chains"],function(e,t,r){"use strict";function n(e,r){return(r||t.meta(e)).writableChains(i)}function i(e){return new r.ChainNode(null,null,e)}function o(e,r,i){var o=i||t.meta(e),a=o.peekWatching(r)||0;a?o.writeWatching(r,a+1):(o.writeWatching(r,1),n(e,o).add(r))}function a(e,r,i){var o=i||t.meta(e),a=o.peekWatching(r)||0;1===a?(o.writeWatching(r,0),n(e,o).remove(r)):a>1&&o.writeWatching(r,a-1)}e.makeChainNode=i,e.watchPath=o,e.unwatchPath=a}),e("ember-metal/watching",["exports","ember-metal/chains","ember-metal/watch_key","ember-metal/watch_path","ember-metal/path_cache","ember-metal/meta"],function(e,t,r,n,i,o){"use strict";function a(e,t,o){i.isPath(t)?n.watchPath(e,t,o):r.watchKey(e,t,o)}function s(e,t){var r=o.peekMeta(e);return(r&&r.peekWatching(t))>0}function l(e,t){var r=o.peekMeta(e);return r&&r.peekWatching(t)||0}function u(e,t,o){i.isPath(t)?n.unwatchPath(e,t,o):r.unwatchKey(e,t,o)}function c(e){var r,n,i,a,s=o.peekMeta(e);if(s&&(o.deleteMeta(e),r=s.readableChains()))for(d.push(r);d.length>0;){if(r=d.pop(),n=r._chains)for(i in n)void 0!==n[i]&&d.push(n[i]);r._watching&&(a=r._object,a&&t.removeChainWatcher(a,r._key,r))}}e.isWatching=s,e.watcherCount=l,e.unwatch=u,e.destroy=c,e.watch=a;var d=[]}),e("ember-metal/weak_map",["exports","ember-metal/debug","ember-metal/utils","ember-metal/meta"],function(e,t,r,n){"use strict";function i(){}function o(){this._id=r.GUID_KEY+a++}e.default=o;var a=0;o.prototype.get=function(e){var t=n.peekMeta(e);if(t){var r=t.readableWeak();if(r){if(r[this._id]===i)return;return r[this._id]}}},o.prototype.set=function(e,t){return void 0===t&&(t=i),n.meta(e).writableWeak()[this._id]=t,this},o.prototype.has=function(e){var t=n.peekMeta(e);if(t){var r=t.readableWeak();if(r)return void 0!==r[this._id]}return!1},o.prototype.delete=function(e){return!!this.has(e)&&(delete n.meta(e).writableWeak()[this._id],!0)}}),e("ember-routing/ext/controller",["exports","ember-metal/property_get","ember-runtime/mixins/controller"],function(e,t,r){"use strict";r.default.reopen({concatenatedProperties:["queryParams"],queryParams:null,_qpDelegate:null,_qpChanged:function(e,r){var n=r.substr(0,r.length-3),i=e._qpDelegate,o=t.get(e,n);i(n,o)},transitionToRoute:function(){var e=t.get(this,"target"),r=e.transitionToRoute||e.transitionTo;return r.apply(e,arguments)},replaceRoute:function(){var e=t.get(this,"target"),r=e.replaceRoute||e.replaceWith;return r.apply(e,arguments)}}),e.default=r.default});e("ember-routing/ext/run_loop",["exports","ember-metal/run_loop"],function(e,t){"use strict";t.default._addQueue("routerTransitions","actions")});e("ember-routing/index",["exports","ember-metal/core","ember-routing/ext/run_loop","ember-routing/ext/controller","ember-routing/location/api","ember-routing/location/none_location","ember-routing/location/hash_location","ember-routing/location/history_location","ember-routing/location/auto_location","ember-routing/system/generate_controller","ember-routing/system/controller_for","ember-routing/system/dsl","ember-routing/system/router","ember-routing/system/route"],function(e,t,r,n,i,o,a,s,l,u,c,d,f,p){"use strict";t.default.Location=i.default,t.default.AutoLocation=l.default,t.default.HashLocation=a.default,t.default.HistoryLocation=s.default,t.default.NoneLocation=o.default,t.default.controllerFor=c.default,t.default.generateControllerFactory=u.generateControllerFactory,t.default.generateController=u.default,t.default.RouterDSL=d.default,t.default.Router=f.default,t.default.Route=p.default,e.default=t.default}),e("ember-routing/location/api",["exports","ember-metal/debug","ember-environment","ember-routing/location/util"],function(e,t,r,n){"use strict";e.default={create:function(e){var t=e&&e.implementation,r=this.implementations[t];return r.create.apply(r,arguments)},implementations:{},_location:r.environment.location,_getHash:function(){return n.getHash(this.location)}}}),e("ember-routing/location/auto_location",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","container/owner","ember-runtime/system/object","ember-environment","ember-routing/location/util"],function(e,t,r,n,i,o,a,s,l){"use strict";function u(e){return function(){for(var t=r.get(this,"concreteImplementation"),n=arguments.length,o=Array(n),a=0;a7)}function s(e,t){return(e.indexOf("Android 2.")===-1&&e.indexOf("Android 4.0")===-1||e.indexOf("Mobile Safari")===-1||e.indexOf("Chrome")!==-1||e.indexOf("Windows Phone")!==-1)&&!!(t&&"pushState"in t)}function l(e,t){e.replace(o(e)+t)}e.getPath=t,e.getQuery=r,e.getHash=n,e.getFullPath=i,e.getOrigin=o,e.supportsHashChange=a,e.supportsHistory=s,e.replacePath=l}),e("ember-routing/services/routing",["exports","ember-runtime/system/service","ember-metal/property_get","ember-runtime/computed/computed_macros","ember-routing/utils","ember-metal/assign"],function(e,t,r,n,i,o){"use strict";function a(e,t){for(var r=0,n=0;nc&&(n=u),i.isActiveIntent(n,e,t,!o)}})}),e("ember-routing/system/cache",["exports","ember-runtime/system/object"],function(e,t){"use strict";e.default=t.default.extend({init:function(){this.cache={}},has:function(e){return e in this.cache},stash:function(e,t,r){var n=this.cache[e];n||(n=this.cache[e]={}),n[t]=r},lookup:function(e,t,r){var n=this.cache;if(!(e in n))return r;var i=n[e];return t in i?i[t]:r},cache:null})}),e("ember-routing/system/controller_for",["exports"],function(e){"use strict";function t(e,t,r){return e.lookup("controller:"+t,r)}e.default=t}),e("ember-routing/system/dsl",["exports","ember-metal/debug","ember-metal/features"],function(e,t,r){"use strict";function n(e,t){this.parent=e,this.enableLoadingSubstates=t&&t.enableLoadingSubstates,this.matches=[],this.explicitIndex=void 0,this.options=t}function i(e){return e.parent&&"application"!==e.parent}function o(e,t,r){return i(e)&&r!==!0?e.parent+"."+t:t}function a(e,t,r,n){r=r||{};var i=o(e,t,r.resetNamespace);"string"!=typeof r.path&&(r.path="/"+t),e.push(r.path,i,n)}e.default=n,n.prototype={route:function(e,t,r){var i="/_unused_dummy_error_path_route_"+e+"/:error";if(2===arguments.length&&"function"==typeof t&&(r=t,t={}),1===arguments.length&&(t={}),this.enableLoadingSubstates&&(a(this,e+"_loading",{resetNamespace:t.resetNamespace}),a(this,e+"_error",{path:i})),r){var s=o(this,e,t.resetNamespace),l=new n(s,this.options);a(l,"loading"),a(l,"error",{path:i}),r.call(l),a(this,e,t,l.generate())}else a(this,e,t)},push:function(e,t,r){var n=t.split(".");""!==e&&"/"!==e&&"index"!==n[n.length-1]||(this.explicitIndex=!0),this.matches.push([e,t,r])},resource:function(e,t,r){2===arguments.length&&"function"==typeof t&&(r=t,t={}),1===arguments.length&&(t={}),t.resetNamespace=!0,this.route(e,t,r)},generate:function(){var e=this.matches;return this.explicitIndex||this.route("index",{path:"/"}),function(t){for(var r=0;r0&&(this.connections=[],f.default.once(this.router,"_setOutlets"))}});g.deprecateUnderscoreActions(I),I.reopenClass({isRouteFactory:!0}),e.default=I}),e("ember-routing/system/router",["exports","ember-console","ember-metal/debug","ember-metal/error","ember-metal/features","ember-metal/property_get","ember-metal/property_set","ember-metal/properties","ember-metal/empty_object","ember-metal/computed","ember-metal/assign","ember-metal/run_loop","ember-runtime/system/object","ember-runtime/mixins/evented","ember-routing/system/route","ember-routing/system/dsl","ember-routing/location/api","ember-routing/utils","ember-metal/utils","ember-routing/system/router_state","container/owner","ember-metal/dictionary","router","router/transition"],function(e,t,r,n,i,o,a,s,l,u,c,d,f,p,h,m,b,v,g,y,_,w,x,C){"use strict";function E(){return this}function k(e,t,r){for(var n,i,o=t.state.handlerInfos,a=!1,s=o.length-1;s>=0;--s)if(n=o[s],i=n.handler,a){if(r(i,o[s+1].handler)!==!0)return!1}else e===i&&(a=!0);return!0}function N(e,r){var n,i=[];n=e&&"object"==typeof e&&"object"==typeof e.errorThrown?e.errorThrown:e,r&&i.push(r),n&&(n.message&&i.push(n.message),n.stack&&i.push(n.stack),"string"==typeof n&&i.push(n)),t.default.error.apply(this,i)}function T(e,t,r){var n,i=e.router,o=t.routeName.split(".").pop(),a="application"===e.routeName?"":e.routeName+".";return n=a+o+"_"+r,A(i,n)?n:(n=a+r,A(i,n)?n:void 0)}function A(e,t){var r=_.getOwner(e);return e.hasRoute(t)&&(r.hasRegistration("template:"+t)||r.hasRegistration("route:"+t))}function O(e,t,r){var i=r.shift();if(!e){if(t)return;throw new n.default("Can't trigger action '"+i+"' because your app hasn't finished transitioning into its first route. To trigger an action on destination routes during a transition, you can call `.send()` on the `Transition` object passed to the `model/beforeModel/afterModel` hooks.")}for(var o,a,s=!1,l=e.length-1;l>=0;l--)if(o=e[l],a=o.handler,a.actions&&a.actions[i]){if(a.actions[i].apply(a,r)!==!0){if("error"===i){var u=g.guidFor(r[0]);a.router._markErrorAsHandled(u)}return}s=!0}if(q[i])return void q[i].apply(null,r);if(!s&&!t)throw new n.default("Nothing handled the action '"+i+"'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.")}function S(e,t,r){for(var n=e.router,i=n.applyIntent(t,r),o=i.handlerInfos,a=i.params,s=0;s0;){var n=r.shift();if(n.render.name===t)return n;var i=n.outlets;for(var o in i)r.push(i[o])}}function L(e,t,r){var n,i={render:r,outlets:new l.default};return n=r.into?j(e,r.into):t,n?a.set(n.outlets,r.outlet,i):r.into?I(e,r.into,i):e=i,{liveRoutes:e,ownState:i}}function I(e,t,r){e.outlets.__ember_orphans__||(e.outlets.__ember_orphans__={render:{name:"__ember_orphans__"},outlets:new l.default}),e.outlets.__ember_orphans__.outlets[t]=r,d.default.schedule("afterRender",function(){})}function F(e,t,r){var n=j(e,r.routeName);return n?n:(t.outlets.main={render:{name:r.routeName,outlet:"main"},outlets:{}},t)}e.triggerEvent=O;var V=[].slice,H=f.default.extend(p.default,{location:"hash",rootURL:"/",_initRouterJs:function(){var e=this.router=new x.default;e.triggerEvent=O,e._triggerWillChangeContext=E,e._triggerWillLeave=E;var r=this.constructor.dslCallbacks||[E],n=this._buildDSL();n.route("application",{path:"/",resetNamespace:!0,overrideNameAssertion:!0},function(){for(var e=0;e0)-(r<0)}function i(e,a){if(e===a)return 0;var s=t.typeOf(e),l=t.typeOf(a);if(r.default){if("instance"===s&&r.default.detect(e)&&e.constructor.compare)return e.constructor.compare(e,a);if("instance"===l&&r.default.detect(a)&&a.constructor.compare)return a.constructor.compare(a,e)*-1}var u=n(o[s],o[l]);if(0!==u)return u;switch(s){case"boolean":case"number":return n(e,a);case"string":return n(e.localeCompare(a),0);case"array":for(var c=e.length,d=a.length,f=Math.min(c,d),p=0;pt})}function y(e,t){return i.computed(e,function(){return r.get(this,e)>=t})}function _(e,t){return i.computed(e,function(){return r.get(this,e)=0)return o[s];if(Array.isArray(e)){if(a=e.slice(),t)for(s=a.length;--s>=0;)a[s]=i(a[s],t,r,o)}else if(n.default&&n.default.detect(e))a=e.copy(t,r,o);else if(e instanceof Date)a=new Date(e.getTime());else{a={};for(l in e)Object.prototype.hasOwnProperty.call(e,l)&&"__"!==l.substring(0,2)&&(a[l]=t?i(e[l],t,r,o):e[l])}return t&&(r.push(e),o.push(a)),a}function o(e,t){return"object"!=typeof e||null===e?e:n.default&&n.default.detect(e)?e.copy(t):i(e,t,t?[]:null,t?[]:null)}e.default=o}),e("ember-runtime/ext/function",["exports","ember-environment","ember-metal/debug","ember-metal/computed","ember-metal/mixin"],function(e,t,r,n,i){"use strict";var o=Array.prototype.slice,a=Function.prototype;t.ENV.EXTEND_PROTOTYPES.Function&&(a.property=function(){var e=n.computed(this);return e.property.apply(e,arguments)},a.observes=function(){for(var e=arguments.length,t=Array(e),r=0;r1?t-1:0),i=1;i=n.get(this,"length")))return n.get(this,e)},_.objectsAt=function(e){var t=this;return e.map(function(e){return g(t,e)})},_.nextObject=function(e){return g(this,e)},_["[]"]=i.computed({get:function(e){return this},set:function(e,t){return this.replace(0,n.get(this,"length"),t),this}}),_.firstObject=i.computed(function(){return g(this,0)}).readOnly(),_.lastObject=i.computed(function(){return g(this,n.get(this,"length")-1)}).readOnly(),_.contains=function(e){return this.indexOf(e)>=0},_.slice=function(e,r){var i=t.default.A(),a=n.get(this,"length");for(o.default(e)&&(e=0),(o.default(r)||r>a)&&(r=a),e<0&&(e=a+e),r<0&&(r=a+r);e=i)&&(t=i-1),t<0&&(t+=i),r=t;r>=0;r--)if(g(this,r)===e)return r;return-1},_.addArrayObserver=function(e,t){return b(this,e,t)},_.removeArrayObserver=function(e,t){return v(this,e,t)},_.hasArrayObservers=i.computed(function(){return u.hasListeners(this,"@array:change")||u.hasListeners(this,"@array:before")}),_.arrayContentWillChange=function(e,t,r){var i,o;if(void 0===e?(e=0,t=r=-1):(void 0===t&&(t=-1),void 0===r&&(r=-1)),this.__each&&this.__each.arrayWillChange(this,e,t,r),u.sendEvent(this,"@array:before",[this,e,t,r]),e>=0&&t>=0&&n.get(this,"hasEnumerableObservers")){i=[],o=e+t;for(var a=e;a=0&&r>=0&&n.get(this,"hasEnumerableObservers")){o=[],a=e+r;for(var s=e;s1?t-1:0),n=1;n1?t-1:0),i=1;it.get(this,"length"))throw new r.default(l);return this.replace(e,0,[n]),this},removeAt:function(e,n){if("number"==typeof e){if(e<0||e>=t.get(this,"length"))throw new r.default(l);void 0===n&&(n=1),this.replace(e,n,u)}return this},pushObject:function(e){return this.insertAt(t.get(this,"length"),e),e},pushObjects:function(e){if(!a.default.detect(e)&&!Array.isArray(e))throw new TypeError("Must pass Ember.Enumerable to Ember.MutableArray#pushObjects");return this.replace(t.get(this,"length"),0,e),this},popObject:function(){var e=t.get(this,"length");if(0===e)return null;var r=i.objectAt(this,e-1);return this.removeAt(e-1,1),r},shiftObject:function(){if(0===t.get(this,"length"))return null;var e=i.objectAt(this,0);return this.removeAt(0),e},unshiftObject:function(e){return this.insertAt(0,e),e},unshiftObjects:function(e){return this.replace(0,0,e),this},reverseObjects:function(){var e=t.get(this,"length");if(0===e)return this;var r=this.toArray().reverse();return this.replace(0,e,r),this},setObjects:function(e){if(0===e.length)return this.clear();var r=t.get(this,"length");return this.replace(0,r,e),this},removeObject:function(e){for(var r=t.get(this,"length")||0;--r>=0;){var n=i.objectAt(this,r);n===e&&this.removeAt(r)}return this},addObject:function(e){var t;return t=this.contains(e),t||this.pushObject(e),this}})}),e("ember-runtime/mixins/mutable_enumerable",["exports","ember-runtime/mixins/enumerable","ember-metal/mixin","ember-metal/property_events"],function(e,t,r,n){"use strict";e.default=r.Mixin.create(t.default,{addObject:null,addObjects:function(e){var t=this;return n.beginPropertyChanges(this),e.forEach(function(e){return t.addObject(e)}),n.endPropertyChanges(this),this},removeObject:null,removeObjects:function(e){n.beginPropertyChanges(this);for(var t=e.length-1;t>=0;t--)this.removeObject(e[t]);return n.endPropertyChanges(this),this}})}),e("ember-runtime/mixins/observable",["exports","ember-metal/debug","ember-metal/property_get","ember-metal/property_set","ember-metal/get_properties","ember-metal/set_properties","ember-metal/mixin","ember-metal/events","ember-metal/property_events","ember-metal/observer","ember-metal/computed","ember-metal/is_none"],function(e,t,r,n,i,o,a,s,l,u,c,d){"use strict";e.default=a.Mixin.create({get:function(e){return r.get(this,e)},getProperties:function(){for(var e=arguments.length,t=Array(e),r=0;rr.get(this,"content.length"))throw new s.default(h);return this._replace(e,0,[t]),this},insertAt:function(e,t){ -if(r.get(this,"arrangedContent")===r.get(this,"content"))return this._insertAt(e,t);throw new s.default("Using insertAt on an arranged ArrayProxy is not allowed.")},removeAt:function(e,t){if("number"==typeof e){var n,i=r.get(this,"content"),o=r.get(this,"arrangedContent"),l=[];if(e<0||e>=r.get(this,"length"))throw new s.default(h);for(void 0===t&&(t=1),n=e;n0&&(e=[arguments[0]]),this.__defineNonEnumerable(o.GUID_KEY_PROPERTY);var i=a.meta(this),d=i.proto;if(i.proto=this,e){var f=e;e=null;for(var p=this.concatenatedProperties,h=this.mergedProperties,m=0;m0&&p.indexOf(y)>=0){var E=this[y];_=E?"function"==typeof E.concat?E.concat(_):o.makeArray(E).concat(_):o.makeArray(_)}if(h&&h.length&&h.indexOf(y)>=0){var N=this[y];_=n.default({},N,_)}C?C.set(this,y,_):"function"!=typeof this.setUnknownProperty||y in this?this[y]=_:this.setUnknownProperty(y,_)}}}if(k(this,i),0===arguments.length)this.init();else if(1===arguments.length)this.init(arguments[0]);else{for(var T=new Array(arguments.length),A=0;A";return r},w)),A.PrototypeMixin.ownerConstructor=A,A.__super__=null;var O={ClassMixin:u.REQUIRED,PrototypeMixin:u.REQUIRED,isClass:!0,isMethod:!1,extend:function(){var e,t=_();return t.ClassMixin=u.Mixin.create(this.ClassMixin),t.PrototypeMixin=u.Mixin.create(this.PrototypeMixin),t.ClassMixin.ownerConstructor=t,t.PrototypeMixin.ownerConstructor=t,N.apply(t.PrototypeMixin,arguments),t.superclass=this,t.__super__=this.prototype,e=t.prototype=Object.create(this.prototype),e.constructor=t,o.generateGuid(e),a.meta(e).proto=e,t.ClassMixin.apply(t),t},create:function(){for(var e=this,t=arguments.length,r=Array(t),n=0;n0&&this._initProperties(r),new e},reopen:function(){return this.willReopen(),N.apply(this.PrototypeMixin,arguments),this},reopenClass:function(){return N.apply(this.ClassMixin,arguments),E(this,arguments,!1),this},detect:function(e){if("function"!=typeof e)return!1;for(;e;){if(e===this)return!0;e=e.superclass}return!1},detectInstance:function(e){return e instanceof this},metaForProperty:function(e){var t=this.proto(),r=t[e],n=null!==r&&"object"==typeof r&&r.isDescriptor?r:void 0;return n._meta||{}},_computedProperties:h.computed(function(){T=!0;var e,t=this.proto(),r=[];for(var n in t)e=t[n],e&&e.isDescriptor&&r.push({name:n,meta:e._meta});return r}).readOnly(),eachComputedProperty:function(e,t){for(var r,n={},o=i.get(this,"_computedProperties"),a=0;a=i;){var s=a.objectAt(e,o);s&&(n._addBeforeObserver(s,t,r,"contentKeyWillChange"),n.addObserver(s,t,r,"contentKeyDidChange"))}}function u(e,t,r,i,o){for(;--o>=i;){var s=a.objectAt(e,o);s&&(n._removeBeforeObserver(s,t,r,"contentKeyWillChange"),n.removeObserver(s,t,r,"contentKeyDidChange"))}}s.prototype={__defineNonEnumerable:function(e){this[e.name]=e.descriptor.value},arrayWillChange:function(e,t,r,n){var o=this._keys,a=r>0?t+r:-1;for(var s in o)a>0&&u(e,s,this,t,a),i.propertyWillChange(this,s)},arrayDidChange:function(e,t,r,n){var o=this._keys,a=n>0?t+n:-1;for(var s in o)a>0&&l(e,s,this,t,a),i.propertyDidChange(this,s)},willWatchProperty:function(e){this.beginObservingContentKey(e)},didUnwatchProperty:function(e){this.stopObservingContentKey(e)},beginObservingContentKey:function(e){var t=this._keys;if(t||(t=this._keys=new o.default),t[e])t[e]++;else{t[e]=1;var n=this._content,i=r.get(n,"length");l(n,e,this,0,i)}},stopObservingContentKey:function(e){var t=this._keys;if(t&&t[e]>0&&--t[e]<=0){var n=this._content,i=r.get(n,"length");u(n,e,this,0,i)}},contentKeyWillChange:function(e,t){i.propertyWillChange(this,t)},contentKeyDidChange:function(e,t){i.propertyDidChange(this,t)}},e.default=s}),e("ember-runtime/system/lazy_load",["exports","ember-environment"],function(e,t){"use strict";function r(e,t){var r=o[e];i[e]=i[e]||[],i[e].push(t),r&&t(r)}function n(e,r){o[e]=r;var n=t.environment.window;if(n&&"function"==typeof CustomEvent){var a=new CustomEvent(e,{detail:r,name:e});n.dispatchEvent(a)}i[e]&&i[e].forEach(function(e){return e(r)})}e.onLoad=r,e.runLoadHooks=n;var i=t.ENV.EMBER_LOAD_HOOKS||{},o={},a=o;e._loaded=a}),e("ember-runtime/system/namespace",["exports","ember-metal/core","ember-environment","ember-metal/property_get","ember-metal/utils","ember-metal/mixin","ember-runtime/system/object"],function(e,t,r,n,i,o,a){"use strict";function s(){return v}function l(e){v=!!e}function u(e,t,r){var n=e.length;y[e.join(".")]=t;for(var a in t)if(_.call(t,a)){var s=t[a];if(e[n]=a,s&&s.toString===h&&!s[o.NAME_KEY])s[o.NAME_KEY]=e.join(".");else if(s&&s.isNamespace){if(r[i.guidFor(s)])continue;r[i.guidFor(s)]=!0,u(e,s,r)}}e.length=n}function c(e){return e>=65&&e<=90}function d(e,t){try{var r=e[t];return r&&r.isNamespace&&r}catch(e){}}function f(){if(!g.PROCESSED)for(var e=r.context.lookup,t=Object.keys(e),n=0;n2){i=new Array(arguments.length-1);for(var o=1;o2)&&(t=Array.prototype.slice.call(arguments,1)),e=i.get(e)||e,a(e,t)}function u(e){return e.split(/\s+/)}function c(e){return P.get(e)}function d(e){return v.get(e)}function f(e){return _.get(e)}function p(e){return E.get(e)}function h(e){return T.get(e)}function m(e){return O.get(e)}var b=/[ _]/g,v=new o.default(1e3,function(e){return c(e).replace(b,"-")}),g=/(\-|\_|\.|\s)+(.)?/g,y=/(^|\/)([A-Z])/g,_=new o.default(1e3,function(e){return e.replace(g,function(e,t,r){return r?r.toUpperCase():""}).replace(y,function(e,t,r){return e.toLowerCase()})}),w=/^(\-|_)+(.)?/,x=/(.)(\-|\_|\.|\s)+(.)?/g,C=/(^|\/|\.)([a-z])/g,E=new o.default(1e3,function(e){for(var t=function(e,t,r){return r?"_"+r.toUpperCase():""},r=function(e,t,r,n){return t+(n?n.toUpperCase():"")},n=e.split("/"),i=0;i1}function o(e,t){for(var r=0,n=e.length;r")}),e},e.default=t}),e("ember-template-compiler/plugins/transform-inline-link-to",["exports"],function(e){"use strict";function t(e){this.options=e,this.syntax=null}e.default=t,t.prototype.transform=function(e){function t(e,t){return a.program([r(e,t)],null,t)}function r(e,t){switch(e.type){case"PathExpression":return a.mustache(e,null,null,null,t);case"SubExpression":return a.mustache(e.path,e.params,e.hash,null,t);default:return a.text(""+e.value,t)}}function n(e){return a.sexpr("-html-safe",[e])}var i=this.syntax,o=i.traverse,a=i.builders;return o(e,{MustacheStatement:function(e){if("link-to"===e.path.original){var r=e.escaped?e.params[0]:n(e.params[0]);return a.block("link-to",e.params.slice(1),e.hash,t(r,e.loc),null,e.loc)}}}),e}}),e("ember-template-compiler/plugins/transform-input-on-to-onEvent",["exports","ember-metal/debug","ember-template-compiler/system/calculate-location-display"],function(e,t,r){"use strict";function n(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.syntax=null,this.options=e}function i(e,t){for(var r=0;r0)return!1;"ComponentNode"!==l.type&&"ElementNode"!==l.type||(i=l,o=s)}}i&&"ComponentNode"===i.type&&t(i)}}t.prototype.transform=function(e){return r(e,function(e){e.tag="@"+e.tag,e.isStatic=!0}),e},e.default=t}),e("ember-template-compiler/system/calculate-location-display",["exports"],function(e){"use strict";function t(e,t){var r=t||{},n=r.start||{},i=n.column,o=n.line,a="";return e&&(a+="'"+e+"' "),void 0!==o&&void 0!==i&&(e&&(a+="@ "),a+="L"+o+":C"+i),a&&(a="("+a+") "),a}e.default=t}),e("ember-template-compiler/system/compile-options",["exports","ember-template-compiler/compiler"],function(e,t){"use strict";var r=t.default(),n=r.defaultCompileOptions;e.default=n}),e("ember-template-compiler/system/compile",["exports","ember-template-compiler/compiler","ember-template-compiler/system/compile-options","ember-metal/assign"],function(e,t,r,n){"use strict";e.default=function(e,i){var o=t.default(),a=o.compile;return a(e,n.default({},r.default(),i))}}),e("ember-template-compiler/system/precompile",["exports","ember-metal/assign","ember-template-compiler/compiler","ember-template-compiler/system/compile-options"],function(e,t,r,n){"use strict";e.default=function(e,i){var o=r.default(),a=o.precompile;return a(e,t.default({},n.default(),i))}}),e("ember-template-compiler/system/register-plugin",["exports","ember-template-compiler/compiler"],function(e,t){"use strict";var r=t.default(),n=r.registerPlugin;e.default=n}),e("ember-template-compiler/system/template",["exports","ember-template-compiler/compiler"],function(e,t){"use strict";var r=t.default(),n=r.template;e.default=n}),e("ember-templates/bootstrap",["exports","ember-views/component_lookup","ember-views/system/jquery","ember-metal/error","ember-runtime/system/lazy_load","ember-template-compiler","ember-environment","ember-templates/template_registry"],function(e,t,r,n,i,o,a,s){"use strict";function l(e){var t='script[type="text/x-handlebars"], script[type="text/x-raw-handlebars"]';r.default(t,e).each(function(){var e,t,i=r.default(this),a=i.attr("data-template-name")||i.attr("id")||"application";if("text/x-raw-handlebars"===i.attr("type")?(t=r.default.proxy(Handlebars.compile,Handlebars),e=t(i.html())):e=o.compile(i.html(),{moduleName:a}),s.has(a))throw new n.default('Template named "'+a+'" already exists.');s.set(a,e),i.remove()})}function u(){l(r.default(document))}function c(e){e.register("component-lookup:main",t.default)}i.onLoad("Ember.Application",function(e){e.initializer({name:"domTemplates",initialize:a.environment.hasDOM?u:function(){}}),e.instanceInitializer({name:"registerComponentLookup",initialize:c})}),e.default=l}),e("ember-templates/component",["exports","ember-metal/features","require"],function(e,t,r){"use strict";e.default=function(){return r.default("ember-htmlbars/component").default}()}),e("ember-templates/components/checkbox",["exports","ember-metal/features","require"],function(e,t,r){"use strict";e.default=function(){return r.default("ember-htmlbars/components/checkbox").default}()}),e("ember-templates/components/link-to",["exports","ember-metal/features","require"],function(e,t,r){"use strict";e.default=function(){return r.default("ember-htmlbars/components/link-to").default}()}),e("ember-templates/components/text_area",["exports","ember-metal/features","require"],function(e,t,r){"use strict";e.default=function(){return r.default("ember-htmlbars/components/text_area").default}()}),e("ember-templates/components/text_field",["exports","ember-metal/features","require"],function(e,t,r){"use strict";e.default=function(){return r.default("ember-htmlbars/components/text_field").default}()}),e("ember-templates/helper",["exports","ember-metal/features","require"],function(e,t,r){"use strict";e.default=function(){return r.default("ember-htmlbars/helper").default}();var n=function(){return r.default("ember-htmlbars/helper").helper}();e.helper=n}),e("ember-templates/index",["exports","ember-metal/core","ember-templates/template_registry","ember-templates/bootstrap","ember-templates/renderer","ember-templates/component","ember-templates/helper","ember-templates/components/checkbox","ember-templates/components/text_field","ember-templates/components/text_area","ember-templates/components/link-to"],function(e,t,r,n,i,o,a,s,l,u,c){"use strict";t.default._Renderer=i.Renderer,t.default.Component=o.default,a.default.helper=a.helper,t.default.Helper=a.default,t.default.Checkbox=s.default,t.default.TextField=l.default,t.default.TextArea=u.default,t.default.LinkComponent=c.default,Object.defineProperty(t.default,"TEMPLATES",{get:r.getTemplates,set:r.setTemplates,configurable:!1,enumerable:!1}),e.default=t.default}),e("ember-templates/renderer",["exports","ember-metal/features","require"],function(e,t,r){"use strict";var n=function(){return r.default("ember-htmlbars/renderer").InteractiveRenderer}();e.InteractiveRenderer=n;var i=function(){return r.default("ember-htmlbars/renderer").InertRenderer}();e.InertRenderer=i;var o=function(){return r.default("ember-htmlbars/renderer").Renderer}();e.Renderer=o}),e("ember-templates/template_registry",["exports"],function(e){"use strict";function t(e){a=e}function r(){return a}function n(e){if(a.hasOwnProperty(e))return a[e]}function i(e){return a.hasOwnProperty(e)}function o(e,t){return a[e]=t}e.setTemplates=t,e.getTemplates=r,e.get=n,e.has=i,e.set=o;var a={}}),e("ember-views/compat/attrs-proxy",["exports","ember-metal/mixin","ember-metal/symbol","ember-metal/property_events"],function(e,t,r,n){"use strict";function i(e){return"You tried to look up an attribute directly on the component. This is deprecated. Use attrs."+e+" instead."}function o(e){return e&&e[a]}e.deprecation=i;var a=r.default("MUTABLE_CELL");e.MUTABLE_CELL=a;var s={attrs:null,getAttr:function(e){var t=this.attrs;if(t)return this.getAttrFor(t,e)},getAttrFor:function(e,t){var r=e[t];return o(r)?r.value:r},setAttr:function(e,t){var r=this.attrs,n=r[e];if(!o(n))throw new Error("You can't update attrs."+e+", because it's not mutable");n.update(t)},_propagateAttrsToThis:function(e){this._isDispatchingAttrs=!0,this.setProperties(e),this._isDispatchingAttrs=!1}};s[n.PROPERTY_DID_CHANGE]=function(e){this._isDispatchingAttrs||this._currentState&&this._currentState.legacyPropertyDidChange(this,e)},e.default=t.Mixin.create(s)}),e("ember-views/component_lookup",["exports","ember-metal/debug","ember-runtime/system/object"],function(e,t,r){"use strict";e.default=r.default.extend({componentFor:function(e,t,r){var n="component:"+e;return t._lookupFactory(n,r)},layoutFor:function(e,t,r){var n="template:components/"+e;return t.lookup(n,r)}})}),e("ember-views/index",["exports","ember-runtime","ember-views/system/jquery","ember-views/system/utils","ember-views/system/ext","ember-htmlbars/renderer","ember-htmlbars/component","ember-views/system/event_dispatcher","ember-views/mixins/view_target_action_support","ember-views/component_lookup","ember-htmlbars/components/checkbox","ember-views/mixins/text_support","ember-htmlbars/components/text_field","ember-htmlbars/components/text_area"],function(e,t,r,n,i,o,a,s,l,u,c,d,f,p){"use strict";t.default.$=r.default,t.default.ViewTargetActionSupport=l.default;var h=t.default.ViewUtils={};h.isSimpleClick=n.isSimpleClick,h.getViewClientRects=n.getViewClientRects,h.getViewBoundingClientRect=n.getViewBoundingClientRect,t.default._Renderer=o.Renderer,t.default.Checkbox=c.default,t.default.TextField=f.default,t.default.TextArea=p.default,t.default.TextSupport=d.default,t.default.ComponentLookup=u.default,t.default.Component=a.default,t.default.EventDispatcher=s.default,e.default=t.default}),e("ember-views/mixins/aria_role_support",["exports","ember-metal/mixin"],function(e,t){"use strict";e.default=t.Mixin.create({attributeBindings:["ariaRole:role"],ariaRole:null})}),e("ember-views/mixins/class_names_support",["exports","ember-metal/debug","ember-metal/mixin","ember-runtime/system/native_array"],function(e,t,r,n){"use strict";var i=[];e.default=r.Mixin.create({concatenatedProperties:["classNames","classNameBindings"],init:function(){this._super.apply(this,arguments),this.classNameBindings=n.A(this.classNameBindings.slice()),this.classNames=n.A(this.classNames.slice())},classNames:["ember-view"],classNameBindings:i})}),e("ember-views/mixins/instrumentation_support",["exports","ember-metal/mixin","ember-metal/property_get"],function(e,t,r){"use strict";var n=t.Mixin.create({instrumentDisplay:"",instrumentName:"view",instrumentDetails:function(e){e.template=r.get(this,"templateName"),this._super(e)}});e.default=n}),e("ember-views/mixins/legacy_child_views_support",["exports","ember-metal/mixin","ember-metal/property_get","ember-metal/property_set","container/owner"],function(e,t,r,n,i){"use strict";e.default=t.Mixin.create({linkChild:function(e){e[i.OWNER]||i.setOwner(e,i.getOwner(this)),r.get(e,"parentView")!==this&&(n.set(e,"parentView",this),e.trigger("parentViewDidChange")),e.ownerView=this.ownerView},unlinkChild:function(e){n.set(e,"parentView",null),e.trigger("parentViewDidChange")}})}),e("ember-views/mixins/legacy_view_support",["exports","ember-metal/debug","ember-metal/mixin","ember-metal/property_get"],function(e,t,r,n){"use strict";var i=r.Mixin.create({nearestChildOf:function(e){for(var t=n.get(this,"parentView");t;){if(n.get(t,"parentView")instanceof e)return t;t=n.get(t,"parentView")}},nearestInstanceOf:function(e){for(var t=n.get(this,"parentView");t;){ -if(t instanceof e)return t;t=n.get(t,"parentView")}}});e.default=i}),e("ember-views/mixins/text_support",["exports","ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-runtime/mixins/target_action_support"],function(e,t,r,n,i){"use strict";function o(e,r,n){var i=t.get(r,"attrs."+e)||t.get(r,e),o=t.get(r,"onEvent"),a=t.get(r,"value");(o===e||"keyPress"===o&&"key-press"===e)&&r.sendAction("action",a),r.sendAction(e,a),(i||o===e)&&(t.get(r,"bubbles")||n.stopPropagation())}var a={13:"insertNewline",27:"cancel"},s=n.Mixin.create(i.default,{value:"",attributeBindings:["autocapitalize","autocorrect","autofocus","disabled","form","maxlength","placeholder","readonly","required","selectionDirection","spellcheck","tabindex","title"],placeholder:null,disabled:!1,maxlength:null,init:function(){this._super.apply(this,arguments),this.on("paste",this,this._elementValueDidChange),this.on("cut",this,this._elementValueDidChange),this.on("input",this,this._elementValueDidChange)},action:null,onEvent:"enter",bubbles:!1,interpretKeyEvents:function(e){var t=a,r=t[e.keyCode];if(this._elementValueDidChange(),r)return this[r](e)},_elementValueDidChange:function(){r.set(this,"value",this.readDOMAttr("value"))},change:function(e){this._elementValueDidChange(e)},insertNewline:function(e){o("enter",this,e),o("insert-newline",this,e)},cancel:function(e){o("escape-press",this,e)},focusIn:function(e){o("focus-in",this,e)},focusOut:function(e){this._elementValueDidChange(e),o("focus-out",this,e)},keyPress:function(e){o("key-press",this,e)},keyUp:function(e){this.interpretKeyEvents(e),this.sendAction("key-up",t.get(this,"value"),e)},keyDown:function(e){this.sendAction("key-down",t.get(this,"value"),e)}});e.default=s}),e("ember-views/mixins/view_child_views_support",["exports","ember-metal/debug","ember-metal/mixin","ember-metal/property_get","ember-metal/property_set","ember-metal/set_properties","ember-runtime/system/native_array","container/owner"],function(e,t,r,n,i,o,a,s){"use strict";var l=[];e.default=r.Mixin.create({childViews:l,init:function(){this._super.apply(this,arguments),this.childViews=a.A(this.childViews.slice()),this.ownerView=this.ownerView||this},appendChild:function(e){this.linkChild(e),this.childViews.push(e)},destroyChild:function(e){e.destroy()},removeChild:function(e){if(!this.isDestroying){this.unlinkChild(e);var t=n.get(this,"childViews"),r=t.indexOf(e);return r!==-1&&t.splice(r,1),this}},createChildView:function(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if(!e)throw new TypeError("createChildViews first argument must exist");var r=s.getOwner(this);if(e.isView&&e.parentView===this&&s.getOwner(e)===r)return e;var n;if(t.parentView=this,t.renderer=this.renderer,t._viewRegistry=this._viewRegistry,e.isViewFactory)s.setOwner(t,r),n=e.create(t),n.viewName&&i.set(this,n.viewName,n);else if("string"==typeof e){var a="view:"+e,l=r._lookupFactory(a);n=l.create(t)}else n=e,s.setOwner(t,r),o.default(n,t);return this.linkChild(n),n},linkChild:function(e){e[s.OWNER]||s.setOwner(e,s.getOwner(this)),e.parentView=this,e.ownerView=this.ownerView},unlinkChild:function(e){e.parentView=null}})}),e("ember-views/mixins/view_context_support",["exports","ember-metal/mixin","ember-metal/computed","ember-metal/property_get","ember-metal/property_set","ember-views/mixins/legacy_view_support","ember-metal/events"],function(e,t,r,n,i,o,a){"use strict";var s=t.Mixin.create(o.default,{context:r.computed({get:function(){return n.get(this,"_context")},set:function(e,t){return i.set(this,"_context",t),t}}),_context:r.computed({get:function(){var e,t;return(t=n.get(this,"controller"))?t:(e=this.parentView,e?n.get(e,"_context"):null)},set:function(e,t){return t}}),_controller:null,controller:r.computed({get:function(){return this._controller?this._controller:this.parentView?n.get(this.parentView,"controller"):null},set:function(e,t){return this._controller=t,t}}),_legacyControllerDidChange:t.observer("controller",function(){this.childViews.forEach(function(e){return e.notifyPropertyChange("controller")})}),_notifyControllerChange:a.on("parentViewDidChange",function(){this.notifyPropertyChange("controller")})});e.default=s}),e("ember-views/mixins/view_state_support",["exports","ember-metal/mixin"],function(e,t){"use strict";var r=t.Mixin.create({_transitionTo:function(e){var t=this._currentState,r=this._currentState=this._states[e];this._state=e,t&&t.exit&&t.exit(this),r.enter&&r.enter(this)}});e.default=r}),e("ember-views/mixins/view_support",["exports","ember-metal/debug","ember-metal/error","ember-metal/property_get","ember-metal/run_loop","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-runtime/system/core_object","ember-metal/symbol","container/owner","ember-views/system/jquery"],function(e,t,r,n,i,o,a,s,l,u,c,d){"use strict";function f(){return this}var p,h=u.default("INIT_WAS_CALLED");e.default=s.Mixin.create((p={concatenatedProperties:["attributeBindings"],isView:!0,templateName:null,layoutName:null,template:a.computed({get:function(){var e=n.get(this,"templateName"),t=this.templateForName(e,"template");return t||n.get(this,"defaultTemplate")},set:function(e,t){return void 0!==t?t:n.get(this,e)}}),layout:a.computed({get:function(e){var t=n.get(this,"layoutName"),r=this.templateForName(t,"layout");return r||n.get(this,"defaultLayout")},set:function(e,t){return t}}),templateForName:function(e,t){if(e){var n=c.getOwner(this);if(!n)throw new r.default("Container was not found when looking up a views template. This is most likely due to manually instantiating an Ember.View. See: http://git.io/EKPpnA");return n.lookup("template:"+e)}},nearestOfType:function(e){for(var t=n.get(this,"parentView"),r=e instanceof s.Mixin?function(t){return e.detect(t)}:function(t){return e.detect(t.constructor)};t;){if(r(t))return t;t=n.get(t,"parentView")}},nearestWithProperty:function(e){for(var t=n.get(this,"parentView");t;){if(e in t)return t;t=n.get(t,"parentView")}},rerender:function(){return this._currentState.rerender(this)},element:null,$:function(e){return this._currentState.$(this,e)},forEachChildView:function(e){var t=this.childViews;if(!t)return this;var r,n;for(n=0;n1;return!t&&!r}function r(e){var t=document.createRange();return t.setStartBefore(e._renderNode.firstNode),t.setEndAfter(e._renderNode.lastNode),t}function n(e){var t=r(e);return t.getClientRects()}function i(e){var t=r(e);return t.getBoundingClientRect()}e.isSimpleClick=t,e.getViewClientRects=n,e.getViewBoundingClientRect=i}),e("ember-views/views/core_view",["exports","ember-metal/debug","ember-metal/property_get","ember-runtime/system/object","ember-runtime/mixins/evented","ember-runtime/mixins/action_handler","ember-runtime/utils","ember-htmlbars/renderer","ember-views/views/states","htmlbars-runtime","require"],function(e,t,r,n,i,o,a,s,l,u,c){"use strict";function d(){return h=h||c.default("ember-htmlbars/system/dom-helper").default}var f,p=n.default.extend(i.default,o.default,{isView:!0,_states:l.cloneStates(l.states),init:function(){if(this._super.apply(this,arguments),this._state="preRender",this._currentState=this._states.preRender,this._isVisible=r.get(this,"isVisible"),!this.renderer){var e=d();f=f||s.InteractiveRenderer.create({dom:new e}),this.renderer=f}this._destroyingSubtreeForView=null,this._dispatching=null},parentView:null,instrumentName:"core_view",instrumentDetails:function(e){e.object=this.toString(),e.containerKey=this._debugContainerKey,e.view=this},trigger:function(){this._super.apply(this,arguments);var e=arguments[0],t=this[e];if(t){for(var r=new Array(arguments.length-1),n=1;n":">",'"':""","'":"'","`":"`"},u=/[&<>"'`]/g,c=/[&<>"'`]/,d=Object.prototype.toString;e.toString=d;var f=function(e){return"function"==typeof e};f(/x/)&&(e.isFunction=f=function(e){return"function"==typeof e&&"[object Function]"===d.call(e)});var f;e.isFunction=f;var p=Array.isArray||function(e){return!(!e||"object"!=typeof e)&&"[object Array]"===d.call(e)};e.isArray=p}),e("htmlbars-util/morph-utils",["exports"],function(e){"use strict";function t(e,t){if(e&&0!==e.length)for(e=e.slice();e.length;){var r=e.pop();if(t(r),r.childNodes)e.push.apply(e,r.childNodes);else if(r.firstChildMorph)for(var n=r.firstChildMorph;n;)e.push(n),n=n.nextMorph;else if(r.morphList)for(var n=r.morphList.firstChildMorph;n;)e.push(n),n=n.nextMorph}}function r(e,t,n){var i=t.morphList;if(t.morphList)for(var o=i.firstChildMorph;o;){var a=o.nextMorph;r(e,o,n),o=a}else if(t.lastResult)t.lastResult.revalidateWith(e,void 0,void 0,void 0,n);else if(t.childNodes)for(var s=0,l=t.childNodes.length;s2&&"[]"===a.slice(s-2)&&(l=!0,a=a.slice(0,s-2),r[a]||(r[a]=[])),i=o[1]?m(o[1]):""),l?r[a].push(i):r[a]=i}return r},recognize:function(e){var t,r,n,i,o=[this.rootState],a={},s=!1;if(i=e.indexOf("#"),i!==-1&&(e=e.substr(0,i)),n=e.indexOf("?"),n!==-1){var l=e.substr(n+1,e.length);e=e.substr(0,n),a=this.parseQueryString(l)}"/"!==e.charAt(0)&&(e="/"+e);var u=e;for(w.ENCODE_AND_DECODE_PATH_SEGMENTS?e=b(e):(e=decodeURI(e),u=decodeURI(u)),t=e.length,t>1&&"/"===e.charAt(t-1)&&(e=e.substr(0,t-1),u=u.substr(0,t-1),s=!0),r=0;r=0;--u){var c=a[u];n.merge(l,c.params),c.handler.inaccessibleByURL&&(i=null)}if(i){l.queryParams=e._visibleQueryParams||t.queryParams;var d=o.recognizer.generate(s,l);"replace"===i?o.replaceURL(d):o.updateURL(d)}}}function b(e,t){try{n.log(e.router,e.sequence,"Resolved all models on destination route; finalizing transition.");var i=e.router,a=t.handlerInfos;e.sequence;return f(i,t,e),e.isAborted?(i.state.handlerInfos=i.currentHandlerInfos,r.default.reject(o.logAbort(e))):(m(e,t,e.intent.url),e.isActive=!1,i.activeTransition=null,n.trigger(i,i.currentHandlerInfos,!0,["didTransition"]),i.didTransition&&i.didTransition(i.currentHandlerInfos),n.log(i,e.sequence,"TRANSITION COMPLETE."),a[a.length-1].handler)}catch(t){if(!(t instanceof o.TransitionAborted)){var s=e.state.handlerInfos;e.trigger(!0,"error",t,e,s[s.length-1].handler),e.abort()}throw t}}function v(e,t,r){var i=t[0]||"/",o=t[t.length-1],l={};o&&o.hasOwnProperty("queryParams")&&(l=w.call(t).queryParams);var u;if(0===t.length){n.log(e,"Updating query params");var c=e.state.handlerInfos;u=new a.default({name:c[c.length-1].name,contexts:[],queryParams:l})}else"/"===i.charAt(0)?(n.log(e,"Attempting URL transition to "+i),u=new s.default({url:i})):(n.log(e,"Attempting transition to "+i),u=new a.default({name:t[0],contexts:n.slice.call(t,1),queryParams:l}));return e.transitionByIntent(u,r)}function g(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;r=0&&n;--r){var i=t[r];e.add(t,{as:i.handler}),n="/"===i.path||""===i.path||".index"===i.handler.slice(-6)}})},hasRoute:function(e){return this.recognizer.hasRoute(e)},getHandler:function(){},getSerializer:function(){},queryParamsTransition:function(e,t,r,i){var a=this;if(d(this,i,e),!t&&this.activeTransition)return this.activeTransition;var s=new o.Transition(this);return s.queryParamsOnly=!0,r.queryParams=y(this,i.handlerInfos,i.queryParams,s),s.promise=s.promise.then(function(e){return m(s,r,!0),a.didTransition&&a.didTransition(a.currentHandlerInfos),e},null,n.promiseLabel("Transition complete")),s},transitionByIntent:function(e,t){try{return c.apply(this,arguments)}catch(t){return new o.Transition(this,e,null,t)}},reset:function(){this.state&&n.forEach(this.state.handlerInfos.slice().reverse(),function(e){var t=e.handler;n.callHook(t,"exit")}),this.oldState=void 0,this.state=new i.default,this.currentHandlerInfos=null},activeTransition:null,handleURL:function(e){var t=n.slice.call(arguments);return"/"!==e.charAt(0)&&(t[0]="/"+e),v(this,t).method(null)},updateURL:function(){throw new Error("updateURL is not implemented")},replaceURL:function(e){this.updateURL(e)},transitionTo:function(e){return v(this,arguments)},intermediateTransitionTo:function(e){return v(this,arguments,!0)},refresh:function(e){for(var t=this.activeTransition?this.activeTransition.state:this.state,r=t.handlerInfos,i={},o=0,s=r.length;o=0;--u){var h=t[u],m=h.handler,b=n(m),v=e.handlerInfos[u],g=null;if(h.names.length>0)if(u>=p)g=this.createParamHandlerInfo(m,b,h.names,f,v);else{var y=l(m);g=this.getHandlerInfoForDynamicSegment(m,b,h.names,f,v,o,u,y)}else g=this.createParamHandlerInfo(m,b,h.names,f,v);if(s){g=g.becomeResolved(null,g.context);var _=v&&v.context;h.names.length>0&&g.context===_&&(g.params=v&&v.params),g.context=_}var w=v;(u>=p||g.shouldSupercede(v))&&(p=Math.min(u,p),w=g),a&&!s&&(w=w.becomeResolved(null,w.context)),d.handlerInfos.unshift(w)}if(f.length>0)throw new Error("More context objects were passed than there are dynamic segments for the route: "+o);return a||this.invalidateChildren(d.handlerInfos,p),i.merge(d.queryParams,this.queryParams||{}),d},invalidateChildren:function(e,t){for(var r=t,n=e.length;r0){if(c=o[o.length-1],i.isParam(c))return this.createParamHandlerInfo(e,t,r,o,a);o.pop()}else{if(a&&a.name===e)return a;if(!this.preTransitionState)return a;var d=this.preTransitionState.handlerInfos[l];c=d&&d.context}return n.default("object",{name:e,handler:t,serializer:u,context:c,names:r})},createParamHandlerInfo:function(e,t,r,o,a){for(var s={},l=r.length;l--;){var u=a&&e===a.name&&a.params||{},c=o[o.length-1],d=r[l];if(i.isParam(c))s[d]=""+o.pop();else{if(!u.hasOwnProperty(d))throw new Error("You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route "+e);s[d]=u[d]}}return n.default("param",{name:e,handler:t,params:s})}})}),e("router/transition-intent/url-transition-intent",["exports","router/transition-intent","router/transition-state","router/handler-info/factory","router/utils","router/unrecognized-url-error"],function(e,t,r,n,i,o){"use strict";e.default=i.subclass(t.default,{url:null,initialize:function(e){this.url=e.url},applyToState:function(e,t,a){var s,l,u=new r.default,c=t.recognize(this.url);if(!c)throw new o.default(this.url);var d=!1;for(s=0,l=c.length;s=r.length?r.length-1:t.resolveIndex;return n.default.reject({error:e,handlerWithError:u.handlerInfos[i].handler,wasAborted:c,state:u})}function a(e){var n=u.handlerInfos[t.resolveIndex].isResolved;if(u.handlerInfos[t.resolveIndex++]=e,!n){var o=e.handler;r.callHook(o,"redirect",e.context,t)}return i().then(s,null,u.promiseLabel("Resolve handler"))}function s(){if(t.resolveIndex===u.handlerInfos.length)return{error:null,state:u};var e=u.handlerInfos[t.resolveIndex];return e.resolve(i,t).then(a,null,u.promiseLabel("Proceed"))}var l=this.params;r.forEach(this.handlerInfos,function(e){l[e.name]=e.params||{}}),t=t||{},t.resolveIndex=0;var u=this,c=!1;return n.default.resolve(null,this.promiseLabel("Start transition")).then(s,null,this.promiseLabel("Resolve handler")).catch(o,this.promiseLabel("Handle error"))}},e.default=i}),e("router/transition",["exports","rsvp/promise","router/handler-info","router/utils"],function(e,t,r,n){"use strict";function i(e,r,a,s){function l(){if(u.isAborted)return t.default.reject(void 0,n.promiseLabel("Transition aborted - reject"))}var u=this;if(this.state=a||e.state,this.intent=r,this.router=e,this.data=this.intent&&this.intent.data||{},this.resolvedModels={},this.queryParams={},s)return this.promise=t.default.reject(s),void(this.error=s);if(a){this.params=a.params,this.queryParams=a.queryParams,this.handlerInfos=a.handlerInfos;var c=a.handlerInfos.length;c&&(this.targetName=a.handlerInfos[c-1].name);for(var d=0;d0&&e[n-1]&&e[n-1].hasOwnProperty("queryParams")?(r=e[n-1].queryParams,t=b.call(e,0,n-1),[t,r]):[e,null]}function n(e){for(var t in e)if("number"==typeof e[t])e[t]=""+e[t];else if(v(e[t]))for(var r=0,n=e[t].length;r=0;a--){var s=t[a],l=s.handler;if(l.events&&l.events[i]){if(l.events[i].apply(l,n)!==!0)return;o=!0}}if(!o&&!r)throw new Error("Nothing handled the event '"+i+"'.")}function u(e,r){var i,o={all:{},changed:{},removed:{}};t(o.all,r);var a=!1;n(e),n(r);for(i in e)e.hasOwnProperty(i)&&(r.hasOwnProperty(i)||(a=!0,o.removed[i]=e[i]));for(i in r)if(r.hasOwnProperty(i))if(v(e[i])&&v(r[i]))if(e[i].length!==r[i].length)o.changed[i]=r[i],a=!0;else for(var s=0,l=e[i].length;s1)throw new Error("Second argument not supported");if("object"!=typeof e)throw new TypeError("Argument must be an object");return i.prototype=e,new i};e.o_create=l}),e("vertex",["exports"],function(e){"use strict";function t(e){this.name=e,this.incoming={},this.incomingNames=[],this.hasOutgoing=!1,this.value=null}e.default=t}),e("visit",["exports"],function(e){"use strict";function t(e,r,n,i){var o,a=e.name,s=e.incoming,l=e.incomingNames,u=l.length;if(n||(n={}),i||(i=[]),!n.hasOwnProperty(a)){for(i.push(a),n[a]=!0,o=0;o0?e.trigger("submit"):this.sendAction("submitAction")}},_observeOpen:n("open",o),takeFocus:function(){var e=this.get("modalElement").find("[autofocus]").first();0===e.length&&(e=this.get("modalElement")),e.length>0&&e.focus()},show:function(){this.checkScrollbar(),this.setScrollbar(),t.default.$("body").addClass("modal-open"),this.resize();var e=function(){this.get("isDestroyed")||(this.get("modalElement").show().scrollTop(0),this.handleUpdate(),this.set("in",!0),this.sendAction("openAction"),this.get("usesTransition")?this.get("modalElement").one("bsTransitionEnd",t.default.run.bind(this,function(){this.takeFocus(),this.sendAction("openedAction")})).emulateTransitionEnd(i.TRANSITION_DURATION):(this.takeFocus(),this.sendAction("openedAction")))};t.default.run.scheduleOnce("afterRender",this,this.handleBackdrop,e)},hide:function(){this.resize(),this.set("in",!1),this.get("usesTransition")?this.get("modalElement").one("bsTransitionEnd",t.default.run.bind(this,this.hideModal)).emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal()},hideModal:function(){var e=this;this.get("isDestroyed")||(this.get("modalElement").hide(),this.handleBackdrop(function(){t.default.$("body").removeClass("modal-open"),e.resetAdjustments(),e.resetScrollbar(),e.sendAction("closedAction")}))},handleBackdrop:function(e){var r=this.get("usesTransition");if(this.get("open")&&this.get("backdrop")){if(this.set("showBackdrop",!0),!e)return;var n=function(){var n=this.get("backdropElement");t.default.assert("Backdrop element should be in DOM",n&&n.length>0),r?n.one("bsTransitionEnd",t.default.run.bind(this,e)).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e.call(this)};t.default.run.scheduleOnce("afterRender",this,n)}else if(!this.get("open")&&this.get("backdrop")){var o=this.get("backdropElement");t.default.assert("Backdrop element should be in DOM",o&&o.length>0);var a=function(){this.set("showBackdrop",!1),e&&e.call(this)};r?o.one("bsTransitionEnd",t.default.run.bind(this,a)).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a.call(this)}else e&&e.call(this)},resize:function(){this.get("open")?t.default.$(window).on("resize.bs.modal",t.default.run.bind(this,this.handleUpdate)):t.default.$(window).off("resize.bs.modal")},handleUpdate:function(){this.adjustDialog()},adjustDialog:function(){var e=this.get("modalElement")[0].scrollHeight>document.documentElement.clientHeight;this.get("modalElement").css({paddingLeft:!this.bodyIsOverflowing&&e?this.get("scrollbarWidth"):"",paddingRight:this.bodyIsOverflowing&&!e?this.get("scrollbarWidth"):""})},resetAdjustments:function(){this.get("modalElement").css({paddingLeft:"",paddingRight:""})},checkScrollbar:function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth1?r[0]+":"+t.default.String.dasherize(r[1].replace(/\./g,"/")):e},pluralize:function(e){return this.pluralizedTypes[e]||(this.pluralizedTypes[e]=e+"s")},podBasedLookupWithPrefix:function(e,t){var r=t.fullNameWithoutType;return"template"===t.type&&(r=r.replace(/^components\//,"")),e+"/"+r+"/"+t.type},podBasedModuleName:function(e){var t=this.namespace.podModulePrefix||this.namespace.modulePrefix;return this.podBasedLookupWithPrefix(t,e)},podBasedComponentsInSubdir:function(e){var t=this.namespace.podModulePrefix||this.namespace.modulePrefix;if(t+="/components","component"===e.type||e.fullNameWithoutType.match(/^components/))return this.podBasedLookupWithPrefix(t,e)},mainModuleName:function(e){var t=e.prefix+"/"+e.type;if("main"===e.fullNameWithoutType)return t},defaultModuleName:function(e){return e.prefix+"/"+this.pluralize(e.type)+"/"+e.fullNameWithoutType},prefix:function(e){var t=this.namespace.modulePrefix;return this.namespace[e.type+"Prefix"]&&(t=this.namespace[e.type+"Prefix"]),t},moduleNameLookupPatterns:t.default.computed(function(){return[this.podBasedModuleName,this.podBasedComponentsInSubdir,this.mainModuleName,this.defaultModuleName]}),findModuleName:function(e,t){for(var r,n=this.get("moduleNameLookupPatterns"),i=0,o=n.length;i60?".":new Array(60-r.fullName.length).join("."),n||(n=this.lookupDescription(r)),t.default.Logger.info(i,r.fullName,o,n)}},knownForType:function(e){for(var t=this._moduleRegistry.moduleNames(),r=(0,i.default)(),n=0,o=t.length;nn.length+i.length)return e+":"+t.slice(o+n.length,a);var s=this.pluralize(e),l=r+"/"+s+"/";return 0===t.indexOf(l)&&t.length>l.length?e+":"+t.slice(l.length):void 0},_extractDefaultExport:function(e){var t=require(e,null,null,!0);return t&&t.default&&(t=t.default),t}});f.reopenClass({moduleBasedResolver:!0}),e.default=f}),define("ember-resolver/utils/class-factory",["exports"],function(e){"use strict";function t(e){return{create:function(t){return"function"==typeof e.extend?e.extend(t):e}}}e.default=t}),define("ember-resolver/utils/create",["exports","ember"],function(e,t){"use strict";var r=Object.create||t.default.create;if(!r||r(null).hasOwnProperty)throw new Error("This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg");e.default=r}),define("ember-resolver/utils/make-dictionary",["exports","ember-resolver/utils/create"],function(e,t){"use strict";function r(){var e=(0,t.default)(null);return e._dict=null,delete e._dict,e}e.default=r}),define("ember-resolver/utils/module-registry",["exports","ember"],function(e,t){"use strict";function r(e){this._entries=e||requirejs.entries}"undefined"==typeof requirejs.entries&&(requirejs.entries=requirejs._eak_seen),r.prototype.moduleNames=function(){return(Object.keys||t.default.keys)(this._entries)},r.prototype.has=function(e){return e in this._entries},r.prototype.get=function(e){var t=arguments.length<=1||void 0===arguments[1]?"default":arguments[1],r=require(e);return r&&r[t]},e.default=r}),define("ember-wormhole/components/ember-wormhole",["exports","ember"],function(e,t){"use strict";var r=t.default.computed,n=t.default.observer,i=t.default.run;e.default=t.default.Component.extend({to:r.alias("destinationElementId"),destinationElementId:null,destinationElement:r("destinationElementId","renderInPlace",function(){return this.get("renderInPlace")?this.element:document.getElementById(this.get("destinationElementId"))}),renderInPlace:!1,didInsertElement:function(){this._super.apply(this,arguments),this._firstNode=this.element.firstChild,this._lastNode=this.element.lastChild,this.appendToDestination()},willDestroyElement:function(){var e=this;this._super.apply(this,arguments);var t=this._firstNode,r=this._lastNode;i.schedule("render",function(){e.removeRange(t,r)})},destinationDidChange:n("destinationElement",function(){var e=this.get("destinationElement");e!==this._firstNode.parentNode&&i.schedule("render",this,"appendToDestination")}),appendToDestination:function(){var e=this.get("destinationElement"),t=document.activeElement;if(!e){var r=this.get("destinationElementId");if(r)throw new Error("ember-wormhole failed to render into '#"+this.get("destinationElementId")+"' because the element is not in the DOM");throw new Error("ember-wormhole failed to render content because the destinationElementId was set to an undefined or falsy value.")}this.appendRange(e,this._firstNode,this._lastNode),document.activeElement!==t&&t.focus()},appendRange:function(e,t,r){for(;t;)e.insertBefore(t,null),t=t!==r?r.parentNode.firstChild:null},removeRange:function(e,t){var r=t;do{var n=r.previousSibling;if(r.parentNode&&(r.parentNode.removeChild(r),r===e))break;r=n}while(r)}})}); \ No newline at end of file diff --git a/bfcoder-github-com/.bowerrc b/bfcoder-github-com/.bowerrc deleted file mode 100644 index 959e169..0000000 --- a/bfcoder-github-com/.bowerrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "directory": "bower_components", - "analytics": false -} diff --git a/bfcoder-github-com/.editorconfig b/bfcoder-github-com/.editorconfig deleted file mode 100644 index 219985c..0000000 --- a/bfcoder-github-com/.editorconfig +++ /dev/null @@ -1,20 +0,0 @@ -# EditorConfig helps developers define and maintain consistent -# coding styles between different editors and IDEs -# editorconfig.org - -root = true - - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true -indent_style = space -indent_size = 2 - -[*.hbs] -insert_final_newline = false - -[*.{diff,md}] -trim_trailing_whitespace = false diff --git a/bfcoder-github-com/.ember-cli b/bfcoder-github-com/.ember-cli deleted file mode 100644 index ee64cfe..0000000 --- a/bfcoder-github-com/.ember-cli +++ /dev/null @@ -1,9 +0,0 @@ -{ - /** - Ember CLI sends analytics information by default. The data is completely - anonymous, but there are times when you might want to disable this behavior. - - Setting `disableAnalytics` to true will prevent any data from being sent. - */ - "disableAnalytics": false -} diff --git a/bfcoder-github-com/.eslintrc.js b/bfcoder-github-com/.eslintrc.js deleted file mode 100644 index fbfc364..0000000 --- a/bfcoder-github-com/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - root: true, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module' - }, - extends: 'eslint:recommended', - env: { - browser: true - }, - rules: { - } -}; diff --git a/bfcoder-github-com/.gitignore b/bfcoder-github-com/.gitignore deleted file mode 100644 index 5ad14dd..0000000 --- a/bfcoder-github-com/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# See https://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp - -# dependencies -/node_modules -/bower_components - -# misc -/.sass-cache -/connect.lock -/coverage/* -/libpeerconnection.log -npm-debug.log* -testem.log diff --git a/bfcoder-github-com/.nvmrc b/bfcoder-github-com/.nvmrc deleted file mode 100644 index a2931d3..0000000 --- a/bfcoder-github-com/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -7.5.0 \ No newline at end of file diff --git a/bfcoder-github-com/.travis.yml b/bfcoder-github-com/.travis.yml deleted file mode 100644 index 640f5e5..0000000 --- a/bfcoder-github-com/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -language: node_js -node_js: - - "6" - -sudo: false - -cache: - directories: - - $HOME/.npm - - $HOME/.cache # includes bowers cache - -before_install: - - npm config set spin false - - npm install -g bower phantomjs-prebuilt - - bower --version - - phantomjs --version - -install: - - npm install - - bower install - -script: - - npm test diff --git a/bfcoder-github-com/.watchmanconfig b/bfcoder-github-com/.watchmanconfig deleted file mode 100644 index e7834e3..0000000 --- a/bfcoder-github-com/.watchmanconfig +++ /dev/null @@ -1,3 +0,0 @@ -{ - "ignore_dirs": ["tmp", "dist"] -} diff --git a/bfcoder-github-com/README.md b/bfcoder-github-com/README.md deleted file mode 100644 index 76df809..0000000 --- a/bfcoder-github-com/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# bfcoder-github-com - -This README outlines the details of collaborating on this Ember application. -A short introduction of this app could easily go here. - -## Prerequisites - -You will need the following things properly installed on your computer. - -* [Git](https://git-scm.com/) -* [Node.js](https://nodejs.org/) (with NPM) -* [Bower](https://bower.io/) -* [Ember CLI](https://ember-cli.com/) -* [PhantomJS](http://phantomjs.org/) - -## Installation - -* `git clone ` this repository -* `cd bfcoder-github-com` -* `npm install` -* `bower install` - -## Running / Development - -* `ember serve` -* Visit your app at [http://localhost:4200](http://localhost:4200). - -### Code Generators - -Make use of the many generators for code, try `ember help generate` for more details - -### Running Tests - -* `ember test` -* `ember test --server` - -### Building - -* `ember build` (development) -* `ember build --environment production` (production) - -### Deploying - -Specify what it takes to deploy your app. - -## Further Reading / Useful Links - -* [ember.js](http://emberjs.com/) -* [ember-cli](https://ember-cli.com/) -* Development Browser Extensions - * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi) - * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/) diff --git a/bfcoder-github-com/app/app.js b/bfcoder-github-com/app/app.js deleted file mode 100644 index 831ad61..0000000 --- a/bfcoder-github-com/app/app.js +++ /dev/null @@ -1,18 +0,0 @@ -import Ember from 'ember'; -import Resolver from './resolver'; -import loadInitializers from 'ember-load-initializers'; -import config from './config/environment'; - -let App; - -Ember.MODEL_FACTORY_INJECTIONS = true; - -App = Ember.Application.extend({ - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix, - Resolver -}); - -loadInitializers(App, config.modulePrefix); - -export default App; diff --git a/bfcoder-github-com/app/components/.gitkeep b/bfcoder-github-com/app/components/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/app/components/twitter-widget.js b/bfcoder-github-com/app/components/twitter-widget.js deleted file mode 100644 index 74919b2..0000000 --- a/bfcoder-github-com/app/components/twitter-widget.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; - -import Ember from "ember"; - -export default Ember.Component.extend({ - didInsertElement() { - let script = document.createElement('script'); - script.type = 'text/javascript'; - script.innerHTML = "!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');"; - this.$().append(script); - } -}); diff --git a/bfcoder-github-com/app/controllers/.gitkeep b/bfcoder-github-com/app/controllers/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/app/helpers/.gitkeep b/bfcoder-github-com/app/helpers/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/app/index.html b/bfcoder-github-com/app/index.html deleted file mode 100644 index 59176a5..0000000 --- a/bfcoder-github-com/app/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - The bfcoder - - - - -{{content-for "head"}} - - - - -{{content-for "head-footer"}} - - -{{content-for "body"}} - - - - -{{content-for "body-footer"}} - - diff --git a/bfcoder-github-com/app/models/.gitkeep b/bfcoder-github-com/app/models/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/app/resolver.js b/bfcoder-github-com/app/resolver.js deleted file mode 100644 index 2fb563d..0000000 --- a/bfcoder-github-com/app/resolver.js +++ /dev/null @@ -1,3 +0,0 @@ -import Resolver from 'ember-resolver'; - -export default Resolver; diff --git a/bfcoder-github-com/app/router.js b/bfcoder-github-com/app/router.js deleted file mode 100644 index 72ff173..0000000 --- a/bfcoder-github-com/app/router.js +++ /dev/null @@ -1,14 +0,0 @@ -import Ember from 'ember'; -import config from './config/environment'; - -const Router = Ember.Router.extend({ - location: config.locationType, - rootURL: config.rootURL -}); - -Router.map(function() { - this.route('projects'); - this.route('photos'); -}); - -export default Router; diff --git a/bfcoder-github-com/app/routes/.gitkeep b/bfcoder-github-com/app/routes/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/app/routes/index.js b/bfcoder-github-com/app/routes/index.js deleted file mode 100644 index 1b5e815..0000000 --- a/bfcoder-github-com/app/routes/index.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -import Ember from "ember"; - -export default Ember.Route.extend({ - setupController() { - this._super(...arguments); - document.title = 'The bfcoder'; - } -}); diff --git a/bfcoder-github-com/app/routes/projects.js b/bfcoder-github-com/app/routes/projects.js deleted file mode 100644 index 5f0f0f0..0000000 --- a/bfcoder-github-com/app/routes/projects.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -import Ember from "ember"; - -export default Ember.Route.extend({ - setupController() { - this._super(...arguments); - document.title = 'The bfcoder: Projects'; - } -}); diff --git a/bfcoder-github-com/app/styles/app.css b/bfcoder-github-com/app/styles/app.css deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/app/templates/application.hbs b/bfcoder-github-com/app/templates/application.hbs deleted file mode 100644 index 59826df..0000000 --- a/bfcoder-github-com/app/templates/application.hbs +++ /dev/null @@ -1,62 +0,0 @@ -{{#bs-navbar}} - - - {{#bs-navbar-content}} - {{#bs-navbar-nav}} - {{#bs-nav-item}}{{#link-to 'index'}}About{{/link-to}}{{/bs-nav-item}} - {{#bs-nav-item}}{{#link-to 'projects'}}Projects{{/link-to}}{{/bs-nav-item}} - - {{#bs-dropdown tagName="li"}} - {{#bs-dropdown-toggle}}Other {{/bs-dropdown-toggle}} - {{#bs-dropdown-menu}} -
  • Blog
  • -
  • GitHub
  • - {{/bs-dropdown-menu}} - {{/bs-dropdown}} - {{/bs-navbar-nav}} - {{/bs-navbar-content}} - -{{/bs-navbar}} - -
    - - {{outlet}} - -
    - - - -
    diff --git a/bfcoder-github-com/app/templates/components/.gitkeep b/bfcoder-github-com/app/templates/components/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/app/templates/index.hbs b/bfcoder-github-com/app/templates/index.hbs deleted file mode 100644 index 2876ec2..0000000 --- a/bfcoder-github-com/app/templates/index.hbs +++ /dev/null @@ -1,43 +0,0 @@ -
    -
    -

    I am bfcoder, aka James Carbine

    -
    -
    - -
    -
    -
    -

    Profession

    -

    I am a software developer. I write code for Atomic Jolt. I worked for Tatemae from November 2011 - November 2014. I was hired on with Atomic Jolt in November 2014. Prior to that I worked for the Sam's Club Pharmacy as a Pharmacy Technician for 6 years while I studied Computer Science at USU. Take a look at some of the {{#link-to 'projects'}}Projects{{/link-to}} I have done.

    -
    -
    -
    -
    -

    Education

    -

    I studied Computer Science at Utah State University in Logan, Utah. I graduated with a BS in Computer Science in May 2013.

    -
    -
    -
    -
    -
    -
    -

    Experience

    -

    Ruby on Rails

    -

    Javascript (including jQuery, Ember.js, CoffeeScript, Node.js, and React.js)

    -

    HTML5

    -

    Iron.io

    -

    C#

    -

    C++

    -

    Phoenix

    -

    postgres

    -
    -
    - -
    -
    -

    Barefeet

    -

    Yes indeed, I am a barefoot advocate. I started going barefoot in the Fall of 2010. I wear shoes on very few occasions, and not for long when I do. When I ride my motorcycle, I wear shoes. When I'm working with the horses, I wear shoes. When I'm working with power tools/machinery(lawn mower), I wear shoes. But pretty much other than that, I have nixed shoes. I especially dislike shoes with a heal. My wife owns no high heels. Period. I hiked all over Moab and Arches National Park while being barefoot. I've done 5 mile hikes through the mountains barefoot. I love being barefoot. I believe my body has strengthened itself since going barefoot. Back pains have gone, unless of course I have done something to incite pain. Like sleeping on a rock in the middle of my back I'm sure would incite pain. Barefeet FTW!

    -
    -
    - -
    diff --git a/bfcoder-github-com/app/templates/projects.hbs b/bfcoder-github-com/app/templates/projects.hbs deleted file mode 100644 index 083dd18..0000000 --- a/bfcoder-github-com/app/templates/projects.hbs +++ /dev/null @@ -1,139 +0,0 @@ -
    -
    -

    My Projects

    -

    Here are the projects I have been involved with.

    -
    -
    - -
    -
    -
    -

    Open Tapestry

    -

    Finding open educational resources and clipping them for others to see and use. This web app allows teachers to gather open educational resources from about the web, and place them into tapestries for their students to view. Or perhaps make lessons to show the class. Possibilities are numerous. It can also be very useful to corporations wanting to train their employees and give them quizzes to make sure they understand the training. Anyone can build up a course for someone to take.

    -

    Technology: Ruby on Rails, Javascript, mysql

    -

    Check it out »

    -
    -
    -
    -
    -

    Hacking Instructure's Canvas

    -

    I took Instructure's Canvas and modified it for the EDC Maine EM2 Project. It now has the ability to enter misconception probabilities for an assessment. So when the student takes an assessment, it calculates the probability that they have a misconception. It does not show a score to the student or the teacher. The teacher can pull up a report that shows them which students have misconceptions about mathematics. I also incorporated new features into taking an assessment. The student can type in an explanation. They can also draw an explanation as to why they feel the answer they chose is correct.

    -

    Technology: Ruby on Rails, Javascript, mysql

    -

    View details »

    -
    -
    -
    -
    -

    Saylor.org

    -

    Online free educational institution called Saylor.org. I helped develop the ePortfolio for the site.

    -

    Check it out if you want some free education. Very cool.

    -

    Technology: Ruby on Rails, Javascript, mysql

    -

    Check it out »

    -
    -
    -
    -
    -
    -
    -

    Matti - graph theory

    -

    Created some interactive modules to teach students about graph theory. This included Euler Circuits, Minimum Spanning Tree - Kruskal's Algorithm, and Map Coloring. The modules are included with this book "The Heart of Mathematics: An Invitation to Effective Thinking, 4th Edition."

    -

    Technology: HTML5, Javascript (KineticJS)

    -
    -
    -
    -
    -

    Matti - Base Blocks

    -

    Base Blocks had previously been written by my boss Joel Duffin however it was written in Java. It can be found on the eNLVM: Base Blocks. This made it useless to be ran on an iOS device. So I was enlisted to re-write the code in HTML5 so it could be ran on mobile devices as well. I wrote a lot of it and Kami Wilson took over the project so I could focus on other projects.

    -

    Technology: HTML5, Javascript (KineticJS)

    -
    -
    -
    -

    Octopi

    -

    Another project that wanted Instructure's Canvas modified for use in an adaptive math testing environment. I made the system work, however the guy never got the funding to complete it.

    -

    Technology: Ruby on Rails, Javascript, mysql

    -
    -
    -
    -
    -
    -

    Open Assessments

    -

    This is a project that we built and was funded by MIT. It is a way for anyone to create online assessments and embed them anywhere on the web. Put them inside Instructure's Canvas, or put them on your blog. Doesn't really matter. After people have taken the assessment, you can view the statistics. It was built with Ruby on Rails. We will switch it over to Ruby on Rails combined with Ember.js eventually.

    -

    Technology: Ruby on Rails, Javascript

    -

    Check it out »

    -
    -
    -
    -
    -

    CMAT

    -

    CMAT stands for Concept Map Authoring Tool. You can build concept maps with it.

    -

    Technology: Ruby on Rails, HTML5, Javascript (KineticJS, Ember)

    -

    Check it out »

    -
    -
    -
    -
    -

    OEIT Player

    -

    I rebuilt the MIT OEIT Player to work with html5 using JW Player 6. If you check it out, go to the bottom left video of Walter Lewin for a good example. I made it so they can easily put new videos together and using data tags set the parameters of the video.

    -

    Technology: HTML5, Javascript, JW Player 6

    -

    Check it out »

    -
    -
    -
    -
    -
    -
    -

    OEIT Player Authoring

    -

    I built an authoring interface for MIT to build the html for the players.

    -

    Technology: HTML5, Javascript

    -

    Check it out »

    -
    -
    -
    -
    -

    panOpen

    -

    panOpen is an app that an instructor can create a course with a book. The students can read the book and take quizzes for the chapters. The instructor can view the statistics for each student in the class. Statistics include the time they have spent reading the book and each of their attempts at the quizzes. I also wrote a node app that accepts an image request with user and book id's. It stores that information in Redis. While the student is reading the book, every 15 seconds it sends a request for the image, thus recording that they are reading the book. I then wrote an iron.io task that gets all that data out of Redis and crunches it to compute how long they have been reading for. It then sends that data to rails to store in the database.

    -

    After some time, we decided we needed a faster system. So I converted from a node app to a phoenix elixir app. We no longer send image requests. We just POST to it with CORS as it is on a separate domain, and store it in postgres. During the POST I do an upsert on the data. Each day gets it own entry in the database. So now I no longer need iron.io to compute the data. I can just query the database on demand.

    -

    Technology: Ruby on Rails, Javascript (Ember, React, Phoenix), postgres

    -

    Check it out »

    -
    -
    -
    -
    -

    FreightLink Tracker

    -

    FreightLink Tracker is an app that enables you to create and track shipments via Truck, Ship, Plane, and Train. I have been re-implementing the shipments pages from Rails to Ember.

    -

    Technology: Ruby on Rails, Javascript (Ember), postgres

    -
    -
    -
    - -

    School Projects

    -
    -
    -
    -

    CS5460 Final Project

    -

    My CS5460 Computer Securities final project for authenticating a user.

    -

    Technology: Ruby on Rails, Javascript

    -

    Check it out »

    -
    -
    -
    -
    -

    CS5100 HTML5 Project

    -

    Made a site with Scott Biery that highlighted HTML5 and gave some examples. I wrote the two HTML5 canvas examples and Scott formatted the site and put together the HTML5 examples page. It was a lot of fun to write the javascript for this project. And yes, it works with an iPad. :]

    -

    Technology: HTML5

    -

    Check it out »

    -
    -
    -
    - -

    Volunteer Projects

    -
    -
    -
    -

    The Living Planet Aquarium

    -

    Currently building a page to highlight a Sea Turtle that has been rescued.

    -

    Technology: HTML5, Javascript (Ember)

    -

    The Living Planet Aquarium

    -
    -
    -
    diff --git a/bfcoder-github-com/bower.json b/bfcoder-github-com/bower.json deleted file mode 100644 index 90ee577..0000000 --- a/bfcoder-github-com/bower.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "bfcoder-github-com", - "dependencies": { - "bootstrap": "~3.3.5" - } -} diff --git a/bfcoder-github-com/config/environment.js b/bfcoder-github-com/config/environment.js deleted file mode 100644 index ff42232..0000000 --- a/bfcoder-github-com/config/environment.js +++ /dev/null @@ -1,50 +0,0 @@ -/* eslint-env node */ - -module.exports = function(environment) { - var ENV = { - modulePrefix: 'bfcoder-github-com', - environment: environment, - rootURL: '/', - locationType: 'hash', - EmberENV: { - FEATURES: { - // Here you can enable experimental features on an ember canary build - // e.g. 'with-controller': true - }, - EXTEND_PROTOTYPES: { - // Prevent Ember Data from overriding Date.parse. - Date: false - } - }, - - APP: { - // Here you can pass flags/options to your application instance - // when it is created - } - }; - - if (environment === 'development') { - // ENV.APP.LOG_RESOLVER = true; - // ENV.APP.LOG_ACTIVE_GENERATION = true; - // ENV.APP.LOG_TRANSITIONS = true; - // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; - // ENV.APP.LOG_VIEW_LOOKUPS = true; - } - - if (environment === 'test') { - // Testem prefers this... - ENV.locationType = 'none'; - - // keep test console output quieter - ENV.APP.LOG_ACTIVE_GENERATION = false; - ENV.APP.LOG_VIEW_LOOKUPS = false; - - ENV.APP.rootElement = '#ember-testing'; - } - - if (environment === 'production') { - - } - - return ENV; -}; diff --git a/bfcoder-github-com/ember-cli-build.js b/bfcoder-github-com/ember-cli-build.js deleted file mode 100644 index c9be049..0000000 --- a/bfcoder-github-com/ember-cli-build.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-env node */ -const EmberApp = require('ember-cli/lib/broccoli/ember-app'); - -module.exports = function(defaults) { - var app = new EmberApp(defaults, { - // Add options here - }); - - // Use `app.import` to add additional libraries to the generated - // output files. - // - // If you need to use different assets in different - // environments, specify an object as the first parameter. That - // object's keys should be the environment name and the values - // should be the asset to use in that environment. - // - // If the library that you are including contains AMD or ES6 - // modules that you would like to import into your application - // please specify an object with the list of modules as keys - // along with the exports of each module as its value. - - return app.toTree(); -}; diff --git a/bfcoder-github-com/package.json b/bfcoder-github-com/package.json deleted file mode 100644 index 1190572..0000000 --- a/bfcoder-github-com/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "bfcoder-github-com", - "version": "0.0.0", - "description": "Small description for bfcoder-github-com goes here", - "license": "MIT", - "author": "", - "directories": { - "doc": "doc", - "test": "tests" - }, - "repository": "", - "scripts": { - "build": "ember build", - "start": "ember server", - "test": "ember test" - }, - "devDependencies": { - "broccoli-asset-rev": "^2.4.5", - "ember-ajax": "^2.4.1", - "ember-bootstrap": "0.9.1", - "ember-cli": "2.12.1", - "ember-cli-app-version": "^2.0.0", - "ember-cli-babel": "^5.1.7", - "ember-cli-dependency-checker": "^1.3.0", - "ember-cli-eslint": "^3.0.0", - "ember-cli-htmlbars": "^1.1.1", - "ember-cli-htmlbars-inline-precompile": "^0.3.6", - "ember-cli-inject-live-reload": "^1.4.1", - "ember-cli-qunit": "^3.1.0", - "ember-cli-shims": "^1.0.2", - "ember-cli-sri": "^2.1.0", - "ember-cli-uglify": "^1.2.0", - "ember-export-application-global": "^1.0.5", - "ember-load-initializers": "^0.6.0", - "ember-resolver": "^2.0.3", - "ember-source": "~2.12.0", - "loader.js": "^4.2.3" - }, - "engines": { - "node": ">= 4" - }, - "private": true -} diff --git a/bfcoder-github-com/public/crossdomain.xml b/bfcoder-github-com/public/crossdomain.xml deleted file mode 100644 index 0c16a7a..0000000 --- a/bfcoder-github-com/public/crossdomain.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/bfcoder-github-com/public/robots.txt b/bfcoder-github-com/public/robots.txt deleted file mode 100644 index f591645..0000000 --- a/bfcoder-github-com/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# http://www.robotstxt.org -User-agent: * -Disallow: diff --git a/bfcoder-github-com/testem.js b/bfcoder-github-com/testem.js deleted file mode 100644 index b234048..0000000 --- a/bfcoder-github-com/testem.js +++ /dev/null @@ -1,12 +0,0 @@ -/* eslint-env node */ -module.exports = { - "test_page": "tests/index.html?hidepassed", - "disable_watching": true, - "launch_in_ci": [ - "PhantomJS" - ], - "launch_in_dev": [ - "PhantomJS", - "Chrome" - ] -}; diff --git a/bfcoder-github-com/tests/.eslintrc.js b/bfcoder-github-com/tests/.eslintrc.js deleted file mode 100644 index fbf2555..0000000 --- a/bfcoder-github-com/tests/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - env: { - embertest: true - } -}; diff --git a/bfcoder-github-com/tests/helpers/destroy-app.js b/bfcoder-github-com/tests/helpers/destroy-app.js deleted file mode 100644 index c3d4d1a..0000000 --- a/bfcoder-github-com/tests/helpers/destroy-app.js +++ /dev/null @@ -1,5 +0,0 @@ -import Ember from 'ember'; - -export default function destroyApp(application) { - Ember.run(application, 'destroy'); -} diff --git a/bfcoder-github-com/tests/helpers/module-for-acceptance.js b/bfcoder-github-com/tests/helpers/module-for-acceptance.js deleted file mode 100644 index 76996fd..0000000 --- a/bfcoder-github-com/tests/helpers/module-for-acceptance.js +++ /dev/null @@ -1,23 +0,0 @@ -import { module } from 'qunit'; -import Ember from 'ember'; -import startApp from '../helpers/start-app'; -import destroyApp from '../helpers/destroy-app'; - -const { RSVP: { Promise } } = Ember; - -export default function(name, options = {}) { - module(name, { - beforeEach() { - this.application = startApp(); - - if (options.beforeEach) { - return options.beforeEach.apply(this, arguments); - } - }, - - afterEach() { - let afterEach = options.afterEach && options.afterEach.apply(this, arguments); - return Promise.resolve(afterEach).then(() => destroyApp(this.application)); - } - }); -} diff --git a/bfcoder-github-com/tests/helpers/resolver.js b/bfcoder-github-com/tests/helpers/resolver.js deleted file mode 100644 index b208d38..0000000 --- a/bfcoder-github-com/tests/helpers/resolver.js +++ /dev/null @@ -1,11 +0,0 @@ -import Resolver from '../../resolver'; -import config from '../../config/environment'; - -const resolver = Resolver.create(); - -resolver.namespace = { - modulePrefix: config.modulePrefix, - podModulePrefix: config.podModulePrefix -}; - -export default resolver; diff --git a/bfcoder-github-com/tests/helpers/start-app.js b/bfcoder-github-com/tests/helpers/start-app.js deleted file mode 100644 index 9a605eb..0000000 --- a/bfcoder-github-com/tests/helpers/start-app.js +++ /dev/null @@ -1,15 +0,0 @@ -import Ember from 'ember'; -import Application from '../../app'; -import config from '../../config/environment'; - -export default function startApp(attrs) { - let attributes = Ember.merge({}, config.APP); - attributes = Ember.merge(attributes, attrs); // use defaults, but you can override; - - return Ember.run(() => { - let application = Application.create(attributes); - application.setupForTesting(); - application.injectTestHelpers(); - return application; - }); -} diff --git a/bfcoder-github-com/tests/index.html b/bfcoder-github-com/tests/index.html deleted file mode 100644 index 94ef964..0000000 --- a/bfcoder-github-com/tests/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - BfcoderGithubCom Tests - - - - {{content-for "head"}} - {{content-for "test-head"}} - - - - - - {{content-for "head-footer"}} - {{content-for "test-head-footer"}} - - - {{content-for "body"}} - {{content-for "test-body"}} - - - - - - - - {{content-for "body-footer"}} - {{content-for "test-body-footer"}} - - diff --git a/bfcoder-github-com/tests/integration/.gitkeep b/bfcoder-github-com/tests/integration/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/tests/test-helper.js b/bfcoder-github-com/tests/test-helper.js deleted file mode 100644 index e6cfb70..0000000 --- a/bfcoder-github-com/tests/test-helper.js +++ /dev/null @@ -1,6 +0,0 @@ -import resolver from './helpers/resolver'; -import { - setResolver -} from 'ember-qunit'; - -setResolver(resolver); diff --git a/bfcoder-github-com/tests/unit/.gitkeep b/bfcoder-github-com/tests/unit/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/vendor/.gitkeep b/bfcoder-github-com/vendor/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/bfcoder-github-com/yarn.lock b/bfcoder-github-com/yarn.lock deleted file mode 100644 index 3f869a5..0000000 --- a/bfcoder-github-com/yarn.lock +++ /dev/null @@ -1,5322 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -abbrev@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" - -accepts@1.3.3, 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" - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^4.0.3: - version "4.0.11" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" - -acorn@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" - -after@0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" - -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" - -ajv@^4.7.0, ajv@^4.9.1: - version "4.11.7" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alter@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd" - dependencies: - stable "~0.1.3" - -amd-name-resolver@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/amd-name-resolver/-/amd-name-resolver-0.0.6.tgz#d3e4ba2dfcaab1d820c1be9de947c67828cfe595" - dependencies: - ensure-posix-path "^1.0.1" - -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-regex@^0.2.0, ansi-regex@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-styles@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" - -ansi-styles@^2.1.0, ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansicolors@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" - -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" - dependencies: - arrify "^1.0.0" - micromatch "^2.1.5" - -aproba@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" - -are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" - -argparse@^1.0.7, argparse@~1.0.2: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-flatten@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-to-error@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-to-error/-/array-to-error-1.1.1.tgz#d68812926d14097a205579a667eeaf1856a44c07" - dependencies: - array-to-sentence "^1.1.0" - -array-to-sentence@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-to-sentence/-/array-to-sentence-1.1.0.tgz#c804956dafa53232495b205a9452753a258d39fc" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -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: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -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" - -ast-traverse@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6" - -ast-types@0.8.12: - version "0.8.12" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc" - -ast-types@0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52" - -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - -async-disk-cache@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/async-disk-cache/-/async-disk-cache-1.3.1.tgz#3394010d9448b16205b01e0e2e704180805413d3" - dependencies: - debug "^2.1.3" - heimdalljs "^0.2.3" - istextorbinary "2.1.0" - mkdirp "^0.5.0" - rimraf "^2.5.3" - rsvp "^3.0.18" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async@^1.4.0, async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -babel-core@^5.0.0: - version "5.8.38" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558" - dependencies: - babel-plugin-constant-folding "^1.0.1" - babel-plugin-dead-code-elimination "^1.0.2" - babel-plugin-eval "^1.0.1" - babel-plugin-inline-environment-variables "^1.0.1" - babel-plugin-jscript "^1.0.4" - babel-plugin-member-expression-literals "^1.0.1" - babel-plugin-property-literals "^1.0.1" - babel-plugin-proto-to-assign "^1.0.3" - babel-plugin-react-constant-elements "^1.0.3" - babel-plugin-react-display-name "^1.0.3" - babel-plugin-remove-console "^1.0.1" - babel-plugin-remove-debugger "^1.0.1" - babel-plugin-runtime "^1.0.7" - babel-plugin-undeclared-variables-check "^1.0.2" - babel-plugin-undefined-to-void "^1.1.6" - babylon "^5.8.38" - bluebird "^2.9.33" - chalk "^1.0.0" - convert-source-map "^1.1.0" - core-js "^1.0.0" - debug "^2.1.1" - detect-indent "^3.0.0" - esutils "^2.0.0" - fs-readdir-recursive "^0.1.0" - globals "^6.4.0" - home-or-tmp "^1.0.0" - is-integer "^1.0.4" - js-tokens "1.0.1" - json5 "^0.4.0" - lodash "^3.10.0" - minimatch "^2.0.3" - output-file-sync "^1.1.0" - path-exists "^1.0.0" - path-is-absolute "^1.0.0" - private "^0.1.6" - regenerator "0.8.40" - regexpu "^1.3.0" - repeating "^1.1.2" - resolve "^1.1.6" - shebang-regex "^1.0.0" - slash "^1.0.0" - source-map "^0.5.0" - source-map-support "^0.2.10" - to-fast-properties "^1.0.0" - trim-right "^1.0.0" - try-resolve "^1.0.0" - -babel-core@^6.14.0, babel-core@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" - dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.24.1" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - -babel-helper-builder-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-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-helper-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-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-helper-remap-async-to-generator@^6.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-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-constant-folding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz#8361d364c98e449c3692bdba51eff0844290aa8e" - -babel-plugin-dead-code-elimination@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65" - -babel-plugin-eval@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz#a2faed25ce6be69ade4bfec263f70169195950da" - -babel-plugin-htmlbars-inline-precompile@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-0.1.0.tgz#b784723bd1f108796b56faf9f1c05eb5ca442983" - -babel-plugin-inline-environment-variables@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz#1f58ce91207ad6a826a8bf645fafe68ff5fe3ffe" - -babel-plugin-jscript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz#8f342c38276e87a47d5fa0a8bd3d5eb6ccad8fcc" - -babel-plugin-member-expression-literals@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz#cc5edb0faa8dc927170e74d6d1c02440021624d3" - -babel-plugin-property-literals@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz#0252301900192980b1c118efea48ce93aab83336" - -babel-plugin-proto-to-assign@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz#c49e7afd02f577bc4da05ea2df002250cf7cd123" - dependencies: - lodash "^3.9.3" - -babel-plugin-react-constant-elements@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz#946736e8378429cbc349dcff62f51c143b34e35a" - -babel-plugin-react-display-name@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz#754fe38926e8424a4e7b15ab6ea6139dee0514fc" - -babel-plugin-remove-console@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz#d8f24556c3a05005d42aaaafd27787f53ff013a7" - -babel-plugin-remove-debugger@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz#fd2ea3cd61a428ad1f3b9c89882ff4293e8c14c7" - -babel-plugin-runtime@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz#bf7c7d966dd56ecd5c17fa1cb253c9acb7e54aaf" - -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-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-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-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.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-plugin-transform-es2015-classes@^6.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.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.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-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-regenerator@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" - dependencies: - regenerator-transform "0.9.11" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-undeclared-variables-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz#5cf1aa539d813ff64e99641290af620965f65dee" - dependencies: - leven "^1.0.2" - -babel-plugin-undefined-to-void@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81" - -babel-polyfill@^6.16.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" - dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-preset-env@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.4.0.tgz#c8e02a3bcc7792f23cded68e0355b9d4c28f0f7a" - 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 "^1.4.0" - invariant "^2.2.2" - -babel-register@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" - dependencies: - babel-core "^6.24.1" - babel-runtime "^6.22.0" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" - -babel-runtime@^6.18.0, babel-runtime@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-template@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" - lodash "^4.2.0" - -babel-traverse@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-types@^6.19.0, babel-types@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" - dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" - -babylon@^5.8.38: - version "5.8.38" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" - -babylon@^6.11.0, babylon@^6.15.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" - -backbone@^1.1.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.3.3.tgz#4cc80ea7cb1631ac474889ce40f2f8bc683b2999" - dependencies: - underscore ">=1.8.3" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - -base64id@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" - -basic-auth@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" - -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" - -binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" - -"binaryextensions@1 || 2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.0.0.tgz#e597d1a7a6a3558a2d1c7241a16c99965e6aa40f" - -blank-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/blank-object/-/blank-object-1.0.2.tgz#f990793fbe9a8c8dd013fb3219420bec81d5f4b9" - -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@^2.9.33: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" - -bluebird@^3.1.1, bluebird@^3.4.6: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" - -body@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" - dependencies: - continuable-cache "^0.3.1" - error "^7.0.0" - raw-body "~1.1.0" - safe-json-parse "~1.0.1" - -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" - -bower-config@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-1.4.0.tgz#16c38c1135f8071c19f25938d61b0d8cbf18d3f1" - dependencies: - graceful-fs "^4.1.3" - mout "^1.0.0" - optimist "^0.6.1" - osenv "^0.1.3" - untildify "^2.1.0" - -bower-endpoint-parser@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz#00b565adbfab6f2d35addde977e97962acbcb3f6" - -brace-expansion@^1.0.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -breakable@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" - -broccoli-asset-rev@^2.4.5: - version "2.5.0" - resolved "https://registry.yarnpkg.com/broccoli-asset-rev/-/broccoli-asset-rev-2.5.0.tgz#f5f66eac962bf9f086286921f0eaeaab6d00d819" - dependencies: - broccoli-asset-rewrite "^1.1.0" - broccoli-filter "^1.2.2" - json-stable-stringify "^1.0.0" - matcher-collection "^1.0.1" - rsvp "^3.0.6" - -broccoli-asset-rewrite@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-asset-rewrite/-/broccoli-asset-rewrite-1.1.0.tgz#77a5da56157aa318c59113245e8bafb4617f8830" - dependencies: - broccoli-filter "^1.2.3" - -broccoli-babel-transpiler@^5.5.0, broccoli-babel-transpiler@^5.6.2: - version "5.6.2" - resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-5.6.2.tgz#958c72e43575b2f0a862a5096dba1ce1ebc7d74d" - dependencies: - babel-core "^5.0.0" - broccoli-funnel "^1.0.0" - broccoli-merge-trees "^1.0.0" - broccoli-persistent-filter "^1.0.1" - clone "^0.2.0" - hash-for-dep "^1.0.2" - json-stable-stringify "^1.0.0" - -broccoli-babel-transpiler@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/broccoli-babel-transpiler/-/broccoli-babel-transpiler-6.0.0.tgz#a52c5404bf36236849da503b011fd41fe64a00a2" - dependencies: - babel-core "^6.14.0" - broccoli-funnel "^1.0.0" - broccoli-merge-trees "^1.0.0" - broccoli-persistent-filter "^1.0.1" - clone "^2.0.0" - hash-for-dep "^1.0.2" - json-stable-stringify "^1.0.0" - -broccoli-brocfile-loader@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/broccoli-brocfile-loader/-/broccoli-brocfile-loader-0.18.0.tgz#2e86021c805c34ffc8d29a2fb721cf273e819e4b" - dependencies: - findup-sync "^0.4.2" - -broccoli-builder@^0.18.3: - version "0.18.4" - resolved "https://registry.yarnpkg.com/broccoli-builder/-/broccoli-builder-0.18.4.tgz#abc6db2c07d214454918e2997ea87441b69b69d3" - dependencies: - heimdalljs "^0.2.0" - promise-map-series "^0.2.1" - quick-temp "^0.1.2" - rimraf "^2.2.8" - rsvp "^3.0.17" - silent-error "^1.0.1" - -broccoli-caching-writer@^2.0.4, broccoli-caching-writer@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/broccoli-caching-writer/-/broccoli-caching-writer-2.3.1.tgz#b93cf58f9264f003075868db05774f4e7f25bd07" - dependencies: - broccoli-kitchen-sink-helpers "^0.2.5" - broccoli-plugin "1.1.0" - debug "^2.1.1" - rimraf "^2.2.8" - rsvp "^3.0.17" - walk-sync "^0.2.5" - -broccoli-clean-css@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-clean-css/-/broccoli-clean-css-1.1.0.tgz#9db143d9af7e0ae79c26e3ac5a9bb2d720ea19fa" - dependencies: - broccoli-persistent-filter "^1.1.6" - clean-css-promise "^0.1.0" - inline-source-map-comment "^1.0.5" - json-stable-stringify "^1.0.0" - -broccoli-concat@^3.0.4: - version "3.2.2" - resolved "https://registry.yarnpkg.com/broccoli-concat/-/broccoli-concat-3.2.2.tgz#86ffdc52606eb590ba9f6b894c5ec7a016f5b7b9" - dependencies: - broccoli-kitchen-sink-helpers "^0.3.1" - broccoli-plugin "^1.3.0" - broccoli-stew "^1.3.3" - ensure-posix-path "^1.0.2" - fast-sourcemap-concat "^1.0.1" - find-index "^1.1.0" - fs-extra "^1.0.0" - fs-tree-diff "^0.5.6" - lodash.merge "^4.3.0" - lodash.omit "^4.1.0" - lodash.uniq "^4.2.0" - walk-sync "^0.3.1" - -broccoli-config-loader@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/broccoli-config-loader/-/broccoli-config-loader-1.0.0.tgz#c3cf5ecfaffc04338c6f1d5d38dc36baeaa131ba" - dependencies: - broccoli-caching-writer "^2.0.4" - -broccoli-config-replace@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/broccoli-config-replace/-/broccoli-config-replace-1.1.2.tgz#6ea879d92a5bad634d11329b51fc5f4aafda9c00" - dependencies: - broccoli-kitchen-sink-helpers "^0.3.1" - broccoli-plugin "^1.2.0" - debug "^2.2.0" - fs-extra "^0.24.0" - -broccoli-filter@^1.2.2, broccoli-filter@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/broccoli-filter/-/broccoli-filter-1.2.4.tgz#409afb94b9a3a6da9fac8134e91e205f40cc7330" - dependencies: - broccoli-kitchen-sink-helpers "^0.3.1" - broccoli-plugin "^1.0.0" - copy-dereference "^1.0.0" - debug "^2.2.0" - mkdirp "^0.5.1" - promise-map-series "^0.2.1" - rsvp "^3.0.18" - symlink-or-copy "^1.0.1" - walk-sync "^0.3.1" - -broccoli-funnel-reducer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/broccoli-funnel-reducer/-/broccoli-funnel-reducer-1.0.0.tgz#11365b2a785aec9b17972a36df87eef24c5cc0ea" - -broccoli-funnel@^1.0.0, broccoli-funnel@^1.0.1, broccoli-funnel@^1.0.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-1.2.0.tgz#cddc3afc5ff1685a8023488fff74ce6fb5a51296" - dependencies: - array-equal "^1.0.0" - blank-object "^1.0.1" - broccoli-plugin "^1.3.0" - debug "^2.2.0" - exists-sync "0.0.4" - fast-ordered-set "^1.0.0" - fs-tree-diff "^0.5.3" - heimdalljs "^0.2.0" - minimatch "^3.0.0" - mkdirp "^0.5.0" - path-posix "^1.0.0" - rimraf "^2.4.3" - symlink-or-copy "^1.0.0" - walk-sync "^0.3.1" - -broccoli-kitchen-sink-helpers@^0.2.5: - version "0.2.9" - resolved "https://registry.yarnpkg.com/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.2.9.tgz#a5e0986ed8d76fb5984b68c3f0450d3a96e36ecc" - dependencies: - glob "^5.0.10" - mkdirp "^0.5.1" - -broccoli-kitchen-sink-helpers@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/broccoli-kitchen-sink-helpers/-/broccoli-kitchen-sink-helpers-0.3.1.tgz#77c7c18194b9664163ec4fcee2793444926e0c06" - dependencies: - glob "^5.0.10" - mkdirp "^0.5.1" - -broccoli-lint-eslint@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/broccoli-lint-eslint/-/broccoli-lint-eslint-3.2.1.tgz#6c88cd36f2999eab98b07538a382ef2c10d2b77f" - dependencies: - broccoli-persistent-filter "^1.2.0" - escape-string-regexp "^1.0.5" - eslint "^3.0.0" - js-string-escape "^1.0.1" - json-stable-stringify "^1.0.1" - md5-hex "^2.0.0" - -broccoli-merge-trees@^1.0.0, broccoli-merge-trees@^1.1.0, broccoli-merge-trees@^1.1.1, broccoli-merge-trees@^1.1.3, broccoli-merge-trees@^1.1.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/broccoli-merge-trees/-/broccoli-merge-trees-1.2.4.tgz#a001519bb5067f06589d91afa2942445a2d0fdb5" - dependencies: - broccoli-plugin "^1.3.0" - can-symlink "^1.0.0" - fast-ordered-set "^1.0.2" - fs-tree-diff "^0.5.4" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - rimraf "^2.4.3" - symlink-or-copy "^1.0.0" - -broccoli-middleware@^1.0.0-beta.8: - version "1.0.0-beta.8" - resolved "https://registry.yarnpkg.com/broccoli-middleware/-/broccoli-middleware-1.0.0-beta.8.tgz#89cb6a9950ff0cf5bd75071d83d7cd6f6a11a95b" - dependencies: - handlebars "^4.0.4" - mime "^1.2.11" - -broccoli-persistent-filter@^1.0.1, broccoli-persistent-filter@^1.0.3, broccoli-persistent-filter@^1.1.6, broccoli-persistent-filter@^1.2.0: - version "1.2.13" - resolved "https://registry.yarnpkg.com/broccoli-persistent-filter/-/broccoli-persistent-filter-1.2.13.tgz#61368669e2b8f35238fdd38a2a896597e4a1c821" - dependencies: - async-disk-cache "^1.0.0" - blank-object "^1.0.1" - broccoli-plugin "^1.0.0" - fs-tree-diff "^0.5.2" - hash-for-dep "^1.0.2" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - md5-hex "^1.0.2" - mkdirp "^0.5.1" - promise-map-series "^0.2.1" - rsvp "^3.0.18" - symlink-or-copy "^1.0.1" - walk-sync "^0.3.1" - -broccoli-plugin@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.1.0.tgz#73e2cfa05f8ea1e3fc1420c40c3d9e7dc724bf02" - dependencies: - promise-map-series "^0.2.1" - quick-temp "^0.1.3" - rimraf "^2.3.4" - symlink-or-copy "^1.0.1" - -broccoli-plugin@^1.0.0, broccoli-plugin@^1.2.0, broccoli-plugin@^1.2.1, broccoli-plugin@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/broccoli-plugin/-/broccoli-plugin-1.3.0.tgz#bee704a8e42da08cb58e513aaa436efb7f0ef1ee" - dependencies: - promise-map-series "^0.2.1" - quick-temp "^0.1.3" - rimraf "^2.3.4" - symlink-or-copy "^1.1.8" - -broccoli-slow-trees@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/broccoli-slow-trees/-/broccoli-slow-trees-3.0.1.tgz#9bf2a9e2f8eb3ed3a3f2abdde988da437ccdc9b4" - dependencies: - heimdalljs "^0.2.1" - -broccoli-source@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/broccoli-source/-/broccoli-source-1.1.0.tgz#54f0e82c8b73f46580cbbc4f578f0b32fca8f809" - -broccoli-sri-hash@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/broccoli-sri-hash/-/broccoli-sri-hash-2.1.2.tgz#bc69905ed7a381ad325cc0d02ded071328ebf3f3" - dependencies: - broccoli-caching-writer "^2.2.0" - mkdirp "^0.5.1" - rsvp "^3.1.0" - sri-toolbox "^0.2.0" - symlink-or-copy "^1.0.1" - -broccoli-stew@^1.2.0, broccoli-stew@^1.3.3: - version "1.4.2" - resolved "https://registry.yarnpkg.com/broccoli-stew/-/broccoli-stew-1.4.2.tgz#9ec4062fd7162c6026561a2fbf64558363aff8d6" - dependencies: - broccoli-funnel "^1.0.1" - broccoli-merge-trees "^1.0.0" - broccoli-persistent-filter "^1.1.6" - broccoli-plugin "^1.3.0" - chalk "^1.1.3" - debug "^2.4.0" - ensure-posix-path "^1.0.1" - fs-extra "^2.0.0" - minimatch "^3.0.2" - resolve "^1.1.6" - rsvp "^3.0.16" - sanitize-filename "^1.5.3" - symlink-or-copy "^1.1.8" - walk-sync "^0.3.0" - -broccoli-uglify-sourcemap@^1.0.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/broccoli-uglify-sourcemap/-/broccoli-uglify-sourcemap-1.5.2.tgz#04f84ab0db539031fa868ccfa563c9932d50cedb" - dependencies: - broccoli-plugin "^1.2.1" - debug "^2.2.0" - lodash.merge "^4.5.1" - matcher-collection "^1.0.0" - mkdirp "^0.5.0" - source-map-url "^0.3.0" - symlink-or-copy "^1.0.1" - uglify-js "^2.7.0" - walk-sync "^0.1.3" - -browserslist@^1.4.0: - 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" - -bser@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" - dependencies: - node-int64 "^0.4.0" - -buffer-shims@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -bytes@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" - -bytes@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" - -calculate-cache-key-for-tree@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/calculate-cache-key-for-tree/-/calculate-cache-key-for-tree-1.1.0.tgz#0c3e42c9c134f3c9de5358c0f16793627ea976d6" - dependencies: - json-stable-stringify "^1.0.1" - -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" - -camelcase@^1.0.2, camelcase@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -can-symlink@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/can-symlink/-/can-symlink-1.0.0.tgz#97b607d8a84bb6c6e228b902d864ecb594b9d219" - dependencies: - tmp "0.0.28" - -caniuse-db@^1.0.30000639: - version "1.0.30000656" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000656.tgz#127c8c6e655e7464e58f039558f1e878fcca3c45" - -capture-exit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - dependencies: - rsvp "^3.3.3" - -cardinal@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-0.5.0.tgz#00d5f661dbd4aabfdf7d41ce48a5a59bca35a291" - dependencies: - ansicolors "~0.2.1" - redeyed "~0.5.0" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" - dependencies: - ansi-styles "^1.1.0" - escape-string-regexp "^1.0.0" - has-ansi "^0.1.0" - strip-ansi "^0.3.0" - supports-color "^0.2.0" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -charm@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35" - dependencies: - inherits "^2.0.1" - -chokidar@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" - 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" - -circular-json@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" - -clean-base-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clean-base-url/-/clean-base-url-1.0.0.tgz#c901cf0a20b972435b0eccd52d056824a4351b7b" - -clean-css-promise@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/clean-css-promise/-/clean-css-promise-0.1.1.tgz#43f3d2c8dfcb2bf071481252cd9b76433c08eecb" - dependencies: - array-to-error "^1.0.0" - clean-css "^3.4.5" - pinkie-promise "^2.0.0" - -clean-css@^3.4.5: - version "3.4.25" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-3.4.25.tgz#9e9a52d5c1e6bc5123e1b2783fa65fe958946ede" - dependencies: - commander "2.8.x" - source-map "0.4.x" - -cli-cursor@^1.0.1, cli-cursor@^1.0.2: - 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-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - -cli-table2@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/cli-table2/-/cli-table2-0.2.0.tgz#2d1ef7f218a0e786e214540562d4bd177fe32d97" - dependencies: - lodash "^3.10.1" - string-width "^1.0.1" - optionalDependencies: - colors "^1.1.2" - -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" - -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -clone@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" - -clone@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - -colors@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - -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.8.x: - version "2.8.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" - dependencies: - graceful-readlink ">= 1.0.0" - -commander@2.9.0, commander@^2.5.0, commander@^2.6.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - -commoner@~0.10.3: - version "0.10.8" - resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" - dependencies: - commander "^2.5.0" - detective "^4.3.1" - glob "^5.0.15" - graceful-fs "^4.1.2" - iconv-lite "^0.4.5" - mkdirp "^0.5.0" - private "^0.1.6" - q "^1.1.2" - recast "^0.11.17" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - -compressible@~2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd" - dependencies: - mime-db ">= 1.27.0 < 2" - -compression@^1.4.4: - version "1.6.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" - dependencies: - accepts "~1.3.3" - bytes "2.3.0" - compressible "~2.0.8" - debug "~2.2.0" - on-headers "~1.0.1" - vary "~1.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.4.7, concat-stream@^1.5.2: - 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@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" - dependencies: - dot-prop "^3.0.0" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - object-assign "^4.0.1" - os-tmpdir "^1.0.0" - osenv "^0.1.0" - uuid "^2.0.1" - write-file-atomic "^1.1.2" - xdg-basedir "^2.0.0" - -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" - -console-ui@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/console-ui/-/console-ui-1.0.3.tgz#31c524461b63422769f9e89c173495d91393721c" - dependencies: - chalk "^1.1.3" - inquirer "^1.2.3" - ora "^0.2.0" - through "^2.3.8" - -consolidate@^0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.14.5.tgz#5a25047bc76f73072667c8cb52c989888f494c63" - dependencies: - bluebird "^3.1.1" - -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@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" - -continuable-cache@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" - -convert-source-map@^1.1.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" - -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" - -copy-dereference@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/copy-dereference/-/copy-dereference-1.0.0.tgz#6b131865420fd81b413ba994b44d3655311152b6" - -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.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - -core-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/core-object/-/core-object-1.1.0.tgz#86d63918733cf9da1a5aae729e62c0a88e66ad0a" - -core-object@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.0.tgz#f5219fec2a19c40956f1c723d121890c88c5f677" - dependencies: - chalk "^1.1.3" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cross-spawn@^5.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" - -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" - -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.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" - dependencies: - ms "0.7.2" - -debug@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" - dependencies: - ms "0.7.2" - -debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" - dependencies: - ms "0.7.3" - -decamelize@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -defs@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/defs/-/defs-1.1.1.tgz#b22609f2c7a11ba7a3db116805c139b1caffa9d2" - dependencies: - alter "~0.2.0" - ast-traverse "~0.1.1" - breakable "~1.0.0" - esprima-fb "~15001.1001.0-dev-harmony-fb" - simple-fmt "~0.1.0" - simple-is "~0.2.0" - stringmap "~0.2.2" - stringset "~0.2.1" - tryor "~0.1.2" - yargs "~3.27.0" - -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.0, depd@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-file@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" - dependencies: - fs-exists-sync "^0.1.0" - -detect-indent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" - dependencies: - get-stdin "^4.0.1" - minimist "^1.1.0" - repeating "^1.1.0" - -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" - -detective@^4.3.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" - dependencies: - acorn "^4.0.3" - defined "^1.0.0" - -diff@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - dependencies: - is-obj "^1.0.0" - -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" - -editions@^1.1.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.3.tgz#0907101bdda20fac3cbe334c27cbd0688dc99a5b" - -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: - version "1.3.5" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.5.tgz#6cd6ff2106224a6130e235f21050f9546bc3e729" - -ember-ajax@^2.4.1: - version "2.5.6" - resolved "https://registry.yarnpkg.com/ember-ajax/-/ember-ajax-2.5.6.tgz#a75f743ccf1b95e979a5cf96013b3dba8fa625e4" - dependencies: - ember-cli-babel "^5.1.5" - -ember-bootstrap@0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/ember-bootstrap/-/ember-bootstrap-0.9.1.tgz#ee403cbd1ab2746e7348b7788a53c96e90c6a937" - dependencies: - broccoli-funnel "^1.0.1" - broccoli-merge-trees "^1.1.1" - ember-cli-babel "^5.1.6" - ember-cli-htmlbars "^1.0.2" - ember-wormhole "^0.3.4" - -ember-cli-app-version@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ember-cli-app-version/-/ember-cli-app-version-2.0.2.tgz#aaeede608e92fae6c2e11f63d28a373c1cc3f070" - dependencies: - ember-cli-babel "^5.1.6" - ember-cli-htmlbars "^1.0.0" - git-repo-version "0.4.1" - -ember-cli-babel@^5.0.0, ember-cli-babel@^5.1.10, ember-cli-babel@^5.1.3, ember-cli-babel@^5.1.5, ember-cli-babel@^5.1.6, ember-cli-babel@^5.1.7, ember-cli-babel@^5.2.1: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-5.2.4.tgz#5ce4f46b08ed6f6d21e878619fb689719d6e8e13" - dependencies: - broccoli-babel-transpiler "^5.6.2" - broccoli-funnel "^1.0.0" - clone "^2.0.0" - ember-cli-version-checker "^1.0.2" - resolve "^1.1.2" - -ember-cli-babel@^6.0.0-beta.7: - version "6.0.0-beta.11" - resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.0.0-beta.11.tgz#ce34fa46bf7fe0bc1e7381b985824e14d5f5e9ef" - dependencies: - amd-name-resolver "0.0.6" - babel-plugin-transform-es2015-modules-amd "^6.24.0" - babel-polyfill "^6.16.0" - babel-preset-env "^1.2.0" - broccoli-babel-transpiler "^6.0.0" - broccoli-funnel "^1.0.0" - broccoli-source "^1.1.0" - clone "^2.0.0" - ember-cli-version-checker "^1.2.0" - -ember-cli-broccoli-sane-watcher@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/ember-cli-broccoli-sane-watcher/-/ember-cli-broccoli-sane-watcher-2.0.4.tgz#f43f42f75b7509c212fb926cd9aea86ae19264c6" - dependencies: - broccoli-slow-trees "^3.0.1" - heimdalljs "^0.2.1" - heimdalljs-logger "^0.1.7" - rsvp "^3.0.18" - sane "^1.1.1" - -ember-cli-dependency-checker@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ember-cli-dependency-checker/-/ember-cli-dependency-checker-1.4.0.tgz#2b13f977e1eea843fc1a21a001be6ca5d4ef1942" - dependencies: - chalk "^0.5.1" - is-git-url "^0.2.0" - semver "^4.1.0" - -ember-cli-eslint@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ember-cli-eslint/-/ember-cli-eslint-3.0.3.tgz#620abced2984be96a8747a47bfd41c5adbb9b968" - dependencies: - broccoli-lint-eslint "^3.1.0" - js-string-escape "^1.0.0" - rsvp "^3.2.1" - walk-sync "^0.3.0" - -ember-cli-get-component-path-option@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-get-component-path-option/-/ember-cli-get-component-path-option-1.0.0.tgz#0d7b595559e2f9050abed804f1d8eff1b08bc771" - -ember-cli-get-dependency-depth@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-get-dependency-depth/-/ember-cli-get-dependency-depth-1.0.0.tgz#e0afecf82a2d52f00f28ab468295281aec368d11" - -ember-cli-htmlbars-inline-precompile@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-0.3.6.tgz#4095fe423f93102724c0725e4dd1a31f25e24de5" - dependencies: - babel-plugin-htmlbars-inline-precompile "^0.1.0" - ember-cli-babel "^5.1.3" - ember-cli-htmlbars "^1.0.0" - hash-for-dep "^1.0.2" - -ember-cli-htmlbars@^1.0.0, ember-cli-htmlbars@^1.0.2, ember-cli-htmlbars@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-1.3.0.tgz#e090f011239153bf45dab29625f94a46fce205af" - dependencies: - broccoli-persistent-filter "^1.0.3" - ember-cli-version-checker "^1.0.2" - hash-for-dep "^1.0.2" - json-stable-stringify "^1.0.0" - strip-bom "^2.0.0" - -ember-cli-inject-live-reload@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-1.6.1.tgz#82b8f5be454815a75e7f6d42c9ce0bc883a914a3" - -ember-cli-is-package-missing@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-is-package-missing/-/ember-cli-is-package-missing-1.0.0.tgz#6e6184cafb92635dd93ca6c946b104292d4e3390" - -ember-cli-legacy-blueprints@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/ember-cli-legacy-blueprints/-/ember-cli-legacy-blueprints-0.1.4.tgz#83d6c005ac0e39750ff9dd45cd1b78cf697150c6" - dependencies: - chalk "^1.1.1" - ember-cli-get-component-path-option "^1.0.0" - ember-cli-get-dependency-depth "^1.0.0" - ember-cli-is-package-missing "^1.0.0" - ember-cli-lodash-subset "^1.0.7" - ember-cli-normalize-entity-name "^1.0.0" - ember-cli-path-utils "^1.0.0" - ember-cli-string-utils "^1.0.0" - ember-cli-test-info "^1.0.0" - ember-cli-valid-component-name "^1.0.0" - ember-cli-version-checker "^1.1.7" - ember-router-generator "^1.0.0" - exists-sync "0.0.3" - fs-extra "^0.24.0" - inflection "^1.7.1" - rsvp "^3.0.17" - silent-error "^1.0.0" - -ember-cli-lodash-subset@^1.0.11, ember-cli-lodash-subset@^1.0.7: - version "1.0.12" - resolved "https://registry.yarnpkg.com/ember-cli-lodash-subset/-/ember-cli-lodash-subset-1.0.12.tgz#af2e77eba5dcb0d77f3308d3a6fd7d3450f6e537" - -ember-cli-normalize-entity-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz#0b14f7bcbc599aa117b5fddc81e4fd03c4bad5b7" - dependencies: - silent-error "^1.0.0" - -ember-cli-path-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-path-utils/-/ember-cli-path-utils-1.0.0.tgz#4e39af8b55301cddc5017739b77a804fba2071ed" - -ember-cli-preprocess-registry@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/ember-cli-preprocess-registry/-/ember-cli-preprocess-registry-3.1.1.tgz#38456c21c4d2b64945850cf9ec68db6ba769288a" - dependencies: - broccoli-clean-css "^1.1.0" - broccoli-funnel "^1.0.0" - broccoli-merge-trees "^1.0.0" - debug "^2.2.0" - ember-cli-lodash-subset "^1.0.7" - exists-sync "0.0.3" - process-relative-require "^1.0.0" - silent-error "^1.0.0" - -ember-cli-qunit@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/ember-cli-qunit/-/ember-cli-qunit-3.1.2.tgz#f47063ad6af0c69cd76661ccfefd453a10d7a93b" - dependencies: - broccoli-babel-transpiler "^5.5.0" - broccoli-funnel "^1.0.1" - broccoli-merge-trees "^1.1.0" - ember-cli-babel "^5.1.5" - ember-cli-test-loader "^1.1.1" - ember-cli-version-checker "^1.1.4" - ember-qunit "^2.0.0-beta.1" - qunit-notifications "^0.1.1" - qunitjs "^2.0.1" - resolve "^1.1.6" - silent-error "^1.0.0" - -ember-cli-shims@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-shims/-/ember-cli-shims-1.1.0.tgz#0e3b8a048be865b4f81cc81d397ff1eeb13f75b6" - dependencies: - ember-cli-babel "^6.0.0-beta.7" - ember-cli-version-checker "^1.2.0" - silent-error "^1.0.1" - -ember-cli-sri@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ember-cli-sri/-/ember-cli-sri-2.1.1.tgz#971620934a4b9183cf7923cc03e178b83aa907fd" - dependencies: - broccoli-sri-hash "^2.1.0" - -ember-cli-string-utils@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1" - -ember-cli-test-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-test-info/-/ember-cli-test-info-1.0.0.tgz#ed4e960f249e97523cf891e4aed2072ce84577b4" - dependencies: - ember-cli-string-utils "^1.0.0" - -ember-cli-test-loader@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ember-cli-test-loader/-/ember-cli-test-loader-1.1.1.tgz#333311209b18185d0e0e95f918349da10cacf0b1" - dependencies: - ember-cli-babel "^5.2.1" - -ember-cli-uglify@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-uglify/-/ember-cli-uglify-1.2.0.tgz#3208c32b54bc2783056e8bb0d5cfe9bbaf17ffb2" - dependencies: - broccoli-uglify-sourcemap "^1.0.0" - -ember-cli-valid-component-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ember-cli-valid-component-name/-/ember-cli-valid-component-name-1.0.0.tgz#71550ce387e0233065f30b30b1510aa2dfbe87ef" - dependencies: - silent-error "^1.0.0" - -ember-cli-version-checker@^1.0.2, ember-cli-version-checker@^1.1.4, ember-cli-version-checker@^1.1.6, ember-cli-version-checker@^1.1.7, ember-cli-version-checker@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-1.2.0.tgz#caa286b77d1b485df5d2f62c67a6f19aa8b582c4" - dependencies: - semver "^5.3.0" - -ember-cli@2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/ember-cli/-/ember-cli-2.12.1.tgz#33dd9341677f67f29bc0e286b129877ee15e5bcb" - dependencies: - amd-name-resolver "0.0.6" - bower-config "^1.3.0" - bower-endpoint-parser "0.2.2" - broccoli-babel-transpiler "^5.6.2" - broccoli-brocfile-loader "^0.18.0" - broccoli-builder "^0.18.3" - broccoli-concat "^3.0.4" - broccoli-config-loader "^1.0.0" - broccoli-config-replace "^1.1.2" - broccoli-funnel "^1.0.6" - broccoli-funnel-reducer "^1.0.0" - broccoli-merge-trees "^1.1.3" - broccoli-middleware "^1.0.0-beta.8" - broccoli-source "^1.1.0" - broccoli-stew "^1.2.0" - calculate-cache-key-for-tree "^1.0.0" - capture-exit "^1.1.0" - chalk "^1.1.3" - clean-base-url "^1.0.0" - compression "^1.4.4" - configstore "^2.0.0" - console-ui "^1.0.2" - core-object "^3.0.0" - diff "^1.3.1" - ember-cli-broccoli-sane-watcher "^2.0.4" - ember-cli-get-component-path-option "^1.0.0" - ember-cli-is-package-missing "^1.0.0" - ember-cli-legacy-blueprints "^0.1.2" - ember-cli-lodash-subset "^1.0.11" - ember-cli-normalize-entity-name "^1.0.0" - ember-cli-preprocess-registry "^3.0.0" - ember-cli-string-utils "^1.0.0" - ember-try "^0.2.9" - ensure-posix-path "^1.0.2" - escape-string-regexp "^1.0.3" - execa "^0.6.0" - exists-sync "0.0.4" - exit "^0.1.2" - express "^4.12.3" - filesize "^3.1.3" - find-up "^2.1.0" - fs-extra "2.0.0" - fs-tree-diff "^0.5.2" - get-caller-file "^1.0.0" - git-repo-info "^1.0.4" - glob "7.1.1" - heimdalljs "^0.2.3" - heimdalljs-fs-monitor "^0.1.0" - heimdalljs-graph "^0.3.1" - heimdalljs-logger "^0.1.7" - http-proxy "^1.9.0" - inflection "^1.7.0" - is-git-url "^0.2.0" - isbinaryfile "^3.0.0" - js-yaml "^3.6.1" - json-stable-stringify "^1.0.1" - leek "0.0.24" - lodash.template "^4.2.5" - markdown-it "^8.2.0" - markdown-it-terminal "0.0.4" - minimatch "^3.0.0" - morgan "^1.5.2" - node-modules-path "^1.0.0" - nopt "^4.0.0" - npm-package-arg "^4.1.1" - portfinder "^1.0.7" - promise-map-series "^0.2.1" - quick-temp "0.1.6" - resolve "^1.1.6" - rsvp "^3.3.3" - sane "^1.1.1" - semver "^5.1.1" - silent-error "^1.0.0" - sort-package-json "^1.4.0" - symlink-or-copy "^1.1.8" - temp "0.8.3" - testem "^1.8.1" - tiny-lr "^1.0.3" - tree-sync "^1.2.1" - uuid "^3.0.0" - walk-sync "^0.3.0" - yam "0.0.22" - -ember-export-application-global@^1.0.5: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-1.1.1.tgz#f257d5271268932a89d7392679ce4db89d7154af" - dependencies: - ember-cli-babel "^5.1.10" - -ember-load-initializers@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/ember-load-initializers/-/ember-load-initializers-0.6.3.tgz#f47396ad271ba77294068c98f992a5f19705441a" - dependencies: - ember-cli-babel "^5.1.6" - -ember-qunit@^2.0.0-beta.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-2.1.2.tgz#ede8e56f098206c1d0834a592acefa0c47dc9ad7" - dependencies: - ember-test-helpers "^0.6.0-beta.1" - -ember-resolver@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ember-resolver/-/ember-resolver-2.1.1.tgz#5e4c1fffe9f5f48fc2194ad7592274ed0cd74f72" - dependencies: - ember-cli-babel "^5.1.6" - ember-cli-version-checker "^1.1.6" - -ember-router-generator@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-1.2.3.tgz#8ed2ca86ff323363120fc14278191e9e8f1315ee" - dependencies: - recast "^0.11.3" - -ember-source@~2.12.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/ember-source/-/ember-source-2.12.1.tgz#2d0b6fa1c9ebca668eccc7d49521584301593b7d" - dependencies: - broccoli-funnel "^1.0.6" - broccoli-merge-trees "^1.1.4" - ember-cli-get-component-path-option "^1.0.0" - ember-cli-normalize-entity-name "^1.0.0" - ember-cli-path-utils "^1.0.0" - ember-cli-string-utils "^1.0.0" - ember-cli-test-info "^1.0.0" - ember-cli-valid-component-name "^1.0.0" - ember-cli-version-checker "^1.1.7" - jquery "^3.1.1" - resolve "^1.1.7" - rsvp "^3.4.0" - simple-dom "^0.3.0" - -ember-test-helpers@^0.6.0-beta.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/ember-test-helpers/-/ember-test-helpers-0.6.3.tgz#f864cdf6f4e75f3f8768d6537785b5ab6e82d907" - -ember-try-config@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ember-try-config/-/ember-try-config-2.1.0.tgz#e0e156229a542346a58ee6f6ad605104c98edfe0" - dependencies: - lodash "^4.6.1" - node-fetch "^1.3.3" - rsvp "^3.2.1" - semver "^5.1.0" - -ember-try@^0.2.9: - version "0.2.13" - resolved "https://registry.yarnpkg.com/ember-try/-/ember-try-0.2.13.tgz#3d91f46950a40bba54da0edbbbb30480f83a9fdb" - dependencies: - chalk "^1.0.0" - cli-table2 "^0.2.0" - core-object "^1.1.0" - debug "^2.2.0" - ember-cli-babel "^5.1.3" - ember-cli-version-checker "^1.1.6" - ember-try-config "^2.0.1" - extend "^3.0.0" - fs-extra "^0.26.0" - promise-map-series "^0.2.1" - resolve "^1.1.6" - rimraf "^2.3.2" - rsvp "^3.0.17" - semver "^5.1.0" - sync-exec "^0.6.2" - -ember-wormhole@^0.3.4: - version "0.3.6" - resolved "https://registry.yarnpkg.com/ember-wormhole/-/ember-wormhole-0.3.6.tgz#bbe21bb5478ad254efe4fff4019ac6710f4ad85c" - dependencies: - ember-cli-babel "^5.0.0" - -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - -engine.io-client@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.0.tgz#7b730e4127414087596d9be3c88d2bc5fdb6cf5c" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "2.3.3" - engine.io-parser "1.3.1" - has-cors "1.1.0" - indexof "0.0.1" - parsejson "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - ws "1.1.1" - xmlhttprequest-ssl "1.5.3" - yeast "0.1.2" - -engine.io-parser@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.1.tgz#9554f1ae33107d6fbd170ca5466d2f833f6a07cf" - dependencies: - after "0.8.1" - arraybuffer.slice "0.0.6" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary "0.1.6" - wtf-8 "1.0.0" - -engine.io@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.0.tgz#3eeb5f264cb75dbbec1baaea26d61f5a4eace2aa" - dependencies: - accepts "1.3.3" - base64id "0.1.0" - cookie "0.3.1" - debug "2.3.3" - engine.io-parser "1.3.1" - ws "1.1.1" - -ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz#a65b3e42d0b71cfc585eb774f9943c8d9b91b0c2" - -entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - -error@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - dependencies: - string-template "~0.2.1" - xtend "~4.0.0" - -es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.15" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" - dependencies: - es6-iterator "2" - es6-symbol "~3.1" - -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-symbol "^3.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, 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" - -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@^3.0.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.4.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.1.tgz#28a83ab4aaed71ed8fe0f5efe61b76a05c13c4d2" - dependencies: - acorn "^5.0.1" - acorn-jsx "^3.0.0" - -esprima-fb@~12001.1.0-dev-harmony-fb: - version "12001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-12001.1.0-dev-harmony-fb.tgz#d84400384ba95ce2678c617ad24a7f40808da915" - -esprima-fb@~15001.1001.0-dev-harmony-fb: - version "15001.1001.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^3.1.1, esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -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.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" - dependencies: - estraverse "~4.1.0" - object-assign "^4.0.1" - -estraverse@^4.0.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" - -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" - -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" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events-to-array@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" - -exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" - dependencies: - merge "^1.1.3" - -execa@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" - 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" - -exists-stat@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/exists-stat/-/exists-stat-1.0.0.tgz#0660e3525a2e89d9e446129440c272edfa24b529" - -exists-sync@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.3.tgz#b910000bedbb113b378b82f5f5a7638107622dcf" - -exists-sync@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/exists-sync/-/exists-sync-0.0.4.tgz#9744c2c428cc03b01060db454d4b12f0ef3c8879" - -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -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" - -expand-tilde@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" - dependencies: - os-homedir "^1.0.1" - -express@^4.10.7, express@^4.12.3: - version "4.15.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" - dependencies: - accepts "~1.3.3" - array-flatten "1.1.1" - content-disposition "0.5.2" - content-type "~1.0.2" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.1" - depd "~1.1.0" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.0" - finalhandler "~1.0.0" - fresh "0.5.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.1" - path-to-regexp "0.1.7" - proxy-addr "~1.1.3" - qs "6.4.0" - range-parser "~1.2.0" - send "0.15.1" - serve-static "1.12.1" - setprototypeof "1.0.3" - statuses "~1.3.1" - type-is "~1.6.14" - utils-merge "1.0.0" - vary "~1.1.0" - -extend@^3.0.0, extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" - -external-editor@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b" - dependencies: - extend "^3.0.0" - spawn-sync "^1.0.15" - tmp "^0.0.29" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fast-ordered-set@^1.0.0, fast-ordered-set@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-ordered-set/-/fast-ordered-set-1.0.3.tgz#3fbb36634f7be79e4f7edbdb4a357dee25d184eb" - dependencies: - blank-object "^1.0.1" - -fast-sourcemap-concat@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-sourcemap-concat/-/fast-sourcemap-concat-1.1.0.tgz#a800767abed5eda02e67238ec063a709be61f9d4" - dependencies: - chalk "^0.5.1" - debug "^2.2.0" - fs-extra "^0.30.0" - memory-streams "^0.1.0" - mkdirp "^0.5.0" - rsvp "^3.0.14" - source-map "^0.4.2" - source-map-url "^0.3.0" - -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^1.8.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" - dependencies: - bser "1.0.2" - -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" - -filesize@^3.1.3: - version "3.5.6" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" - -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.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" - dependencies: - debug "2.6.3" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.1" - statuses "~1.3.1" - unpipe "~1.0.0" - -find-index@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-index/-/find-index-1.1.0.tgz#53007c79cd30040d6816d79458e8837d5c5705ef" - -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" - -findup-sync@^0.4.2, findup-sync@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" - dependencies: - detect-file "^0.1.0" - is-glob "^2.0.1" - micromatch "^2.3.7" - resolve-dir "^0.1.0" - -fireworm@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/fireworm/-/fireworm-0.7.1.tgz#ccf20f7941f108883fcddb99383dbe6e1861c758" - dependencies: - async "~0.2.9" - is-type "0.0.1" - lodash.debounce "^3.1.1" - lodash.flatten "^3.0.2" - minimatch "^3.0.2" - -flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -for-in@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - 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" - -forwarded@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" - -fresh@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" - -fs-exists-sync@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" - -fs-extra@2.0.0, fs-extra@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - -fs-extra@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.24.0.tgz#d4e4342a96675cb7846633a6099249332b539952" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^0.26.0: - version "0.26.7" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-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-readdir-recursive@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" - -fs-tree-diff@^0.5.2, fs-tree-diff@^0.5.3, fs-tree-diff@^0.5.4, fs-tree-diff@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/fs-tree-diff/-/fs-tree-diff-0.5.6.tgz#342665749e8dca406800b672268c8f5073f3e623" - dependencies: - heimdalljs-logger "^0.1.7" - object-assign "^4.1.0" - path-posix "^1.0.0" - symlink-or-copy "^1.1.8" - -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.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" - -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" - -gauge@~2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" - 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" - -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.0: - 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-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.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" - dependencies: - assert-plus "^1.0.0" - -git-repo-info@^1.0.4, git-repo-info@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/git-repo-info/-/git-repo-info-1.2.0.tgz#43d8513e04a24dd441330a2f7c6655a709fdbaf2" - -git-repo-version@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/git-repo-version/-/git-repo-version-0.4.1.tgz#75fab9a0a4ec8470755b0eea7fdaa6f9d41453bf" - dependencies: - git-repo-info "~1.2.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.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^5.0.10, glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" - dependencies: - global-prefix "^0.1.4" - is-windows "^0.2.0" - -global-prefix@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" - dependencies: - homedir-polyfill "^1.0.0" - ini "^1.3.4" - is-windows "^0.2.0" - which "^1.2.12" - -globals@^6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f" - -globals@^9.0.0, globals@^9.14.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -handlebars@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -has-ansi@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" - dependencies: - ansi-regex "^0.2.0" - -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.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10" - dependencies: - isarray "0.0.1" - -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-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -hash-for-dep@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/hash-for-dep/-/hash-for-dep-1.1.2.tgz#e3347ed92960eb0bb53a2c6c2b70e36d75b7cd0c" - dependencies: - broccoli-kitchen-sink-helpers "^0.3.1" - heimdalljs "^0.2.3" - heimdalljs-logger "^0.1.7" - resolve "^1.1.6" - -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" - -heimdalljs-fs-monitor@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/heimdalljs-fs-monitor/-/heimdalljs-fs-monitor-0.1.0.tgz#d404a65688c6714c485469ed3495da4853440272" - dependencies: - heimdalljs "^0.2.0" - heimdalljs-logger "^0.1.7" - -heimdalljs-graph@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/heimdalljs-graph/-/heimdalljs-graph-0.3.3.tgz#ea801dbba659c8d522fe1cb83b2d605726e4918f" - -heimdalljs-logger@^0.1.7: - version "0.1.9" - resolved "https://registry.yarnpkg.com/heimdalljs-logger/-/heimdalljs-logger-0.1.9.tgz#d76ada4e45b7bb6f786fc9c010a68eb2e2faf176" - dependencies: - debug "^2.2.0" - heimdalljs "^0.2.0" - -heimdalljs@^0.2.0, heimdalljs@^0.2.1, heimdalljs@^0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/heimdalljs/-/heimdalljs-0.2.4.tgz#34ead16eab422c94803065d33abeba1f7b24a910" - dependencies: - rsvp "~3.2.1" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -home-or-tmp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985" - dependencies: - os-tmpdir "^1.0.1" - user-home "^1.1.1" - -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" - -homedir-polyfill@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.5: - version "2.4.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" - -http-errors@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" - dependencies: - depd "1.1.0" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-proxy@^1.13.1, http-proxy@^1.9.0: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -iconv-lite@^0.4.5, iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - -ignore@^3.2.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.7.tgz#4810ca5f1d8eca5595213a34b94f2eb4ed926bbd" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflection@^1.7.0, inflection@^1.7.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" - -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: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@^1.3.4, ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" - -inline-source-map-comment@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/inline-source-map-comment/-/inline-source-map-comment-1.0.5.tgz#50a8a44c2a790dfac441b5c94eccd5462635faf6" - dependencies: - chalk "^1.0.0" - get-stdin "^4.0.1" - minimist "^1.1.1" - sum-up "^1.0.1" - xtend "^4.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" - -inquirer@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918" - dependencies: - ansi-escapes "^1.1.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - external-editor "^1.1.0" - figures "^1.3.5" - lodash "^4.3.0" - mute-stream "0.0.6" - pinkie-promise "^2.0.0" - run-async "^2.2.0" - rx "^4.1.0" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - -interpret@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" - -invariant@^2.2.0, invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -ipaddr.js@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec" - -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: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" - -is-dotfile@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-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-git-url@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/is-git-url/-/is-git-url-0.2.3.tgz#445200d6fbd6da028fb5e01440d9afc93f3ccb64" - -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-integer@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.6.tgz#5273819fada880d123e1ac00a938e7172dd8d95e" - dependencies: - is-finite "^1.0.0" - -is-my-json-valid@^2.10.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^2.0.2, is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-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.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" - dependencies: - path-is-inside "^1.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-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-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" - -is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-type@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/is-type/-/is-type-0.0.1.tgz#f651d85c365d44955d14a51d8d7061f3f6b4779c" - dependencies: - core-util-is "~1.0.0" - -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@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - -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" - -isbinaryfile@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" - -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" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istextorbinary@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.1.0.tgz#dbed2a6f51be2f7475b68f89465811141b758874" - dependencies: - binaryextensions "1 || 2" - editions "^1.1.1" - textextensions "1 || 2" - -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" - -jquery@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" - -js-reporters@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/js-reporters/-/js-reporters-1.2.0.tgz#7cf2cb698196684790350d0c4ca07f4aed9ec17e" - -js-string-escape@^1.0.0, js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - -js-tokens@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" - -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" - -js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.5.1, js-yaml@^3.6.1: - version "3.8.3" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" - dependencies: - argparse "^1.0.7" - esprima "^3.1.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -json5@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" - dependencies: - assert-plus "1.0.0" - extsprintf "1.0.2" - json-schema "0.2.3" - verror "1.3.6" - -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" - dependencies: - is-buffer "^1.0.2" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: - graceful-fs "^4.1.9" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -leek@0.0.24: - version "0.0.24" - resolved "https://registry.yarnpkg.com/leek/-/leek-0.0.24.tgz#e400e57f0e60d8ef2bd4d068dc428a54345dbcda" - dependencies: - debug "^2.1.0" - lodash.assign "^3.2.0" - rsvp "^3.0.21" - -leven@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" - -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" - -linkify-it@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" - dependencies: - uc.micro "^1.0.1" - -linkify-it@~1.2.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-1.2.4.tgz#0773526c317c8fd13bd534ee1d180ff88abf881a" - dependencies: - uc.micro "^1.0.1" - -livereload-js@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.2.2.tgz#6c87257e648ab475bc24ea257457edcc1f8d0bc2" - -loader.js@^4.2.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader.js/-/loader.js-4.3.0.tgz#736c13eb8afdf75abd6c2d7b4f7fd40e1105a71f" - -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._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._baseflatten@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._createassigner@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" - dependencies: - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.restparam "^3.0.0" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reinterpolate@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash.assign@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" - dependencies: - lodash._baseassign "^3.0.0" - lodash._createassigner "^3.0.0" - lodash.keys "^3.0.0" - -lodash.assignin@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - -lodash.clonedeep@^4.4.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.debounce@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-3.1.1.tgz#812211c378a94cc29d5aa4e3346cf0bfce3a7df5" - dependencies: - lodash._getnative "^3.0.0" - -lodash.find@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" - -lodash.flatten@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-3.0.2.tgz#de1cf57758f8f4479319d35c3e9cc60c4501938c" - dependencies: - lodash._baseflatten "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isplainobject@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" - dependencies: - lodash._basefor "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.keysin "^3.0.0" - -lodash.istypedarray@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.keysin@^3.0.0: - version "3.0.8" - resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.merge@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._createassigner "^3.0.0" - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.isplainobject "^3.0.0" - lodash.istypedarray "^3.0.0" - lodash.keys "^3.0.0" - lodash.keysin "^3.0.0" - lodash.toplainobject "^3.0.0" - -lodash.merge@^4.3.0, lodash.merge@^4.4.0, lodash.merge@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" - -lodash.omit@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.template@^4.2.5: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" - dependencies: - lodash._reinterpolate "~3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" - dependencies: - lodash._reinterpolate "~3.0.0" - -lodash.toplainobject@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keysin "^3.0.0" - -lodash.uniq@^4.2.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - -lodash@^3.10.0, lodash@^3.10.1, lodash@^3.9.3: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@^4.0.0, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" - -lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -markdown-it-terminal@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/markdown-it-terminal/-/markdown-it-terminal-0.0.4.tgz#3f2ce624ba2ca964a78b8b388d605ee330de9ced" - dependencies: - ansi-styles "^2.1.0" - cardinal "^0.5.0" - cli-table "^0.3.1" - lodash.merge "^3.3.2" - markdown-it "^4.4.0" - -markdown-it@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-4.4.0.tgz#3df373dbea587a9a7fef3e56311b68908f75c414" - dependencies: - argparse "~1.0.2" - entities "~1.1.1" - linkify-it "~1.2.0" - mdurl "~1.0.0" - uc.micro "^1.0.0" - -markdown-it@^8.2.0: - version "8.3.1" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.3.1.tgz#2f4b622948ccdc193d66f3ca2d43125ac4ac7323" - dependencies: - argparse "^1.0.7" - entities "~1.1.1" - linkify-it "^2.0.0" - mdurl "^1.0.1" - uc.micro "^1.0.3" - -matcher-collection@^1.0.0, matcher-collection@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/matcher-collection/-/matcher-collection-1.0.4.tgz#2f66ae0869996f29e43d0b62c83dd1d43e581755" - dependencies: - minimatch "^3.0.2" - -md5-hex@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" - dependencies: - md5-o-matic "^0.1.1" - -md5-hex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" - dependencies: - md5-o-matic "^0.1.1" - -md5-o-matic@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" - -mdurl@^1.0.1, mdurl@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -memory-streams@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/memory-streams/-/memory-streams-0.1.2.tgz#273ff777ab60fec599b116355255282cca2c50c2" - dependencies: - readable-stream "~1.0.2" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^2.1.5, micromatch@^2.3.7: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -"mime-db@>= 1.27.0 < 2", mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" - -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" - dependencies: - mime-db "~1.27.0" - -mime@1.3.4, mime@^1.2.11: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - -minimatch@^2.0.3: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - dependencies: - brace-expansion "^1.0.0" - -minimist@0.0.8, minimist@~0.0.1: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -mkdirp@0.5.x, "mkdirp@>=0.5 0", 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" - -mktemp@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-0.4.0.tgz#6d0515611c8a8c84e484aa2000129b98e981ff0b" - -morgan@^1.5.2: - version "1.8.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.8.1.tgz#f93023d3887bd27b78dfd6023cea7892ee27a4b1" - dependencies: - basic-auth "~1.1.0" - debug "2.6.1" - depd "~1.1.0" - on-finished "~2.3.0" - on-headers "~1.0.1" - -mout@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mout/-/mout-1.0.0.tgz#9bdf1d4af57d66d47cb353a6335a3281098e1501" - -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@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" - -mustache@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" - -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - -mute-stream@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" - -nan@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -node-fetch@^1.3.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-modules-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.1.tgz#40096b08ce7ad0ea14680863af449c7c75a5d1c8" - -node-notifier@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" - dependencies: - growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" - -node-pre-gyp@^0.6.29: - version "0.6.34" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" - dependencies: - 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" - -nopt@^4.0.0, 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-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" - -npm-package-arg@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-4.2.1.tgz#593303fdea85f7c422775f17f9eb7670f680e3ec" - dependencies: - hosted-git-info "^2.1.5" - semver "^5.1.0" - -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@^4.0.0, npmlog@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -object-assign@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: - 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.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.3: - 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.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.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" - -ora@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - 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-shim@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, 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.1.0, osenv@^0.1.3, 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" - -output-file-sync@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" - dependencies: - graceful-fs "^4.1.4" - mkdirp "^0.5.1" - object-assign "^4.1.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.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -parse-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-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -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.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" - -path-exists@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1: - 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-posix@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" - -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" - -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" - -portfinder@^1.0.7: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -printf@^0.2.3: - version "0.2.5" - resolved "https://registry.yarnpkg.com/printf/-/printf-0.2.5.tgz#c438ca2ca33e3927671db4ab69c0e52f936a4f0f" - -private@^0.1.6, private@~0.1.5: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -process-relative-require@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-relative-require/-/process-relative-require-1.0.0.tgz#1590dfcf5b8f2983ba53e398446b68240b4cc68a" - dependencies: - node-modules-path "^1.0.0" - -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - -promise-map-series@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.2.3.tgz#c2d377afc93253f6bd03dbb77755eb88ab20a847" - dependencies: - rsvp "^3.0.14" - -proxy-addr@~1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3" - dependencies: - forwarded "~0.1.0" - ipaddr.js "1.3.0" - -pseudomap@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -q@^1.1.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" - -qs@6.4.0, qs@^6.2.0, qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -quick-temp@0.1.6, quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/quick-temp/-/quick-temp-0.1.6.tgz#a6242a15cba9f9cdbd341287b5c569e318eec307" - dependencies: - mktemp "~0.4.0" - rimraf "~2.2.6" - underscore.string "~2.3.3" - -qunit-notifications@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/qunit-notifications/-/qunit-notifications-0.1.1.tgz#3001afc6a6a77dfbd962ccbcddde12dec5286c09" - -qunitjs@^2.0.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/qunitjs/-/qunitjs-2.3.2.tgz#938ce24250aa3717b90b47598f1429b10343d85a" - dependencies: - chokidar "1.6.1" - commander "2.9.0" - exists-stat "1.0.0" - findup-sync "^0.4.3" - js-reporters "1.2.0" - walk-sync "0.3.1" - -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" - dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" - dependencies: - bytes "1" - string_decoder "0.10" - -rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.4, readable-stream@^2.2.2: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" - dependencies: - buffer-shims "~1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~1.0.0" - util-deprecate "~1.0.1" - -readable-stream@~1.0.2: - 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" - -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" - -recast@0.10.33: - version "0.10.33" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" - dependencies: - ast-types "0.8.12" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - source-map "~0.5.0" - -recast@^0.10.10: - version "0.10.43" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f" - dependencies: - ast-types "0.8.15" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - source-map "~0.5.0" - -recast@^0.11.17, recast@^0.11.3: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - -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" - -redeyed@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-0.5.0.tgz#7ab000e60ee3875ac115d29edb32c1403c6c25d1" - dependencies: - esprima-fb "~12001.1.0-dev-harmony-fb" - -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regenerator-runtime@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" - -regenerator-transform@0.9.11: - version "0.9.11" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - -regenerator@0.8.40: - version "0.8.40" - resolved "https://registry.yarnpkg.com/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8" - dependencies: - commoner "~0.10.3" - defs "~1.1.0" - esprima-fb "~15001.1001.0-dev-harmony-fb" - private "~0.1.5" - recast "0.10.33" - through "~2.3.8" - -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" - dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexpu/-/regexpu-1.3.0.tgz#e534dc991a9e5846050c98de6d7dd4a55c9ea16d" - dependencies: - esprima "^2.6.0" - recast "^0.10.10" - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^1.1.0, repeating@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" - dependencies: - is-finite "^1.0.0" - -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" - -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" - -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" - -requires-port@1.x.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - -resolve-dir@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" - dependencies: - expand-tilde "^1.2.2" - global-modules "^0.2.3" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve@^1.1.2, resolve@^1.1.6, resolve@^1.1.7: - version "1.3.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" - 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" - -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.3.2, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.3, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" - dependencies: - glob "^7.0.5" - -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - -rsvp@^3.0.14, rsvp@^3.0.16, rsvp@^3.0.17, rsvp@^3.0.18, rsvp@^3.0.21, rsvp@^3.0.6, rsvp@^3.1.0, rsvp@^3.2.1, rsvp@^3.3.3, rsvp@^3.4.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.5.0.tgz#a62c573a4ae4e1dfd0697ebc6242e79c681eaa34" - -rsvp@~3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" - -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - -rx@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" - -safe-buffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - -safe-json-parse@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" - -sane@^1.1.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" - dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.10.0" - -sanitize-filename@^1.5.3: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a" - dependencies: - truncate-utf8-bytes "^1.0.0" - -semver@^4.1.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - -semver@^5.1.0, semver@^5.1.1, semver@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -send@0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.15.1.tgz#8a02354c26e6f5cca700065f5f0cdeba90ec7b5f" - dependencies: - debug "2.6.1" - depd "~1.1.0" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.0" - fresh "0.5.0" - http-errors "~1.6.1" - mime "1.3.4" - ms "0.7.2" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" - -serve-static@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.1.tgz#7443a965e3ced647aceb5639fa06bf4d1bbe0039" - dependencies: - encodeurl "~1.0.1" - escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.15.1" - -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" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -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.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -silent-error@^1.0.0, silent-error@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.0.1.tgz#71b7d503d1c6f94882b51b56be879b113cb4822c" - dependencies: - debug "^2.2.0" - -simple-dom@^0.3.0: - version "0.3.2" - resolved "https://registry.yarnpkg.com/simple-dom/-/simple-dom-0.3.2.tgz#0663d10f1556f1500551d518f56e3aba0871371d" - -simple-fmt@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b" - -simple-is@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -socket.io-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.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.6.0.tgz#5b668f4f771304dfeed179064708386fa6717853" - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "2.3.3" - engine.io-client "1.8.0" - 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.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.6.0.tgz#3e40d932637e6bd923981b25caf7c53e83b6e2e1" - dependencies: - debug "2.3.3" - engine.io "1.8.0" - has-binary "0.1.7" - object-assign "4.1.0" - socket.io-adapter "0.5.0" - socket.io-client "1.6.0" - socket.io-parser "2.3.1" - -sort-object-keys@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.2.tgz#d3a6c48dc2ac97e6bc94367696e03f6d09d37952" - -sort-package-json@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-1.6.0.tgz#4aaf4d24a13252941e28a80f5a306eb5dcac1ab0" - dependencies: - sort-object-keys "^1.1.1" - -source-map-support@^0.2.10: - version "0.2.10" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc" - dependencies: - source-map "0.1.32" - -source-map-support@^0.4.2: - version "0.4.14" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" - dependencies: - source-map "^0.5.6" - -source-map-url@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" - -source-map@0.1.32: - version "0.1.32" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" - dependencies: - amdefine ">=0.0.4" - -source-map@0.4.x, source-map@^0.4.2, source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - -spawn-args@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/spawn-args/-/spawn-args-0.2.0.tgz#fb7d0bd1d70fd4316bd9e3dec389e65f9d6361bb" - -spawn-sync@^1.0.15: - version "1.0.15" - resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" - dependencies: - concat-stream "^1.4.7" - os-shim "^0.1.2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sri-toolbox@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/sri-toolbox/-/sri-toolbox-0.2.0.tgz#a7fea5c3fde55e675cf1c8c06f3ebb5c2935835e" - -sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stable@~0.1.3: - version "0.1.6" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.6.tgz#910f5d2aed7b520c6e777499c1f32e139fdecb10" - -"statuses@>= 1.3.1 < 2", statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - -string-width@^1.0.1: - 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.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" - -string_decoder@0.10, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string_decoder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" - dependencies: - buffer-shims "~1.0.0" - -stringmap@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1" - -stringset@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz#ef259c4e349344377fcd1c913dd2e848c9c042b5" - -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - -strip-ansi@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" - dependencies: - ansi-regex "^0.2.1" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-bom@^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-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" - -styled_string@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" - -sum-up@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e" - dependencies: - chalk "^1.0.0" - -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -symlink-or-copy@^1.0.0, symlink-or-copy@^1.0.1, symlink-or-copy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.1.8.tgz#cabe61e0010c1c023c173b25ee5108b37f4b4aa3" - -sync-exec@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/sync-exec/-/sync-exec-0.6.2.tgz#717d22cc53f0ce1def5594362f3a89a2ebb91105" - -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" - -tap-parser@^5.1.0: - version "5.3.3" - resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-5.3.3.tgz#53ec8a90f275d6fff43f169e56a679502a741185" - dependencies: - events-to-array "^1.0.1" - js-yaml "^3.2.7" - optionalDependencies: - readable-stream "^2" - -tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" - 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.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" - -temp@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - -testem@^1.8.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/testem/-/testem-1.16.0.tgz#3933040b5d5b5fbdb6a2b1e7032e511b54a05867" - dependencies: - backbone "^1.1.2" - bluebird "^3.4.6" - charm "^1.0.0" - commander "^2.6.0" - consolidate "^0.14.0" - cross-spawn "^5.1.0" - express "^4.10.7" - fireworm "^0.7.0" - glob "^7.0.4" - http-proxy "^1.13.1" - js-yaml "^3.2.5" - lodash.assignin "^4.1.0" - lodash.clonedeep "^4.4.1" - lodash.find "^4.5.1" - lodash.uniqby "^4.7.0" - mkdirp "^0.5.1" - mustache "^2.2.1" - node-notifier "^5.0.1" - npmlog "^4.0.0" - printf "^0.2.3" - rimraf "^2.4.4" - socket.io "1.6.0" - spawn-args "^0.2.0" - styled_string "0.0.1" - tap-parser "^5.1.0" - xmldom "^0.1.19" - -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -"textextensions@1 || 2": - version "2.0.1" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.0.1.tgz#be8cf22d65379c151319f88f0335ad8f667abdca" - -through@^2.3.6, through@^2.3.8, through@~2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -tiny-lr@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.0.3.tgz#386731170ce521263a9d337f769ee8f11e88eb04" - dependencies: - body "^5.1.0" - debug "~2.2.0" - faye-websocket "~0.10.0" - livereload-js "^2.2.2" - object-assign "^4.1.0" - qs "^6.2.0" - -tmp@0.0.28: - version "0.0.28" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" - dependencies: - os-tmpdir "~1.0.1" - -tmp@^0.0.29: - version "0.0.29" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" - dependencies: - os-tmpdir "~1.0.1" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - -to-fast-properties@^1.0.0, to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" - -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" - dependencies: - punycode "^1.4.1" - -tree-sync@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.2.2.tgz#2cf76b8589f59ffedb58db5a3ac7cb013d0158b7" - dependencies: - debug "^2.2.0" - fs-tree-diff "^0.5.6" - mkdirp "^0.5.1" - quick-temp "^0.1.5" - walk-sync "^0.2.7" - -trim-right@^1.0.0, trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - dependencies: - utf8-byte-length "^1.0.1" - -try-resolve@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" - -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - -tryor@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.14: - version "1.6.15" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.15" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -uc.micro@^1.0.0, uc.micro@^1.0.1, uc.micro@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" - -uglify-js@^2.6, uglify-js@^2.7.0: - version "2.8.22" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -uid-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.string@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" - -underscore@>=1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -untildify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0" - dependencies: - os-homedir "^1.0.0" - -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - -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" - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -utils-merge@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" - -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -vary@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" - -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" - dependencies: - extsprintf "1.0.2" - -walk-sync@0.3.1, walk-sync@^0.3.0, walk-sync@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.3.1.tgz#558a16aeac8c0db59c028b73c66f397684ece465" - dependencies: - ensure-posix-path "^1.0.0" - matcher-collection "^1.0.0" - -walk-sync@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.1.3.tgz#8a07261a00bda6cfb1be25e9f100fad57546f583" - -walk-sync@^0.2.5, walk-sync@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/walk-sync/-/walk-sync-0.2.7.tgz#b49be4ee6867657aeb736978b56a29d10fa39969" - dependencies: - ensure-posix-path "^1.0.0" - matcher-collection "^1.0.0" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" - -websocket-driver@>=0.5.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - dependencies: - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" - -which@^1.2.12, which@^1.2.9: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" - dependencies: - string-width "^1.0.1" - -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.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - -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" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write-file-atomic@^1.1.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -ws@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018" - 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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" - dependencies: - os-homedir "^1.0.0" - -xmldom@^0.1.19: - version "0.1.27" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" - -xmlhttprequest-ssl@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" - -xtend@^4.0.0, xtend@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yam@0.0.22: - version "0.0.22" - resolved "https://registry.yarnpkg.com/yam/-/yam-0.0.22.tgz#38a76cb79a19284d9206ed49031e359a1340bd06" - dependencies: - fs-extra "^0.30.0" - lodash.merge "^4.4.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" - -yargs@~3.27.0: - version "3.27.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40" - dependencies: - camelcase "^1.2.1" - cliui "^2.1.0" - decamelize "^1.0.0" - os-locale "^1.4.0" - window-size "^0.1.2" - y18n "^3.2.0" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" diff --git a/crossdomain.xml b/crossdomain.xml deleted file mode 100644 index 0c16a7a..0000000 --- a/crossdomain.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/fonts/glyphicons-halflings-regular.eot b/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index b93a4953fff68df523aa7656497ee339d6026d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20127 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/fonts/glyphicons-halflings-regular.ttf b/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc609ab6f21774de0cb7e01360095584f65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45404 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 G`u_lkUM?>H diff --git a/fonts/glyphicons-halflings-regular.woff2 b/fonts/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18028 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 diff --git a/google8b48bc100ead68b2.html b/google8b48bc100ead68b2.html deleted file mode 100644 index a51964e..0000000 --- a/google8b48bc100ead68b2.html +++ /dev/null @@ -1 +0,0 @@ -google-site-verification: google8b48bc100ead68b2.html \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index 67f6fd6..0000000 --- a/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - The bfcoder - - - - - - - - - - - - - - - - - - - - - diff --git a/robots.txt b/robots.txt deleted file mode 100644 index f591645..0000000 --- a/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# http://www.robotstxt.org -User-agent: * -Disallow: From 8fbcfbeba32561f432570451cd7f6c10dbba6381 Mon Sep 17 00:00:00 2001 From: James Carbine Date: Sun, 1 Oct 2017 18:18:26 -0600 Subject: [PATCH 450/452] Remove flow --- .flowconfig | 10 ----- client/apps/hello_world/components/home.jsx | 2 - .../hello_world/components/layout/index.jsx | 1 - client/config/webpack.config.js | 2 - client/libs/plugins/flow_compiler.js | 45 ------------------- client/package.json | 1 - client/yarn.lock | 4 -- 7 files changed, 65 deletions(-) delete mode 100644 .flowconfig delete mode 100644 client/libs/plugins/flow_compiler.js diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 97c0e59..0000000 --- a/.flowconfig +++ /dev/null @@ -1,10 +0,0 @@ -[ignore] -.*/node_modules/.* -.*/apps/.* -[include] - -[libs] - -[lints] - -[options] diff --git a/client/apps/hello_world/components/home.jsx b/client/apps/hello_world/components/home.jsx index 7d71df8..1927545 100644 --- a/client/apps/hello_world/components/home.jsx +++ b/client/apps/hello_world/components/home.jsx @@ -1,5 +1,3 @@ -// @flow - import * as React from 'react'; import assets from '../libs/assets'; diff --git a/client/apps/hello_world/components/layout/index.jsx b/client/apps/hello_world/components/layout/index.jsx index bb585de..e3ad5d3 100644 --- a/client/apps/hello_world/components/layout/index.jsx +++ b/client/apps/hello_world/components/layout/index.jsx @@ -1,4 +1,3 @@ -// @flow import * as React from 'react'; type Props = { diff --git a/client/config/webpack.config.js b/client/config/webpack.config.js index a3d1f4a..0de6df8 100644 --- a/client/config/webpack.config.js +++ b/client/config/webpack.config.js @@ -6,7 +6,6 @@ const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPl const AssetsPlugin = require('assets-webpack-plugin'); const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin'); const HtmlBuilderPlugin = require('../libs/plugins/html_builder'); -const FlowCompilerPlugin = require('../libs/plugins/flow_compiler'); const _ = require('lodash'); // @@ -115,7 +114,6 @@ module.exports = function webpackConfig(app, options = {}) { plugins = _.concat(plugins, [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': '"development"', __DEV__: true }), new FriendlyErrorsPlugin({ clearConsole: false }), - new FlowCompilerPlugin(app), ]); } diff --git a/client/libs/plugins/flow_compiler.js b/client/libs/plugins/flow_compiler.js deleted file mode 100644 index a633819..0000000 --- a/client/libs/plugins/flow_compiler.js +++ /dev/null @@ -1,45 +0,0 @@ -const execFile = require('child_process').execFile; -const output = require('friendly-errors-webpack-plugin/src/output'); - -module.exports = class FlowCompilerPlugin { - constructor(app, options) { - this.app = app; - this.options = options; - this.promise = new Promise(() => {}); - } - - apply(compiler) { - this.promise = this.flowCheckTypes(); - compiler.plugin('after-emit', (compilation, callback) => { - this.promise.then((res) => { - if (res.error) { - output.title('info', 'FLOW ERROR', 'There was a flow type error'); - output.log(res.out); - } else { - output.title('success', 'FLOW SUCCESS', 'No type errors found'); - } - // eventually we will could provide the option to fail the build - // when flow fails - callback(); - }); - }); - compiler.plugin('invalid', () => { - this.promise = this.flowCheckTypes(); - }); - } - - flowCheckTypes() { - return new Promise((resolve) => { - execFile( - require('flow-bin'), - [this.app.path, '--show-all-errors'], - (error, out) => { - resolve({ - out, - error, - }); - } - ); - }); - } -}; diff --git a/client/package.json b/client/package.json index aa1be2d..c67a930 100644 --- a/client/package.json +++ b/client/package.json @@ -41,7 +41,6 @@ "express": "^4.15.3", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^0.11.2", - "flow-bin": "^0.54.0", "friendly-errors-webpack-plugin": "^1.6.1", "front-matter": "^2.1.1", "fs-extra": "^3.0.1", diff --git a/client/yarn.lock b/client/yarn.lock index 0117713..511e371 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -3145,10 +3145,6 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -flow-bin@^0.54.0: - version "0.54.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.54.0.tgz#f2fb0478e9e99702b623c9ed84079a39903bba77" - for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" From ae6d0386c33798d49743bcc4f04fc77a9155206d Mon Sep 17 00:00:00 2001 From: James Carbine Date: Sun, 1 Oct 2017 18:24:40 -0600 Subject: [PATCH 451/452] rename hello_world to bfcoder_github_com --- .travis.yml | 2 +- .../{hello_world => bfcoder_github_com}/.flowconfig | 0 .../{hello_world => bfcoder_github_com}/app.jsx | 0 .../assets/images/atomicjolt.jpg | Bin .../assets/images/atomicjolt.png | Bin .../assets/images/atomicjolt.svg | 0 .../components/common/not_found.jsx | 0 .../components/common/not_found.spec.jsx | 0 .../components/home.jsx | 0 .../components/home.spec.jsx | 0 .../components/layout/index.jsx | 0 .../components/layout/index.spec.jsx | 0 .../config/jest_config.json | 0 .../config/setup_tests.js | 0 .../{hello_world => bfcoder_github_com}/history.js | 0 .../html/404.html | 0 .../html/about.md | 0 .../html/crossdomain.xml | 0 .../html/humans.txt | 0 client/apps/bfcoder_github_com/html/index.html | 4 ++++ .../html/layouts/application.html | 0 .../html/layouts/partials/_google_analytics.html | 0 .../html/layouts/partials/_head.html | 4 ++-- .../html/layouts/partials/_header.html | 0 .../html/robots.txt | 0 .../libs/__mocks__/assets.js | 0 .../libs/assets.js | 0 .../libs/assets.spec.js | 0 .../middleware/api.js | 0 .../package.json | 0 .../reducers/application.js | 0 .../reducers/application.spec.js | 0 .../reducers/index.js | 0 .../{hello_world => bfcoder_github_com}/routes.jsx | 0 .../static/.keep | 0 .../static/android-icon-144x144.png | Bin .../static/android-icon-192x192.png | Bin .../static/android-icon-36x36.png | Bin .../static/android-icon-48x48.png | Bin .../static/android-icon-72x72.png | Bin .../static/android-icon-96x96.png | Bin .../static/apple-icon-114x114.png | Bin .../static/apple-icon-120x120.png | Bin .../static/apple-icon-144x144.png | Bin .../static/apple-icon-152x152.png | Bin .../static/apple-icon-180x180.png | Bin .../static/apple-icon-57x57.png | Bin .../static/apple-icon-60x60.png | Bin .../static/apple-icon-72x72.png | Bin .../static/apple-icon-76x76.png | Bin .../static/apple-icon-precomposed.png | Bin .../static/apple-icon.png | Bin .../static/browserconfig.xml | 0 .../static/favicon-16x16.png | Bin .../static/favicon-32x32.png | Bin .../static/favicon-96x96.png | Bin .../static/favicon.ico | Bin .../static/manifest.json | 0 .../static/ms-icon-144x144.png | Bin .../static/ms-icon-150x150.png | Bin .../static/ms-icon-310x310.png | Bin .../static/ms-icon-70x70.png | Bin .../store/configure_store.js | 0 .../styles/.csscomb.json | 0 .../styles/.csslintrc | 0 .../styles/_defines.scss | 0 .../styles/fonts/roboto-bold-webfont.woff | Bin .../styles/fonts/roboto-bold-webfont.woff2 | Bin .../styles/fonts/roboto-regular-webfont.woff | Bin .../styles/fonts/roboto-regular-webfont.woff2 | Bin .../styles/modules/_mixins.scss | 0 .../styles/styles.js | 0 .../styles/styles.less | 0 .../styles/styles.scss | 0 .../{hello_world => bfcoder_github_com}/yarn.lock | 0 client/apps/hello_world/html/index.html | 4 ---- 76 files changed, 7 insertions(+), 7 deletions(-) rename client/apps/{hello_world => bfcoder_github_com}/.flowconfig (100%) rename client/apps/{hello_world => bfcoder_github_com}/app.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/assets/images/atomicjolt.jpg (100%) rename client/apps/{hello_world => bfcoder_github_com}/assets/images/atomicjolt.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/assets/images/atomicjolt.svg (100%) rename client/apps/{hello_world => bfcoder_github_com}/components/common/not_found.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/components/common/not_found.spec.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/components/home.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/components/home.spec.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/components/layout/index.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/components/layout/index.spec.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/config/jest_config.json (100%) rename client/apps/{hello_world => bfcoder_github_com}/config/setup_tests.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/history.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/html/404.html (100%) rename client/apps/{hello_world => bfcoder_github_com}/html/about.md (100%) rename client/apps/{hello_world => bfcoder_github_com}/html/crossdomain.xml (100%) rename client/apps/{hello_world => bfcoder_github_com}/html/humans.txt (100%) create mode 100644 client/apps/bfcoder_github_com/html/index.html rename client/apps/{hello_world => bfcoder_github_com}/html/layouts/application.html (100%) rename client/apps/{hello_world => bfcoder_github_com}/html/layouts/partials/_google_analytics.html (100%) rename client/apps/{hello_world => bfcoder_github_com}/html/layouts/partials/_head.html (93%) rename client/apps/{hello_world => bfcoder_github_com}/html/layouts/partials/_header.html (100%) rename client/apps/{hello_world => bfcoder_github_com}/html/robots.txt (100%) rename client/apps/{hello_world => bfcoder_github_com}/libs/__mocks__/assets.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/libs/assets.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/libs/assets.spec.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/middleware/api.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/package.json (100%) rename client/apps/{hello_world => bfcoder_github_com}/reducers/application.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/reducers/application.spec.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/reducers/index.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/routes.jsx (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/.keep (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/android-icon-144x144.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/android-icon-192x192.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/android-icon-36x36.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/android-icon-48x48.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/android-icon-72x72.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/android-icon-96x96.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-114x114.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-120x120.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-144x144.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-152x152.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-180x180.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-57x57.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-60x60.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-72x72.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-76x76.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon-precomposed.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/apple-icon.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/browserconfig.xml (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/favicon-16x16.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/favicon-32x32.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/favicon-96x96.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/favicon.ico (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/manifest.json (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/ms-icon-144x144.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/ms-icon-150x150.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/ms-icon-310x310.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/static/ms-icon-70x70.png (100%) rename client/apps/{hello_world => bfcoder_github_com}/store/configure_store.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/.csscomb.json (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/.csslintrc (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/_defines.scss (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/fonts/roboto-bold-webfont.woff (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/fonts/roboto-bold-webfont.woff2 (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/fonts/roboto-regular-webfont.woff (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/fonts/roboto-regular-webfont.woff2 (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/modules/_mixins.scss (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/styles.js (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/styles.less (100%) rename client/apps/{hello_world => bfcoder_github_com}/styles/styles.scss (100%) rename client/apps/{hello_world => bfcoder_github_com}/yarn.lock (100%) delete mode 100644 client/apps/hello_world/html/index.html diff --git a/.travis.yml b/.travis.yml index cc4d75c..f3b5837 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ cache: directories: - node_modules - client/node_modules - - client/apps/hello_world/node_modules + - client/apps/bfcoder_github_com/node_modules branches: only: diff --git a/client/apps/hello_world/.flowconfig b/client/apps/bfcoder_github_com/.flowconfig similarity index 100% rename from client/apps/hello_world/.flowconfig rename to client/apps/bfcoder_github_com/.flowconfig diff --git a/client/apps/hello_world/app.jsx b/client/apps/bfcoder_github_com/app.jsx similarity index 100% rename from client/apps/hello_world/app.jsx rename to client/apps/bfcoder_github_com/app.jsx diff --git a/client/apps/hello_world/assets/images/atomicjolt.jpg b/client/apps/bfcoder_github_com/assets/images/atomicjolt.jpg similarity index 100% rename from client/apps/hello_world/assets/images/atomicjolt.jpg rename to client/apps/bfcoder_github_com/assets/images/atomicjolt.jpg diff --git a/client/apps/hello_world/assets/images/atomicjolt.png b/client/apps/bfcoder_github_com/assets/images/atomicjolt.png similarity index 100% rename from client/apps/hello_world/assets/images/atomicjolt.png rename to client/apps/bfcoder_github_com/assets/images/atomicjolt.png diff --git a/client/apps/hello_world/assets/images/atomicjolt.svg b/client/apps/bfcoder_github_com/assets/images/atomicjolt.svg similarity index 100% rename from client/apps/hello_world/assets/images/atomicjolt.svg rename to client/apps/bfcoder_github_com/assets/images/atomicjolt.svg diff --git a/client/apps/hello_world/components/common/not_found.jsx b/client/apps/bfcoder_github_com/components/common/not_found.jsx similarity index 100% rename from client/apps/hello_world/components/common/not_found.jsx rename to client/apps/bfcoder_github_com/components/common/not_found.jsx diff --git a/client/apps/hello_world/components/common/not_found.spec.jsx b/client/apps/bfcoder_github_com/components/common/not_found.spec.jsx similarity index 100% rename from client/apps/hello_world/components/common/not_found.spec.jsx rename to client/apps/bfcoder_github_com/components/common/not_found.spec.jsx diff --git a/client/apps/hello_world/components/home.jsx b/client/apps/bfcoder_github_com/components/home.jsx similarity index 100% rename from client/apps/hello_world/components/home.jsx rename to client/apps/bfcoder_github_com/components/home.jsx diff --git a/client/apps/hello_world/components/home.spec.jsx b/client/apps/bfcoder_github_com/components/home.spec.jsx similarity index 100% rename from client/apps/hello_world/components/home.spec.jsx rename to client/apps/bfcoder_github_com/components/home.spec.jsx diff --git a/client/apps/hello_world/components/layout/index.jsx b/client/apps/bfcoder_github_com/components/layout/index.jsx similarity index 100% rename from client/apps/hello_world/components/layout/index.jsx rename to client/apps/bfcoder_github_com/components/layout/index.jsx diff --git a/client/apps/hello_world/components/layout/index.spec.jsx b/client/apps/bfcoder_github_com/components/layout/index.spec.jsx similarity index 100% rename from client/apps/hello_world/components/layout/index.spec.jsx rename to client/apps/bfcoder_github_com/components/layout/index.spec.jsx diff --git a/client/apps/hello_world/config/jest_config.json b/client/apps/bfcoder_github_com/config/jest_config.json similarity index 100% rename from client/apps/hello_world/config/jest_config.json rename to client/apps/bfcoder_github_com/config/jest_config.json diff --git a/client/apps/hello_world/config/setup_tests.js b/client/apps/bfcoder_github_com/config/setup_tests.js similarity index 100% rename from client/apps/hello_world/config/setup_tests.js rename to client/apps/bfcoder_github_com/config/setup_tests.js diff --git a/client/apps/hello_world/history.js b/client/apps/bfcoder_github_com/history.js similarity index 100% rename from client/apps/hello_world/history.js rename to client/apps/bfcoder_github_com/history.js diff --git a/client/apps/hello_world/html/404.html b/client/apps/bfcoder_github_com/html/404.html similarity index 100% rename from client/apps/hello_world/html/404.html rename to client/apps/bfcoder_github_com/html/404.html diff --git a/client/apps/hello_world/html/about.md b/client/apps/bfcoder_github_com/html/about.md similarity index 100% rename from client/apps/hello_world/html/about.md rename to client/apps/bfcoder_github_com/html/about.md diff --git a/client/apps/hello_world/html/crossdomain.xml b/client/apps/bfcoder_github_com/html/crossdomain.xml similarity index 100% rename from client/apps/hello_world/html/crossdomain.xml rename to client/apps/bfcoder_github_com/html/crossdomain.xml diff --git a/client/apps/hello_world/html/humans.txt b/client/apps/bfcoder_github_com/html/humans.txt similarity index 100% rename from client/apps/hello_world/html/humans.txt rename to client/apps/bfcoder_github_com/html/humans.txt diff --git a/client/apps/bfcoder_github_com/html/index.html b/client/apps/bfcoder_github_com/html/index.html new file mode 100644 index 0000000..722ac08 --- /dev/null +++ b/client/apps/bfcoder_github_com/html/index.html @@ -0,0 +1,4 @@ +
    + + + diff --git a/client/apps/hello_world/html/layouts/application.html b/client/apps/bfcoder_github_com/html/layouts/application.html similarity index 100% rename from client/apps/hello_world/html/layouts/application.html rename to client/apps/bfcoder_github_com/html/layouts/application.html diff --git a/client/apps/hello_world/html/layouts/partials/_google_analytics.html b/client/apps/bfcoder_github_com/html/layouts/partials/_google_analytics.html similarity index 100% rename from client/apps/hello_world/html/layouts/partials/_google_analytics.html rename to client/apps/bfcoder_github_com/html/layouts/partials/_google_analytics.html diff --git a/client/apps/hello_world/html/layouts/partials/_head.html b/client/apps/bfcoder_github_com/html/layouts/partials/_head.html similarity index 93% rename from client/apps/hello_world/html/layouts/partials/_head.html rename to client/apps/bfcoder_github_com/html/layouts/partials/_head.html index ea53009..b7831de 100644 --- a/client/apps/hello_world/html/layouts/partials/_head.html +++ b/client/apps/bfcoder_github_com/html/layouts/partials/_head.html @@ -9,7 +9,7 @@ }; window.DEFAULT_JWT = {}; - + @@ -26,4 +26,4 @@ - \ No newline at end of file + diff --git a/client/apps/hello_world/html/layouts/partials/_header.html b/client/apps/bfcoder_github_com/html/layouts/partials/_header.html similarity index 100% rename from client/apps/hello_world/html/layouts/partials/_header.html rename to client/apps/bfcoder_github_com/html/layouts/partials/_header.html diff --git a/client/apps/hello_world/html/robots.txt b/client/apps/bfcoder_github_com/html/robots.txt similarity index 100% rename from client/apps/hello_world/html/robots.txt rename to client/apps/bfcoder_github_com/html/robots.txt diff --git a/client/apps/hello_world/libs/__mocks__/assets.js b/client/apps/bfcoder_github_com/libs/__mocks__/assets.js similarity index 100% rename from client/apps/hello_world/libs/__mocks__/assets.js rename to client/apps/bfcoder_github_com/libs/__mocks__/assets.js diff --git a/client/apps/hello_world/libs/assets.js b/client/apps/bfcoder_github_com/libs/assets.js similarity index 100% rename from client/apps/hello_world/libs/assets.js rename to client/apps/bfcoder_github_com/libs/assets.js diff --git a/client/apps/hello_world/libs/assets.spec.js b/client/apps/bfcoder_github_com/libs/assets.spec.js similarity index 100% rename from client/apps/hello_world/libs/assets.spec.js rename to client/apps/bfcoder_github_com/libs/assets.spec.js diff --git a/client/apps/hello_world/middleware/api.js b/client/apps/bfcoder_github_com/middleware/api.js similarity index 100% rename from client/apps/hello_world/middleware/api.js rename to client/apps/bfcoder_github_com/middleware/api.js diff --git a/client/apps/hello_world/package.json b/client/apps/bfcoder_github_com/package.json similarity index 100% rename from client/apps/hello_world/package.json rename to client/apps/bfcoder_github_com/package.json diff --git a/client/apps/hello_world/reducers/application.js b/client/apps/bfcoder_github_com/reducers/application.js similarity index 100% rename from client/apps/hello_world/reducers/application.js rename to client/apps/bfcoder_github_com/reducers/application.js diff --git a/client/apps/hello_world/reducers/application.spec.js b/client/apps/bfcoder_github_com/reducers/application.spec.js similarity index 100% rename from client/apps/hello_world/reducers/application.spec.js rename to client/apps/bfcoder_github_com/reducers/application.spec.js diff --git a/client/apps/hello_world/reducers/index.js b/client/apps/bfcoder_github_com/reducers/index.js similarity index 100% rename from client/apps/hello_world/reducers/index.js rename to client/apps/bfcoder_github_com/reducers/index.js diff --git a/client/apps/hello_world/routes.jsx b/client/apps/bfcoder_github_com/routes.jsx similarity index 100% rename from client/apps/hello_world/routes.jsx rename to client/apps/bfcoder_github_com/routes.jsx diff --git a/client/apps/hello_world/static/.keep b/client/apps/bfcoder_github_com/static/.keep similarity index 100% rename from client/apps/hello_world/static/.keep rename to client/apps/bfcoder_github_com/static/.keep diff --git a/client/apps/hello_world/static/android-icon-144x144.png b/client/apps/bfcoder_github_com/static/android-icon-144x144.png similarity index 100% rename from client/apps/hello_world/static/android-icon-144x144.png rename to client/apps/bfcoder_github_com/static/android-icon-144x144.png diff --git a/client/apps/hello_world/static/android-icon-192x192.png b/client/apps/bfcoder_github_com/static/android-icon-192x192.png similarity index 100% rename from client/apps/hello_world/static/android-icon-192x192.png rename to client/apps/bfcoder_github_com/static/android-icon-192x192.png diff --git a/client/apps/hello_world/static/android-icon-36x36.png b/client/apps/bfcoder_github_com/static/android-icon-36x36.png similarity index 100% rename from client/apps/hello_world/static/android-icon-36x36.png rename to client/apps/bfcoder_github_com/static/android-icon-36x36.png diff --git a/client/apps/hello_world/static/android-icon-48x48.png b/client/apps/bfcoder_github_com/static/android-icon-48x48.png similarity index 100% rename from client/apps/hello_world/static/android-icon-48x48.png rename to client/apps/bfcoder_github_com/static/android-icon-48x48.png diff --git a/client/apps/hello_world/static/android-icon-72x72.png b/client/apps/bfcoder_github_com/static/android-icon-72x72.png similarity index 100% rename from client/apps/hello_world/static/android-icon-72x72.png rename to client/apps/bfcoder_github_com/static/android-icon-72x72.png diff --git a/client/apps/hello_world/static/android-icon-96x96.png b/client/apps/bfcoder_github_com/static/android-icon-96x96.png similarity index 100% rename from client/apps/hello_world/static/android-icon-96x96.png rename to client/apps/bfcoder_github_com/static/android-icon-96x96.png diff --git a/client/apps/hello_world/static/apple-icon-114x114.png b/client/apps/bfcoder_github_com/static/apple-icon-114x114.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-114x114.png rename to client/apps/bfcoder_github_com/static/apple-icon-114x114.png diff --git a/client/apps/hello_world/static/apple-icon-120x120.png b/client/apps/bfcoder_github_com/static/apple-icon-120x120.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-120x120.png rename to client/apps/bfcoder_github_com/static/apple-icon-120x120.png diff --git a/client/apps/hello_world/static/apple-icon-144x144.png b/client/apps/bfcoder_github_com/static/apple-icon-144x144.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-144x144.png rename to client/apps/bfcoder_github_com/static/apple-icon-144x144.png diff --git a/client/apps/hello_world/static/apple-icon-152x152.png b/client/apps/bfcoder_github_com/static/apple-icon-152x152.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-152x152.png rename to client/apps/bfcoder_github_com/static/apple-icon-152x152.png diff --git a/client/apps/hello_world/static/apple-icon-180x180.png b/client/apps/bfcoder_github_com/static/apple-icon-180x180.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-180x180.png rename to client/apps/bfcoder_github_com/static/apple-icon-180x180.png diff --git a/client/apps/hello_world/static/apple-icon-57x57.png b/client/apps/bfcoder_github_com/static/apple-icon-57x57.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-57x57.png rename to client/apps/bfcoder_github_com/static/apple-icon-57x57.png diff --git a/client/apps/hello_world/static/apple-icon-60x60.png b/client/apps/bfcoder_github_com/static/apple-icon-60x60.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-60x60.png rename to client/apps/bfcoder_github_com/static/apple-icon-60x60.png diff --git a/client/apps/hello_world/static/apple-icon-72x72.png b/client/apps/bfcoder_github_com/static/apple-icon-72x72.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-72x72.png rename to client/apps/bfcoder_github_com/static/apple-icon-72x72.png diff --git a/client/apps/hello_world/static/apple-icon-76x76.png b/client/apps/bfcoder_github_com/static/apple-icon-76x76.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-76x76.png rename to client/apps/bfcoder_github_com/static/apple-icon-76x76.png diff --git a/client/apps/hello_world/static/apple-icon-precomposed.png b/client/apps/bfcoder_github_com/static/apple-icon-precomposed.png similarity index 100% rename from client/apps/hello_world/static/apple-icon-precomposed.png rename to client/apps/bfcoder_github_com/static/apple-icon-precomposed.png diff --git a/client/apps/hello_world/static/apple-icon.png b/client/apps/bfcoder_github_com/static/apple-icon.png similarity index 100% rename from client/apps/hello_world/static/apple-icon.png rename to client/apps/bfcoder_github_com/static/apple-icon.png diff --git a/client/apps/hello_world/static/browserconfig.xml b/client/apps/bfcoder_github_com/static/browserconfig.xml similarity index 100% rename from client/apps/hello_world/static/browserconfig.xml rename to client/apps/bfcoder_github_com/static/browserconfig.xml diff --git a/client/apps/hello_world/static/favicon-16x16.png b/client/apps/bfcoder_github_com/static/favicon-16x16.png similarity index 100% rename from client/apps/hello_world/static/favicon-16x16.png rename to client/apps/bfcoder_github_com/static/favicon-16x16.png diff --git a/client/apps/hello_world/static/favicon-32x32.png b/client/apps/bfcoder_github_com/static/favicon-32x32.png similarity index 100% rename from client/apps/hello_world/static/favicon-32x32.png rename to client/apps/bfcoder_github_com/static/favicon-32x32.png diff --git a/client/apps/hello_world/static/favicon-96x96.png b/client/apps/bfcoder_github_com/static/favicon-96x96.png similarity index 100% rename from client/apps/hello_world/static/favicon-96x96.png rename to client/apps/bfcoder_github_com/static/favicon-96x96.png diff --git a/client/apps/hello_world/static/favicon.ico b/client/apps/bfcoder_github_com/static/favicon.ico similarity index 100% rename from client/apps/hello_world/static/favicon.ico rename to client/apps/bfcoder_github_com/static/favicon.ico diff --git a/client/apps/hello_world/static/manifest.json b/client/apps/bfcoder_github_com/static/manifest.json similarity index 100% rename from client/apps/hello_world/static/manifest.json rename to client/apps/bfcoder_github_com/static/manifest.json diff --git a/client/apps/hello_world/static/ms-icon-144x144.png b/client/apps/bfcoder_github_com/static/ms-icon-144x144.png similarity index 100% rename from client/apps/hello_world/static/ms-icon-144x144.png rename to client/apps/bfcoder_github_com/static/ms-icon-144x144.png diff --git a/client/apps/hello_world/static/ms-icon-150x150.png b/client/apps/bfcoder_github_com/static/ms-icon-150x150.png similarity index 100% rename from client/apps/hello_world/static/ms-icon-150x150.png rename to client/apps/bfcoder_github_com/static/ms-icon-150x150.png diff --git a/client/apps/hello_world/static/ms-icon-310x310.png b/client/apps/bfcoder_github_com/static/ms-icon-310x310.png similarity index 100% rename from client/apps/hello_world/static/ms-icon-310x310.png rename to client/apps/bfcoder_github_com/static/ms-icon-310x310.png diff --git a/client/apps/hello_world/static/ms-icon-70x70.png b/client/apps/bfcoder_github_com/static/ms-icon-70x70.png similarity index 100% rename from client/apps/hello_world/static/ms-icon-70x70.png rename to client/apps/bfcoder_github_com/static/ms-icon-70x70.png diff --git a/client/apps/hello_world/store/configure_store.js b/client/apps/bfcoder_github_com/store/configure_store.js similarity index 100% rename from client/apps/hello_world/store/configure_store.js rename to client/apps/bfcoder_github_com/store/configure_store.js diff --git a/client/apps/hello_world/styles/.csscomb.json b/client/apps/bfcoder_github_com/styles/.csscomb.json similarity index 100% rename from client/apps/hello_world/styles/.csscomb.json rename to client/apps/bfcoder_github_com/styles/.csscomb.json diff --git a/client/apps/hello_world/styles/.csslintrc b/client/apps/bfcoder_github_com/styles/.csslintrc similarity index 100% rename from client/apps/hello_world/styles/.csslintrc rename to client/apps/bfcoder_github_com/styles/.csslintrc diff --git a/client/apps/hello_world/styles/_defines.scss b/client/apps/bfcoder_github_com/styles/_defines.scss similarity index 100% rename from client/apps/hello_world/styles/_defines.scss rename to client/apps/bfcoder_github_com/styles/_defines.scss diff --git a/client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff b/client/apps/bfcoder_github_com/styles/fonts/roboto-bold-webfont.woff similarity index 100% rename from client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff rename to client/apps/bfcoder_github_com/styles/fonts/roboto-bold-webfont.woff diff --git a/client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff2 b/client/apps/bfcoder_github_com/styles/fonts/roboto-bold-webfont.woff2 similarity index 100% rename from client/apps/hello_world/styles/fonts/roboto-bold-webfont.woff2 rename to client/apps/bfcoder_github_com/styles/fonts/roboto-bold-webfont.woff2 diff --git a/client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff b/client/apps/bfcoder_github_com/styles/fonts/roboto-regular-webfont.woff similarity index 100% rename from client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff rename to client/apps/bfcoder_github_com/styles/fonts/roboto-regular-webfont.woff diff --git a/client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff2 b/client/apps/bfcoder_github_com/styles/fonts/roboto-regular-webfont.woff2 similarity index 100% rename from client/apps/hello_world/styles/fonts/roboto-regular-webfont.woff2 rename to client/apps/bfcoder_github_com/styles/fonts/roboto-regular-webfont.woff2 diff --git a/client/apps/hello_world/styles/modules/_mixins.scss b/client/apps/bfcoder_github_com/styles/modules/_mixins.scss similarity index 100% rename from client/apps/hello_world/styles/modules/_mixins.scss rename to client/apps/bfcoder_github_com/styles/modules/_mixins.scss diff --git a/client/apps/hello_world/styles/styles.js b/client/apps/bfcoder_github_com/styles/styles.js similarity index 100% rename from client/apps/hello_world/styles/styles.js rename to client/apps/bfcoder_github_com/styles/styles.js diff --git a/client/apps/hello_world/styles/styles.less b/client/apps/bfcoder_github_com/styles/styles.less similarity index 100% rename from client/apps/hello_world/styles/styles.less rename to client/apps/bfcoder_github_com/styles/styles.less diff --git a/client/apps/hello_world/styles/styles.scss b/client/apps/bfcoder_github_com/styles/styles.scss similarity index 100% rename from client/apps/hello_world/styles/styles.scss rename to client/apps/bfcoder_github_com/styles/styles.scss diff --git a/client/apps/hello_world/yarn.lock b/client/apps/bfcoder_github_com/yarn.lock similarity index 100% rename from client/apps/hello_world/yarn.lock rename to client/apps/bfcoder_github_com/yarn.lock diff --git a/client/apps/hello_world/html/index.html b/client/apps/hello_world/html/index.html deleted file mode 100644 index c4ad34d..0000000 --- a/client/apps/hello_world/html/index.html +++ /dev/null @@ -1,4 +0,0 @@ -
    - - - \ No newline at end of file From a55901e3c82c53bc97226f304d93bead58bd1c21 Mon Sep 17 00:00:00 2001 From: James Carbine Date: Mon, 12 Mar 2018 14:44:56 -0600 Subject: [PATCH 452/452] WIP --- .../bfcoder_github_com/components/home.jsx | 59 +++++- .../components/layout/index.jsx | 73 ++++++- .../components/projects.jsx | 193 ++++++++++++++++++ .../apps/bfcoder_github_com/html/index.html | 6 + client/apps/bfcoder_github_com/package.json | 1 + client/apps/bfcoder_github_com/routes.jsx | 14 +- client/apps/bfcoder_github_com/yarn.lock | 69 ++++++- 7 files changed, 394 insertions(+), 21 deletions(-) create mode 100644 client/apps/bfcoder_github_com/components/projects.jsx diff --git a/client/apps/bfcoder_github_com/components/home.jsx b/client/apps/bfcoder_github_com/components/home.jsx index 1927545..f34c326 100644 --- a/client/apps/bfcoder_github_com/components/home.jsx +++ b/client/apps/bfcoder_github_com/components/home.jsx @@ -1,13 +1,54 @@ import * as React from 'react'; -import assets from '../libs/assets'; +import { Link } from 'react-router'; -export default function Home() :React.Node { - const img = assets('./images/atomicjolt.jpg'); +export default class Home extends React.Component { + render() { + return ( +
    +
    +
    +

    I am bfcoder, aka James Carbine

    +
    +
    - return ( -
    - Atomic Jolt Logo -

    Welcome to the React Client starter app by Atomic Jolt

    -
    - ); +
    +
    +
    +

    Profession

    +

    I am a software developer. I write code for Atomic Jolt. I worked for Tatemae from November 2011 - November 2014. I was hired on with Atomic Jolt in November 2014. Prior to that I worked for the Sam's Club Pharmacy as a Pharmacy Technician for 6 years while I studied Computer Science at USU. Take a look at some of the Projects I have done.

    +
    +
    +
    +
    +

    Education

    +

    {'I studied Computer Science at Utah State University in Logan, Utah. I graduated with a BS in Computer Science in May 2013.'}

    +
    +
    +
    +
    +
    +
    +

    Experience

    +

    Ruby on Rails

    +

    Javascript (including jQuery, Ember.js, CoffeeScript, Node.js, and React.js)

    +

    HTML5

    +

    Iron.io

    +

    C#

    +

    C++

    +

    Phoenix

    +

    postgres

    +
    +
    + +
    +
    +

    Barefeet

    +

    {"Yes indeed, I am a barefoot advocate. I started going barefoot in the Fall of 2010. I wear shoes on very few occasions, and not for long when I do. When I ride my motorcycle, I wear shoes. When I'm working with the horses, I wear shoes. When I'm working with power tools/machinery(lawn mower), I wear shoes. But pretty much other than that, I have nixed shoes. I especially dislike shoes with a heal. My wife owns no high heels. Period. I hiked all over Moab and Arches National Park while being barefoot. I've done 5 mile hikes through the mountains barefoot. I love being barefoot. I believe my body has strengthened itself since going barefoot. Back pains have gone, unless of course I have done something to incite pain. Like sleeping on a rock in the middle of my back I'm sure would incite pain. Barefeet FTW!"}

    +
    +
    + +
    +
    + ); + } } diff --git a/client/apps/bfcoder_github_com/components/layout/index.jsx b/client/apps/bfcoder_github_com/components/layout/index.jsx index e3ad5d3..dcb67ef 100644 --- a/client/apps/bfcoder_github_com/components/layout/index.jsx +++ b/client/apps/bfcoder_github_com/components/layout/index.jsx @@ -1,10 +1,13 @@ import * as React from 'react'; +import PropTypes from 'prop-types'; +import { Link } from 'react-router'; +import { Navbar, Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap'; -type Props = { - children?: React.Node -} +export default class Index extends React.Component { -export default class Index extends React.Component { + static propTypes = { + children: PropTypes.node, + }; constructor() { super(); @@ -14,7 +17,67 @@ export default class Index extends React.Component { render() { return (
    - {this.props.children || ''} + + + + bfcoder + + + + + +
    + + {this.props.children || ''} + +
    + + + +
    ); } diff --git a/client/apps/bfcoder_github_com/components/projects.jsx b/client/apps/bfcoder_github_com/components/projects.jsx new file mode 100644 index 0000000..6e097df --- /dev/null +++ b/client/apps/bfcoder_github_com/components/projects.jsx @@ -0,0 +1,193 @@ +import * as React from 'react'; + +export default class Projects extends React.Component { + render() { + return ( +
    +
    +
    +

    My Projects

    +

    Here are the projects I have been involved with.

    +
    +
    + +
    +
    +
    +

    Open Tapestry

    +

    {'Finding open educational resources and clipping them for others to see and use. This web app allows teachers to gather open educational resources from about the web, and place them into tapestries for their students to view. Or perhaps make lessons to show the class. Possibilities are numerous. It can also be very useful to corporations wanting to train their employees and give them quizzes to make sure they understand the training. Anyone can build up a course for someone to take.'}

    +

    Technology: Ruby on Rails, Javascript, Mysql

    +

    Check it out »

    +
    +
    +
    +
    +

    {"Hacking Instructure's Canvas"}

    +

    {"I took Instructure's Canvas and modified it for the EDC Maine EM2 Project. It now has the ability to enter misconception probabilities for an assessment. So when the student takes an assessment, it calculates the probability that they have a misconception. It does not show a score to the student or the teacher. The teacher can pull up a report that shows them which students have misconceptions about mathematics. I also incorporated new features into taking an assessment. The student can type in an explanation. They can also draw an explanation as to why they feel the answer they chose is correct."}

    +

    Technology: Ruby on Rails, Javascript, Mysql

    +

    View details »

    +
    +
    +
    +
    +

    Saylor.org

    +

    Online free educational institution called Saylor.org. I helped develop the ePortfolio for the site.

    +

    Check it out if you want some free education. Very cool.

    +

    Technology: Ruby on Rails, Javascript, Mysql

    +

    Check it out »

    +
    +
    +
    +
    +
    +
    +

    Matti - graph theory

    +

    Created some interactive modules to teach students about graph theory. This included Euler Circuits, Minimum Spanning Tree - Kruskal's Algorithm, and Map Coloring. The modules are included with this book "The Heart of Mathematics: An Invitation to Effective Thinking, 4th Edition."

    +

    Technology: HTML5, Javascript (KineticJS)

    +
    +
    +
    +
    +

    Matti - Base Blocks

    +

    Base Blocks had previously been written by my boss Joel Duffin however it was written in Java. It can be found on the eNLVM: Base Blocks. This made it useless to be ran on an iOS device. So I was enlisted to re-write the code in HTML5 so it could be ran on mobile devices as well. I wrote a lot of it and Kami Wilson took over the project so I could focus on other projects.

    +

    Technology: HTML5, Javascript (KineticJS)

    +
    +
    +
    +

    Octopi

    +

    {"Another project that wanted Instructure's Canvas modified for use in an adaptive math testing environment. I made the system work, however the guy never got the funding to complete it."}

    +

    Technology: Ruby on Rails, Javascript, Mysql

    +
    +
    +
    +
    +
    +

    Open Assessments

    +

    {"This is a project that we built and was funded by MIT. It is a way for anyone to create online assessments and embed them anywhere on the web. Put them inside Instructure's Canvas, or put them on your blog. Doesn't really matter. After people have taken the assessment, you can view the statistics. It was built with Ruby on Rails. We will switch it over to Ruby on Rails combined with Ember.js eventually."}

    +

    Technology: Ruby on Rails, Javascript

    +

    Check it out »

    +
    +
    +
    +
    +

    CMAT

    +

    CMAT stands for Concept Map Authoring Tool. You can build concept maps with it.

    +

    Technology: Ruby on Rails, HTML5, Javascript (KineticJS, Ember)

    +

    Check it out »

    +
    +
    +
    +
    +

    OEIT Player

    +

    {'I rebuilt the MIT OEIT Player to work with html5 using JW Player 6. If you check it out, go to the bottom left video of Walter Lewin for a good example. I made it so they can easily put new videos together and using data tags set the parameters of the video.'}

    +

    Technology: HTML5, Javascript, JW Player 6

    +

    Check it out »

    +
    +
    +
    +
    +
    +
    +

    OEIT Player Authoring

    +

    I built an authoring interface for MIT to build the html for the players.

    +

    Technology: HTML5, Javascript

    +

    Check it out »

    +
    +
    +
    +
    +

    panOpen

    +

    {"panOpen is an app that an instructor can create a course with a book. The students can read the book and take quizzes for the chapters. The instructor can view the statistics for each student in the class. Statistics include the time they have spent reading the book and each of their attempts at the quizzes. I also wrote a node app that accepts an image request with user and book id's. It stores that information in Redis. While the student is reading the book, every 15 seconds it sends a request for the image, thus recording that they are reading the book. I then wrote an iron.io task that gets all that data out of Redis and crunches it to compute how long they have been reading for. It then sends that data to rails to store in the database."}

    +

    {'After some time, we decided we needed a faster system. So I converted from a node app to a phoenix elixir app. We no longer send image requests. We just POST to it with CORS as it is on a separate domain, and store it in postgres. During the POST I do an upsert on the data. Each day gets it own entry in the database. So now I no longer need iron.io to compute the data. I can just query the database on demand.'}

    +

    {'Technology: Ruby on Rails, Javascript (Ember, React using Flux and Redux, Phoenix), Postgres'}

    +

    Check it out »

    +
    +
    +
    +
    +

    FreightLink Tracker

    +

    {'FreightLink Tracker is an app that enables you to create and track shipments via Truck, Ship, Plane, and Train. I have been re-implementing the shipments pages from Rails to Ember.'}

    +

    Technology: Ruby on Rails, Javascript (Ember), Postgres

    +
    +
    +
    +
    +
    +
    +

    Scry

    +

    +

    Technology: Ruby Gem

    +

    Check it out »

    +
    +
    +
    +
    +

    Senkyoshi

    +

    +

    Technology: Ruby Gem

    +

    Check it out »

    +
    +
    +
    +
    +

    Senkyoshi Canvas Plugin

    +

    +

    Technology: Canvas Ruby Plugin

    +

    Check it out »

    +
    +
    +
    +
    +
    +
    +

    LTI Starter App

    +

    {"Used to build lti tools for use with Instructure's Canvas.Worked on the admin interface to help install lti tools into canvas."}

    +

    Technology: Ruby on Rails, Javascript (React using Redux), Postgres

    +

    Check it out »

    +
    +
    +
    +
    +

    Adhesion

    +

    {"LTI Tools for Instructure's Canvas. I worked on Scorm LTI Tools. A tool for playing scorm packages. And a Tool for uploading scorm packages. Adhesion has several other LTI tools that I did not contribute to. Adhesion's upstream is the LTI Starter App."}

    +

    Technology: Ruby on Rails, Javascript (React using Redux), Postgres

    +

    Check it out »

    +
    +
    +
    + +

    School Projects

    +
    +
    +
    +

    CS5460 Final Project

    +

    My CS5460 Computer Securities final project for authenticating a user.

    +

    Technology: Ruby on Rails, Javascript

    +

    Check it out »

    +
    +
    +
    +
    +

    CS5100 HTML5 Project

    +

    {'Made a site with Scott Biery that highlighted HTML5 and gave some examples. I wrote the two HTML5 canvas examples and Scott formatted the site and put together the HTML5 examples page. It was a lot of fun to write the javascript for this project. And yes, it works with an iPad. :]'}

    +

    Technology: HTML5

    +

    Check it out »

    +
    +
    +
    + +

    Volunteer Projects

    +
    +
    +
    +

    The Living Planet Aquarium

    +

    Currently building a page to highlight a Sea Turtle that has been rescued.

    +

    Technology: HTML5, Javascript (Ember)

    +

    The Living Planet Aquarium

    +
    +
    +
    +
    + ); + } +} diff --git a/client/apps/bfcoder_github_com/html/index.html b/client/apps/bfcoder_github_com/html/index.html index 722ac08..14435d0 100644 --- a/client/apps/bfcoder_github_com/html/index.html +++ b/client/apps/bfcoder_github_com/html/index.html @@ -1,4 +1,10 @@
    + + + + + + diff --git a/client/apps/bfcoder_github_com/package.json b/client/apps/bfcoder_github_com/package.json index 6d324e6..063bdbe 100644 --- a/client/apps/bfcoder_github_com/package.json +++ b/client/apps/bfcoder_github_com/package.json @@ -11,6 +11,7 @@ "lodash": "4.17.4", "prop-types": "^15.5.10", "react": "^15.5.4", + "react-bootstrap": "^0.31.3", "react-dom": "^15.5.4", "react-proxy-loader": "^0.3.5", "react-redux": "^5.0.5", diff --git a/client/apps/bfcoder_github_com/routes.jsx b/client/apps/bfcoder_github_com/routes.jsx index 37b1714..881a790 100644 --- a/client/apps/bfcoder_github_com/routes.jsx +++ b/client/apps/bfcoder_github_com/routes.jsx @@ -1,16 +1,18 @@ // if you use jsx, you have to import React -import React from 'react'; -import { Router, Route, IndexRoute } from 'react-router'; +import React from 'react'; +import { Router, Route, IndexRoute } from 'react-router'; -import appHistory from './history'; -import Index from './components/layout/index'; -import Home from './components/home'; -import NotFound from './components/common/not_found'; +import appHistory from './history'; +import Index from './components/layout/index'; +import Home from './components/home'; +import Projects from './components/projects'; +import NotFound from './components/common/not_found'; export default ( + diff --git a/client/apps/bfcoder_github_com/yarn.lock b/client/apps/bfcoder_github_com/yarn.lock index 120d5af..b12ac73 100644 --- a/client/apps/bfcoder_github_com/yarn.lock +++ b/client/apps/bfcoder_github_com/yarn.lock @@ -236,6 +236,13 @@ babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" +babel-runtime@^6.11.6: + 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-runtime@^6.22.0, babel-runtime@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" @@ -378,6 +385,10 @@ ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" +classnames@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -502,6 +513,10 @@ diff@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +dom-helpers@^3.2.0, dom-helpers@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.2.1.tgz#3203e07fed217bd1f424b019735582fc37b2825a" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -832,7 +847,7 @@ inherits@2: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1: +invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -1303,6 +1318,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" +keycode@^2.1.2: + version "2.1.9" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" + kind-of@^3.0.2: version "3.2.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" @@ -1637,6 +1656,12 @@ promise@^7.1.1: dependencies: asap "~2.0.3" +prop-types-extra@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.0.1.tgz#a57bd4810e82d27a3ff4317ecc1b4ad005f79a82" + dependencies: + warning "^3.0.0" + prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@~15.5.7: version "15.5.10" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" @@ -1670,6 +1695,22 @@ randomatic@^1.1.3: is-number "^2.0.2" kind-of "^3.0.2" +react-bootstrap@^0.31.3: + version "0.31.3" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-0.31.3.tgz#db2b7d45b00b5dac1ab8b6de3dd97feb3091b849" + dependencies: + babel-runtime "^6.11.6" + classnames "^2.2.5" + dom-helpers "^3.2.0" + invariant "^2.2.1" + keycode "^2.1.2" + prop-types "^15.5.10" + prop-types-extra "^1.0.1" + react-overlays "^0.7.0" + react-prop-types "^0.4.0" + uncontrollable "^4.1.0" + warning "^3.0.0" + react-dom@^15.5.4: version "15.5.4" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da" @@ -1679,6 +1720,22 @@ react-dom@^15.5.4: object-assign "^4.1.0" prop-types "~15.5.7" +react-overlays@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-0.7.1.tgz#0b84708d8007082163c47155a2f60a0858c7a3c7" + dependencies: + classnames "^2.2.5" + dom-helpers "^3.2.1" + prop-types "^15.5.10" + prop-types-extra "^1.0.1" + warning "^3.0.0" + +react-prop-types@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/react-prop-types/-/react-prop-types-0.4.0.tgz#f99b0bfb4006929c9af2051e7c1414a5c75b93d0" + dependencies: + warning "^3.0.0" + react-proxy-loader@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/react-proxy-loader/-/react-proxy-loader-0.3.5.tgz#eaeebc3950f9efad36b8bfc47cf58a9a8ca3432d" @@ -1752,6 +1809,10 @@ regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + regex-cache@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" @@ -2060,6 +2121,12 @@ 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" +uncontrollable@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-4.1.0.tgz#e0358291252e1865222d90939b19f2f49f81c1a9" + dependencies: + invariant "^2.1.0" + uuid@3.0.1, uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"