@@ -1,5 +1,2 @@ | |||
src/main/js/libs | |||
src/main/js/app/components/GlobalFooterBranding.js | |||
tests | |||
scripts | |||
config |
@@ -1,42 +0,0 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2016 SonarSource SA | |||
* mailto:contact AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be | |||
// injected into the application via DefinePlugin in Webpack configuration. | |||
var REACT_APP = /^REACT_APP_/i; | |||
function getClientEnvironment () { | |||
return Object | |||
.keys(process.env) | |||
.filter(key => REACT_APP.test(key)) | |||
.reduce((env, key) => { | |||
env['process.env.' + key] = JSON.stringify(process.env[key]); | |||
return env; | |||
}, { | |||
// Useful for determining whether we’re running in production mode. | |||
// Most importantly, it switches React into the correct mode. | |||
'process.env.NODE_ENV': JSON.stringify( | |||
process.env.NODE_ENV || 'development' | |||
) | |||
}); | |||
} | |||
module.exports = getClientEnvironment; | |||
@@ -17,4 +17,4 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
module.exports = "test-file-stub"; | |||
module.exports = 'test-file-stub'; |
@@ -18,7 +18,7 @@ | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
window.baseUrl = ''; | |||
window.t = window.tp = function () { | |||
var args = Array.prototype.slice.call(arguments, 0); | |||
window.t = window.tp = function() { | |||
const args = Array.prototype.slice.call(arguments, 0); | |||
return args.join('.'); | |||
}; |
@@ -17,12 +17,12 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
var path = require('path'); | |||
var fs = require('fs'); | |||
const path = require('path'); | |||
const fs = require('fs'); | |||
// Make sure any symlinks in the project folder are resolved: | |||
// https://github.com/facebookincubator/create-react-app/issues/637 | |||
var appDirectory = fs.realpathSync(process.cwd()); | |||
const appDirectory = fs.realpathSync(process.cwd()); | |||
function resolveApp(relativePath) { | |||
return path.resolve(appDirectory, relativePath); | |||
} | |||
@@ -38,10 +38,10 @@ function resolveApp(relativePath) { | |||
// It will then be used by Webpack configs. | |||
// Jest doesn’t need this because it already handles `NODE_PATH` out of the box. | |||
var nodePaths = (process.env.NODE_PATH || '') | |||
.split(process.platform === 'win32' ? ';' : ':') | |||
.filter(Boolean) | |||
.map(resolveApp); | |||
const nodePaths = (process.env.NODE_PATH || '') | |||
.split(process.platform === 'win32' ? ';' : ':') | |||
.filter(Boolean) | |||
.map(resolveApp); | |||
// config after eject: we're in ./config/ | |||
module.exports = { | |||
@@ -55,6 +55,5 @@ module.exports = { | |||
htmlBuild: resolveApp('src/main/webapp/index.html'), | |||
appNodeModules: resolveApp('node_modules'), | |||
ownNodeModules: resolveApp('node_modules'), | |||
nodePaths: nodePaths | |||
nodePaths | |||
}; | |||
@@ -19,4 +19,3 @@ | |||
*/ | |||
import 'babel-polyfill'; | |||
import 'whatwg-fetch'; | |||
@@ -0,0 +1,162 @@ | |||
const path = require('path'); | |||
const autoprefixer = require('autoprefixer'); | |||
const ExtractTextPlugin = require('extract-text-webpack-plugin'); | |||
const HtmlWebpackPlugin = require('html-webpack-plugin'); | |||
const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); | |||
const webpack = require('webpack'); | |||
const paths = require('./paths'); | |||
const autoprefixerOptions = require('./autoprefixer'); | |||
module.exports = ({ production = true, fast = false }) => ({ | |||
bail: production, | |||
devtool: production ? fast ? false : 'source-map' : 'cheap-module-eval-source-map', | |||
entry: { | |||
vendor: [ | |||
!production && require.resolve('react-dev-utils/webpackHotDevClient'), | |||
require.resolve('./polyfills'), | |||
'jquery', | |||
'underscore', | |||
'lodash', | |||
'd3-array', | |||
'd3-hierarchy', | |||
'd3-scale', | |||
'd3-selection', | |||
'd3-shape', | |||
'react', | |||
'react-dom', | |||
'backbone', | |||
'backbone.marionette', | |||
'moment', | |||
'handlebars/runtime', | |||
'./src/main/js/libs/third-party/jquery-ui.js', | |||
'./src/main/js/libs/third-party/select2.js', | |||
'./src/main/js/libs/third-party/bootstrap/tooltip.js', | |||
'./src/main/js/libs/third-party/bootstrap/dropdown.js' | |||
].filter(Boolean), | |||
app: [ | |||
'./src/main/js/app/utils/setPublicPath.js', | |||
'./src/main/js/app/index.js', | |||
'./src/main/js/components/SourceViewer/SourceViewer.js' | |||
] | |||
}, | |||
output: { | |||
path: paths.appBuild, | |||
pathinfo: !production, | |||
filename: production ? 'js/[name].[chunkhash:8].js' : 'js/[name].js', | |||
chunkFilename: production ? 'js/[name].[chunkhash:8].chunk.js' : 'js/[name].chunk.js' | |||
}, | |||
resolve: { | |||
// This allows you to set a fallback for where Webpack should look for modules. | |||
// We read `NODE_PATH` environment variable in `paths.js` and pass paths here. | |||
// We use `fallback` instead of `root` because we want `node_modules` to "win" | |||
// if there any conflicts. This matches Node resolution mechanism. | |||
// https://github.com/facebookincubator/create-react-app/issues/253 | |||
fallback: paths.nodePaths | |||
}, | |||
module: { | |||
// First, run the linter. | |||
// It's important to do this before Babel processes the JS. | |||
// Run for development or full build | |||
preLoaders: !production || !fast | |||
? [ | |||
{ | |||
test: /\.js$/, | |||
loader: 'eslint', | |||
include: paths.appSrc | |||
} | |||
] | |||
: [], | |||
loaders: [ | |||
{ | |||
test: /\.js$/, | |||
loader: 'babel', | |||
exclude: /(node_modules|libs)/ | |||
}, | |||
{ | |||
test: /(blueimp-md5|numeral)/, | |||
loader: 'imports?define=>false' | |||
}, | |||
{ | |||
test: /\.hbs$/, | |||
loader: 'handlebars', | |||
query: { | |||
helperDirs: path.join(__dirname, '../src/main/js/helpers/handlebars') | |||
} | |||
}, | |||
{ | |||
test: /\.css$/, | |||
loader: 'style!css!postcss' | |||
}, | |||
{ | |||
test: /\.less$/, | |||
loader: ExtractTextPlugin.extract('style', 'css?-url!postcss!less') | |||
}, | |||
{ test: require.resolve('jquery'), loader: 'expose?$!expose?jQuery' }, | |||
{ test: require.resolve('underscore'), loader: 'expose?_' }, | |||
{ test: require.resolve('backbone'), loader: 'expose?Backbone' }, | |||
{ test: require.resolve('backbone.marionette'), loader: 'expose?Marionette' }, | |||
{ test: require.resolve('react'), loader: 'expose?React' }, | |||
{ test: require.resolve('react-dom'), loader: 'expose?ReactDOM' } | |||
] | |||
}, | |||
plugins: [ | |||
new webpack.optimize.CommonsChunkPlugin( | |||
'vendor', | |||
production ? 'js/vendor.[chunkhash:8].js' : 'js/vendor.js' | |||
), | |||
new ExtractTextPlugin(production ? 'css/sonar.[chunkhash:8].css' : 'css/sonar.css', { | |||
allChunks: true | |||
}), | |||
!production && new InterpolateHtmlPlugin({ WEB_CONTEXT: '' }), | |||
new HtmlWebpackPlugin({ | |||
inject: false, | |||
template: paths.appHtml, | |||
minify: production && | |||
!fast && { | |||
removeComments: true, | |||
collapseWhitespace: true, | |||
removeRedundantAttributes: true, | |||
useShortDoctype: true, | |||
removeEmptyAttributes: true, | |||
removeStyleLinkTypeAttributes: true, | |||
keepClosingSlash: true, | |||
minifyJS: true, | |||
minifyCSS: true, | |||
minifyURLs: true | |||
} | |||
}), | |||
new webpack.DefinePlugin({ | |||
'process.env.NODE_ENV': JSON.stringify(production ? 'production' : 'development') | |||
}), | |||
production && new webpack.optimize.OccurrenceOrderPlugin(), | |||
production && new webpack.optimize.DedupePlugin(), | |||
production && | |||
!fast && | |||
new webpack.optimize.UglifyJsPlugin({ | |||
compress: { screw_ie8: true, warnings: false }, | |||
mangle: { screw_ie8: true }, | |||
output: { comments: false, screw_ie8: true } | |||
}), | |||
!production && new webpack.HotModuleReplacementPlugin() | |||
].filter(Boolean), | |||
postcss() { | |||
return [autoprefixer(autoprefixerOptions)]; | |||
}, | |||
// Some libraries import Node modules but don't use them in the browser. | |||
// Tell Webpack to provide empty mocks for them so importing them works. | |||
node: { | |||
fs: 'empty', | |||
net: 'empty', | |||
tls: 'empty' | |||
} | |||
}); |
@@ -1,104 +0,0 @@ | |||
var path = require('path'); | |||
var autoprefixer = require('autoprefixer'); | |||
var webpack = require('webpack'); | |||
var ExtractTextPlugin = require('extract-text-webpack-plugin'); | |||
var paths = require('../paths'); | |||
var autoprefixerOptions = require('../autoprefixer'); | |||
module.exports = { | |||
entry: { | |||
vendor: [ | |||
require.resolve('../polyfills'), | |||
'jquery', | |||
'underscore', | |||
'lodash', | |||
'd3-array', | |||
'd3-hierarchy', | |||
'd3-scale', | |||
'd3-selection', | |||
'd3-shape', | |||
'react', | |||
'react-dom', | |||
'backbone', | |||
'backbone.marionette', | |||
'moment', | |||
'handlebars/runtime', | |||
'./src/main/js/libs/third-party/jquery-ui.js', | |||
'./src/main/js/libs/third-party/select2.js', | |||
'./src/main/js/libs/third-party/bootstrap/tooltip.js', | |||
'./src/main/js/libs/third-party/bootstrap/dropdown.js' | |||
], | |||
app: [ | |||
'./src/main/js/app/utils/setPublicPath.js', | |||
'./src/main/js/app/index.js', | |||
'./src/main/js/components/SourceViewer/SourceViewer.js' | |||
] | |||
}, | |||
output: { | |||
path: paths.appBuild, | |||
filename: 'js/[name].[chunkhash:8].js', | |||
chunkFilename: 'js/[name].[chunkhash:8].chunk.js' | |||
}, | |||
resolve: { | |||
// This allows you to set a fallback for where Webpack should look for modules. | |||
// We read `NODE_PATH` environment variable in `paths.js` and pass paths here. | |||
// We use `fallback` instead of `root` because we want `node_modules` to "win" | |||
// if there any conflicts. This matches Node resolution mechanism. | |||
// https://github.com/facebookincubator/create-react-app/issues/253 | |||
fallback: paths.nodePaths | |||
}, | |||
module: { | |||
// First, run the linter. | |||
// It's important to do this before Babel processes the JS. | |||
preLoaders: [ | |||
{ | |||
test: /\.js$/, | |||
loader: 'eslint', | |||
include: paths.appSrc | |||
} | |||
], | |||
loaders: [ | |||
{ | |||
test: /\.js$/, | |||
loader: 'babel', | |||
exclude: /(node_modules|libs)/ | |||
}, | |||
{ | |||
test: /(blueimp-md5|numeral)/, | |||
loader: 'imports?define=>false' | |||
}, | |||
{ | |||
test: /\.hbs$/, | |||
loader: 'handlebars', | |||
query: { | |||
helperDirs: path.join(__dirname, '../../src/main/js/helpers/handlebars') | |||
} | |||
}, | |||
{ | |||
test: /\.css$/, | |||
loader: 'style!css!postcss' | |||
}, | |||
{ | |||
test: /\.less$/, | |||
loader: ExtractTextPlugin.extract('style', 'css?-url!postcss!less') | |||
}, | |||
{ test: require.resolve('jquery'), loader: 'expose?$!expose?jQuery' }, | |||
{ test: require.resolve('underscore'), loader: 'expose?_' }, | |||
{ test: require.resolve('backbone'), loader: 'expose?Backbone' }, | |||
{ test: require.resolve('backbone.marionette'), loader: 'expose?Marionette' }, | |||
{ test: require.resolve('react'), loader: 'expose?React' }, | |||
{ test: require.resolve('react-dom'), loader: 'expose?ReactDOM' } | |||
] | |||
}, | |||
postcss() { | |||
return [autoprefixer(autoprefixerOptions)]; | |||
}, | |||
// Some libraries import Node modules but don't use them in the browser. | |||
// Tell Webpack to provide empty mocks for them so importing them works. | |||
node: { | |||
fs: 'empty', | |||
net: 'empty', | |||
tls: 'empty' | |||
} | |||
}; |
@@ -1,95 +0,0 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2016 SonarSource SA | |||
* mailto:contact AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
var webpack = require('webpack'); | |||
var HtmlWebpackPlugin = require('html-webpack-plugin'); | |||
var ExtractTextPlugin = require('extract-text-webpack-plugin'); | |||
var InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); | |||
var CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); | |||
var WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin'); | |||
var paths = require('../paths'); | |||
var config = require('./webpack.config.base'); | |||
var getClientEnvironment = require('../env'); | |||
var webContext = ''; | |||
var env = getClientEnvironment(); | |||
// This makes the bundle appear split into separate modules in the devtools. | |||
// We don't use source maps here because they can be confusing: | |||
// https://github.com/facebookincubator/create-react-app/issues/343#issuecomment-237241875 | |||
// You may want 'cheap-module-source-map' instead if you prefer source maps. | |||
config.devtool = 'eval'; | |||
// Include an alternative client for WebpackDevServer. A client's job is to | |||
// connect to WebpackDevServer by a socket and get notified about changes. | |||
// When you save a file, the client will either apply hot updates (in case | |||
// of CSS changes), or refresh the page (in case of JS changes). When you | |||
// make a syntax error, this client will display a syntax error overlay. | |||
// Note: instead of the default WebpackDevServer client, we use a custom one | |||
// to bring better experience for Create React App users. You can replace | |||
// the line below with these two lines if you prefer the stock client: | |||
// require.resolve('webpack-dev-server/client') + '?/', | |||
// require.resolve('webpack/hot/dev-server'), | |||
config.entry.vendor.unshift(require.resolve('react-dev-utils/webpackHotDevClient')); | |||
// Add /* filename */ comments to generated require()s in the output. | |||
config.output.pathinfo = true; | |||
// This is the URL that app is served from. | |||
config.output.filename = 'js/[name].js'; | |||
config.output.chunkFilename = 'js/[name].chunk.js'; | |||
config.plugins = [ | |||
new webpack.optimize.CommonsChunkPlugin('vendor', 'js/vendor.js'), | |||
new ExtractTextPlugin('css/sonar.css', { allChunks: true }), | |||
// Makes the web context available as %WEB_CONTEXT% in index.html, e.g.: | |||
// <link rel="shortcut icon" href="%WEB_CONTEXT%/favicon.ico"> | |||
// In development, this will be an empty string. | |||
new InterpolateHtmlPlugin({ | |||
WEB_CONTEXT: webContext | |||
}), | |||
// Generates an `index.html` file with the <script> injected. | |||
new HtmlWebpackPlugin({ | |||
inject: false, | |||
template: paths.appHtml | |||
}), | |||
// Makes some environment variables available to the JS code, for example: | |||
// if (process.env.NODE_ENV === 'development') { ... }. See `./env.js`. | |||
new webpack.DefinePlugin(env), | |||
// This is necessary to emit hot updates (currently CSS only): | |||
new webpack.HotModuleReplacementPlugin(), | |||
// Watcher doesn't work well if you mistype casing in a path so we use | |||
// a plugin that prints an error when you attempt to do this. | |||
// See https://github.com/facebookincubator/create-react-app/issues/240 | |||
new CaseSensitivePathsPlugin(), | |||
// If you require a missing module and then `npm install` it, you still have | |||
// to restart the development server for Webpack to discover it. This plugin | |||
// makes the discovery automatic so you don't have to restart. | |||
// See https://github.com/facebookincubator/create-react-app/issues/186 | |||
new WatchMissingNodeModulesPlugin(paths.appNodeModules) | |||
]; | |||
module.exports = config; |
@@ -1,47 +0,0 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2016 SonarSource SA | |||
* mailto:contact AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
var webpack = require('webpack'); | |||
var ExtractTextPlugin = require('extract-text-webpack-plugin'); | |||
var HtmlWebpackPlugin = require('html-webpack-plugin'); | |||
var config = require('./webpack.config.base'); | |||
var getClientEnvironment = require('../env'); | |||
var paths = require('../paths'); | |||
// Get environment variables to inject into our app. | |||
var env = getClientEnvironment(); | |||
// disable eslint loader | |||
config.module.preLoaders = []; | |||
// Don't attempt to continue if there are any errors. | |||
config.bail = true; | |||
config.plugins = [ | |||
new webpack.optimize.CommonsChunkPlugin('vendor', 'js/vendor.[chunkhash:8].js'), | |||
new ExtractTextPlugin('css/sonar.[chunkhash:8].css', { allChunks: true }), | |||
new HtmlWebpackPlugin({ | |||
inject: false, | |||
template: paths.appHtml | |||
}) | |||
]; | |||
module.exports = config; |
@@ -1,89 +0,0 @@ | |||
/* | |||
* SonarQube | |||
* Copyright (C) 2009-2016 SonarSource SA | |||
* mailto:contact AT sonarsource DOT com | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
var webpack = require('webpack'); | |||
var ExtractTextPlugin = require('extract-text-webpack-plugin'); | |||
var HtmlWebpackPlugin = require('html-webpack-plugin'); | |||
var config = require('./webpack.config.base'); | |||
var getClientEnvironment = require('../env'); | |||
var paths = require('../paths'); | |||
// Get environment variables to inject into our app. | |||
var env = getClientEnvironment(); | |||
// Assert this just to be safe. | |||
// Development builds of React are slow and not intended for production. | |||
if (env['process.env.NODE_ENV'] !== '"production"') { | |||
throw new Error('Production builds must have NODE_ENV=production.'); | |||
} | |||
// Don't attempt to continue if there are any errors. | |||
config.bail = true; | |||
config.plugins = [ | |||
new webpack.optimize.CommonsChunkPlugin('vendor', 'js/vendor.[chunkhash:8].js'), | |||
new ExtractTextPlugin('css/sonar.[chunkhash:8].css', { allChunks: true }), | |||
new HtmlWebpackPlugin({ | |||
inject: false, | |||
template: paths.appHtml, | |||
minify: { | |||
removeComments: true, | |||
collapseWhitespace: true, | |||
removeRedundantAttributes: true, | |||
useShortDoctype: true, | |||
removeEmptyAttributes: true, | |||
removeStyleLinkTypeAttributes: true, | |||
keepClosingSlash: true, | |||
minifyJS: true, | |||
minifyCSS: true, | |||
minifyURLs: true | |||
} | |||
}), | |||
// Makes some environment variables available to the JS code, for example: | |||
// if (process.env.NODE_ENV === 'production') { ... }. See `./env.js`. | |||
// It is absolutely essential that NODE_ENV was set to production here. | |||
// Otherwise React will be compiled in the very slow development mode. | |||
new webpack.DefinePlugin(env), | |||
// This helps ensure the builds are consistent if source hasn't changed: | |||
new webpack.optimize.OccurrenceOrderPlugin(), | |||
// Try to dedupe duplicated modules, if any: | |||
new webpack.optimize.DedupePlugin(), | |||
// Minify the code. | |||
new webpack.optimize.UglifyJsPlugin({ | |||
compress: { | |||
screw_ie8: true, // React doesn't support IE8 | |||
warnings: false | |||
}, | |||
mangle: { | |||
screw_ie8: true | |||
}, | |||
output: { | |||
comments: false, | |||
screw_ie8: true | |||
} | |||
}) | |||
]; | |||
module.exports = config; |
@@ -53,14 +53,11 @@ | |||
"babel-plugin-transform-react-jsx-source": "^6.22.0", | |||
"babel-preset-env": "^1.1.8", | |||
"babel-preset-react": "^6.22.0", | |||
"case-sensitive-paths-webpack-plugin": "1.1.4", | |||
"chalk": "1.1.3", | |||
"connect-history-api-fallback": "1.3.0", | |||
"cross-env": "2.0.0", | |||
"cross-spawn": "4.0.0", | |||
"css-loader": "0.23.1", | |||
"detect-port": "1.0.0", | |||
"dotenv": "2.0.0", | |||
"enzyme": "^2.6.0", | |||
"enzyme-to-json": "^1.4.5", | |||
"eslint": "^3.12.2", | |||
@@ -71,22 +68,18 @@ | |||
"eslint-plugin-react": "^6.8.0", | |||
"expose-loader": "0.7.1", | |||
"express": "4.13.4", | |||
"express-http-proxy": "0.6.0", | |||
"extract-text-webpack-plugin": "1.0.1", | |||
"file-loader": "0.9.0", | |||
"filesize": "3.3.0", | |||
"find-cache-dir": "0.1.1", | |||
"flow-bin": "0.47.0", | |||
"fs-extra": "0.30.0", | |||
"gzip-size": "3.0.0", | |||
"handlebars-loader": "1.1.4", | |||
"html-webpack-plugin": "2.24.1", | |||
"http-proxy-middleware": "0.17.3", | |||
"imports-loader": "0.6.5", | |||
"jest": "19.0.2", | |||
"json-loader": "0.5.4", | |||
"less": "2.7.1", | |||
"less-loader": "2.2.3", | |||
"path-exists": "2.1.0", | |||
"postcss-loader": "0.8.0", | |||
"prettier": "1.2.2", | |||
"prettier-css": "0.0.7", | |||
@@ -94,10 +87,7 @@ | |||
"prettier-eslint-cli": "3.4.1", | |||
"react-addons-test-utils": "15.4.2", | |||
"react-dev-utils": "0.2.1", | |||
"react-transform-hmr": "1.0.4", | |||
"recursive-readdir": "2.1.0", | |||
"rimraf": "2.5.4", | |||
"strip-ansi": "3.0.1", | |||
"style-loader": "0.13.0", | |||
"webpack": "1.13.2", | |||
"webpack-bundle-analyzer": "^2.3.1", |
@@ -17,11 +17,14 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
/* eslint-disable no-console */ | |||
process.env.NODE_ENV = 'production'; | |||
const webpack = require('webpack'); | |||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; | |||
const config = require('../config/webpack/webpack.config.prod'); | |||
const getConfig = require('../config/webpack.config'); | |||
const config = getConfig({ production: true }); | |||
config.plugins.push(new BundleAnalyzerPlugin()); | |||
@@ -17,25 +17,24 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
/* eslint-disable no-console*/ | |||
process.env.NODE_ENV = 'production'; | |||
var chalk = require('chalk'); | |||
var fs = require('fs-extra'); | |||
var path = require('path'); | |||
var rimrafSync = require('rimraf').sync; | |||
var webpack = require('webpack'); | |||
var paths = require('../config/paths'); | |||
var formatSize = require('./utils/formatSize'); | |||
const chalk = require('chalk'); | |||
const fs = require('fs-extra'); | |||
const rimrafSync = require('rimraf').sync; | |||
const webpack = require('webpack'); | |||
const paths = require('../config/paths'); | |||
const formatSize = require('./utils/formatSize'); | |||
const getConfig = require('../config/webpack.config'); | |||
var isFastBuild = process.argv.some(arg => arg.indexOf('--fast') > -1); | |||
const fast = process.argv.some(arg => arg.indexOf('--fast') > -1); | |||
var config = isFastBuild ? | |||
require('../config/webpack/webpack.config.fast') : | |||
require('../config/webpack/webpack.config.prod'); | |||
const config = getConfig({ fast, production: true }); | |||
function clean () { | |||
// Remove all content but keep the directory so that | |||
// if you're in it, you don't end up in Trash | |||
function clean() { | |||
// Remove all content but keep the directory so that | |||
// if you're in it, you don't end up in Trash | |||
console.log(chalk.cyan.bold('Cleaning output directories and files...')); | |||
console.log(paths.jsBuild + '/*'); | |||
@@ -50,8 +49,8 @@ function clean () { | |||
console.log(); | |||
} | |||
function build () { | |||
if (isFastBuild) { | |||
function build() { | |||
if (fast) { | |||
console.log(chalk.magenta.bold('Running fast build...')); | |||
} else { | |||
console.log(chalk.cyan.bold('Creating optimized production build...')); | |||
@@ -71,20 +70,20 @@ function build () { | |||
process.exit(1); | |||
} | |||
var jsonStats = stats.toJson(); | |||
const jsonStats = stats.toJson(); | |||
console.log('Assets:'); | |||
var assets = jsonStats.assets.slice(); | |||
const assets = jsonStats.assets.slice(); | |||
assets.sort((a, b) => b.size - a.size); | |||
assets.forEach(asset => { | |||
var sizeLabel = formatSize(asset.size); | |||
var leftPadding = ' '.repeat(Math.max(0, 8 - sizeLabel.length)); | |||
let sizeLabel = formatSize(asset.size); | |||
const leftPadding = ' '.repeat(Math.max(0, 8 - sizeLabel.length)); | |||
sizeLabel = leftPadding + sizeLabel; | |||
console.log('', chalk.yellow(sizeLabel), asset.name); | |||
}); | |||
console.log(); | |||
var seconds = jsonStats.time / 1000; | |||
const seconds = jsonStats.time / 1000; | |||
console.log('Duration: ' + seconds.toFixed(2) + 's'); | |||
console.log(); | |||
@@ -92,14 +91,13 @@ function build () { | |||
}); | |||
} | |||
function copyPublicFolder () { | |||
function copyPublicFolder() { | |||
fs.copySync(paths.appPublic, paths.appBuild, { | |||
dereference: true, | |||
filter: file => file !== paths.appHtml | |||
}); | |||
} | |||
clean(); | |||
build(); | |||
copyPublicFolder(); |
@@ -17,35 +17,31 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
/* eslint-disable no-console */ | |||
process.env.NODE_ENV = 'development'; | |||
// Load environment variables from .env file. Surpress warnings using silent | |||
// if this file is missing. dotenv will never modify any environment variables | |||
// that have already been set. | |||
// https://github.com/motdotla/dotenv | |||
require('dotenv').config({ silent: true }); | |||
const chalk = require('chalk'); | |||
const webpack = require('webpack'); | |||
const WebpackDevServer = require('webpack-dev-server'); | |||
const historyApiFallback = require('connect-history-api-fallback'); | |||
const httpProxyMiddleware = require('http-proxy-middleware'); | |||
const detect = require('detect-port'); | |||
const clearConsole = require('react-dev-utils/clearConsole'); | |||
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages'); | |||
const prompt = require('react-dev-utils/prompt'); | |||
const getConfig = require('../config/webpack.config'); | |||
const paths = require('../config/paths'); | |||
var chalk = require('chalk'); | |||
var webpack = require('webpack'); | |||
var WebpackDevServer = require('webpack-dev-server'); | |||
var historyApiFallback = require('connect-history-api-fallback'); | |||
var httpProxyMiddleware = require('http-proxy-middleware'); | |||
var detect = require('detect-port'); | |||
var clearConsole = require('react-dev-utils/clearConsole'); | |||
var checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); | |||
var formatWebpackMessages = require('react-dev-utils/formatWebpackMessages'); | |||
var prompt = require('react-dev-utils/prompt'); | |||
var config = require('../config/webpack/webpack.config.dev'); | |||
var paths = require('../config/paths'); | |||
const config = getConfig({ production: false }); | |||
// Tools like Cloud9 rely on this. | |||
var DEFAULT_PORT = process.env.PORT || 3000; | |||
var compiler; | |||
var handleCompile; | |||
const DEFAULT_PORT = process.env.PORT || 3000; | |||
let compiler; | |||
let handleCompile; | |||
var PROXY_URL = 'http://localhost:9000'; | |||
const PROXY_URL = 'http://localhost:9000'; | |||
function setupCompiler (host, port, protocol) { | |||
function setupCompiler(host, port, protocol) { | |||
// "Compiler" is a low-level interface to Webpack. | |||
// It lets us listen to some events and provide our own custom messages. | |||
compiler = webpack(config, handleCompile); | |||
@@ -54,22 +50,22 @@ function setupCompiler (host, port, protocol) { | |||
// recompiling a bundle. WebpackDevServer takes care to pause serving the | |||
// bundle, so if you refresh, it'll wait instead of serving the old one. | |||
// "invalid" is short for "bundle invalidated", it doesn't imply any errors. | |||
compiler.plugin('invalid', function () { | |||
compiler.plugin('invalid', () => { | |||
clearConsole(); | |||
console.log('Compiling...'); | |||
}); | |||
// "done" event fires when Webpack has finished recompiling the bundle. | |||
// Whether or not you have warnings or errors, you will get this event. | |||
compiler.plugin('done', function (stats) { | |||
compiler.plugin('done', stats => { | |||
clearConsole(); | |||
// We have switched off the default Webpack output in WebpackDevServer | |||
// options so we are going to "massage" the warnings and errors and present | |||
// them in a readable focused way. | |||
var jsonStats = stats.toJson({}, true); | |||
var messages = formatWebpackMessages(jsonStats); | |||
var seconds = jsonStats.time / 1000; | |||
const jsonStats = stats.toJson({}, true); | |||
const messages = formatWebpackMessages(jsonStats); | |||
const seconds = jsonStats.time / 1000; | |||
if (!messages.errors.length && !messages.warnings.length) { | |||
console.log(chalk.green('Compiled successfully!')); | |||
console.log('Duration: ' + seconds.toFixed(2) + 's'); | |||
@@ -104,24 +100,35 @@ function setupCompiler (host, port, protocol) { | |||
}); | |||
// Teach some ESLint tricks. | |||
console.log('You may use special comments to disable some warnings.'); | |||
console.log('Use ' + chalk.yellow('// eslint-disable-next-line') + ' to ignore the next line.'); | |||
console.log('Use ' + chalk.yellow('/* eslint-disable */') + ' to ignore all warnings in a file.'); | |||
console.log( | |||
'Use ' + chalk.yellow('// eslint-disable-next-line') + ' to ignore the next line.' | |||
); | |||
console.log( | |||
'Use ' + chalk.yellow('/* eslint-disable */') + ' to ignore all warnings in a file.' | |||
); | |||
} | |||
}); | |||
} | |||
// We need to provide a custom onError function for httpProxyMiddleware. | |||
// It allows us to log custom error messages on the console. | |||
function onProxyError (proxy) { | |||
return function (err, req, res) { | |||
var host = req.headers && req.headers.host; | |||
function onProxyError(proxy) { | |||
return function(err, req, res) { | |||
const host = req.headers && req.headers.host; | |||
console.log( | |||
chalk.red('Proxy error:') + ' Could not proxy request ' + chalk.cyan(req.url) + | |||
' from ' + chalk.cyan(host) + ' to ' + chalk.cyan(proxy) + '.' | |||
chalk.red('Proxy error:') + | |||
' Could not proxy request ' + | |||
chalk.cyan(req.url) + | |||
' from ' + | |||
chalk.cyan(host) + | |||
' to ' + | |||
chalk.cyan(proxy) + | |||
'.' | |||
); | |||
console.log( | |||
'See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (' + | |||
chalk.cyan(err.code) + ').' | |||
'See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (' + | |||
chalk.cyan(err.code) + | |||
').' | |||
); | |||
console.log(); | |||
@@ -130,31 +137,39 @@ function onProxyError (proxy) { | |||
if (res.writeHead && !res.headersSent) { | |||
res.writeHead(500); | |||
} | |||
res.end('Proxy error: Could not proxy request ' + req.url + ' from ' + | |||
host + ' to ' + proxy + ' (' + err.code + ').' | |||
res.end( | |||
'Proxy error: Could not proxy request ' + | |||
req.url + | |||
' from ' + | |||
host + | |||
' to ' + | |||
proxy + | |||
' (' + | |||
err.code + | |||
').' | |||
); | |||
} | |||
}; | |||
} | |||
function addMiddleware (devServer) { | |||
function addMiddleware(devServer) { | |||
// `proxy` lets you to specify a fallback server during development. | |||
// Every unrecognized request will be forwarded to it. | |||
var proxy = PROXY_URL; | |||
devServer.use(historyApiFallback({ | |||
// Paths with dots should still use the history fallback. | |||
// See https://github.com/facebookincubator/create-react-app/issues/387. | |||
disableDotRule: true, | |||
// For single page apps, we generally want to fallback to /index.html. | |||
// However we also want to respect `proxy` for API calls. | |||
// So if `proxy` is specified, we need to decide which fallback to use. | |||
// We use a heuristic: if request `accept`s text/html, we pick /index.html. | |||
// Modern browsers include text/html into `accept` header when navigating. | |||
// However API calls like `fetch()` won’t generally accept text/html. | |||
// If this heuristic doesn’t work well for you, don’t use `proxy`. | |||
htmlAcceptHeaders: proxy ? | |||
['text/html'] : | |||
['text/html', '*/*'] | |||
})); | |||
const proxy = PROXY_URL; | |||
devServer.use( | |||
historyApiFallback({ | |||
// Paths with dots should still use the history fallback. | |||
// See https://github.com/facebookincubator/create-react-app/issues/387. | |||
disableDotRule: true, | |||
// For single page apps, we generally want to fallback to /index.html. | |||
// However we also want to respect `proxy` for API calls. | |||
// So if `proxy` is specified, we need to decide which fallback to use. | |||
// We use a heuristic: if request `accept`s text/html, we pick /index.html. | |||
// Modern browsers include text/html into `accept` header when navigating. | |||
// However API calls like `fetch()` won’t generally accept text/html. | |||
// If this heuristic doesn’t work well for you, don’t use `proxy`. | |||
htmlAcceptHeaders: proxy ? ['text/html'] : ['text/html', '*/*'] | |||
}) | |||
); | |||
if (proxy) { | |||
if (typeof proxy !== 'string') { | |||
console.log(chalk.red('When specified, "proxy" in package.json must be a string.')); | |||
@@ -168,17 +183,18 @@ function addMiddleware (devServer) { | |||
// - /*.hot-update.json (WebpackDevServer uses this too for hot reloading) | |||
// - /sockjs-node/* (WebpackDevServer uses this for hot reloading) | |||
// Tip: use https://jex.im/regulex/ to visualize the regex | |||
var mayProxy = /^(?!\/(index\.html$|.*\.hot-update\.json$|sockjs-node\/)).*$/; | |||
devServer.use(mayProxy, | |||
// Pass the scope regex both to Express and to the middleware for proxying | |||
// of both HTTP and WebSockets to work without false positives. | |||
httpProxyMiddleware(pathname => mayProxy.test(pathname), { | |||
target: proxy, | |||
logLevel: 'silent', | |||
onError: onProxyError(proxy), | |||
secure: false, | |||
changeOrigin: true | |||
}) | |||
const mayProxy = /^(?!\/(index\.html$|.*\.hot-update\.json$|sockjs-node\/)).*$/; | |||
devServer.use( | |||
mayProxy, | |||
// Pass the scope regex both to Express and to the middleware for proxying | |||
// of both HTTP and WebSockets to work without false positives. | |||
httpProxyMiddleware(pathname => mayProxy.test(pathname), { | |||
target: proxy, | |||
logLevel: 'silent', | |||
onError: onProxyError(proxy), | |||
secure: false, | |||
changeOrigin: true | |||
}) | |||
); | |||
} | |||
// Finally, by now we have certainly resolved the URL. | |||
@@ -186,8 +202,8 @@ function addMiddleware (devServer) { | |||
devServer.use(devServer.middleware); | |||
} | |||
function runDevServer (host, port, protocol) { | |||
var devServer = new WebpackDevServer(compiler, { | |||
function runDevServer(host, port, protocol) { | |||
const devServer = new WebpackDevServer(compiler, { | |||
// Enable gzip compression of generated files. | |||
compress: true, | |||
// Silence WebpackDevServer's own logs since they're generally not useful. | |||
@@ -226,15 +242,15 @@ function runDevServer (host, port, protocol) { | |||
ignored: /node_modules/ | |||
}, | |||
// Enable HTTPS if the HTTPS environment variable is set to 'true' | |||
https: protocol === "https", | |||
host: host | |||
https: protocol === 'https', | |||
host | |||
}); | |||
// Our custom middleware proxies requests to /index.html or a remote API. | |||
addMiddleware(devServer); | |||
// Launch WebpackDevServer. | |||
devServer.listen(port, (err, result) => { | |||
devServer.listen(port, err => { | |||
if (err) { | |||
return console.log(err); | |||
} | |||
@@ -245,9 +261,9 @@ function runDevServer (host, port, protocol) { | |||
}); | |||
} | |||
function run (port) { | |||
var protocol = process.env.HTTPS === 'true' ? "https" : "http"; | |||
var host = process.env.HOST || 'localhost'; | |||
function run(port) { | |||
const protocol = process.env.HTTPS === 'true' ? 'https' : 'http'; | |||
const host = process.env.HOST || 'localhost'; | |||
setupCompiler(host, port, protocol); | |||
runDevServer(host, port, protocol); | |||
} | |||
@@ -261,9 +277,9 @@ detect(DEFAULT_PORT).then(port => { | |||
} | |||
clearConsole(); | |||
var question = | |||
chalk.yellow('Something is already running on port ' + DEFAULT_PORT + '.') + | |||
'\n\nWould you like to run the app on another port instead?'; | |||
const question = | |||
chalk.yellow('Something is already running on port ' + DEFAULT_PORT + '.') + | |||
'\n\nWould you like to run the app on another port instead?'; | |||
prompt(question, true).then(shouldChangePort => { | |||
if (shouldChangePort) { |
@@ -20,13 +20,8 @@ | |||
process.env.NODE_ENV = 'test'; | |||
process.env.PUBLIC_URL = ''; | |||
// Load environment variables from .env file. Surpress warnings using silent | |||
// if this file is missing. dotenv will never modify any environment variables | |||
// that have already been set. | |||
// https://github.com/motdotla/dotenv | |||
require('dotenv').config({ silent: true }); | |||
const jest = require('jest'); | |||
const argv = process.argv.slice(2); | |||
// Watch unless on CI | |||
@@ -35,4 +30,3 @@ if (!process.env.CI) { | |||
} | |||
jest.run(argv); | |||
@@ -17,12 +17,12 @@ | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
module.exports = function (bytes) { | |||
if (bytes == 0) { | |||
module.exports = function(bytes) { | |||
if (bytes === 0) { | |||
return '0'; | |||
} | |||
var k = 1000; // or 1024 for binary | |||
var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; | |||
var i = Math.floor(Math.log(bytes) / Math.log(k)); | |||
const k = 1000; // or 1024 for binary | |||
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; | |||
const i = Math.floor(Math.log(bytes) / Math.log(k)); | |||
return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i]; | |||
}; |
@@ -1013,10 +1013,6 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.1: | |||
version "1.1.1" | |||
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" | |||
bytes@1.0.0: | |||
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" | |||
@@ -1070,10 +1066,6 @@ caniuse-db@^1.0.30000617: | |||
version "1.0.30000622" | |||
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000622.tgz#9d9690b577384990a58e33ebb903a14da735e5fd" | |||
case-sensitive-paths-webpack-plugin@1.1.4: | |||
version "1.1.4" | |||
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.1.4.tgz#8aaedd5699a86cac2b34cf40d9b4145758978472" | |||
caseless@~0.11.0: | |||
version "0.11.0" | |||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" | |||
@@ -1388,13 +1380,6 @@ cross-env@2.0.0: | |||
cross-spawn "^3.0.1" | |||
lodash.assign "^3.2.0" | |||
cross-spawn@4.0.0: | |||
version "4.0.0" | |||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.0.tgz#8254774ab4786b8c5b3cf4dfba66ce563932c252" | |||
dependencies: | |||
lru-cache "^4.0.1" | |||
which "^1.2.9" | |||
cross-spawn@^3.0.1: | |||
version "3.0.1" | |||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" | |||
@@ -1754,10 +1739,6 @@ dom-serializer@0, dom-serializer@~0.1.0: | |||
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" | |||
domain-browser@^1.1.1: | |||
version "1.1.7" | |||
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" | |||
@@ -1795,10 +1776,6 @@ domutils@1.5.1, domutils@^1.5.1: | |||
dom-serializer "0" | |||
domelementtype "1" | |||
dotenv@2.0.0: | |||
version "2.0.0" | |||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949" | |||
duplexer@^0.1.1: | |||
version "0.1.1" | |||
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" | |||
@@ -2228,13 +2205,6 @@ expose-loader@0.7.1: | |||
version "0.7.1" | |||
resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.1.tgz#411ee89443aa682f8ea9d9111accf41bfd7e94d9" | |||
express-http-proxy@0.6.0: | |||
version "0.6.0" | |||
resolved "https://registry.yarnpkg.com/express-http-proxy/-/express-http-proxy-0.6.0.tgz#2a7bdbefe127f85bfab2c51e869c7488b8d257d0" | |||
dependencies: | |||
raw-body "^1.1.6" | |||
type-is "^1.2.0" | |||
express@4.13.4: | |||
version "4.13.4" | |||
resolved "https://registry.yarnpkg.com/express/-/express-4.13.4.tgz#3c0b76f3c77590c8345739061ec0bd3ba067ec24" | |||
@@ -2403,10 +2373,6 @@ fileset@^2.0.2: | |||
glob "^7.0.3" | |||
minimatch "^3.0.3" | |||
filesize@3.3.0: | |||
version "3.3.0" | |||
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122" | |||
filesize@^3.5.4: | |||
version "3.5.6" | |||
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.6.tgz#5fd98f3eac94ec9516ef8ed5782fad84a01a0a1a" | |||
@@ -2442,7 +2408,7 @@ finalhandler@~1.0.0: | |||
statuses "~1.3.1" | |||
unpipe "~1.0.0" | |||
find-cache-dir@0.1.1, find-cache-dir@^0.1.1: | |||
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: | |||
@@ -2645,13 +2611,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" | |||
@@ -2685,7 +2644,7 @@ growly@^1.3.0: | |||
version "1.3.0" | |||
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" | |||
gzip-size@3.0.0, gzip-size@^3.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: | |||
@@ -2876,7 +2835,7 @@ http-errors@~1.6.1: | |||
setprototypeof "1.0.3" | |||
statuses ">= 1.3.1 < 2" | |||
http-proxy-middleware@~0.17.1: | |||
http-proxy-middleware@0.17.3, http-proxy-middleware@~0.17.1: | |||
version "0.17.3" | |||
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.3.tgz#940382147149b856084f5534752d5b5a8168cd1d" | |||
dependencies: | |||
@@ -2908,10 +2867,6 @@ 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.8: | |||
version "0.4.8" | |||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.8.tgz#c6019a7595f2cefca702eab694a010bcd9298d20" | |||
iconv-lite@~0.4.13: | |||
version "0.4.15" | |||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" | |||
@@ -3883,7 +3838,7 @@ lodash@^4.0.0, lodash@^4.15.0, lodash@^4.16.4, lodash@^4.17.2: | |||
version "4.17.3" | |||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.3.tgz#557ed7d2a9438cac5fd5a43043ca60cb455e01f7" | |||
lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.6.1: | |||
lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: | |||
version "4.17.4" | |||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" | |||
@@ -4025,18 +3980,6 @@ 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.2: | |||
version "3.0.2" | |||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.2.tgz#0f398a7300ea441e9c348c83d98ab8c9dbf9c40a" | |||
dependencies: | |||
brace-expansion "^1.0.0" | |||
minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: | |||
version "3.0.3" | |||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" | |||
@@ -4415,7 +4358,7 @@ path-browserify@0.0.0: | |||
version "0.0.0" | |||
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" | |||
path-exists@2.1.0, path-exists@^2.0.0: | |||
path-exists@^2.0.0: | |||
version "2.1.0" | |||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" | |||
dependencies: | |||
@@ -4829,10 +4772,6 @@ process@^0.11.0, 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: | |||
version "1.1.8" | |||
resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" | |||
@@ -4927,13 +4866,6 @@ range-parser@~1.0.3: | |||
version "1.0.3" | |||
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" | |||
raw-body@^1.1.6: | |||
version "1.3.4" | |||
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.3.4.tgz#ccc7ddfc46b72861cdd5bb433c840b70b6f27f54" | |||
dependencies: | |||
bytes "1.0.0" | |||
iconv-lite "0.4.8" | |||
rc-align@2.x: | |||
version "2.3.3" | |||
resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-2.3.3.tgz#15e2fd329fde9c2dec16e4a0e0ec20fba2ffdbc0" | |||
@@ -4985,10 +4917,6 @@ react-addons-test-utils@15.4.2: | |||
fbjs "^0.8.4" | |||
object-assign "^4.1.0" | |||
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-dev-utils@0.2.1: | |||
version "0.2.1" | |||
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-0.2.1.tgz#c017d6f530502b28b735dbac3841a7b8665838f5" | |||
@@ -5037,13 +4965,6 @@ react-modal@^1.6.4: | |||
exenv "1.2.0" | |||
lodash.assign "^4.2.0" | |||
react-proxy@^1.1.7: | |||
version "1.1.8" | |||
resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" | |||
dependencies: | |||
lodash "^4.6.1" | |||
react-deep-force-update "^1.0.0" | |||
react-redux@4.4.1: | |||
version "4.4.1" | |||
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.1.tgz#f0be889d3dff0b9caf9f4e31fdcc0d0b481aa311" | |||
@@ -5076,13 +4997,6 @@ react-side-effect@1.0.2: | |||
dependencies: | |||
fbjs "0.1.0-alpha.10" | |||
react-transform-hmr@1.0.4: | |||
version "1.0.4" | |||
resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" | |||
dependencies: | |||
global "^4.3.0" | |||
react-proxy "^1.1.7" | |||
react-virtualized@^9.1.0: | |||
version "9.1.0" | |||
resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.1.0.tgz#ac022281860f832ffecaf7863c099813681be521" | |||
@@ -5180,12 +5094,6 @@ rechoir@^0.6.2: | |||
dependencies: | |||
resolve "^1.1.6" | |||
recursive-readdir@2.1.0: | |||
version "2.1.0" | |||
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.1.0.tgz#78b7bfd79582d3d7596b8ff1bd29fbd50229f6aa" | |||
dependencies: | |||
minimatch "3.0.2" | |||
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" | |||
@@ -5884,7 +5792,7 @@ type-check@~0.3.2: | |||
dependencies: | |||
prelude-ls "~1.1.2" | |||
type-is@^1.2.0, type-is@~1.6.14, type-is@~1.6.6: | |||
type-is@~1.6.14, type-is@~1.6.6: | |||
version "1.6.14" | |||
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" | |||
dependencies: |