diff options
-rw-r--r-- | docs/dev/webpack.md | 26 | ||||
-rw-r--r-- | lib/csp.js | 2 | ||||
-rw-r--r-- | package.json | 8 | ||||
-rw-r--r-- | public/css/github-extract.css | 37 | ||||
-rw-r--r-- | public/js/extra.js | 2 | ||||
-rw-r--r-- | public/views/codimd/head.ejs | 1 | ||||
-rw-r--r-- | public/views/html.hbs | 1 | ||||
-rw-r--r-- | public/views/pretty.ejs | 1 | ||||
-rw-r--r-- | public/views/slide.ejs | 1 | ||||
-rw-r--r-- | webpack.common.js (renamed from webpackBaseConfig.js) | 10 | ||||
-rw-r--r-- | webpack.config.js | 41 | ||||
-rw-r--r-- | webpack.dev.js | 14 | ||||
-rw-r--r-- | webpack.htmlexport.js | 25 | ||||
-rw-r--r-- | webpack.prod.js | 23 | ||||
-rw-r--r-- | webpack.production.js | 75 | ||||
-rw-r--r-- | yarn.lock | 45 |
16 files changed, 146 insertions, 166 deletions
diff --git a/docs/dev/webpack.md b/docs/dev/webpack.md new file mode 100644 index 00000000..7b391f3a --- /dev/null +++ b/docs/dev/webpack.md @@ -0,0 +1,26 @@ +# Webpack Docs +## `webpack.common.js` +This file contains all common definition for chunks and plugins, that are needed by the whole app. + +**TODO:** Document which entry points are used for what. + +## `webpack.htmlexport.js` +Separate config for the "save as html" feature. +Packs all CSS from `public/js/htmlExport.js` to `build/html.min.css`. +This file is then downloaded by client-side JS and used to create the HTML. +See `exportToHTML()` in `public/js/extra.js`. + + +## `webpack.dev.js` +The development config uses both common configs, enables development mode and enables "cheap" source maps (lines only). +If you need more detailed source maps while developing, you might want to use the `source-maps` option. +See https://webpack.js.org/configuration/devtool/ for details. + +## `webpack.prod.js` +The production config uses both common configs and enables production mode. +This automatically enables various optimizations (e.g. UglifyJS). See https://webpack.js.org/concepts/mode/ for details. + +For the global app config, the name of the emitted chunks is changed to include the content hash. +See https://webpack.js.org/guides/caching/ on why this is a good idea. + +For the HTML export config, CSS minification is enabled. @@ -9,7 +9,7 @@ var defaultDirectives = { // ^ TODO: Remove unsafe-eval - webpack script-loader issues https://github.com/hackmdio/codimd/issues/594 imgSrc: ['*'], styleSrc: ['\'self\'', '\'unsafe-inline\'', 'https://assets-cdn.github.com'], // unsafe-inline is required for some libs, plus used in views - fontSrc: ['\'self\'', 'https://public.slidesharecdn.com'], + fontSrc: ['\'self\'', 'data:', 'https://public.slidesharecdn.com'], objectSrc: ['*'], // Chrome PDF viewer treats PDFs as objects :/ mediaSrc: ['*'], childSrc: ['*'], diff --git a/package.json b/package.json index 08e39b26..a887ada1 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "test": "npm run-script standard && npm run-script jsonlint", "jsonlint": "find . -not -path './node_modules/*' -type f -name '*.json' -o -type f -name '*.json.example' | while read json; do echo $json ; jq . $json; done", "standard": "node ./node_modules/standard/bin/cmd.js", - "dev": "webpack --config webpack.config.js --mode=production --progress --colors --watch", - "build": "webpack --config webpack.production.js --progress --colors --bail", + "dev": "webpack --config webpack.dev.js --progress --colors --watch", + "build": "webpack --config webpack.prod.js --progress --colors --bail", "postinstall": "bin/heroku", "start": "node app.js", "doctoc": "doctoc --title='# Table of Contents' README.md" @@ -47,7 +47,7 @@ "gist-embed": "~2.6.0", "graceful-fs": "^4.1.11", "handlebars": "^4.0.6", - "helmet": "^3.3.0", + "helmet": "^3.13.0", "highlight.js": "~9.12.0", "i18n": "^0.8.3", "imgur": "git+https://github.com/hackmdio/node-imgur.git", @@ -89,7 +89,6 @@ "morgan": "^1.7.0", "mysql": "^2.12.0", "node-uuid": "^1.4.7", - "octicons": "~4.4.0", "passport": "^0.4.0", "passport-dropbox-oauth2": "^1.1.0", "passport-facebook": "^2.1.1", @@ -188,6 +187,7 @@ "url-loader": "^1.0.1", "webpack": "^4.14.0", "webpack-cli": "^3.1.0", + "webpack-merge": "^4.1.4", "webpack-parallel-uglify-plugin": "^1.1.0" }, "standard": { diff --git a/public/css/github-extract.css b/public/css/github-extract.css index 7f7058a0..f7b15445 100644 --- a/public/css/github-extract.css +++ b/public/css/github-extract.css @@ -119,23 +119,24 @@ color: #ddd; } -.markdown-body h1 .octicon-link, -.markdown-body h2 .octicon-link, -.markdown-body h3 .octicon-link, -.markdown-body h4 .octicon-link, -.markdown-body h5 .octicon-link, -.markdown-body h6 .octicon-link { +.markdown-body h1 .fa-link, +.markdown-body h2 .fa-link, +.markdown-body h3 .fa-link, +.markdown-body h4 .fa-link, +.markdown-body h5 .fa-link, +.markdown-body h6 .fa-link { color: #000; vertical-align: middle; visibility: hidden; + font-size: 16px; } -.night .markdown-body h1 .octicon-link, -.night .markdown-body h2 .octicon-link, -.night .markdown-body h3 .octicon-link, -.night .markdown-body h4 .octicon-link, -.night .markdown-body h5 .octicon-link, -.night .markdown-body h6 .octicon-link { +.night .markdown-body h1 .fa-link, +.night .markdown-body h2 .fa-link, +.night .markdown-body h3 .fa-link, +.night .markdown-body h4 .fa-link, +.night .markdown-body h5 .fa-link, +.night .markdown-body h6 .fa-link { color: #fff; } @@ -148,12 +149,12 @@ text-decoration: none; } -.markdown-body h1:hover .anchor .octicon-link, -.markdown-body h2:hover .anchor .octicon-link, -.markdown-body h3:hover .anchor .octicon-link, -.markdown-body h4:hover .anchor .octicon-link, -.markdown-body h5:hover .anchor .octicon-link, -.markdown-body h6:hover .anchor .octicon-link { +.markdown-body h1:hover .anchor .fa-link, +.markdown-body h2:hover .anchor .fa-link, +.markdown-body h3:hover .anchor .fa-link, +.markdown-body h4:hover .anchor .fa-link, +.markdown-body h5:hover .anchor .fa-link, +.markdown-body h6:hover .anchor .fa-link { visibility: visible; } diff --git a/public/js/extra.js b/public/js/extra.js index 7a1077d5..dd264047 100644 --- a/public/js/extra.js +++ b/public/js/extra.js @@ -834,7 +834,7 @@ const anchorForId = id => { const anchor = document.createElement('a') anchor.className = 'anchor hidden-xs' anchor.href = `#${id}` - anchor.innerHTML = '<span class="octicon octicon-link"></span>' + anchor.innerHTML = '<i class="fa fa-link"></i>' anchor.title = id return anchor } diff --git a/public/views/codimd/head.ejs b/public/views/codimd/head.ejs index b76eb706..356ded6d 100644 --- a/public/views/codimd/head.ejs +++ b/public/views/codimd/head.ejs @@ -12,7 +12,6 @@ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fork-awesome/1.1.3/css/fork-awesome.min.css" integrity="sha256-ZhApazu+kejqTYhMF+1DzNKjIzP7KXu6AzyXcC1gMus=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-social/4.9.0/bootstrap-social.min.css" integrity="sha256-02JtFTurpwBjQJ6q13iJe82/NF0RbZlJroDegK5g87Y=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css" integrity="sha256-3iu9jgsy9TpTwXKb7bNQzqWekRX7pPK+2OLj3R922fo=" crossorigin="anonymous" /> -<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/octicons.min.css" integrity="sha256-4eCms8tUm+iL29tUvmRhNRnz/7lNI4oTtQzqa/uM2dI=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/emojify.js/1.1.0/css/basic/emojify.min.css" integrity="sha256-UOrvMOsSDSrW6szVLe8ZDZezBxh5IoIfgTwdNDgTjiU=" crossorigin="anonymous" /> <%- include ../build/index-header %> <%- include ../shared/polyfill %> diff --git a/public/views/html.hbs b/public/views/html.hbs index cc08b6fe..490d31a4 100644 --- a/public/views/html.hbs +++ b/public/views/html.hbs @@ -18,7 +18,6 @@ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fork-awesome/1.1.3/css/fork-awesome.min.css" integrity="sha256-ZhApazu+kejqTYhMF+1DzNKjIzP7KXu6AzyXcC1gMus=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css" integrity="sha256-3iu9jgsy9TpTwXKb7bNQzqWekRX7pPK+2OLj3R922fo=" crossorigin="anonymous" /> - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/octicons.min.css" integrity="sha256-4eCms8tUm+iL29tUvmRhNRnz/7lNI4oTtQzqa/uM2dI=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.5.1/themes/prism.min.css" integrity="sha256-vtR0hSWRc3Tb26iuN2oZHt3KRUomwTufNIf5/4oeCyg=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github-gist.min.css" integrity="sha256-tAflq+ymku3Khs+I/WcAneIlafYgDiOQ9stIHH985Wo=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/emojify.js/1.1.0/css/basic/emojify.min.css" integrity="sha256-UOrvMOsSDSrW6szVLe8ZDZezBxh5IoIfgTwdNDgTjiU=" crossorigin="anonymous" /> diff --git a/public/views/pretty.ejs b/public/views/pretty.ejs index a20f2296..a087be7f 100644 --- a/public/views/pretty.ejs +++ b/public/views/pretty.ejs @@ -21,7 +21,6 @@ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fork-awesome/1.1.3/css/fork-awesome.min.css" integrity="sha256-ZhApazu+kejqTYhMF+1DzNKjIzP7KXu6AzyXcC1gMus=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css" integrity="sha256-3iu9jgsy9TpTwXKb7bNQzqWekRX7pPK+2OLj3R922fo=" crossorigin="anonymous" /> - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/octicons.min.css" integrity="sha256-4eCms8tUm+iL29tUvmRhNRnz/7lNI4oTtQzqa/uM2dI=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/emojify.js/1.1.0/css/basic/emojify.min.css" integrity="sha256-UOrvMOsSDSrW6szVLe8ZDZezBxh5IoIfgTwdNDgTjiU=" crossorigin="anonymous" /> <%- include build/pretty-header %> <%- include shared/polyfill %> diff --git a/public/views/slide.ejs b/public/views/slide.ejs index 2b069f2d..42fb5199 100644 --- a/public/views/slide.ejs +++ b/public/views/slide.ejs @@ -18,7 +18,6 @@ <% if(useCDN) { %> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fork-awesome/1.1.3/css/fork-awesome.min.css" integrity="sha256-ZhApazu+kejqTYhMF+1DzNKjIzP7KXu6AzyXcC1gMus=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css" integrity="sha256-3iu9jgsy9TpTwXKb7bNQzqWekRX7pPK+2OLj3R922fo=" crossorigin="anonymous" /> - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/octicons.min.css" integrity="sha256-4eCms8tUm+iL29tUvmRhNRnz/7lNI4oTtQzqa/uM2dI=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.6.0/css/reveal.min.css" integrity="sha256-ol2N5Xr80jdDqxK0lte3orKGb9Ja3sOnpAUV7TTADmg=" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/emojify.js/1.1.0/css/basic/emojify.min.css" integrity="sha256-UOrvMOsSDSrW6szVLe8ZDZezBxh5IoIfgTwdNDgTjiU=" crossorigin="anonymous" /> <%- include build/slide-header %> diff --git a/webpackBaseConfig.js b/webpack.common.js index 8df19b71..efd2b3e2 100644 --- a/webpackBaseConfig.js +++ b/webpack.common.js @@ -10,6 +10,7 @@ var gracefulFs = require('graceful-fs') gracefulFs.gracefulify(fs) module.exports = { + name: 'app', plugins: [ new webpack.ProvidePlugin({ Visibility: 'visibilityjs', @@ -238,8 +239,7 @@ module.exports = { path.join(__dirname, 'node_modules/bootstrap/dist/css/bootstrap.min.css'), path.join(__dirname, 'node_modules/fork-awesome/css/fork-awesome.min.css'), path.join(__dirname, 'public/css/bootstrap-social.css'), - path.join(__dirname, 'node_modules/ionicons/css/ionicons.min.css'), - path.join(__dirname, 'node_modules/octicons/build/octicons.css') + path.join(__dirname, 'node_modules/ionicons/css/ionicons.min.css') ], 'index-pack': [ 'babel-polyfill', @@ -288,8 +288,7 @@ module.exports = { 'pretty-styles-pack': [ path.join(__dirname, 'node_modules/bootstrap/dist/css/bootstrap.min.css'), path.join(__dirname, 'node_modules/fork-awesome/css/fork-awesome.min.css'), - path.join(__dirname, 'node_modules/ionicons/css/ionicons.min.css'), - path.join(__dirname, 'node_modules/octicons/build/octicons.css') + path.join(__dirname, 'node_modules/ionicons/css/ionicons.min.css') ], 'pretty-pack': [ 'babel-polyfill', @@ -325,8 +324,7 @@ module.exports = { ], 'slide-styles-pack': [ path.join(__dirname, 'node_modules/fork-awesome/css/fork-awesome.min.css'), - path.join(__dirname, 'node_modules/ionicons/css/ionicons.min.css'), - path.join(__dirname, 'node_modules/octicons/build/octicons.css') + path.join(__dirname, 'node_modules/ionicons/css/ionicons.min.css') ], 'slide-pack': [ 'babel-polyfill', diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 3c7c727e..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseConfig = require('./webpackBaseConfig') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -var path = require('path') - -module.exports = [Object.assign({}, baseConfig, { - plugins: baseConfig.plugins.concat([ - new MiniCssExtractPlugin({ - filename: '[name].css', - chunkFilename: '[id].css' - }) - - ]), - devtool: 'source-map' -}), { - devtool: 'source-map', - entry: { - htmlExport: path.join(__dirname, 'public/js/htmlExport.js') - }, - module: { - rules: [{ - test: /\.css$/, - use: ['style-loader', 'css-loader'] - }, { - test: /\.scss$/, - use: ['style-loader', 'sass-loader'] - }, { - test: /\.less$/, - use: ['style-loader', 'less-loader'] - }] - }, - output: { - path: path.join(__dirname, 'public/build'), - publicPath: '/build/', - filename: '[name].js' - }, - plugins: [ - new MiniCssExtractPlugin({ - filename: 'html.min.css' - }) - ] -}] diff --git a/webpack.dev.js b/webpack.dev.js new file mode 100644 index 00000000..b1ed3612 --- /dev/null +++ b/webpack.dev.js @@ -0,0 +1,14 @@ +const common = require('./webpack.common.js') +const htmlexport = require('./webpack.htmlexport') +const merge = require('webpack-merge') + +module.exports = [ + // merge common config + merge(common, { + mode: 'development', + devtool: 'cheap-module-eval-source-map' + }), + merge(htmlexport, { + mode: 'development', + devtool: 'cheap-module-eval-source-map' + })] diff --git a/webpack.htmlexport.js b/webpack.htmlexport.js new file mode 100644 index 00000000..dd6f4c01 --- /dev/null +++ b/webpack.htmlexport.js @@ -0,0 +1,25 @@ +const MiniCssExtractPlugin = require('mini-css-extract-plugin') +const path = require('path') + +module.exports = { + name: 'save-as-html', + entry: { + htmlExport: path.join(__dirname, 'public/js/htmlExport.js') + }, + module: { + rules: [{ + test: /\.css$/, + use: [MiniCssExtractPlugin.loader, 'css-loader'] + }] + }, + output: { + path: path.join(__dirname, 'public/build'), + publicPath: '/build/', + filename: '[name].js' + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: 'html.min.css' + }) + ] +} diff --git a/webpack.prod.js b/webpack.prod.js new file mode 100644 index 00000000..188d9881 --- /dev/null +++ b/webpack.prod.js @@ -0,0 +1,23 @@ +const common = require('./webpack.common.js') +const htmlexport = require('./webpack.htmlexport') +const merge = require('webpack-merge') +const path = require('path') +const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') + +module.exports = [ + merge(common, { + mode: 'production', + output: { + path: path.join(__dirname, 'public/build'), + publicPath: '/build/', + filename: '[name].[contenthash].js' + } + }), + merge(htmlexport, { + mode: 'production', + optimization: { + minimizer: [ + new OptimizeCSSAssetsPlugin({}) + ] + } + })] diff --git a/webpack.production.js b/webpack.production.js deleted file mode 100644 index 67387583..00000000 --- a/webpack.production.js +++ /dev/null @@ -1,75 +0,0 @@ -var baseConfig = require('./webpackBaseConfig') -var webpack = require('webpack') -var path = require('path') -const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') -const UglifyJsPlugin = require('uglifyjs-webpack-plugin') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') - -module.exports = [Object.assign({}, baseConfig, { - plugins: baseConfig.plugins.concat([ - new webpack.DefinePlugin({ - 'process.env': { - 'NODE_ENV': JSON.stringify('production') - } - }) - ]), - - optimization: { - minimizer: [ - new UglifyJsPlugin({ - parallel: true, - cache: true - }) - ], - splitChunks: { - chunks: 'async', - minChunks: Infinity - } - }, - - output: { - path: path.join(__dirname, 'public/build'), - publicPath: '/build/', - filename: '[id].[name].[hash].js' - // baseUrl: '<%- url %>' - } -}), { - // This Chunk is used in the 'save as html' feature. - // It is embedded in the html file and contains CSS for styling. - - entry: { - htmlExport: path.join(__dirname, 'public/js/htmlExport.js') - }, - - output: { - path: path.join(__dirname, 'public/build'), - publicPath: '/build/', - filename: '[name].js' - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env': { - 'NODE_ENV': JSON.stringify('production') - } - }), - new MiniCssExtractPlugin({ - filename: 'html.min.css' - }) - ], - - optimization: { - minimizer: [ - new OptimizeCSSAssetsPlugin({}) - ] - }, - - module: { - rules: [{ - test: /\.css$/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader' - ] - }] - } -}] @@ -3963,6 +3963,11 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" +feature-policy@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.1.0.tgz#782d4865b1f261aa6ff6d0bba0c4eaeb2fd92862" + integrity sha512-Sq+O5vUN0wQGOLGKzDXY1xCY6dOPic2ufMEF0xpVHIW+Dr8LocJ7Jhnvo5ZBCXKqWUgmGIqcF5AIJR+Wnq2SQw== + figures@^1.0.1, figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -4889,27 +4894,33 @@ he@1.1.x, he@^1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= -helmet-csp@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.7.0.tgz#7934094617d1feb7bb2dc43bb7d9e8830f774716" - integrity sha512-IGIAkWnxjRbgMXFA2/kmDqSIrIaSfZ6vhMHlSHw7jm7Gm9nVVXqwJ2B1YEpYrJsLrqY+w2Bbimk7snux9+sZAw== +helmet-crossdomain@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz#707e2df930f13ad61f76ed08e1bb51ab2b2e85fa" + integrity sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg== + +helmet-csp@2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.7.1.tgz#e8e0b5186ffd4db625cfcce523758adbfadb9dca" + integrity sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ== dependencies: camelize "1.0.0" content-security-policy-builder "2.0.0" dasherize "2.0.0" - lodash.reduce "4.6.0" platform "1.3.5" -helmet@^3.3.0: - version "3.12.1" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.12.1.tgz#8b05bbd60f3966d70f13dad0de2c1d6c1a8303f1" - integrity sha512-/CsAcbPIHgiGde395IkHUZyRLW126RJ6AtxFy6Y6bxhd44Qq8cZ5BBFZ0xNUSbcgX57j32Emh3OhWz/0XgAB5Q== +helmet@^3.13.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.14.0.tgz#ff99e0467fe3e9205300071370024dd6e6690317" + integrity sha512-VUOjHxegTX/dIr1KeU4ZrIkP8k0/nKKD6vNBT1LCS2+q5KO1oMFKGMVdMw/pUcxXbn/z8yP9rfyMZSTpxXPPMg== dependencies: dns-prefetch-control "0.1.0" dont-sniff-mimetype "1.0.0" expect-ct "0.1.1" + feature-policy "0.1.0" frameguard "3.0.0" - helmet-csp "2.7.0" + helmet-crossdomain "0.3.0" + helmet-csp "2.7.1" hide-powered-by "1.0.0" hpkp "2.0.0" hsts "2.1.0" @@ -6359,7 +6370,7 @@ lodash.pick@^4.2.1: resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= -lodash.reduce@4.6.0, lodash.reduce@^4.4.0: +lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= @@ -7490,11 +7501,6 @@ object.values@^1.0.4: function-bind "^1.1.0" has "^1.0.1" -octicons@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/octicons/-/octicons-4.4.0.tgz#aca3bd32f5dc1d907a8d0de744f78e0c54e19446" - integrity sha1-rKO9MvXcHZB6jQ3nRPeODFThlEY= - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -11168,6 +11174,13 @@ webpack-cli@^3.1.0: v8-compile-cache "^2.0.0" yargs "^12.0.1" +webpack-merge@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" + integrity sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ== + dependencies: + lodash "^4.17.5" + webpack-parallel-uglify-plugin@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/webpack-parallel-uglify-plugin/-/webpack-parallel-uglify-plugin-1.1.0.tgz#252a6c796bf79a8047b00de2cf08c23aa9861441" |