From d4a9bb3c7e090f5fbea4df596be0c6261b3b4ac3 Mon Sep 17 00:00:00 2001 From: Sheogorath Date: Thu, 4 Oct 2018 03:02:55 +0200 Subject: [PATCH 1/7] Add `data:` URL to CSP and upgrade helmet Seems like the old version of helmet had a problem with `data:`. This patch upgrades to the latest version and adds the CSP rule to allow Google Fonts and the offline version of it, to properly include the fonts and no longer throw ugly error messages at us. Signed-off-by: Sheogorath --- lib/csp.js | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/csp.js b/lib/csp.js index 0987df8..96be533 100644 --- a/lib/csp.js +++ b/lib/csp.js @@ -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 6d46122..6a48e90 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,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", From 9a2dcd40d37c01896deeae0c8059564b4bdd6dc1 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Mon, 8 Oct 2018 10:05:13 +0200 Subject: [PATCH 2/7] Rename Webpack config to official recommendation Signed-off-by: David Mehren --- package.json | 4 ++-- webpackBaseConfig.js => webpack.common.js | 0 webpack.config.js => webpack.dev.js | 2 +- webpack.production.js => webpack.prod.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename webpackBaseConfig.js => webpack.common.js (100%) rename webpack.config.js => webpack.dev.js (94%) rename webpack.production.js => webpack.prod.js (97%) diff --git a/package.json b/package.json index 08e39b2..44e2244 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" diff --git a/webpackBaseConfig.js b/webpack.common.js similarity index 100% rename from webpackBaseConfig.js rename to webpack.common.js diff --git a/webpack.config.js b/webpack.dev.js similarity index 94% rename from webpack.config.js rename to webpack.dev.js index 3c7c727..d0d1a42 100644 --- a/webpack.config.js +++ b/webpack.dev.js @@ -1,4 +1,4 @@ -var baseConfig = require('./webpackBaseConfig') +var baseConfig = require('./webpack.common') const MiniCssExtractPlugin = require('mini-css-extract-plugin') var path = require('path') diff --git a/webpack.production.js b/webpack.prod.js similarity index 97% rename from webpack.production.js rename to webpack.prod.js index 6738758..f3c7dad 100644 --- a/webpack.production.js +++ b/webpack.prod.js @@ -1,4 +1,4 @@ -var baseConfig = require('./webpackBaseConfig') +var baseConfig = require('./webpack.common') var webpack = require('webpack') var path = require('path') const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') From 9f92bba036860c61277d252a39a5417f67231bc1 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Wed, 10 Oct 2018 21:54:27 +0200 Subject: [PATCH 3/7] Use webpack-merge. Move html export config to own file. Delete unnecessary config options. Use cheap source maps. Signed-off-by: David Mehren --- package.json | 1 + webpack.common.js | 1 + webpack.dev.js | 53 +++++++------------------ webpack.htmlexport.js | 25 ++++++++++++ webpack.prod.js | 90 +++++++++---------------------------------- 5 files changed, 59 insertions(+), 111 deletions(-) create mode 100644 webpack.htmlexport.js diff --git a/package.json b/package.json index 44e2244..3aa28fa 100644 --- a/package.json +++ b/package.json @@ -188,6 +188,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/webpack.common.js b/webpack.common.js index 8df19b7..377992b 100644 --- a/webpack.common.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', diff --git a/webpack.dev.js b/webpack.dev.js index d0d1a42..b1ed361 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -1,41 +1,14 @@ -var baseConfig = require('./webpack.common') -const MiniCssExtractPlugin = require('mini-css-extract-plugin') -var path = require('path') +const common = require('./webpack.common.js') +const htmlexport = require('./webpack.htmlexport') +const merge = require('webpack-merge') -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' - }) - ] -}] +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 0000000..dd6f4c0 --- /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 index f3c7dad..188d988 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -1,75 +1,23 @@ -var baseConfig = require('./webpack.common') -var webpack = require('webpack') -var path = require('path') +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') -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 +module.exports = [ + merge(common, { + mode: 'production', + output: { + path: path.join(__dirname, 'public/build'), + publicPath: '/build/', + filename: '[name].[contenthash].js' } - }, - - 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' + }), + merge(htmlexport, { + mode: 'production', + optimization: { + minimizer: [ + new OptimizeCSSAssetsPlugin({}) ] - }] - } -}] + } + })] From ea027c9b19f6fae323b96d042d1b25ad7623ad56 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Wed, 10 Oct 2018 21:54:41 +0200 Subject: [PATCH 4/7] Add dev-docs for webpack. Signed-off-by: David Mehren --- docs/dev/webpack.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 docs/dev/webpack.md diff --git a/docs/dev/webpack.md b/docs/dev/webpack.md new file mode 100644 index 0000000..7b391f3 --- /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. From 7eed584c0197d0b5a93f58f8b645c0b84588d8e1 Mon Sep 17 00:00:00 2001 From: David Mehren Date: Wed, 10 Oct 2018 22:01:32 +0200 Subject: [PATCH 5/7] Update yarn.lock Signed-off-by: David Mehren --- yarn.lock | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/yarn.lock b/yarn.lock index ef1be26..838f53f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11168,6 +11168,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" From 1d452a6ed4c0bfac4dadd2c90fa53282222ebe1b Mon Sep 17 00:00:00 2001 From: Sheogorath Date: Thu, 4 Oct 2018 20:01:01 +0200 Subject: [PATCH 6/7] Remove dead package octicon Octicon no longer provides its CSS classes and this way is useless in CodiMD. Replacing all used classes in the UI and remove it from build system. Signed-off-by: Sheogorath --- package.json | 1 - public/css/github-extract.css | 37 ++++++++++++++++++----------------- public/js/extra.js | 2 +- public/views/codimd/head.ejs | 1 - public/views/html.hbs | 1 - public/views/pretty.ejs | 1 - public/views/slide.ejs | 1 - webpack.common.js | 9 +++------ 8 files changed, 23 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 3aa28fa..b0a906d 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/public/css/github-extract.css b/public/css/github-extract.css index 7f7058a..f7b1544 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 7a1077d..dd26404 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 = '' + anchor.innerHTML = '' anchor.title = id return anchor } diff --git a/public/views/codimd/head.ejs b/public/views/codimd/head.ejs index b76eb70..356ded6 100644 --- a/public/views/codimd/head.ejs +++ b/public/views/codimd/head.ejs @@ -12,7 +12,6 @@ - <%- include ../build/index-header %> <%- include ../shared/polyfill %> diff --git a/public/views/html.hbs b/public/views/html.hbs index cc08b6f..490d31a 100644 --- a/public/views/html.hbs +++ b/public/views/html.hbs @@ -18,7 +18,6 @@ - diff --git a/public/views/pretty.ejs b/public/views/pretty.ejs index a20f229..a087be7 100644 --- a/public/views/pretty.ejs +++ b/public/views/pretty.ejs @@ -21,7 +21,6 @@ - <%- include build/pretty-header %> <%- include shared/polyfill %> diff --git a/public/views/slide.ejs b/public/views/slide.ejs index 2b069f2..42fb519 100644 --- a/public/views/slide.ejs +++ b/public/views/slide.ejs @@ -18,7 +18,6 @@ <% if(useCDN) { %> - <%- include build/slide-header %> diff --git a/webpack.common.js b/webpack.common.js index 377992b..efd2b3e 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -239,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', @@ -289,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', @@ -326,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', From a7281a527575e4cdac2cd6d2bda603c996ebe22b Mon Sep 17 00:00:00 2001 From: Sheogorath Date: Thu, 11 Oct 2018 00:23:10 +0200 Subject: [PATCH 7/7] Update yarn.lock Signed-off-by: Sheogorath --- yarn.lock | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/yarn.lock b/yarn.lock index 838f53f..d4538db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"