From d1576d9f4bdb713cc7ef232cbcc78c770c747d7b Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sat, 11 May 2019 19:51:04 +0200 Subject: [PATCH 1/6] Cleanup server side renderer This makes server part of webpack build way faster during development, ~10x. Benchmark (my xps): - OLD: 19.35s - NEW: 1.97s --- server/pageRenderer.js | 118 ++++++++++++++++++++ server/render.js | 240 +---------------------------------------- server/server.js | 2 +- server/ssr.js | 125 +++++++++++++++++++++ 4 files changed, 247 insertions(+), 238 deletions(-) create mode 100644 server/pageRenderer.js create mode 100644 server/ssr.js diff --git a/server/pageRenderer.js b/server/pageRenderer.js new file mode 100644 index 0000000000..b80ae498b6 --- /dev/null +++ b/server/pageRenderer.js @@ -0,0 +1,118 @@ +//@flow +import fs from 'fs'; +import path from 'path'; +import serialize from 'serialize-javascript'; +import config from '../config/env'; +import webpackClient from '../config/webpack.client.js'; +import type { State } from '../app/types'; + +import 'source-map-support/register'; + +import manifest from '../app/assets/manifest.json'; + +let cachedAssets; +function retrieveAssets() { + if (__DEV__ || !cachedAssets) { + const { app, 'vendors~app': vendor, styles: appStyles } = JSON.parse( + fs + .readFileSync( + path.join(webpackClient.outputPath, 'webpack-assets.json') + ) + .toString() + ); + + const styles = [appStyles && appStyles.css] + .filter(Boolean) + .map(css => ``) + .join('\n'); + const scripts = [ + vendor && vendor.js, + app && app.js, + appStyles && appStyles.js + ] + .filter(Boolean) + .map(js => ``) + .join('\n'); + + cachedAssets = { scripts, styles }; + } + + return cachedAssets; +} + +const dllPlugin = __DEV__ ? '' : ''; + +export type PageRendererProps = { + body: string, + state: State | {||}, + helmet: * +}; + +export default function pageRenderer({ + body = '', + // $FlowFixMe / $TsPlsFix + state = {}, + helmet +}: PageRendererProps = {}) { + const { scripts, styles } = retrieveAssets(); + return ` + + + + + ${helmet ? helmet.title.toString() : ''} + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${helmet ? helmet.meta.toString() : ''} + + ${styles} + + +
${body}
+ + ${ + config.environment === 'production' + ? `` + : '' + } + + + ${dllPlugin} + ${scripts} + + + `; +} diff --git a/server/render.js b/server/render.js index 33055cf625..35bd640eff 100644 --- a/server/render.js +++ b/server/render.js @@ -1,238 +1,4 @@ -//@flow -import fs from 'fs'; -import path from 'path'; -import React from 'react'; -import { renderToString } from 'react-dom/server'; -import { match, RouterContext } from 'react-router'; -import { Provider } from 'react-redux'; -import { prepare } from '@webkom/react-prepare'; -import Helmet from 'react-helmet'; -import Raven from 'raven'; -import serialize from 'serialize-javascript'; -import routes from '../app/routes'; -import configureStore from '../app/utils/configureStore'; -import config from '../config/env'; -import type { $Request, $Response, Middleware } from 'express'; -import { createNewRavenInstance } from '../app/utils/universalRaven'; -import webpackClient from '../config/webpack.client.js'; -import type { State } from '../app/types'; +import pageRenderer from './pageRenderer'; -import 'source-map-support/register'; - -import manifest from '../app/assets/manifest.json'; - -const serverSideTimeoutInMs = 4000; - -// AntiPattern because of babel -// https://github.com/babel/babel/issues/3083 -class TimeoutError { - error: Error; - constructor(msg) { - this.error = new Error(msg); - } -} - -const prepareWithTimeout = app => - Promise.race([ - prepare(app), - new Promise(resolve => { - setTimeout(resolve, serverSideTimeoutInMs); - }).then(() => { - throw new TimeoutError( - 'React prepare timeout when server side rendering.' - ); - }) - ]); - -function render(req: $Request, res: $Response, next: Middleware) { - const render = ( - body: string = '', - state: State | {||} = Object.freeze({}) - ) => { - const helmet = Helmet.rewind(); - return res.send( - renderPage({ - body, - state, - helmet - }) - ); - }; - - const log = req.app.get('log'); - - if (__DEV__) { - return render(); - } - - match({ routes, location: req.url }, (err, redirect, renderProps) => { - if (err) { - return next(err); - } - - if (redirect) { - return res.redirect(`${redirect.pathname}${redirect.search}`); - } - - if (!renderProps) { - return next(); - } - - const createElement = (Component, props) => ; - - const raven = createNewRavenInstance(Raven); - - const store = configureStore( - {}, - { raven, getCookie: key => req.cookies[key] } - ); - const app = ( - - - - ); - - const reportError = (error: Error) => { - try { - // $FlowFixMe - const err = error.error ? error.payload : error; - log.error(err, 'render_error'); - raven.captureException(err); - } catch (e) { - // - } - }; - - const respond = () => { - const state: State = store.getState(); - const body = renderToString(app); - // $FlowFixMe - const statusCode = state.routing.statusCode || 200; - res.status(statusCode); - return render(body, state); - }; - - prepareWithTimeout(app) - .then( - () => respond(), - error => { - if (error instanceof TimeoutError) { - reportError(error.error); - return render(); - } - reportError(error); - respond(); - } - ) - .catch(error => { - reportError(error); - render(); - }); - }); -} - -let cachedAssets; -function retrieveAssets() { - if (__DEV__ || !cachedAssets) { - const { app, 'vendors~app': vendor, styles: appStyles } = JSON.parse( - fs - .readFileSync( - path.join(webpackClient.outputPath, 'webpack-assets.json') - ) - .toString() - ); - - const styles = [appStyles && appStyles.css] - .filter(Boolean) - .map(css => ``) - .join('\n'); - const scripts = [ - vendor && vendor.js, - app && app.js, - appStyles && appStyles.js - ] - .filter(Boolean) - .map(js => ``) - .join('\n'); - - cachedAssets = { scripts, styles }; - } - - return cachedAssets; -} - -const dllPlugin = __DEV__ ? '' : ''; - -function renderPage({ - body, - state, - helmet -}: { - body: string, - state: State | {||}, - helmet: * -}) { - const { scripts, styles } = retrieveAssets(); - return ` - - - - - ${helmet.title.toString()} - - - - - - - - - - - - - - - - - - - - - - - - - - - - ${helmet.meta.toString()} - - ${styles} - - -
${body}
- - ${ - config.environment === 'production' - ? `` - : '' - } - - - ${dllPlugin} - ${scripts} - - - `; -} - -export default render; +const noSSR = (req, res) => res.send(pageRenderer()); +export default (__DEV__ ? noSSR : require('./ssr.js').default); diff --git a/server/server.js b/server/server.js index 4fb81e8fff..603e3ae990 100644 --- a/server/server.js +++ b/server/server.js @@ -30,7 +30,7 @@ app.set('log', log); const webpackClient = require('../config/webpack.client.js'); -if (process.env.NODE_ENV !== 'production') { +if (__DEV__) { const compiler = require('webpack')( webpackClient(undefined, { mode: 'development' diff --git a/server/ssr.js b/server/ssr.js new file mode 100644 index 0000000000..afbd96d0f7 --- /dev/null +++ b/server/ssr.js @@ -0,0 +1,125 @@ +//@flow +import React from 'react'; +import { renderToString } from 'react-dom/server'; +import { match, RouterContext } from 'react-router'; +import { Provider } from 'react-redux'; +import Helmet from 'react-helmet'; +import Raven from 'raven'; +import routes from '../app/routes'; +import configureStore from '../app/utils/configureStore'; +import type { $Request, $Response, Middleware } from 'express'; +import { createNewRavenInstance } from '../app/utils/universalRaven'; +import { type State } from '../app/types'; +import pageRenderer from './pageRenderer'; +import { prepare } from '@webkom/react-prepare'; + +const serverSideTimeoutInMs = 4000; + +// AntiPattern because of babel +// https://github.com/babel/babel/issues/3083 +class TimeoutError { + error: Error; + constructor(msg) { + this.error = new Error(msg); + } +} + +const prepareWithTimeout = app => + Promise.race([ + prepare(app), + new Promise(resolve => { + setTimeout(resolve, serverSideTimeoutInMs); + }).then(() => { + throw new TimeoutError( + 'React prepare timeout when server side rendering.' + ); + }) + ]); + +const createServerSideRenderer = ( + req: $Request, + res: $Response, + next: Middleware +) => { + const render = ( + body: string = '', + state: State | {||} = Object.freeze({}) + ) => { + const helmet = Helmet.rewind(); + return res.send( + pageRenderer({ + body, + state, + helmet + }) + ); + }; + + const log = req.app.get('log'); + + match({ routes, location: req.url }, (err, redirect, renderProps) => { + if (err) { + return next(err); + } + + if (redirect) { + return res.redirect(`${redirect.pathname}${redirect.search}`); + } + + if (!renderProps) { + return next(); + } + + const createElement = (Component, props) => ; + + const raven = createNewRavenInstance(Raven); + + const store = configureStore( + {}, + { raven, getCookie: key => req.cookies[key] } + ); + const app = ( + + + + ); + + const reportError = (error: Error) => { + try { + // $FlowFixMe + const err = error.error ? error.payload : error; + log.error(err, 'render_error'); + raven.captureException(err); + } catch (e) { + // + } + }; + + const respond = () => { + const state: State = store.getState(); + const body = renderToString(app); + // $FlowFixMe + const statusCode = state.routing.statusCode || 200; + res.status(statusCode); + return render(body, state); + }; + + prepareWithTimeout(app) + .then( + () => respond(), + error => { + if (error instanceof TimeoutError) { + reportError(error.error); + return render(); + } + reportError(error); + respond(); + } + ) + .catch(error => { + reportError(error); + render(); + }); + }); +}; +export default createServerSideRenderer; From c36cf7855c0e95f85bd75053f1c5eacc27563996 Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sun, 12 May 2019 17:28:18 +0200 Subject: [PATCH 2/6] Update react-hot-loader --- app/Root.js | 3 ++- app/render.js | 10 ++++------ config/webpack.client.js | 5 ++++- package.json | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/Root.js b/app/Root.js index 450599fc10..93f5de8240 100644 --- a/app/Root.js +++ b/app/Root.js @@ -3,6 +3,7 @@ import React from 'react'; import { setStatusCode } from 'app/actions/RoutingActions'; import { Router, applyRouterMiddleware } from 'react-router'; +import { hot } from 'react-hot-loader/root'; import { Provider } from 'react-redux'; import type { Store } from 'app/types'; import { connect } from 'react-redux'; @@ -45,4 +46,4 @@ const RouteHandler = connect( ) ); -export default Root; +export default hot(Root); diff --git a/app/render.js b/app/render.js index 824438d271..78f481934c 100644 --- a/app/render.js +++ b/app/render.js @@ -2,20 +2,18 @@ import React from 'react'; // $FlowFixMe hydrate() is missing in flow-typed react-dom -import { hydrate } from 'react-dom'; +import { hydrate, render } from 'react-dom'; import { match } from 'react-router'; import Root from './Root'; -import { AppContainer } from 'react-hot-loader'; import routes from 'app/routes'; import type { Store } from 'app/types'; const renderApp = (store: Store, history: any) => { match({ history, routes }, (error, redirectLocation, renderProps) => { const rootElement: HTMLElement = (document.getElementById('root'): any); - hydrate( - - - , + const reactRenderFunc = isSSR ? hydrate : render; + reactRenderFunc( + , rootElement ); }); diff --git a/config/webpack.client.js b/config/webpack.client.js index ebfa06b7d2..f8dbb98392 100644 --- a/config/webpack.client.js +++ b/config/webpack.client.js @@ -98,12 +98,15 @@ module.exports = (env, argv) => { }), new AssetsPlugin({ - path: path.join(root, 'dist-client') + path: outputPath }) ]), resolve: { modules: [root, 'node_modules'], alias: { + // react-hot-loader imports merge like this "require('lodash/merge')" + // Aka. doesn't support our lodash-es alias by default + 'lodash/merge': 'node_modules/lodash/merge.js', lodash: 'node_modules/lodash-es', 'moment-timezone': 'moment-timezone/builds/moment-timezone-with-data-2012-2022.min', diff --git a/package.json b/package.json index aacc69a313..6e81ee7cca 100644 --- a/package.json +++ b/package.json @@ -61,11 +61,11 @@ "raven": "^2.3.0", "raven-for-redux": "^1.2.0", "raven-js": "^3.21.0", - "react": "^16.8.2", + "react": "^16.8.6", "react-collapse": "^4.0.3", "react-copy-to-clipboard": "^5.0.1", "react-cropper": "^0.12.0", - "react-dom": "^16.8.2", + "react-dom": "npm:@hot-loader/react-dom@^16.8.6", "react-dropzone": "^3.10.0", "react-google-recaptcha": "^1.0.5", "react-helmet": "^5.2.0", @@ -143,7 +143,7 @@ "postcss-nested": "^4.1.2", "postcss-preset-env": "^6.6.0", "prettier": "1.16.1", - "react-hot-loader": "3.0.0-beta.4", + "react-hot-loader": "^4.8.4", "react-styleguidist": "^9.0.2", "redux-mock-store": "^1.2.2", "start-server-webpack-plugin": "^2.2.5", From 3857cac61e816e1ec617d2f3b910b24abc38eb5a Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sun, 12 May 2019 17:29:05 +0200 Subject: [PATCH 3/6] Use render instead of hydrate when not using ssr --- app/index.js | 13 +++++++------ app/render.js | 10 +++++++++- server/pageRenderer.js | 2 ++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/index.js b/app/index.js index da80ad2c4d..00775e6cbd 100644 --- a/app/index.js +++ b/app/index.js @@ -23,7 +23,6 @@ import config from 'app/config'; import raven from 'raven-js'; import { browserHistory } from 'react-router'; import { syncHistoryWithStore } from 'react-router-redux'; -import { isEmpty } from 'lodash'; import configureStore from 'app/utils/configureStore'; import renderApp from './render'; import { fetchMeta } from 'app/actions/MetaActions'; @@ -47,28 +46,30 @@ raven .install(); const preloadedState = window.__PRELOADED_STATE__; +const isSSR = window.__IS_SSR__; + const store = configureStore(preloadedState, { raven, getCookie: key => cookie.get(key) }); -if (isEmpty(preloadedState)) { +if (isSSR) { + store.dispatch(maybeRefreshToken()); +} else { store .dispatch(loginAutomaticallyIfPossible()) .then(() => store.dispatch(fetchMeta())) .then(() => store.dispatch(maybeRefreshToken())); -} else { - store.dispatch(maybeRefreshToken()); } const history = syncHistoryWithStore(browserHistory, store); store.dispatch({ type: 'REHYDRATED' }); -renderApp(store, history); +renderApp({ store, history, isSSR }); if (module.hot) { module.hot.accept('./render', () => { - renderApp(store, history); + renderApp({ store, history, isSSR }); }); } diff --git a/app/render.js b/app/render.js index 78f481934c..a812c33128 100644 --- a/app/render.js +++ b/app/render.js @@ -8,7 +8,15 @@ import Root from './Root'; import routes from 'app/routes'; import type { Store } from 'app/types'; -const renderApp = (store: Store, history: any) => { +const renderApp = ({ + store, + isSSR, + history +}: { + store: Store, + history: any, + isSSR: boolean +}) => { match({ history, routes }, (error, redirectLocation, renderProps) => { const rootElement: HTMLElement = (document.getElementById('root'): any); const reactRenderFunc = isSSR ? hydrate : render; diff --git a/server/pageRenderer.js b/server/pageRenderer.js index b80ae498b6..6466b36451 100644 --- a/server/pageRenderer.js +++ b/server/pageRenderer.js @@ -55,6 +55,7 @@ export default function pageRenderer({ helmet }: PageRendererProps = {}) { const { scripts, styles } = retrieveAssets(); + const isSSR = body === '' ? 'false' : 'true'; return ` @@ -97,6 +98,7 @@ export default function pageRenderer({ ${ config.environment === 'production' From 5711346302b8587750730a80c3b34c2a845294d1 Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sun, 12 May 2019 17:29:24 +0200 Subject: [PATCH 4/6] Bump webpack deps --- package.json | 10 +- yarn.lock | 308 +++++++++++++++++++++++---------------------------- 2 files changed, 144 insertions(+), 174 deletions(-) diff --git a/package.json b/package.json index 6e81ee7cca..e650cbd124 100644 --- a/package.json +++ b/package.json @@ -152,12 +152,12 @@ "stylelint-config-standard": "^16.0.0", "timekeeper": "^1.0.0", "url-loader": "^1.1.2", - "webpack": "^4.29.4", - "webpack-bundle-analyzer": "^3.0.4", - "webpack-cli": "^3.2.3", - "webpack-dev-middleware": "^3.6.0", + "webpack": "^4.31.0", + "webpack-bundle-analyzer": "^3.3.2", + "webpack-cli": "^3.3.2", + "webpack-dev-middleware": "^3.6.2", "webpack-filter-warnings-plugin": "^1.2.1", - "webpack-hot-middleware": "^2.24.3", + "webpack-hot-middleware": "^2.24.4", "webpack-node-externals": "^1.7.2", "webpack-stats-plugin": "^0.2.1" }, diff --git a/yarn.lock b/yarn.lock index fe4134a485..6a98de869d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1229,12 +1229,17 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.0.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== +acorn-walk@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" + integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== + acorn@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" integrity sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA== -acorn@^5.0.3, acorn@^5.4.1, acorn@^5.5.3, acorn@^5.7.3: +acorn@^5.0.3, acorn@^5.4.1, acorn@^5.5.3: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== @@ -1294,11 +1299,6 @@ alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - animate.css@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-3.7.0.tgz#5de25d1ee5fba11ba6a1e2c4fa568f512eb7d4da" @@ -1755,13 +1755,6 @@ babel-loader@^8.0.5: mkdirp "^0.5.1" util.promisify "^1.0.0" -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - babel-plugin-istanbul@^5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz#7981590f1956d75d67630ba46f0c22493588c893" @@ -1794,7 +1787,7 @@ babel-preset-jest@^24.3.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.3.0" -babel-runtime@^6.11.6, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.11.6: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -1802,47 +1795,6 @@ babel-runtime@^6.11.6, babel-runtime@^6.22.0, babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.7.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - backoff@^2.4.1: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" @@ -3793,6 +3745,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -4219,13 +4176,6 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error-stack-parser@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292" - integrity sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI= - dependencies: - stackframe "^0.3.1" - es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" @@ -4837,7 +4787,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -5372,11 +5322,6 @@ globals@^11.0.1, globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - globby@8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" @@ -5513,6 +5458,25 @@ har-validator@~5.1.0: ajv "^6.5.5" har-schema "^2.0.0" +hard-source-webpack-plugin@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz#a99071e25b232f1438a5bc3c99f10a3869e4428e" + integrity sha512-r9zf5Wq7IqJHdVAQsZ4OP+dcUSvoHqDMxJlIzaE2J0TZWn3UjMMrHqwDHR8Jr/pzPfG7XxSe36E7Y8QGNdtuAw== + dependencies: + chalk "^2.4.1" + find-cache-dir "^2.0.0" + graceful-fs "^4.1.11" + lodash "^4.15.0" + mkdirp "^0.5.1" + node-object-hash "^1.2.0" + parse-json "^4.0.0" + pkg-dir "^3.0.0" + rimraf "^2.6.2" + semver "^5.6.0" + tapable "^1.0.0-beta.5" + webpack-sources "^1.0.1" + write-json-file "^2.3.0" + harmony-reflect@^1.4.6: version "1.5.1" resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.5.1.tgz#b54ca617b00cc8aef559bbb17b3d85431dc7e329" @@ -5679,7 +5643,7 @@ hoist-non-react-statics@^2.3.1: resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.0.1: +hoist-non-react-statics@^3.0.1, hoist-non-react-statics@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== @@ -7422,7 +7386,7 @@ loader-runner@^2.3.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" integrity sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI= -loader-utils@1.1.0, loader-utils@^1.0.2, loader-utils@^1.1.0: +loader-utils@1.1.0, loader-utils@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= @@ -7431,7 +7395,7 @@ loader-utils@1.1.0, loader-utils@^1.0.2, loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^0.5.0" -loader-utils@^1.2.3: +loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -7551,7 +7515,7 @@ lodash@^4.13.1, lodash@^4.17.5: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw== -lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.5.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= @@ -8306,6 +8270,11 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" +node-object-hash@^1.2.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94" + integrity sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ== + node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" @@ -10134,7 +10103,7 @@ prop-types-extra@^1.0.1: dependencies: warning "^3.0.0" -prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -10463,11 +10432,6 @@ react-cropper@^0.12.0: cropperjs "^0.8.0" prop-types "^15.5.8" -react-deep-force-update@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909" - integrity sha1-jqQmPNZFWgULN0RbPwj9g52G6Qk= - react-dev-utils@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-6.1.1.tgz#a07e3e8923c4609d9f27e5af5207e3ca20724895" @@ -10523,15 +10487,15 @@ react-docgen@3.0.0-rc.2: node-dir "^0.1.10" recast "^0.16.0" -react-dom@^16.8.2: - version "16.8.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.2.tgz#7c8a69545dd554d45d66442230ba04a6a0a3c3d3" - integrity sha512-cPGfgFfwi+VCZjk73buu14pYkYBR1b/SRMSYqkLDdhSEHnSwcuYTPu6/Bh6ZphJFIk80XLvbSe2azfcRzNF+Xg== +"react-dom@npm:@hot-loader/react-dom@^16.8.6": + version "16.8.6" + resolved "https://registry.yarnpkg.com/@hot-loader/react-dom/-/react-dom-16.8.6.tgz#7923ba27db1563a7cc48d4e0b2879a140df461ea" + integrity sha512-+JHIYh33FVglJYZAUtRjfT5qZoT2mueJGNzU5weS2CVw26BgbxGKSujlJhO85BaRbg8sqNWyW1hYBILgK3ZCgA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.2" + scheduler "^0.13.6" react-dropzone@^3.10.0: version "3.13.4" @@ -10576,17 +10540,20 @@ react-helmet@^5.2.0: prop-types "^15.5.4" react-side-effect "^1.1.0" -react-hot-loader@3.0.0-beta.4: - version "3.0.0-beta.4" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-3.0.0-beta.4.tgz#9b2d89a47d98fb31ccfdddc3d9521d6ff5819a7d" - integrity sha1-my2JpH2Y+zHM/d3D2VIdb/WBmn0= +react-hot-loader@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.8.4.tgz#357ba342e367fd42d6a870a9c0601c23fa0730c6" + integrity sha512-O98btZXcm24ZgP+aPBD0W9N+GEnkOg6vlLEy/IMZ53u3K/dGqO0I/RU4qrmQzE+wMDLpwNo5TwxaAjVw9Y+IBA== dependencies: - babel-template "^6.7.0" + fast-levenshtein "^2.0.6" global "^4.3.0" - react-deep-force-update "^2.0.1" - react-proxy "^3.0.0-alpha.0" - redbox-react "^1.2.5" - source-map "^0.4.4" + hoist-non-react-statics "^3.3.0" + loader-utils "^1.1.0" + lodash "^4.17.11" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.0.2" + source-map "^0.7.3" react-icon-base@2.1.0: version "2.1.0" @@ -10616,9 +10583,9 @@ react-input-autosize@^2.0.1: prop-types "^15.5.8" react-is@^16.7.0, react-is@^16.8.1: - version "16.8.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.2.tgz#09891d324cad1cb0c1f2d91f70a71a4bee34df0f" - integrity sha512-D+NxhSR2HUCjYky1q1DwpNUD44cDpUXzSmmFyC3ug1bClcU/iDNy0YNn1iwme28fn+NFhpA13IndOd42CrFb+Q== + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== react-is@^16.8.4: version "16.8.4" @@ -10665,13 +10632,6 @@ react-portal@^4.0.0-rc.0: dependencies: prop-types "^15.5.8" -react-proxy@^3.0.0-alpha.0: - version "3.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-3.0.0-alpha.1.tgz#4400426bcfa80caa6724c7755695315209fa4b07" - integrity sha1-RABCa8+oDKpnJMd1VpUxUgn6Swc= - dependencies: - lodash "^4.6.1" - react-redux@^5.0.1: version "5.0.6" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946" @@ -10905,15 +10865,15 @@ react-youtube@^7.9.0: prop-types "^15.5.3" youtube-player "^5.5.1" -react@^16.8.2: - version "16.8.2" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.2.tgz#83064596feaa98d9c2857c4deae1848b542c9c0c" - integrity sha512-aB2ctx9uQ9vo09HVknqv3DGRpI7OIGJhCx3Bt0QqoRluEjHSaObJl+nG12GDdYH6sTgE7YiPJ6ZUyMx9kICdXw== +react@^16.8.6: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" + integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.2" + scheduler "^0.13.6" read-cache@^1.0.0: version "1.0.0" @@ -11042,16 +11002,6 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" -redbox-react@^1.2.5: - version "1.5.0" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.5.0.tgz#04dab11557d26651bf3562a67c22ace56c5d3967" - integrity sha512-mdxArOI3sF8K5Nay5NG+lv/VW516TbXjjd4h1wcV1Iy4IMDQPnCayjoQXBAycAFSME4nyXRUXCjHxsw2rYpVRw== - dependencies: - error-stack-parser "^1.3.6" - object-assign "^4.0.1" - prop-types "^15.5.4" - sourcemapped-stacktrace "^1.1.6" - redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" @@ -11606,10 +11556,10 @@ sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.2.tgz#969eaee2764a51d2e97b20a60963b2546beff8fa" - integrity sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w== +scheduler@^0.13.6: + version "0.13.6" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" + integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -11781,7 +11731,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: dependencies: inherits "^2.0.1" -shallowequal@^1.0.0: +shallowequal@^1.0.0, shallowequal@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== @@ -11945,6 +11895,13 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + soundcloud-audio@^1.2.2: version "1.3.1" resolved "https://registry.yarnpkg.com/soundcloud-audio/-/soundcloud-audio-1.3.1.tgz#d1266affc3016c8eb154f937fe216162e0883b34" @@ -11987,18 +11944,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= - -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -12009,12 +11954,10 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sourcemapped-stacktrace@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.7.tgz#17e05374ff78b71a9d89ad3975a49f22725ba935" - integrity sha512-pgHNUACbafkQ+M5zR00NSOtSKBc/i40prgN+SY07J/pghClwVNWNTTMa0JuXj4lriR2TvMKcPAHw5KN9tVFRhA== - dependencies: - source-map "0.5.6" +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== sparkles@^1.0.0: version "1.0.0" @@ -12127,11 +12070,6 @@ stack-utils@^1.0.1: resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== -stackframe@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" - integrity sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ= - start-server-webpack-plugin@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/start-server-webpack-plugin/-/start-server-webpack-plugin-2.2.5.tgz#4a2838759b0f36acd11b0b2f5f196f289ae29d31" @@ -12576,6 +12514,11 @@ tapable@^1.0.0, tapable@^1.1.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== +tapable@^1.0.0-beta.5: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tar@^4: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" @@ -12714,11 +12657,6 @@ to-ast@^1.0.0: ast-types "^0.7.2" esprima "^2.1.0" -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -13361,12 +13299,13 @@ webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-bundle-analyzer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.0.4.tgz#095638487a664162f19e3b2fb7e621b7002af4b8" - integrity sha512-ggDUgtKuQki4vmc93Ej65GlYxeCUR/0THa7gA+iqAGC2FFAxO+r+RM9sAUa8HWdw4gJ3/NZHX/QUcVgRjdIsDg== +webpack-bundle-analyzer@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz#3da733a900f515914e729fcebcd4c40dde71fc6f" + integrity sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA== dependencies: - acorn "^5.7.3" + acorn "^6.0.7" + acorn-walk "^6.1.1" bfj "^6.1.1" chalk "^2.4.1" commander "^2.18.0" @@ -13379,10 +13318,10 @@ webpack-bundle-analyzer@^3.0.4: opener "^1.5.1" ws "^6.0.0" -webpack-cli@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.0.tgz#55c8a74cae1e88117f9dda3a801c7272e93ca318" - integrity sha512-t1M7G4z5FhHKJ92WRKwZ1rtvi7rHc0NZoZRbSkol0YKl4HvcC8+DsmGDmK7MmZxHSAetHagiOsjOB6MmzC2TUw== +webpack-cli@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.2.tgz#aed2437b0db0a7faa2ad28484e166a5360014a91" + integrity sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA== dependencies: chalk "^2.4.1" cross-spawn "^6.0.5" @@ -13396,7 +13335,7 @@ webpack-cli@^3.2.3: v8-compile-cache "^2.0.2" yargs "^12.0.5" -webpack-dev-middleware@^3.5.1, webpack-dev-middleware@^3.6.0: +webpack-dev-middleware@^3.5.1: version "3.6.1" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.1.tgz#91f2531218a633a99189f7de36045a331a4b9cd4" integrity sha512-XQmemun8QJexMEvNFbD2BIg4eSKrmSIMrTfnl2nql2Sc6OGAYFyb8rwuYrCjl/IiEYYuyTEiimMscu7EXji/Dw== @@ -13406,6 +13345,16 @@ webpack-dev-middleware@^3.5.1, webpack-dev-middleware@^3.6.0: range-parser "^1.0.3" webpack-log "^2.0.0" +webpack-dev-middleware@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz#f37a27ad7c09cd7dc67cd97655413abaa1f55942" + integrity sha512-A47I5SX60IkHrMmZUlB0ZKSWi29TZTcPz7cha1Z75yYOsgWh/1AcPmQEbC8ZIbU3A1ytSv1PMU0PyPz2Lmz2jg== + dependencies: + memory-fs "^0.4.1" + mime "^2.3.1" + range-parser "^1.0.3" + webpack-log "^2.0.0" + webpack-dev-server@^3.1.14: version "3.2.1" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz#1b45ce3ecfc55b6ebe5e36dab2777c02bc508c4e" @@ -13447,10 +13396,10 @@ webpack-filter-warnings-plugin@^1.2.1: resolved "https://registry.yarnpkg.com/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz#dc61521cf4f9b4a336fbc89108a75ae1da951cdb" integrity sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg== -webpack-hot-middleware@^2.24.3: - version "2.24.3" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.24.3.tgz#5bb76259a8fc0d97463ab517640ba91d3382d4a6" - integrity sha512-pPlmcdoR2Fn6UhYjAhp1g/IJy1Yc9hD+T6O9mjRcWV2pFbBjIFoJXhP0CoD0xPOhWJuWXuZXGBga9ybbOdzXpg== +webpack-hot-middleware@^2.24.4: + version "2.24.4" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.24.4.tgz#0ae1eeca000c6ffdcb22eb574d0e6d7717672b0f" + integrity sha512-YFA4j2tg9WPkcQKcyHMZn6787QngWf/ahXvAJRZ1ripySa+4ihjzDcYBsfC4ihOucTd02IJ12v+VTGMsEGxq0w== dependencies: ansi-html "0.0.7" html-entities "^1.2.0" @@ -13477,7 +13426,7 @@ webpack-node-externals@^1.7.2: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== -webpack-sources@^1.1.0, webpack-sources@^1.3.0: +webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== @@ -13490,10 +13439,10 @@ webpack-stats-plugin@^0.2.1: resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.2.1.tgz#1f5bac13fc25d62cbb5fd0ff646757dc802b8595" integrity sha512-OYMZLpZrK/qLA79NE4kC4DCt85h/5ipvWJcsefKe9MMw0qU4/ck/IJg+4OmWA+5EfrZZpHXDq92IptfYDWVfkw== -webpack@^4.29.4: - version "4.29.6" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" - integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== +webpack@^4.31.0: + version "4.31.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.31.0.tgz#ae201d45f0571336e42d1c2b5c8ab56c4d3b0c63" + integrity sha512-n6RVO3X0LbbipoE62akME9K/JI7qYrwwufs20VvgNNpqUoH4860KkaxJTbGq5bgkVZF9FqyyTG/0WPLH3PVNJA== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -13661,6 +13610,27 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" + integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-json-file@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" From d5396f7569993a55e9cb529bfcfdadf0e95dbb70 Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sun, 12 May 2019 17:31:44 +0200 Subject: [PATCH 5/6] Ingore react-invalid-hook-call on SSR The plain Component(props) doesn't support hooks on ssr, so the prepare method will crash if a component use hooks. This doesn't matter as long as we don't use hooks before using prepare(). THen the warning can be ignored. --- server/ssr.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/ssr.js b/server/ssr.js index afbd96d0f7..beeb9f0949 100644 --- a/server/ssr.js +++ b/server/ssr.js @@ -23,6 +23,11 @@ class TimeoutError { this.error = new Error(msg); } } +const isTimeoutError = (error: Error) => error instanceof TimeoutError; +const isReactHooksError = (error: Object) => + typeof error === 'object' && + error.name === 'Invariant Violation' && + error.stack.includes('https://fb.me/react-invalid-hook-call'); const prepareWithTimeout = app => Promise.race([ @@ -108,10 +113,13 @@ const createServerSideRenderer = ( .then( () => respond(), error => { - if (error instanceof TimeoutError) { + if (isTimeoutError(error)) { reportError(error.error); return render(); } + if (isReactHooksError(error)) { + return respond(); + } reportError(error); respond(); } From 9bb4ed47e47457fd0f45456bd6ef62a476c76dee Mon Sep 17 00:00:00 2001 From: Odin Ugedal Date: Sun, 12 May 2019 19:50:27 +0200 Subject: [PATCH 6/6] Remove unused dependency parse5 --- flow-typed/npm/parse5_vx.x.x.js | 186 -------------------------------- package.json | 1 - yarn.lock | 66 +----------- 3 files changed, 2 insertions(+), 251 deletions(-) delete mode 100644 flow-typed/npm/parse5_vx.x.x.js diff --git a/flow-typed/npm/parse5_vx.x.x.js b/flow-typed/npm/parse5_vx.x.x.js deleted file mode 100644 index e1ce7d0e39..0000000000 --- a/flow-typed/npm/parse5_vx.x.x.js +++ /dev/null @@ -1,186 +0,0 @@ -// flow-typed signature: 6345830668f9764be4b8d118d44ebf77 -// flow-typed version: <>/parse5_v^3.0.2/flow_v0.71.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'parse5' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'parse5' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'parse5/lib/common/doctype' { - declare module.exports: any; -} - -declare module 'parse5/lib/common/foreign_content' { - declare module.exports: any; -} - -declare module 'parse5/lib/common/html' { - declare module.exports: any; -} - -declare module 'parse5/lib/common/merge_options' { - declare module.exports: any; -} - -declare module 'parse5/lib/common/unicode' { - declare module.exports: any; -} - -declare module 'parse5/lib/index' { - declare module.exports: any; -} - -declare module 'parse5/lib/location_info/parser_mixin' { - declare module.exports: any; -} - -declare module 'parse5/lib/location_info/tokenizer_mixin' { - declare module.exports: any; -} - -declare module 'parse5/lib/parser/formatting_element_list' { - declare module.exports: any; -} - -declare module 'parse5/lib/parser/index' { - declare module.exports: any; -} - -declare module 'parse5/lib/parser/open_element_stack' { - declare module.exports: any; -} - -declare module 'parse5/lib/parser/parser_stream' { - declare module.exports: any; -} - -declare module 'parse5/lib/parser/plain_text_conversion_stream' { - declare module.exports: any; -} - -declare module 'parse5/lib/sax/dev_null_stream' { - declare module.exports: any; -} - -declare module 'parse5/lib/sax/index' { - declare module.exports: any; -} - -declare module 'parse5/lib/sax/parser_feedback_simulator' { - declare module.exports: any; -} - -declare module 'parse5/lib/serializer/index' { - declare module.exports: any; -} - -declare module 'parse5/lib/serializer/serializer_stream' { - declare module.exports: any; -} - -declare module 'parse5/lib/tokenizer/index' { - declare module.exports: any; -} - -declare module 'parse5/lib/tokenizer/named_entity_data' { - declare module.exports: any; -} - -declare module 'parse5/lib/tokenizer/preprocessor' { - declare module.exports: any; -} - -declare module 'parse5/lib/tree_adapters/default' { - declare module.exports: any; -} - -declare module 'parse5/lib/tree_adapters/htmlparser2' { - declare module.exports: any; -} - -// Filename aliases -declare module 'parse5/lib/common/doctype.js' { - declare module.exports: $Exports<'parse5/lib/common/doctype'>; -} -declare module 'parse5/lib/common/foreign_content.js' { - declare module.exports: $Exports<'parse5/lib/common/foreign_content'>; -} -declare module 'parse5/lib/common/html.js' { - declare module.exports: $Exports<'parse5/lib/common/html'>; -} -declare module 'parse5/lib/common/merge_options.js' { - declare module.exports: $Exports<'parse5/lib/common/merge_options'>; -} -declare module 'parse5/lib/common/unicode.js' { - declare module.exports: $Exports<'parse5/lib/common/unicode'>; -} -declare module 'parse5/lib/index.js' { - declare module.exports: $Exports<'parse5/lib/index'>; -} -declare module 'parse5/lib/location_info/parser_mixin.js' { - declare module.exports: $Exports<'parse5/lib/location_info/parser_mixin'>; -} -declare module 'parse5/lib/location_info/tokenizer_mixin.js' { - declare module.exports: $Exports<'parse5/lib/location_info/tokenizer_mixin'>; -} -declare module 'parse5/lib/parser/formatting_element_list.js' { - declare module.exports: $Exports<'parse5/lib/parser/formatting_element_list'>; -} -declare module 'parse5/lib/parser/index.js' { - declare module.exports: $Exports<'parse5/lib/parser/index'>; -} -declare module 'parse5/lib/parser/open_element_stack.js' { - declare module.exports: $Exports<'parse5/lib/parser/open_element_stack'>; -} -declare module 'parse5/lib/parser/parser_stream.js' { - declare module.exports: $Exports<'parse5/lib/parser/parser_stream'>; -} -declare module 'parse5/lib/parser/plain_text_conversion_stream.js' { - declare module.exports: $Exports<'parse5/lib/parser/plain_text_conversion_stream'>; -} -declare module 'parse5/lib/sax/dev_null_stream.js' { - declare module.exports: $Exports<'parse5/lib/sax/dev_null_stream'>; -} -declare module 'parse5/lib/sax/index.js' { - declare module.exports: $Exports<'parse5/lib/sax/index'>; -} -declare module 'parse5/lib/sax/parser_feedback_simulator.js' { - declare module.exports: $Exports<'parse5/lib/sax/parser_feedback_simulator'>; -} -declare module 'parse5/lib/serializer/index.js' { - declare module.exports: $Exports<'parse5/lib/serializer/index'>; -} -declare module 'parse5/lib/serializer/serializer_stream.js' { - declare module.exports: $Exports<'parse5/lib/serializer/serializer_stream'>; -} -declare module 'parse5/lib/tokenizer/index.js' { - declare module.exports: $Exports<'parse5/lib/tokenizer/index'>; -} -declare module 'parse5/lib/tokenizer/named_entity_data.js' { - declare module.exports: $Exports<'parse5/lib/tokenizer/named_entity_data'>; -} -declare module 'parse5/lib/tokenizer/preprocessor.js' { - declare module.exports: $Exports<'parse5/lib/tokenizer/preprocessor'>; -} -declare module 'parse5/lib/tree_adapters/default.js' { - declare module.exports: $Exports<'parse5/lib/tree_adapters/default'>; -} -declare module 'parse5/lib/tree_adapters/htmlparser2.js' { - declare module.exports: $Exports<'parse5/lib/tree_adapters/htmlparser2'>; -} diff --git a/package.json b/package.json index e650cbd124..089bf00524 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ "moment-timezone": "^0.5.23", "morgan": "^1.9.1", "normalizr": "^3.2.2", - "parse5": "^3.0.2", "prop-types": "^15.7.2", "qs": "^6.5.1", "raven": "^2.3.0", diff --git a/yarn.lock b/yarn.lock index 6a98de869d..dea2dd580c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3745,11 +3745,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -5458,25 +5453,6 @@ har-validator@~5.1.0: ajv "^6.5.5" har-schema "^2.0.0" -hard-source-webpack-plugin@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.13.1.tgz#a99071e25b232f1438a5bc3c99f10a3869e4428e" - integrity sha512-r9zf5Wq7IqJHdVAQsZ4OP+dcUSvoHqDMxJlIzaE2J0TZWn3UjMMrHqwDHR8Jr/pzPfG7XxSe36E7Y8QGNdtuAw== - dependencies: - chalk "^2.4.1" - find-cache-dir "^2.0.0" - graceful-fs "^4.1.11" - lodash "^4.15.0" - mkdirp "^0.5.1" - node-object-hash "^1.2.0" - parse-json "^4.0.0" - pkg-dir "^3.0.0" - rimraf "^2.6.2" - semver "^5.6.0" - tapable "^1.0.0-beta.5" - webpack-sources "^1.0.1" - write-json-file "^2.3.0" - harmony-reflect@^1.4.6: version "1.5.1" resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.5.1.tgz#b54ca617b00cc8aef559bbb17b3d85431dc7e329" @@ -8270,11 +8246,6 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-object-hash@^1.2.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94" - integrity sha512-UdS4swXs85fCGWWf6t6DMGgpN/vnlKeSGEQ7hJcrs7PBFoxoKLmibc3QRb7fwiYsjdL7PX8iI/TMSlZ90dgHhQ== - node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" @@ -8880,7 +8851,7 @@ parse5@4.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@^3.0.1, parse5@^3.0.2: +parse5@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510" integrity sha1-Be/1fw70V3+xRKefi5qWemzERRA= @@ -11895,13 +11866,6 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - soundcloud-audio@^1.2.2: version "1.3.1" resolved "https://registry.yarnpkg.com/soundcloud-audio/-/soundcloud-audio-1.3.1.tgz#d1266affc3016c8eb154f937fe216162e0883b34" @@ -12514,11 +12478,6 @@ tapable@^1.0.0, tapable@^1.1.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" integrity sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA== -tapable@^1.0.0-beta.5: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - tar@^4: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" @@ -13426,7 +13385,7 @@ webpack-node-externals@^1.7.2: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3" integrity sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg== -webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.3.0: +webpack-sources@^1.1.0, webpack-sources@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== @@ -13610,27 +13569,6 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" - integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-json-file@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"