aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web
diff options
context:
space:
mode:
authorStas Vilchik <stas.vilchik@sonarsource.com>2017-06-14 11:10:48 +0200
committerStas Vilchik <stas.vilchik@sonarsource.com>2017-06-15 00:22:22 -0700
commitf7e9c0f2ac6d5a80d2719ea0cecfa4ced05216d4 (patch)
tree4b3d737eb2e756674cade0b163be3432af122647 /server/sonar-web
parentb33d63ad5fb20e1b25ab377770fd91c6cb8f7cda (diff)
downloadsonarqube-f7e9c0f2ac6d5a80d2719ea0cecfa4ced05216d4.tar.gz
sonarqube-f7e9c0f2ac6d5a80d2719ea0cecfa4ced05216d4.zip
simplify config of sonar-web
Diffstat (limited to 'server/sonar-web')
-rw-r--r--server/sonar-web/.eslintignore3
-rw-r--r--server/sonar-web/config/env.js42
-rw-r--r--server/sonar-web/config/jest/FileStub.js2
-rw-r--r--server/sonar-web/config/jest/SetupTestEnvironment.js4
-rw-r--r--server/sonar-web/config/paths.js17
-rw-r--r--server/sonar-web/config/polyfills.js1
-rw-r--r--server/sonar-web/config/webpack.config.js162
-rw-r--r--server/sonar-web/config/webpack/webpack.config.base.js104
-rw-r--r--server/sonar-web/config/webpack/webpack.config.dev.js95
-rw-r--r--server/sonar-web/config/webpack/webpack.config.fast.js47
-rw-r--r--server/sonar-web/config/webpack/webpack.config.prod.js89
-rw-r--r--server/sonar-web/package.json12
-rw-r--r--server/sonar-web/scripts/analyze.js5
-rw-r--r--server/sonar-web/scripts/build.js44
-rw-r--r--server/sonar-web/scripts/start.js172
-rw-r--r--server/sonar-web/scripts/test.js8
-rw-r--r--server/sonar-web/scripts/utils/formatSize.js10
-rw-r--r--server/sonar-web/yarn.lock104
18 files changed, 305 insertions, 616 deletions
diff --git a/server/sonar-web/.eslintignore b/server/sonar-web/.eslintignore
index fbff2a98255..49b0bda4a35 100644
--- a/server/sonar-web/.eslintignore
+++ b/server/sonar-web/.eslintignore
@@ -1,5 +1,2 @@
src/main/js/libs
src/main/js/app/components/GlobalFooterBranding.js
-tests
-scripts
-config
diff --git a/server/sonar-web/config/env.js b/server/sonar-web/config/env.js
deleted file mode 100644
index 77aa261dab7..00000000000
--- a/server/sonar-web/config/env.js
+++ /dev/null
@@ -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;
-
diff --git a/server/sonar-web/config/jest/FileStub.js b/server/sonar-web/config/jest/FileStub.js
index 70a6c197806..bff56dc8933 100644
--- a/server/sonar-web/config/jest/FileStub.js
+++ b/server/sonar-web/config/jest/FileStub.js
@@ -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';
diff --git a/server/sonar-web/config/jest/SetupTestEnvironment.js b/server/sonar-web/config/jest/SetupTestEnvironment.js
index 536db746157..64c8d0c15aa 100644
--- a/server/sonar-web/config/jest/SetupTestEnvironment.js
+++ b/server/sonar-web/config/jest/SetupTestEnvironment.js
@@ -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('.');
};
diff --git a/server/sonar-web/config/paths.js b/server/sonar-web/config/paths.js
index 3773a6a6439..5b380588750 100644
--- a/server/sonar-web/config/paths.js
+++ b/server/sonar-web/config/paths.js
@@ -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
};
-
diff --git a/server/sonar-web/config/polyfills.js b/server/sonar-web/config/polyfills.js
index 3b51c254e7a..fdb2b100715 100644
--- a/server/sonar-web/config/polyfills.js
+++ b/server/sonar-web/config/polyfills.js
@@ -19,4 +19,3 @@
*/
import 'babel-polyfill';
import 'whatwg-fetch';
-
diff --git a/server/sonar-web/config/webpack.config.js b/server/sonar-web/config/webpack.config.js
new file mode 100644
index 00000000000..33fe812c428
--- /dev/null
+++ b/server/sonar-web/config/webpack.config.js
@@ -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'
+ }
+});
diff --git a/server/sonar-web/config/webpack/webpack.config.base.js b/server/sonar-web/config/webpack/webpack.config.base.js
deleted file mode 100644
index e8b615bccf8..00000000000
--- a/server/sonar-web/config/webpack/webpack.config.base.js
+++ /dev/null
@@ -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'
- }
-};
diff --git a/server/sonar-web/config/webpack/webpack.config.dev.js b/server/sonar-web/config/webpack/webpack.config.dev.js
deleted file mode 100644
index 6f4f4da2fac..00000000000
--- a/server/sonar-web/config/webpack/webpack.config.dev.js
+++ /dev/null
@@ -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;
diff --git a/server/sonar-web/config/webpack/webpack.config.fast.js b/server/sonar-web/config/webpack/webpack.config.fast.js
deleted file mode 100644
index f0fe4003a3e..00000000000
--- a/server/sonar-web/config/webpack/webpack.config.fast.js
+++ /dev/null
@@ -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;
diff --git a/server/sonar-web/config/webpack/webpack.config.prod.js b/server/sonar-web/config/webpack/webpack.config.prod.js
deleted file mode 100644
index 0d351f8eaf1..00000000000
--- a/server/sonar-web/config/webpack/webpack.config.prod.js
+++ /dev/null
@@ -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;
diff --git a/server/sonar-web/package.json b/server/sonar-web/package.json
index c2a639ea9df..90b1155bfec 100644
--- a/server/sonar-web/package.json
+++ b/server/sonar-web/package.json
@@ -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",
diff --git a/server/sonar-web/scripts/analyze.js b/server/sonar-web/scripts/analyze.js
index 6c9b6dfd10e..dd1121b38c2 100644
--- a/server/sonar-web/scripts/analyze.js
+++ b/server/sonar-web/scripts/analyze.js
@@ -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());
diff --git a/server/sonar-web/scripts/build.js b/server/sonar-web/scripts/build.js
index 8cc9bbef3c6..321cb71c30c 100644
--- a/server/sonar-web/scripts/build.js
+++ b/server/sonar-web/scripts/build.js
@@ -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();
diff --git a/server/sonar-web/scripts/start.js b/server/sonar-web/scripts/start.js
index c0ee1f90fe1..a985f1bddd7 100644
--- a/server/sonar-web/scripts/start.js
+++ b/server/sonar-web/scripts/start.js
@@ -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) {
diff --git a/server/sonar-web/scripts/test.js b/server/sonar-web/scripts/test.js
index 8ec88828387..b4f37491392 100644
--- a/server/sonar-web/scripts/test.js
+++ b/server/sonar-web/scripts/test.js
@@ -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);
-
diff --git a/server/sonar-web/scripts/utils/formatSize.js b/server/sonar-web/scripts/utils/formatSize.js
index 384f686866f..e06ba0e183f 100644
--- a/server/sonar-web/scripts/utils/formatSize.js
+++ b/server/sonar-web/scripts/utils/formatSize.js
@@ -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];
};
diff --git a/server/sonar-web/yarn.lock b/server/sonar-web/yarn.lock
index 322bb67a3c1..22ab3755dd3 100644
--- a/server/sonar-web/yarn.lock
+++ b/server/sonar-web/yarn.lock
@@ -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: