diff --git a/.circleci/config.yml b/.circleci/config.yml index 4fe2e006b5..124adf6706 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,26 +22,13 @@ aliases: cd ./mobile && yarn && yarn setup && cd .. cd ./desktop && yarn && cd .. - - &install-rethinkdb - name: Install RethinkDB 2.3.5 - command: - | - echo "deb http://download.rethinkdb.com/apt jessie main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list - wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add - - sudo apt-get update - sudo apt-get install rethinkdb=2.3.5~0jessie - - - &start-rethinkdb - name: Start RethinkDB - command: rethinkdb --bind all - background: true - - &setup-and-build-web name: Setup and build web command: | cp now-secrets.example.json now-secrets.json yarn run build:web + yarn run build:hyperion - &build-api name: Build API @@ -54,7 +41,7 @@ aliases: - &start-web name: Start web client in the background - command: yarn run dev:web + command: yarn run start:test background: true defaults: &defaults @@ -107,7 +94,7 @@ jobs: - run: *start-api - run: *start-web # Wait for the API and webserver to start - - run: ./node_modules/.bin/wait-on http://localhost:3000 http://localhost:3001 + - run: ./node_modules/.bin/wait-on http://localhost:3006 http://localhost:3001 - run: name: Run Unit Tests command: yarn run test:ci diff --git a/api/index.js b/api/index.js index dfdb629773..9b46b0086c 100644 --- a/api/index.js +++ b/api/index.js @@ -67,11 +67,7 @@ app.use( ); app.use('/', (req: express$Request, res: express$Response) => { - res.redirect( - process.env.NODE_ENV === 'production' && !process.env.FORCE_DEV - ? 'https://spectrum.chat' - : 'http://localhost:3000' - ); + res.send('API active.'); }); import type { Loader } from './loaders/types'; diff --git a/config-overrides.js b/config-overrides.js index a395cc2c20..4a4637fbfe 100644 --- a/config-overrides.js +++ b/config-overrides.js @@ -85,13 +85,6 @@ module.exports = function override(config, env) { } config = injectBabelPlugin('react-loadable/babel', config); config = transpileShared(config); - config.plugins.push( - new webpack.optimize.CommonsChunkPlugin({ - names: ['bootstrap'], - filename: 'static/js/[name].js', - minChunks: Infinity, - }) - ); // Filter the default serviceworker plugin, add offline plugin instead config.plugins = config.plugins.filter( plugin => !isServiceWorkerPlugin(plugin) @@ -141,12 +134,11 @@ module.exports = function override(config, env) { }) ); } - config.plugins.push( + config.plugins.unshift( new webpack.optimize.CommonsChunkPlugin({ - minChunks: 3, - name: 'main', - async: 'commons', - children: true, + names: ['bootstrap'], + filename: 'static/js/[name].js', + minChunks: Infinity, }) ); if (process.env.NODE_ENV === 'production') { diff --git a/cypress.json b/cypress.json index 77ee091c6c..a0ace8a50f 100644 --- a/cypress.json +++ b/cypress.json @@ -1,9 +1,10 @@ { - "baseUrl": "http://localhost:3000", + "baseUrl": "http://localhost:3006", "viewportWidth": 1300, "defaultCommandTimeout": 20000, "blacklistHosts": [ - "*.google-analytics.com" + "*.google-analytics.com", + "*.amplitude.com" ], "env": { "DEBUG": "src*,testing*,build*" diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index dffed2532f..577fe9d6ca 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -10,8 +10,17 @@ // This function is called when a project is opened or re-opened (e.g. due to // the project's config changing) +const setup = require('../../shared/testing/setup'); +const teardown = require('../../shared/testing/teardown'); module.exports = (on, config) => { // `on` is used to hook into various events Cypress emits // `config` is the resolved Cypress config + on('task', { + resetdb() { + return teardown() + .then(setup) + .then(() => null); + }, + }); }; diff --git a/cypress/support/commands.js b/cypress/support/commands.js index a53d20718b..5b752b17fd 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -24,15 +24,6 @@ Cypress.Commands.add('auth', userId => { ); }); -Cypress.Commands.add('resetdb', () => { - cy.exec( - `node -e "const teardown = require('./shared/testing/teardown.js')().then(() => process.exit())"` - ); - cy.exec( - `node -e "const setup = require('./shared/testing/setup.js')().then(() => process.exit())"` - ); -}); - Cypress.Commands.overwrite('type', (originalFn, $elem, text, options) => { const textarea = $elem[0]; // If it's a DraftJS editor, simulate text events diff --git a/cypress/support/index.js b/cypress/support/index.js index f90f1de641..2a321c6f2f 100644 --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -17,11 +17,11 @@ import './commands'; before(() => { - cy.resetdb(); + cy.task('resetdb'); cy.clearLocalStorage(); }); beforeEach(() => { - cy.resetdb(); + cy.task('resetdb'); cy.clearLocalStorage(); }); diff --git a/hyperion/index.js b/hyperion/index.js index 2e7d78f1a4..1d9ded11dc 100644 --- a/hyperion/index.js +++ b/hyperion/index.js @@ -39,42 +39,6 @@ if (process.env.NODE_ENV === 'production' && !process.env.FORCE_DEV) { import cors from 'shared/middlewares/cors'; app.use(cors); -// Redirect requests to /api and /auth to the production API -// This allows deploy previews to work, as this route would only be called -// if there's no path alias in Now for hyperionurl.com/api, which would only -// happen on deploy previews -app.use('/api', (req: express$Request, res: express$Response) => { - const redirectUrl = `${req.baseUrl}${req.path}`; - res.redirect( - req.method === 'POST' || req.xhr ? 307 : 301, - `https://spectrum.chat${redirectUrl}` - ); -}); - -app.use('/auth', (req: express$Request, res: express$Response) => { - const redirectUrl = `${req.baseUrl}${req.path}`; - res.redirect( - req.method === 'POST' || req.xhr ? 307 : 301, - `https://spectrum.chat${redirectUrl}` - ); -}); - -app.use('/websocket', (req: express$Request, res: express$Response) => { - const redirectUrl = `${req.baseUrl}${req.path}`; - res.redirect( - req.method === 'POST' || req.xhr ? 307 : 301, - `https://spectrum.chat${redirectUrl}` - ); -}); - -// In development the Webpack HMR server requests /sockjs-node constantly, -// so let's patch that through to it! -if (process.env.NODE_ENV === 'development') { - app.use('/sockjs-node', (req: express$Request, res: express$Response) => { - res.redirect(301, `http://localhost:3000${req.path}`); - }); -} - import cookieParser from 'cookie-parser'; app.use(cookieParser()); @@ -105,6 +69,53 @@ app.use(passport.session()); import threadParamRedirect from 'shared/middlewares/thread-param'; app.use(threadParamRedirect); +const BASE_URI = + process.env.NODE_ENV === 'testing' || process.env.TEST_DB + ? 'http://localhost:3001' + : 'https://spectrum.chat'; + +// Redirect requests to /api and /auth to the production API +// This allows deploy previews to work, as this route would only be called +// if there's no path alias in Now for hyperionurl.com/api, which would only +// happen on deploy previews +app.use('/api', (req: express$Request, res: express$Response) => { + const redirectUrl = `${req.baseUrl}${req.path}`; + fetch(`${BASE_URI}${redirectUrl}`, { + method: req.method, + headers: { + cookie: req.headers.cookie, + 'content-type': req.headers['content-type'], + }, + body: JSON.stringify(req.body), + }) + .then(res => res.json()) + .then(json => res.send(json)); +}); + +app.use('/auth', (req: express$Request, res: express$Response) => { + const redirectUrl = `${req.baseUrl}${req.path}`; + res.redirect( + req.method === 'POST' || req.xhr ? 307 : 301, + `${BASE_URI}${redirectUrl}` + ); +}); + +app.use('/websocket', (req: express$Request, res: express$Response) => { + const redirectUrl = `${req.baseUrl}${req.path}`; + res.redirect( + req.method === 'POST' || req.xhr ? 307 : 301, + `${BASE_URI}${redirectUrl}` + ); +}); + +// In development the Webpack HMR server requests /sockjs-node constantly, +// so let's patch that through to it! +if (process.env.NODE_ENV === 'development') { + app.use('/sockjs-node', (req: express$Request, res: express$Response) => { + res.redirect(301, `http://localhost:3000${req.path}`); + }); +} + // Static files // This route handles the case where our ServiceWorker requests main.asdf123.js, but // we've deployed a new version of the app so the filename changed to main.dfyt975.js @@ -131,6 +142,11 @@ app.use( ); app.get('/static/js/:name', (req: express$Request, res, next) => { if (!req.params.name) return next(); + const existingFile = jsFiles.find(file => file.startsWith(req.params.name)); + if (existingFile) + return res.sendFile( + path.resolve(__dirname, '..', 'build', 'static', 'js', req.params.name) + ); const match = req.params.name.match(/(\w+?)\.(\w+?\.)?js/i); if (!match) return next(); const actualFilename = jsFiles.find(file => file.startsWith(match[1])); diff --git a/hyperion/renderer/index.js b/hyperion/renderer/index.js index 6d0dd3f360..a85ba3f14f 100644 --- a/hyperion/renderer/index.js +++ b/hyperion/renderer/index.js @@ -70,10 +70,19 @@ const renderer = (req: express$Request, res: express$Response) => { cache, }); // Define the initial redux state + const { t } = req.query; + const initialReduxState = { users: { currentUser: req.user ? req.user : null, }, + dashboardFeed: { + activeThread: t ? t : '', + mountedWithActiveThread: t ? t : '', + search: { + isOpen: false, + }, + }, }; // Create the Redux store const store = initStore(initialReduxState); diff --git a/package.json b/package.json index 5b37f8d92f..cef6ff0c65 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "uuid": "^3.0.1", "wait-on": "^2.1.0", "webpack-bundle-analyzer": "^2.9.1", - "write-file-webpack-plugin": "^4.1.0" + "write-file-webpack-plugin": "^4.3.2" }, "dependencies": { "abab": "^1.0.4", @@ -70,7 +70,7 @@ "cors": "^2.8.3", "cryptr": "^3.0.0", "css.escape": "^1.5.1", - "cypress": "^2.1.0", + "cypress": "^3.0.1", "dataloader": "^1.3.0", "debounce": "^1.1.0", "debug": "^2.6.8", @@ -138,24 +138,24 @@ "query-string": "^5.0.0", "raven": "^2.0.2", "raven-js": "^3.18.1", - "react": "16.2.0", + "react": "^16.4.0", "react-apollo": "2.x", "react-app-rewire-styled-components": "^3.0.0", - "react-app-rewired": "^1.0.5", - "react-clipboard.js": "^1.1.3", - "react-dom": "16.2.0", - "react-flip-move": "^2.10.1", - "react-helmet-async": "^0.0.4", + "react-app-rewired": "^1.5.2", + "react-clipboard.js": "^2.0.0", + "react-dom": "^16.4.0", + "react-flip-move": "^3.0.2", + "react-helmet-async": "^0.1.0", "react-infinite-scroller-with-scroll-element": "2.0.2", - "react-loadable": "5.3.1", + "react-loadable": "^5.4.0", "react-modal": "3.x", "react-popper": "^1.0.0-beta.5", "react-redux": "^5.0.2", "react-router": "^4.0.0-beta.7", - "react-router-dom": "^4.0.0-beta.7", + "react-router-dom": "^4.3.1", "react-stripe-checkout": "^2.2.5", "react-stripe-elements": "^1.4.1", - "react-textarea-autosize": "^4.0.5", + "react-textarea-autosize": "^6.1.0", "react-transition-group": "^2.2.0", "react-trend": "^1.2.4", "recompose": "0.26.x", @@ -255,6 +255,7 @@ "test:e2e": "cypress run", "prestart:api:test": "node -e \"require('./shared/testing/setup.js')().then(() => process.exit())\"", "start:api:test": "TEST_DB=true FORCE_DEV=true DEBUG=api*,shared* forever build-api/main.js", + "start:test": "DISABLE_CACHE=true TEST_DB=true FORCE_DEV=true DEBUG=hyperion*,shared* forever build-hyperion/main.js", "cypress:open": "cypress open", "lint": "eslint .", "flow": "flow", diff --git a/src/components/buttons/index.js b/src/components/buttons/index.js index e382a112b4..e98f606954 100644 --- a/src/components/buttons/index.js +++ b/src/components/buttons/index.js @@ -12,7 +12,7 @@ import { import { Spinner } from '../globals'; import Icon from '../icons'; -type ButtonProps = { +type ButtonProps = {| loading?: boolean, disabled?: boolean, large?: boolean, @@ -21,7 +21,7 @@ type ButtonProps = { icon?: string, children?: any, dataCy?: string, -}; +|}; type IconProps = { glyph: string, diff --git a/src/components/infiniteScroll/index.js b/src/components/infiniteScroll/index.js index 2ef629b7e0..3edf448189 100644 --- a/src/components/infiniteScroll/index.js +++ b/src/components/infiniteScroll/index.js @@ -28,7 +28,6 @@ export default class InfiniteScroll extends React.Component { useWindow: true, isReverse: false, scrollElement: null, - scrollComponent: null, }; scrollListener: Function; diff --git a/src/components/upsell/joinChannel.js b/src/components/upsell/joinChannel.js index f24528f481..377c3e937d 100644 --- a/src/components/upsell/joinChannel.js +++ b/src/components/upsell/joinChannel.js @@ -105,7 +105,6 @@ class JoinChannel extends React.Component { loading={isLoading} onClick={this.toggleSubscription} icon="plus" - label dataCy="thread-join-channel-upsell-button" > Join diff --git a/src/helpers/analytics/raven.js b/src/helpers/analytics/raven.js index 220f552b01..ad29204f09 100644 --- a/src/helpers/analytics/raven.js +++ b/src/helpers/analytics/raven.js @@ -1,6 +1,12 @@ // @flow import Raven from 'raven-js'; -if (process.env.NODE_ENV === 'production' && process.env.SENTRY_DSN_CLIENT) { + +if ( + process.env.NODE_ENV === 'production' && + !process.env.FORCE_DEV && + process.env.SENTRY_DSN_CLIENT && + process.env.SENTRY_DSN_CLIENT !== 'undefined' +) { Raven.config(process.env.SENTRY_DSN_CLIENT, { whitelistUrls: [/spectrum\.chat/, /www\.spectrum\.chat/], environment: process.env.NODE_ENV, diff --git a/src/index.js b/src/index.js index 9bc50cd9c3..5acbd36401 100644 --- a/src/index.js +++ b/src/index.js @@ -61,7 +61,6 @@ if (t && (!existingUser || !existingUser.currentUser)) { const store = initStore(window.__SERVER_STATE__ || initialState); -// eslint-disable-next-line const renderMethod = !!window.__SERVER_STATE__ ? // $FlowIssue ReactDOM.hydrate @@ -83,7 +82,11 @@ function render() { ); } -Loadable.preloadReady().then(render); +Loadable.preloadReady() + .then(render) + .catch(err => { + console.error(err); + }); OfflinePluginRuntime.install({ // Apply new updates immediately diff --git a/yarn.lock b/yarn.lock index 75d68f5da7..ed68f7c033 100644 --- a/yarn.lock +++ b/yarn.lock @@ -204,10 +204,11 @@ date-fns "^1.27.2" figures "^1.7.0" -"@cypress/xvfb@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.1.3.tgz#6294a7d1feb751f12302248f2089fc534c4acb7f" +"@cypress/xvfb@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.3.tgz#6319afdcdcff7d1505daeeaa84484d0596189860" dependencies: + debug "^3.1.0" lodash.once "^4.1.1" "@segment/top-domain@^3.0.0": @@ -570,7 +571,7 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.0.0, ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: @@ -2244,6 +2245,12 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cachedir@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.2.0.tgz#e9a0a25bb21a2b7a0f766f07c41eb7a311919b97" + dependencies: + os-homedir "^1.0.1" + caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -2368,13 +2375,13 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" +chalk@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: - ansi-styles "^3.1.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + supports-color "^5.3.0" chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2: version "2.3.2" @@ -2384,6 +2391,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -2552,14 +2567,6 @@ cliff@~0.1.9: eyes "~0.1.8" winston "0.8.x" -clipboard@^1.6.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-1.7.1.tgz#360d6d6946e99a7a1fef395e42ba92b5e9b5a16b" - dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" - clipboard@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.0.tgz#4661dc972fb72a4c4770b8db78aa9b1caef52b50" @@ -3176,12 +3183,12 @@ cycle@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" -cypress@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-2.1.0.tgz#a8bd7d9b89c38a1e380db83b57d9bba0dbb95ba4" +cypress@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.0.1.tgz#6a8938ce8a551e4ae1bd5fb2ceab038d4ad39c4d" dependencies: "@cypress/listr-verbose-renderer" "0.4.1" - "@cypress/xvfb" "1.1.3" + "@cypress/xvfb" "1.2.3" "@types/blob-util" "1.3.3" "@types/bluebird" "3.5.18" "@types/chai" "4.0.8" @@ -3193,11 +3200,13 @@ cypress@^2.1.0: "@types/sinon" "4.0.0" "@types/sinon-chai" "2.7.29" bluebird "3.5.0" - chalk "2.1.0" + cachedir "1.2.0" + chalk "2.4.1" check-more-types "2.24.0" commander "2.11.0" common-tags "1.4.0" debug "3.1.0" + executable "4.1.1" extract-zip "1.6.6" fs-extra "4.0.1" getos "2.8.4" @@ -3207,6 +3216,7 @@ cypress@^2.1.0: lazy-ass "1.6.0" listr "0.12.0" lodash "4.17.4" + log-symbols "2.2.0" minimist "1.2.0" progress "1.1.8" ramda "0.24.1" @@ -4319,6 +4329,12 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +executable@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + dependencies: + pify "^2.2.0" + exenv@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -4615,7 +4631,7 @@ filesize@3.5.11: version "3.5.11" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" -filesize@^3.2.1, filesize@^3.5.11: +filesize@^3.5.11, filesize@^3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -5762,7 +5778,7 @@ interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2: +invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -7145,10 +7161,16 @@ lodash@4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@4.17.5, "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.7.0: +lodash@4.17.5, "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.7.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" +log-symbols@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -7447,10 +7469,14 @@ moment-timezone@^0.5.0: dependencies: moment ">= 2.9.0" -moment@2.x.x, "moment@>= 2.9.0", moment@^2.11.2, moment@^2.15.2, moment@^2.18.1, moment@^2.20.1: +moment@2.x.x, "moment@>= 2.9.0", moment@^2.15.2, moment@^2.18.1, moment@^2.20.1: version "2.22.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.0.tgz#7921ade01017dd45186e7fee5f424f0b8663a730" +moment@^2.22.1: + version "2.22.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + mrm-core@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mrm-core/-/mrm-core-1.1.0.tgz#97df4be3bc208d623519d6a18f18407ef79aa226" @@ -8212,7 +8238,7 @@ performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8703,7 +8729,7 @@ prop-ini@^0.0.2: dependencies: extend "^3.0.0" -prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0: +prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1: version "15.6.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" dependencies: @@ -8922,24 +8948,31 @@ react-app-rewire-styled-components@^3.0.0: babel-plugin-styled-components "^1.1.4" react-app-rewired "^1.2.0" -react-app-rewired@^1.0.5, react-app-rewired@^1.2.0: +react-app-rewired@^1.2.0: version "1.5.0" resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-1.5.0.tgz#8889d2f9ae8d8af16b340ca5424ffd5a07d23af2" dependencies: cross-spawn "^5.1.0" dotenv "^4.0.0" +react-app-rewired@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/react-app-rewired/-/react-app-rewired-1.5.2.tgz#0f5cdbc92f47f166bb0bcadf8a5d00999b90f68f" + dependencies: + cross-spawn "^5.1.0" + dotenv "^4.0.0" + react-click-outside@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/react-click-outside/-/react-click-outside-3.0.1.tgz#6e77e84d2f17afaaac26dbad743cbbf909f5e24c" dependencies: hoist-non-react-statics "^2.1.1" -react-clipboard.js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/react-clipboard.js/-/react-clipboard.js-1.1.3.tgz#86feeb49364553ecd15aea91c75aa142532a60e0" +react-clipboard.js@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-clipboard.js/-/react-clipboard.js-2.0.0.tgz#8ab3c49093e73ea146eb3bbc054889b7a60bf2b4" dependencies: - clipboard "^1.6.1" + clipboard "^2.0.0" prop-types "^15.5.0" react-dev-utils@^5.0.1: @@ -8965,9 +8998,9 @@ react-dev-utils@^5.0.1: strip-ansi "3.0.1" text-table "0.2.0" -react-dom@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" +react-dom@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.0.tgz#099f067dd5827ce36a29eaf9a6cdc7cbf6216b1e" dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -8978,17 +9011,17 @@ react-error-overlay@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4" -react-flip-move@^2.10.1: - version "2.10.2" - resolved "https://registry.yarnpkg.com/react-flip-move/-/react-flip-move-2.10.2.tgz#efd70dafb11594deac1827d9cf26ea2e773810d6" +react-flip-move@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-flip-move/-/react-flip-move-3.0.2.tgz#2f6f16ca6cb0a8490fba15a98b3440a76127e825" -react-helmet-async@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-0.0.4.tgz#641c19b4c5cd2257be00e681944bf7d200f3dc14" +react-helmet-async@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-0.1.0.tgz#d5fa350b74cf8b690c401dfe74d55ffd9fdd9119" dependencies: deep-equal "^1.0.1" - invariant "^2.2.2" - prop-types "^15.6.0" + invariant "^2.2.4" + prop-types "^15.6.1" shallowequal "^1.0.2" react-infinite-scroller-with-scroll-element@2.0.2: @@ -8997,9 +9030,9 @@ react-infinite-scroller-with-scroll-element@2.0.2: dependencies: prop-types "^15.5.8" -react-loadable@5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.3.1.tgz#9699e9a08fed49bacd69caaa282034b62a76bcdd" +react-loadable@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.4.0.tgz#3b6b7d51121a7868fd155be848a36e02084742c9" dependencies: prop-types "^15.5.0" @@ -9037,18 +9070,18 @@ react-redux@^5.0.2: loose-envify "^1.1.0" prop-types "^15.6.0" -react-router-dom@^4.0.0-beta.7: - version "4.2.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d" +react-router-dom@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" dependencies: history "^4.7.2" - invariant "^2.2.2" + invariant "^2.2.4" loose-envify "^1.3.1" - prop-types "^15.5.4" - react-router "^4.2.0" - warning "^3.0.0" + prop-types "^15.6.1" + react-router "^4.3.1" + warning "^4.0.1" -react-router@^4.0.0-beta.7, react-router@^4.2.0: +react-router@^4.0.0-beta.7: version "4.2.0" resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.2.0.tgz#61f7b3e3770daeb24062dae3eedef1b054155986" dependencies: @@ -9060,6 +9093,18 @@ react-router@^4.0.0-beta.7, react-router@^4.2.0: prop-types "^15.5.4" warning "^3.0.0" +react-router@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" + dependencies: + history "^4.7.2" + hoist-non-react-statics "^2.5.0" + invariant "^2.2.4" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.1" + warning "^4.0.1" + react-scripts@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.1.4.tgz#d5c230e707918d6dd2d06f303b10f5222d017c88" @@ -9115,11 +9160,11 @@ react-stripe-elements@^1.4.1: dependencies: prop-types "^15.5.10" -react-textarea-autosize@^4.0.5: - version "4.3.2" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-4.3.2.tgz#962a52c68caceae408c18acecec29049b81e42fa" +react-textarea-autosize@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz#df91387f8a8f22020b77e3833c09829d706a09a5" dependencies: - prop-types "^15.5.8" + prop-types "^15.6.0" react-transition-group@^2.2.0: version "2.3.0" @@ -9146,15 +9191,6 @@ react@*: object-assign "^4.1.1" prop-types "^15.6.0" -react@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - "react@^0.14.0 || ^15.0.0": version "15.6.2" resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" @@ -9165,6 +9201,15 @@ react@16.2.0: object-assign "^4.1.0" prop-types "^15.5.10" +react@^16.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.4.0.tgz#402c2db83335336fba1962c08b98c6272617d585" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.0" + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -10435,7 +10480,7 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.0.0, supports-color@^4.2.1: +supports-color@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: @@ -11180,6 +11225,12 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" +warning@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.1.tgz#66ce376b7fbfe8a887c22bdf0e7349d73d397745" + dependencies: + loose-envify "^1.0.0" + watch@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" @@ -11494,16 +11545,16 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-webpack-plugin@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/write-file-webpack-plugin/-/write-file-webpack-plugin-4.2.0.tgz#7bd18547eaa0ea0b23992fb1e0322e5431d339ef" +write-file-webpack-plugin@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/write-file-webpack-plugin/-/write-file-webpack-plugin-4.3.2.tgz#7b07b3be009be1da668edf46cfb8a357b404b912" dependencies: - chalk "^1.1.1" - debug "^2.6.8" - filesize "^3.2.1" - lodash "^4.5.1" + chalk "^2.4.0" + debug "^3.1.0" + filesize "^3.6.1" + lodash "^4.17.5" mkdirp "^0.5.1" - moment "^2.11.2" + moment "^2.22.1" write@^0.2.1: version "0.2.1"