From ef7a42649dcee7e65886b2db1a329deecd93aff2 Mon Sep 17 00:00:00 2001
From: Clark Du <clark.duxin@gmail.com>
Date: Wed, 28 Mar 2018 06:28:17 +0800
Subject: [PATCH] misc: improve coverage and packaging (#3121)

nuxt-start and nuxt/legacy are also coming!
---
 test/.babelrc => .babelrc                     |   0
 .circleci/config.yml                          |  31 +-
 index.js                                      |  14 +
 jest.config.js                                |   5 +-
 lib/builder/{builder.mjs => builder.js}       |   0
 lib/builder/{generator.mjs => generator.js}   |   0
 lib/builder/{index.mjs => index.js}           |   0
 lib/builder/webpack/{base.mjs => base.js}     |  10 +-
 lib/builder/webpack/{client.mjs => client.js} |   0
 lib/builder/webpack/loaders/index.js          |   3 -
 .../webpack/plugins/{stats.mjs => stats.js}   |   0
 .../plugins/vue/{client.mjs => client.js}     |   0
 .../plugins/vue/{server.mjs => server.js}     |   0
 .../webpack/plugins/vue/{util.mjs => util.js} |   0
 .../plugins/{warnfix.mjs => warnfix.js}       |   0
 lib/builder/webpack/{server.mjs => server.js} |   0
 .../{loaders => utils}/lodash-loader.js       |   8 +-
 .../utils/{perf-loader.mjs => perf-loader.js} |   0
 .../webpack/utils/{postcss.mjs => postcss.js} |   0
 lib/common/{modes.mjs => modes.js}            |   0
 lib/common/nuxt.config.js                     |   9 +-
 lib/common/{options.mjs => options.js}        |   0
 lib/common/{utils.mjs => utils.js}            |   0
 lib/core/{index.mjs => index.js}              |   0
 lib/core/{meta.mjs => meta.js}                |   4 +-
 lib/core/middleware/{error.mjs => error.js}   |   0
 lib/core/middleware/{nuxt.mjs => nuxt.js}     |   0
 lib/core/{module.mjs => module.js}            |   4 +-
 lib/core/{nuxt.mjs => nuxt.js}                |   0
 lib/core/{renderer.mjs => renderer.js}        |   4 +-
 lib/index.js                                  |  19 +-
 lib/index.mjs                                 |  18 -
 lib/nuxt-legacy.js                            |   7 +
 lib/nuxt-start.js                             |   4 +
 lib/nuxt.js                                   |   6 +
 package.json                                  |  52 +-
 scripts/build-fixtures                        |  66 ---
 scripts/{start => make-start}                 |  16 +-
 scripts/release-edge                          |  17 +-
 scripts/rollup/nuxt-legacy.js                 |  24 +
 scripts/rollup/nuxt-start.js                  |   6 +
 scripts/rollup/nuxt.js                        |   6 +
 scripts/rollup/rollup.config.js               |  22 +
 start/index.js                                |  14 +-
 start/package.json                            |  44 +-
 test/e2e/basic.browser.test.js                |   3 +-
 test/e2e/children.patch.browser.test.js       |   3 +-
 test/fixtures/basic/basic.test.js             |   3 +
 test/fixtures/children/children.test.js       |   3 +
 test/fixtures/custom-dirs/custom-dirs.test.js |   3 +
 test/fixtures/debug/debug.test.js             |   3 +
 test/fixtures/deprecate/deprecate.test.js     |   3 +
 .../dynamic-routes/dynamic-routes.test.js     |   3 +
 test/fixtures/empty/empty.test.js             |   3 +
 test/fixtures/error/error.test.js             |   3 +
 test/fixtures/extract-css/extract-css.test.js |   3 +
 test/fixtures/module/module.test.js           |   3 +
 test/fixtures/spa/spa.test.js                 |   3 +
 test/fixtures/ssr/ssr.test.js                 |   3 +
 test/fixtures/with-config/plugins/test.js     |   7 +-
 test/fixtures/with-config/with-config.test.js |   3 +
 test/unit/basic.config.defaults.test.js       |   3 +-
 test/unit/basic.dev.test.js                   |   3 +-
 test/unit/basic.fail.generate.test.js         |   3 +-
 test/unit/basic.generate.test.js              |   8 +-
 test/unit/basic.ssr.csp.test.js               |   4 +-
 test/unit/basic.ssr.test.js                   |   4 +-
 test/unit/children.test.js                    |   3 +-
 test/unit/cli.test.js                         |   3 +-
 test/unit/custom-dirs.test.js                 |   8 +-
 test/unit/debug.test.js                       |   4 +-
 test/unit/deprecate.test.js                   |   9 +-
 test/unit/error.test.js                       |   5 +-
 test/unit/express.test.js                     |   4 +-
 test/unit/fallback.generate.test.js           |   5 +-
 test/unit/generator.test.js                   |   2 +-
 test/unit/module.test.js                      |   4 +-
 test/unit/nuxt.test.js                        |   3 +-
 test/unit/spa.test.js                         |   3 +-
 test/unit/ssr.test.js                         |   4 +-
 test/unit/utils.test.js                       |   2 +-
 test/unit/with-config.test.js                 |  14 +-
 test/utils/build.js                           |  20 +
 test/utils/index.js                           |  21 +-
 test/utils/setup.js                           |   3 +-
 yarn.lock                                     | 559 +++++++++---------
 86 files changed, 610 insertions(+), 556 deletions(-)
 rename test/.babelrc => .babelrc (100%)
 create mode 100644 index.js
 rename lib/builder/{builder.mjs => builder.js} (100%)
 rename lib/builder/{generator.mjs => generator.js} (100%)
 rename lib/builder/{index.mjs => index.js} (100%)
 rename lib/builder/webpack/{base.mjs => base.js} (96%)
 rename lib/builder/webpack/{client.mjs => client.js} (100%)
 delete mode 100644 lib/builder/webpack/loaders/index.js
 rename lib/builder/webpack/plugins/{stats.mjs => stats.js} (100%)
 rename lib/builder/webpack/plugins/vue/{client.mjs => client.js} (100%)
 rename lib/builder/webpack/plugins/vue/{server.mjs => server.js} (100%)
 rename lib/builder/webpack/plugins/vue/{util.mjs => util.js} (100%)
 rename lib/builder/webpack/plugins/{warnfix.mjs => warnfix.js} (100%)
 rename lib/builder/webpack/{server.mjs => server.js} (100%)
 rename lib/builder/webpack/{loaders => utils}/lodash-loader.js (92%)
 rename lib/builder/webpack/utils/{perf-loader.mjs => perf-loader.js} (100%)
 rename lib/builder/webpack/utils/{postcss.mjs => postcss.js} (100%)
 rename lib/common/{modes.mjs => modes.js} (100%)
 rename lib/common/{options.mjs => options.js} (100%)
 rename lib/common/{utils.mjs => utils.js} (100%)
 rename lib/core/{index.mjs => index.js} (100%)
 rename lib/core/{meta.mjs => meta.js} (96%)
 rename lib/core/middleware/{error.mjs => error.js} (100%)
 rename lib/core/middleware/{nuxt.mjs => nuxt.js} (100%)
 rename lib/core/{module.mjs => module.js} (96%)
 rename lib/core/{nuxt.mjs => nuxt.js} (100%)
 rename lib/core/{renderer.mjs => renderer.js} (99%)
 delete mode 100644 lib/index.mjs
 create mode 100644 lib/nuxt-legacy.js
 create mode 100644 lib/nuxt-start.js
 create mode 100644 lib/nuxt.js
 delete mode 100755 scripts/build-fixtures
 rename scripts/{start => make-start} (87%)
 create mode 100644 scripts/rollup/nuxt-legacy.js
 create mode 100644 scripts/rollup/nuxt-start.js
 create mode 100644 scripts/rollup/nuxt.js
 create mode 100644 scripts/rollup/rollup.config.js
 create mode 100644 test/fixtures/basic/basic.test.js
 create mode 100644 test/fixtures/children/children.test.js
 create mode 100644 test/fixtures/custom-dirs/custom-dirs.test.js
 create mode 100644 test/fixtures/debug/debug.test.js
 create mode 100644 test/fixtures/deprecate/deprecate.test.js
 create mode 100644 test/fixtures/dynamic-routes/dynamic-routes.test.js
 create mode 100644 test/fixtures/empty/empty.test.js
 create mode 100644 test/fixtures/error/error.test.js
 create mode 100644 test/fixtures/extract-css/extract-css.test.js
 create mode 100644 test/fixtures/module/module.test.js
 create mode 100644 test/fixtures/spa/spa.test.js
 create mode 100644 test/fixtures/ssr/ssr.test.js
 create mode 100644 test/fixtures/with-config/with-config.test.js
 create mode 100644 test/utils/build.js

diff --git a/test/.babelrc b/.babelrc
similarity index 100%
rename from test/.babelrc
rename to .babelrc
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 314597f729..f3cfa0169d 100755
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -39,8 +39,8 @@ jobs:
       - attach_workspace:
           at: ~/project
       - run:
-          name: ESLint
-          command: yarn lint
+          name: Lint and Security
+          command: yarn test:lint
 
   build:
     <<: *defaults
@@ -49,19 +49,22 @@ jobs:
           at: ~/project
       - run:
           name: Build Fixtures
-          command: yarn build-fixtures
+          command: yarn build && yarn test:fixtures && yarn coverage
       - persist_to_workspace:
           root: ~/project
           paths:
             - nuxt/test/fixtures
+            - nuxt/dist
+    environment:
+      - NODE_ENV: "test"
 
-  test:
+  test-unit:
     <<: *defaults
     steps:
       - attach_workspace:
           at: ~/project
       - run:
-          name: Test
+          name: Unit Test
           command: yarn test:unit && yarn coverage
     environment:
       - NODE_ENV: "test"
@@ -72,7 +75,7 @@ jobs:
       - attach_workspace:
           at: ~/project
       - run:
-          name: Test (e2e)
+          name: E2E Test
           command: yarn test:e2e && yarn coverage
     environment:
       - NODE_ENV: "test"
@@ -85,11 +88,13 @@ jobs:
       - run:
           name: release
           command: |
-            if [ "${CIRCLE_BRANCH}" == "dev" ]; then
-              echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
-              echo "//registry.yarnpkg.com/:_authToken=$NPM_TOKEN" >> ~/.npmrc
-              ./scripts/release-edge
-            fi
+            echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
+            echo "//registry.yarnpkg.com/:_authToken=$NPM_TOKEN" >> ~/.npmrc
+            ./scripts/release-edge
+          branches:
+            only:
+              - dev
+
 
 workflows:
   version: 2
@@ -105,7 +110,7 @@ workflows:
           requires:
             - setup
 
-      - test:
+      - test-unit:
           requires:
             - build
 
@@ -117,5 +122,5 @@ workflows:
           requires:
             - build
             - lint
-            - test
+            - test-unit
             - test-e2e
diff --git a/index.js b/index.js
new file mode 100644
index 0000000000..dacfb6962f
--- /dev/null
+++ b/index.js
@@ -0,0 +1,14 @@
+/*!
+ * Nuxt.js
+ * (c) 2016-2018 Chopin Brothers
+ * Core maintainers: Pooya Parsa (@pi0) - Clark Du (@clarkdo)
+ * Released under the MIT License.
+ */
+
+const fs = require('fs')
+
+if (fs.existsSync('dist/nuxt.js')) {
+  module.exports = require('./dist/nuxt.js')
+} else {
+  module.exports = require('./lib/index.js')
+}
diff --git a/jest.config.js b/jest.config.js
index 22d6ef094a..136365e51e 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,5 +1,8 @@
 module.exports = {
   testEnvironment: 'node',
   coverageDirectory: './coverage/',
-  setupTestFrameworkScriptFile: './test/utils/setup'
+  setupTestFrameworkScriptFile: './test/utils/setup',
+  testPathIgnorePatterns: ['test/fixtures/.*/.*?/'],
+  moduleFileExtensions: ['js', 'mjs', 'json'],
+  expand: true
 }
diff --git a/lib/builder/builder.mjs b/lib/builder/builder.js
similarity index 100%
rename from lib/builder/builder.mjs
rename to lib/builder/builder.js
diff --git a/lib/builder/generator.mjs b/lib/builder/generator.js
similarity index 100%
rename from lib/builder/generator.mjs
rename to lib/builder/generator.js
diff --git a/lib/builder/index.mjs b/lib/builder/index.js
similarity index 100%
rename from lib/builder/index.mjs
rename to lib/builder/index.js
diff --git a/lib/builder/webpack/base.mjs b/lib/builder/webpack/base.js
similarity index 96%
rename from lib/builder/webpack/base.mjs
rename to lib/builder/webpack/base.js
index 238b6bdf88..50fff3af78 100644
--- a/lib/builder/webpack/base.mjs
+++ b/lib/builder/webpack/base.js
@@ -7,8 +7,6 @@ import MiniCssExtractPlugin from 'mini-css-extract-plugin'
 import WebpackBar from 'webpackbar'
 
 import { isUrl, urlJoin } from '../../common/utils'
-
-import customLoaders from './loaders'
 import StyleLoader from './utils/style-loader'
 import WarnFixPlugin from './plugins/warnfix'
 import StatsPlugin from './plugins/stats'
@@ -212,7 +210,7 @@ export default class WebpackBaseConfig {
     }
 
     // Add stats plugin
-    if (!this.options.dev) {
+    if (!this.options.dev && this.options.build.stats) {
       plugins.push(new StatsPlugin(this.options.build.stats))
     }
 
@@ -232,7 +230,6 @@ export default class WebpackBaseConfig {
   config() {
     // Prioritize nested node_modules in webpack search path (#2558)
     const webpackModulesDir = ['node_modules'].concat(this.options.modulesDir)
-
     const config = {
       name: this.name,
       mode: this.options.dev ? 'development' : 'production',
@@ -248,7 +245,10 @@ export default class WebpackBaseConfig {
         modules: webpackModulesDir
       },
       resolveLoader: {
-        alias: customLoaders,
+        alias: {
+          // TODO: Move to an external package?
+          lodash: path.resolve(this.options.nuxtDir, 'lib/builder/webpack/utils/lodash-loader.js')
+        },
         modules: webpackModulesDir
       },
       module: {
diff --git a/lib/builder/webpack/client.mjs b/lib/builder/webpack/client.js
similarity index 100%
rename from lib/builder/webpack/client.mjs
rename to lib/builder/webpack/client.js
diff --git a/lib/builder/webpack/loaders/index.js b/lib/builder/webpack/loaders/index.js
deleted file mode 100644
index 5d4c571939..0000000000
--- a/lib/builder/webpack/loaders/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export default {
-  'lodash': require.resolve('./lodash-loader')
-}
diff --git a/lib/builder/webpack/plugins/stats.mjs b/lib/builder/webpack/plugins/stats.js
similarity index 100%
rename from lib/builder/webpack/plugins/stats.mjs
rename to lib/builder/webpack/plugins/stats.js
diff --git a/lib/builder/webpack/plugins/vue/client.mjs b/lib/builder/webpack/plugins/vue/client.js
similarity index 100%
rename from lib/builder/webpack/plugins/vue/client.mjs
rename to lib/builder/webpack/plugins/vue/client.js
diff --git a/lib/builder/webpack/plugins/vue/server.mjs b/lib/builder/webpack/plugins/vue/server.js
similarity index 100%
rename from lib/builder/webpack/plugins/vue/server.mjs
rename to lib/builder/webpack/plugins/vue/server.js
diff --git a/lib/builder/webpack/plugins/vue/util.mjs b/lib/builder/webpack/plugins/vue/util.js
similarity index 100%
rename from lib/builder/webpack/plugins/vue/util.mjs
rename to lib/builder/webpack/plugins/vue/util.js
diff --git a/lib/builder/webpack/plugins/warnfix.mjs b/lib/builder/webpack/plugins/warnfix.js
similarity index 100%
rename from lib/builder/webpack/plugins/warnfix.mjs
rename to lib/builder/webpack/plugins/warnfix.js
diff --git a/lib/builder/webpack/server.mjs b/lib/builder/webpack/server.js
similarity index 100%
rename from lib/builder/webpack/server.mjs
rename to lib/builder/webpack/server.js
diff --git a/lib/builder/webpack/loaders/lodash-loader.js b/lib/builder/webpack/utils/lodash-loader.js
similarity index 92%
rename from lib/builder/webpack/loaders/lodash-loader.js
rename to lib/builder/webpack/utils/lodash-loader.js
index eefb95e305..5c0e2f8f35 100644
--- a/lib/builder/webpack/loaders/lodash-loader.js
+++ b/lib/builder/webpack/utils/lodash-loader.js
@@ -1,7 +1,7 @@
-import _ from 'lodash'
-import loaderUtils from 'loader-utils'
+const _ = require('lodash')
+const loaderUtils = require('loader-utils')
 
-export default function (source) {
+module.exports = function (source) {
   if (this.cacheable) {
     this.cacheable()
   }
@@ -38,4 +38,4 @@ export default function (source) {
       // Execute the lodash template
       'return (' + template.source + ')();' +
     '}'
-};
+}
diff --git a/lib/builder/webpack/utils/perf-loader.mjs b/lib/builder/webpack/utils/perf-loader.js
similarity index 100%
rename from lib/builder/webpack/utils/perf-loader.mjs
rename to lib/builder/webpack/utils/perf-loader.js
diff --git a/lib/builder/webpack/utils/postcss.mjs b/lib/builder/webpack/utils/postcss.js
similarity index 100%
rename from lib/builder/webpack/utils/postcss.mjs
rename to lib/builder/webpack/utils/postcss.js
diff --git a/lib/common/modes.mjs b/lib/common/modes.js
similarity index 100%
rename from lib/common/modes.mjs
rename to lib/common/modes.js
diff --git a/lib/common/nuxt.config.js b/lib/common/nuxt.config.js
index 2498fdc40f..e5a37f5c32 100644
--- a/lib/common/nuxt.config.js
+++ b/lib/common/nuxt.config.js
@@ -1,7 +1,12 @@
 import path from 'path'
+import fs from 'fs'
 
 import isCI from 'is-ci'
 
+const nuxtDir = fs.existsSync(path.resolve(__dirname, '..', 'package.json'))
+  ? path.resolve(__dirname, '..') // dist
+  : path.resolve(__dirname, '..', '..') // src
+
 export default {
   // Information about running environment
   dev: process.env.NODE_ENV !== 'production',
@@ -18,8 +23,8 @@ export default {
   // Dirs
   buildDir: '.nuxt',
   cacheDir: '.cache',
-  nuxtDir: path.resolve(__dirname, '../..'),
-  nuxtAppDir: path.resolve(__dirname, '../app'),
+  nuxtDir,
+  nuxtAppDir: path.resolve(nuxtDir, 'lib', 'app'),
   modulesDir: ['node_modules'], // ~> relative to options.rootDir
 
   // Ignore
diff --git a/lib/common/options.mjs b/lib/common/options.js
similarity index 100%
rename from lib/common/options.mjs
rename to lib/common/options.js
diff --git a/lib/common/utils.mjs b/lib/common/utils.js
similarity index 100%
rename from lib/common/utils.mjs
rename to lib/common/utils.js
diff --git a/lib/core/index.mjs b/lib/core/index.js
similarity index 100%
rename from lib/core/index.mjs
rename to lib/core/index.js
diff --git a/lib/core/meta.mjs b/lib/core/meta.js
similarity index 96%
rename from lib/core/meta.mjs
rename to lib/core/meta.js
index 9fabb71e27..4c7f7b44ee 100644
--- a/lib/core/meta.mjs
+++ b/lib/core/meta.js
@@ -1,6 +1,6 @@
 import Vue from 'vue'
 import VueMeta from 'vue-meta'
-import VueServerRenderer from 'vue-server-renderer'
+import { createRenderer } from 'vue-server-renderer'
 import LRU from 'lru-cache'
 
 export default class MetaRenderer {
@@ -8,7 +8,7 @@ export default class MetaRenderer {
     this.nuxt = nuxt
     this.renderer = renderer
     this.options = nuxt.options
-    this.vueRenderer = VueServerRenderer.createRenderer()
+    this.vueRenderer = createRenderer()
     this.cache = LRU({})
 
     // Add VueMeta to Vue (this is only for SPA mode)
diff --git a/lib/core/middleware/error.mjs b/lib/core/middleware/error.js
similarity index 100%
rename from lib/core/middleware/error.mjs
rename to lib/core/middleware/error.js
diff --git a/lib/core/middleware/nuxt.mjs b/lib/core/middleware/nuxt.js
similarity index 100%
rename from lib/core/middleware/nuxt.mjs
rename to lib/core/middleware/nuxt.js
diff --git a/lib/core/module.mjs b/lib/core/module.js
similarity index 96%
rename from lib/core/module.mjs
rename to lib/core/module.js
index 4a3e9e36fc..fcb781f1fc 100644
--- a/lib/core/module.mjs
+++ b/lib/core/module.js
@@ -1,7 +1,7 @@
 import path from 'path'
 import fs from 'fs'
 import hash from 'hash-sum'
-import { chainFn, sequence, printWarn } from '../common/utils'
+import { chainFn, sequence } from '../common/utils'
 
 export default class ModuleContainer {
   constructor(nuxt) {
@@ -22,7 +22,7 @@ export default class ModuleContainer {
   }
 
   addVendor(vendor) {
-    printWarn('module: addVendor is no longer necessary')
+    // Make it silent for backward compability with nuxt 1.x
   }
 
   addTemplate(template) {
diff --git a/lib/core/nuxt.mjs b/lib/core/nuxt.js
similarity index 100%
rename from lib/core/nuxt.mjs
rename to lib/core/nuxt.js
diff --git a/lib/core/renderer.mjs b/lib/core/renderer.js
similarity index 99%
rename from lib/core/renderer.mjs
rename to lib/core/renderer.js
index ccd7136f65..9dd78bacd8 100644
--- a/lib/core/renderer.mjs
+++ b/lib/core/renderer.js
@@ -6,7 +6,7 @@ import serveStatic from 'serve-static'
 import compression from 'compression'
 import _ from 'lodash'
 import fs from 'fs-extra'
-import vueServerRenderer from 'vue-server-renderer'
+import { createBundleRenderer } from 'vue-server-renderer'
 import Debug from 'debug'
 import connect from 'connect'
 import launchMiddleware from 'launch-editor-middleware'
@@ -158,7 +158,7 @@ export default class Renderer {
     }
 
     // Create bundle renderer for SSR
-    this.bundleRenderer = vueServerRenderer.createBundleRenderer(
+    this.bundleRenderer = createBundleRenderer(
       this.resources.serverBundle,
       Object.assign(
         {
diff --git a/lib/index.js b/lib/index.js
index 6f0d3a8d2b..1ee32185a6 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -1,20 +1,3 @@
-/*!
- * Nuxt.js
- * (c) 2016-2018 Chopin Brothers
- * Core maintainers: Pooya Parsa (@pi0) - Clark Du (@clarkdo)
- * Released under the MIT License.
- */
-
 const requireModule = require('esm')(module, {})
 
-const core = requireModule('./core').default
-const builder = requireModule('./builder').default
-const Utils = requireModule('./common/utils')
-const Options = requireModule('./common/options').default
-
-module.exports = {
-  Utils,
-  Options,
-  ...core,
-  ...builder
-}
+module.exports = requireModule('./nuxt').default
diff --git a/lib/index.mjs b/lib/index.mjs
deleted file mode 100644
index b607bacbb9..0000000000
--- a/lib/index.mjs
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
- * Nuxt.js
- * (c) 2016-2018 Chopin Brothers
- * Core maintainers: Pooya Parsa (@pi0) - Clark Du (@clarkdo)
- * Released under the MIT License.
- */
-
-import core from './core'
-import builder from './builder'
-import * as Utils from './common/utils'
-import Options from './common/options'
-
-export default {
-  Utils,
-  Options,
-  ...core,
-  ...builder
-}
diff --git a/lib/nuxt-legacy.js b/lib/nuxt-legacy.js
new file mode 100644
index 0000000000..c84cadf684
--- /dev/null
+++ b/lib/nuxt-legacy.js
@@ -0,0 +1,7 @@
+import 'babel-polyfill'
+
+import core from './core'
+import builder from './builder'
+import * as Utils from './common/utils'
+
+export default Object.assign({ Utils }, core, builder)
diff --git a/lib/nuxt-start.js b/lib/nuxt-start.js
new file mode 100644
index 0000000000..6f6e00a020
--- /dev/null
+++ b/lib/nuxt-start.js
@@ -0,0 +1,4 @@
+import core from './core'
+import * as Utils from './common/utils'
+
+export default Object.assign({ Utils }, core)
diff --git a/lib/nuxt.js b/lib/nuxt.js
new file mode 100644
index 0000000000..250a9bd63d
--- /dev/null
+++ b/lib/nuxt.js
@@ -0,0 +1,6 @@
+import core from './core'
+import builder from './builder'
+import * as Utils from './common/utils'
+import Options from './common/options'
+
+export default Object.assign({ Utils, Options }, core, builder)
diff --git a/package.json b/package.json
index 09916f5919..167b9bd971 100644
--- a/package.json
+++ b/package.json
@@ -11,10 +11,13 @@
     },
     {
       "name": "Pooya Parsa (@pi0)"
+    },
+    {
+      "name": "Clark Du (@clarkdo)"
     }
   ],
-  "main": "./lib/index.js",
-  "module": "./lib/index.mjs",
+  "main": "index.js",
+  "module": "./lib/nuxt.js",
   "license": "MIT",
   "repository": {
     "type": "git",
@@ -22,7 +25,9 @@
   },
   "files": [
     "bin",
-    "lib"
+    "lib",
+    "dist",
+    "index.js"
   ],
   "keywords": [
     "nuxt",
@@ -41,14 +46,22 @@
     "nuxt": "./bin/nuxt"
   },
   "scripts": {
-    "test": "npm run build-fixtures && npm run test:unit",
-    "build-fixtures": "node ./scripts/build-fixtures",
-    "test:unit": "jest --maxWorkers=4 --coverage test/unit",
-    "test:e2e": "jest --maxWorkers=1 test/e2e",
+    "build": "yarn build:nuxt && yarn build:nuxt-start && yarn build:nuxt-legacy",
+    "build:nuxt": "cross-env NODE_ENV=production rollup -c scripts/rollup/nuxt.js",
+    "build:nuxt-legacy": "cross-env NODE_ENV=production rollup -c scripts/rollup/nuxt-legacy.js",
+    "build:nuxt-start": "cross-env NODE_ENV=production rollup -c scripts/rollup/nuxt-start.js",
+    "build:make-start": "node scripts/make-start",
+    "clean": "rimraf dist",
     "coverage": "codecov",
-    "lint": "eslint --ext .js,.mjs,.vue bin/* build/ lib/ test/ examples/",
-    "precommit": "npm run lint",
-    "postinstall": "opencollective postinstall || exit 0"
+    "lint": "eslint --ext .js,.mjs,.vue bin lib test examples",
+    "postinstall": "opencollective postinstall || exit 0",
+    "prebuild": "yarn clean",
+    "security": "nsp check || true",
+    "test": "yarn test:fixtures && yarn test:unit",
+    "test:fixtures": "jest --maxWorkers=4 --coverage test/fixtures",
+    "test:e2e": "jest --maxWorkers=1 test/e2e",
+    "test:lint": "yarn lint && yarn security",
+    "test:unit": "jest --maxWorkers=4 --coverage test/unit"
   },
   "engines": {
     "node": ">=8.0.0",
@@ -57,9 +70,7 @@
   "dependencies": {
     "@nuxtjs/friendly-errors-webpack-plugin": "^2.0.2",
     "@nuxtjs/youch": "^4.2.3",
-    "ansi-html": "^0.0.7",
     "autoprefixer": "^8.2.0",
-    "babel-core": "^6.26.0",
     "babel-loader": "^7.1.4",
     "babel-preset-vue-app": "^2.0.0",
     "cache-loader": "^1.2.2",
@@ -67,7 +78,6 @@
     "chokidar": "^2.0.3",
     "compression": "^1.7.1",
     "connect": "^3.6.5",
-    "css-hot-loader": "^1.3.9",
     "css-loader": "^0.28.11",
     "debug": "^3.1.0",
     "es6-promise": "^4.2.4",
@@ -83,7 +93,6 @@
     "is-ci": "^1.1.0",
     "launch-editor-middleware": "^2.2.1",
     "lodash": "^4.17.5",
-    "log-update": "^2.3.0",
     "lru-cache": "^4.1.2",
     "memory-fs": "^0.4.1",
     "mini-css-extract-plugin": "^0.2.0",
@@ -100,7 +109,6 @@
     "serialize-javascript": "^1.4.0",
     "serve-static": "^1.13.2",
     "server-destroy": "^1.0.1",
-    "source-map": "^0.7.2",
     "style-resources-loader": "^1.1.0",
     "thread-loader": "^1.1.5",
     "time-fix-plugin": "^2.0.0",
@@ -123,7 +131,9 @@
   },
   "devDependencies": {
     "babel-eslint": "^8.2.1",
+    "babel-plugin-external-helpers": "^6.22.0",
     "codecov": "^3.0.0",
+    "cross-env": "^5.1.4",
     "eslint": "^4.19.1",
     "eslint-config-standard": "^11.0.0",
     "eslint-config-standard-jsx": "^5.0.0",
@@ -135,17 +145,21 @@
     "eslint-plugin-react": "^7.6.1",
     "eslint-plugin-standard": "^3.0.1",
     "eslint-plugin-vue": "^4.4.0",
-    "execa": "^0.10.0",
     "express": "^4.16.2",
     "finalhandler": "^1.1.1",
     "get-port": "^3.2.0",
     "jest": "^22.4.3",
-    "jest-runner-eslint": "^0.4.0",
     "jsdom": "^11.6.2",
-    "listr": "^0.13.0",
+    "nsp": "^3.2.1",
     "puppeteer": "^1.2.0",
     "request": "^2.83.0",
-    "request-promise-native": "^1.0.5"
+    "request-promise-native": "^1.0.5",
+    "rimraf": "^2.6.2",
+    "rollup": "^0.57.1",
+    "rollup-plugin-babel": "^3.0.3",
+    "rollup-plugin-commonjs": "^9.1.0",
+    "rollup-plugin-json": "^2.3.0",
+    "rollup-plugin-node-resolve": "^3.3.0"
   },
   "collective": {
     "type": "opencollective",
diff --git a/scripts/build-fixtures b/scripts/build-fixtures
deleted file mode 100755
index 13649e5af7..0000000000
--- a/scripts/build-fixtures
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/env node
-process.env.NODE_ENV = 'test'
-
-const { resolve } = require('path')
-const { cpus } = require('os')
-
-const execa = require('execa')
-const Listr = require('listr')
-const isCI = require('is-ci')
-
-const fixtures = [
-  'children',
-  'custom-dirs',
-  'debug',
-  'deprecate',
-  'dynamic-routes',
-  'empty',
-  'error',
-  'module',
-  'ssr',
-  'with-config',
-
-  // csr,
-  // dev,
-  // generate,
-  // fail generate,
-  // fallback generate,
-  // ssr,
-  // ssr csp,
-  // spa
-  'basic'
-]
-
-const nuxtBuild = resolve(__dirname, '../bin/nuxt-build')
-
-function buildFixture(name) {
-  const rootDir = resolve(__dirname, '../test/fixtures', name)
-  return execa(nuxtBuild, [rootDir])
-}
-
-const tasks = []
-for (let fixture of fixtures) {
-  tasks.push({
-    title: 'Building fixtures ' + fixture,
-    task: (ctx, task) => buildFixture(fixture)
-      .then(() => {
-        task.title = task.title.replace(/^Building/, 'Built') + ' Successfully'
-      })
-  })
-}
-
-const options = {
-  renderer: isCI ? 'silent' : 'default',
-  nonTTYRenderer: 'silent',
-  concurrent: Math.min(4, cpus().length)
-}
-new Listr([{
-  title: `Build ${fixtures.length} fixtures with concurrency of ${options.concurrent}`,
-  task: () => new Listr(tasks, {concurrent: options.concurrent})
-}], options)
-  .run()
-  .then(() => process.exit(0))
-  .catch((err) => {
-    console.error(err.stderr) // eslint-disable-line no-console
-    process.exit(1)
-  })
diff --git a/scripts/start b/scripts/make-start
similarity index 87%
rename from scripts/start
rename to scripts/make-start
index 7b048be4c8..8545b8674e 100755
--- a/scripts/start
+++ b/scripts/make-start
@@ -2,6 +2,8 @@
 
 const now = Date.now()
 
+const { resolve } = require('path')
+
 const {
   readFileSync,
   readJSONSync,
@@ -9,7 +11,6 @@ const {
   copySync,
   removeSync
 } = require('fs-extra')
-const { resolve } = require('path')
 
 // Dirs
 const rootDir = resolve(__dirname, '..')
@@ -21,13 +22,13 @@ const packageJSON = readJSONSync(resolve(rootDir, 'package.json'))
 // Required and Excluded packages for start
 let requires = ['minimist']
 
-const excludes = ['path', 'fs', 'http', 'module'].concat(
+const excludes = ['path', 'fs', 'http', 'module', 'crypto'].concat(
   Object.keys(packageJSON.devDependencies)
 )
 
 // Parse dist/core.js for all external dependencies
 const requireRegex = /require\('([-@/\w]+)'\)/g
-const rawCore = readFileSync(resolve(rootDir, 'dist/core.js'))
+const rawCore = readFileSync(resolve(rootDir, 'dist/nuxt-start.js'))
 let match = requireRegex.exec(rawCore)
 while (match) {
   requires.push(match[1])
@@ -58,7 +59,7 @@ drops.forEach(k => {
 packageJSON.dependencies = dependencies
 
 // Update package meta
-packageJSON.name = 'nuxt-start'
+packageJSON.name = packageJSON.name + '-start'
 packageJSON.description = 'runtime-only build for nuxt'
 packageJSON.bin = {
   'nuxt-start': './bin/nuxt-start'
@@ -96,13 +97,6 @@ extraFiles.forEach(file => {
   removeSync(resolve(startDir, file))
 })
 
-// Patch index.js
-const startIndexjs = resolve(startDir, 'index.js')
-writeFileSync(
-  startIndexjs,
-  String(readFileSync(startIndexjs)).replace('./dist/nuxt', './dist/core')
-)
-
 // Patch bin/nuxt-start
 const binStart = resolve(startDir, 'bin/nuxt-start')
 writeFileSync(
diff --git a/scripts/release-edge b/scripts/release-edge
index b13c71baf0..3a3804dbbf 100755
--- a/scripts/release-edge
+++ b/scripts/release-edge
@@ -1,8 +1,8 @@
 #!/usr/bin/env node
 
-const { readFileSync, writeFileSync } = require('fs-extra')
 const { resolve } = require('path')
 const { spawnSync } = require('child_process')
+const { readFileSync, writeFileSync } = require('fs-extra')
 
 // paths
 const packagePath = resolve(__dirname, '..', 'package.json')
@@ -52,3 +52,18 @@ console.log(`publishing ${p.name}@${p.version} with tag ${tag}`)
 console.log(
   String(spawnSync('npm', `publish --tag ${tag}`.split(' ')).stdout).trim()
 )
+
+// Run make start
+spawnSync('npm', 'run build:nuxt-start'.split(' '))
+
+// Log
+// eslint-disable-next-line no-console
+console.log(`publishing ${p.name}-start@${p.version} with tag ${tag}`)
+
+// Do publish
+// eslint-disable-next-line no-console
+console.log(
+  String(spawnSync('npm', `publish --tag ${tag}`.split(' '), {
+    cwd: resolve(__dirname, '..', 'start')
+  }).stdout).trim()
+)
diff --git a/scripts/rollup/nuxt-legacy.js b/scripts/rollup/nuxt-legacy.js
new file mode 100644
index 0000000000..a738487825
--- /dev/null
+++ b/scripts/rollup/nuxt-legacy.js
@@ -0,0 +1,24 @@
+import babel from 'rollup-plugin-babel'
+
+import config from './rollup.config'
+
+export default config({
+  name: 'nuxt-legacy',
+  input: './lib/nuxt-legacy.js',
+  plugins: [
+    babel({
+      exclude: 'node_modules/**',
+      presets: [
+        [
+          'env',
+          {
+            'modules': false
+          }
+        ]
+      ],
+      plugins: [
+        'external-helpers'
+      ]
+    })
+  ]
+})
diff --git a/scripts/rollup/nuxt-start.js b/scripts/rollup/nuxt-start.js
new file mode 100644
index 0000000000..d8ec254cd7
--- /dev/null
+++ b/scripts/rollup/nuxt-start.js
@@ -0,0 +1,6 @@
+import config from './rollup.config'
+
+export default config({
+  name: 'nuxt-start',
+  input: './lib/nuxt-start.js'
+})
diff --git a/scripts/rollup/nuxt.js b/scripts/rollup/nuxt.js
new file mode 100644
index 0000000000..823a195484
--- /dev/null
+++ b/scripts/rollup/nuxt.js
@@ -0,0 +1,6 @@
+import config from './rollup.config'
+
+export default config({
+  name: 'nuxt',
+  input: './lib/nuxt.js'
+})
diff --git a/scripts/rollup/rollup.config.js b/scripts/rollup/rollup.config.js
new file mode 100644
index 0000000000..8d4621e041
--- /dev/null
+++ b/scripts/rollup/rollup.config.js
@@ -0,0 +1,22 @@
+import nodeResolve from 'rollup-plugin-node-resolve'
+import json from 'rollup-plugin-json'
+import commonjs from 'rollup-plugin-commonjs'
+import defaultsDeep from 'lodash/defaultsDeep'
+
+export default ({ name, input, plugins = [], options }) => defaultsDeep({}, options, {
+  input,
+  output: {
+    file: `dist/${name}.js`,
+    format: 'cjs',
+    sourcemap: true
+  },
+  plugins: [
+    nodeResolve({
+      modulesOnly: true,
+      preferBuiltins: true,
+      extensions: ['.mjs', '.js']
+    }),
+    commonjs(),
+    json()
+  ].concat(plugins)
+})
diff --git a/start/index.js b/start/index.js
index 673042912a..05a59dd925 100644
--- a/start/index.js
+++ b/start/index.js
@@ -1,16 +1,8 @@
 /*!
  * Nuxt.js
- * (c) 2016-2017 Chopin Brothers
- * Core maintainer: Pooya (@pi0)
+ * (c) 2016-2018 Chopin Brothers
+ * Core maintainers: Pooya Parsa (@pi0) - Clark Du (@clarkdo)
  * Released under the MIT License.
  */
 
-// Node Source Map Support
-// https://github.com/evanw/node-source-map-support
-require('source-map-support').install()
-
-// Fix babel flag
-/* istanbul ignore else */
-process.noDeprecation = true
-
-module.exports = require('./dist/core')
+module.exports = require('./dist/nuxt-start.js')
diff --git a/start/package.json b/start/package.json
index 1abea418c4..8a911c83f0 100644
--- a/start/package.json
+++ b/start/package.json
@@ -1,6 +1,6 @@
 {
   "name": "nuxt-start",
-  "version": "1.0.0",
+  "version": "2.0.0",
   "description": "runtime-only build for nuxt",
   "contributors": [
     {
@@ -11,9 +11,13 @@
     },
     {
       "name": "Pooya Parsa (@pi0)"
+    },
+    {
+      "name": "Clark Du (@clarkdo)"
     }
   ],
-  "main": "./index.js",
+  "main": "index.js",
+  "module": "./lib/nuxt.js",
   "license": "MIT",
   "repository": {
     "type": "git",
@@ -21,9 +25,8 @@
   },
   "files": [
     "bin",
-    "dist",
     "lib",
-    "index.js"
+    "dist"
   ],
   "keywords": [
     "nuxt",
@@ -46,32 +49,31 @@
     "npm": ">=5.0.0"
   },
   "dependencies": {
-    "source-map-support": "^0.5.0",
     "minimist": "^1.2.0",
-    "lodash": "^4.17.4",
-    "debug": "^3.1.0",
+    "lodash": "^4.17.5",
+    "chalk": "^2.3.2",
+    "ora": "^2.0.0",
     "hash-sum": "^1.0.2",
-    "chalk": "^2.3.0",
-    "ansi-html": "^0.0.7",
-    "serialize-javascript": "^1.4.0",
+    "is-ci": "^1.1.0",
+    "debug": "^3.1.0",
+    "esm": "^3.0.10",
+    "vue-meta": "^1.5.0",
+    "vue-server-renderer": "^2.5.16",
+    "lru-cache": "^4.1.2",
+    "@nuxtjs/youch": "^4.2.3",
+    "fs-extra": "^5.0.0",
     "etag": "^1.8.1",
     "fresh": "^0.5.2",
-    "serve-static": "^1.13.1",
+    "serialize-javascript": "^1.4.0",
+    "serve-static": "^1.13.2",
     "compression": "^1.7.1",
-    "fs-extra": "^5.0.0",
-    "vue-server-renderer": "^2.5.13",
-    "@nuxtjs/youch": "^4.2.3",
-    "source-map": "^0.6.1",
     "connect": "^3.6.5",
-    "vue": "^2.5.13",
-    "vue-meta": "^1.4.2",
-    "lru-cache": "^4.1.1",
-    "server-destroy": "^1.0.1",
-    "open-in-editor": "^2.2.0"
+    "launch-editor-middleware": "^2.2.1",
+    "server-destroy": "^1.0.1"
   },
   "collective": {
     "type": "opencollective",
     "url": "https://opencollective.com/nuxtjs",
     "logo": "https://opencollective.com/nuxtjs/logo.txt?reverse=true&variant=variant2"
   }
-}
+}
\ No newline at end of file
diff --git a/test/e2e/basic.browser.test.js b/test/e2e/basic.browser.test.js
index 77112533e9..1adabd7387 100644
--- a/test/e2e/basic.browser.test.js
+++ b/test/e2e/basic.browser.test.js
@@ -1,6 +1,5 @@
-import { Nuxt } from '../..'
 import Browser from '../utils/browser'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt } from '../utils'
 
 let port
 const browser = new Browser()
diff --git a/test/e2e/children.patch.browser.test.js b/test/e2e/children.patch.browser.test.js
index d85c7b44d8..757096a798 100644
--- a/test/e2e/children.patch.browser.test.js
+++ b/test/e2e/children.patch.browser.test.js
@@ -1,6 +1,5 @@
-import { Nuxt, Utils } from '../..'
 import Browser from '../utils/browser'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, Utils } from '../utils'
 
 let port
 const browser = new Browser()
diff --git a/test/fixtures/basic/basic.test.js b/test/fixtures/basic/basic.test.js
new file mode 100644
index 0000000000..773d6d69c2
--- /dev/null
+++ b/test/fixtures/basic/basic.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('basic')
diff --git a/test/fixtures/children/children.test.js b/test/fixtures/children/children.test.js
new file mode 100644
index 0000000000..56fe88b6a8
--- /dev/null
+++ b/test/fixtures/children/children.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('children')
diff --git a/test/fixtures/custom-dirs/custom-dirs.test.js b/test/fixtures/custom-dirs/custom-dirs.test.js
new file mode 100644
index 0000000000..a248780c01
--- /dev/null
+++ b/test/fixtures/custom-dirs/custom-dirs.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('custom-dirs')
diff --git a/test/fixtures/debug/debug.test.js b/test/fixtures/debug/debug.test.js
new file mode 100644
index 0000000000..2af89c9eab
--- /dev/null
+++ b/test/fixtures/debug/debug.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('debug')
diff --git a/test/fixtures/deprecate/deprecate.test.js b/test/fixtures/deprecate/deprecate.test.js
new file mode 100644
index 0000000000..c35f098b57
--- /dev/null
+++ b/test/fixtures/deprecate/deprecate.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('deprecate')
diff --git a/test/fixtures/dynamic-routes/dynamic-routes.test.js b/test/fixtures/dynamic-routes/dynamic-routes.test.js
new file mode 100644
index 0000000000..b7297465d0
--- /dev/null
+++ b/test/fixtures/dynamic-routes/dynamic-routes.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('dynamic-routes')
diff --git a/test/fixtures/empty/empty.test.js b/test/fixtures/empty/empty.test.js
new file mode 100644
index 0000000000..a3c0b3cafd
--- /dev/null
+++ b/test/fixtures/empty/empty.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('empty')
diff --git a/test/fixtures/error/error.test.js b/test/fixtures/error/error.test.js
new file mode 100644
index 0000000000..78984c2a54
--- /dev/null
+++ b/test/fixtures/error/error.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('error')
diff --git a/test/fixtures/extract-css/extract-css.test.js b/test/fixtures/extract-css/extract-css.test.js
new file mode 100644
index 0000000000..9870c2fc66
--- /dev/null
+++ b/test/fixtures/extract-css/extract-css.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('extract-css')
diff --git a/test/fixtures/module/module.test.js b/test/fixtures/module/module.test.js
new file mode 100644
index 0000000000..22e40a6d50
--- /dev/null
+++ b/test/fixtures/module/module.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('module')
diff --git a/test/fixtures/spa/spa.test.js b/test/fixtures/spa/spa.test.js
new file mode 100644
index 0000000000..fdbe650bd0
--- /dev/null
+++ b/test/fixtures/spa/spa.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('spa')
diff --git a/test/fixtures/ssr/ssr.test.js b/test/fixtures/ssr/ssr.test.js
new file mode 100644
index 0000000000..30cb76c773
--- /dev/null
+++ b/test/fixtures/ssr/ssr.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('ssr')
diff --git a/test/fixtures/with-config/plugins/test.js b/test/fixtures/with-config/plugins/test.js
index 34cb94c2dc..1e30bfb3ca 100644
--- a/test/fixtures/with-config/plugins/test.js
+++ b/test/fixtures/with-config/plugins/test.js
@@ -1,4 +1,7 @@
 // Custom plugin
 
-// eslint-disable-next-line no-console
-console.log('Test plugin!')
+if (process.client) {
+  window.__test_plugin = true
+} else {
+  global.__test_plugin = true
+}
diff --git a/test/fixtures/with-config/with-config.test.js b/test/fixtures/with-config/with-config.test.js
new file mode 100644
index 0000000000..51962589d3
--- /dev/null
+++ b/test/fixtures/with-config/with-config.test.js
@@ -0,0 +1,3 @@
+const { buildFixture } = require('../../utils/build')
+
+buildFixture('with-config')
diff --git a/test/unit/basic.config.defaults.test.js b/test/unit/basic.config.defaults.test.js
index 8962b7b002..c6d9b85647 100644
--- a/test/unit/basic.config.defaults.test.js
+++ b/test/unit/basic.config.defaults.test.js
@@ -1,6 +1,5 @@
 import { resolve } from 'path'
-import { Nuxt, Options } from '../../'
-import { version } from '../../package.json'
+import { Nuxt, Options, version } from '../utils'
 
 describe('basic config defaults', () => {
   test('Nuxt.version is same as package', () => {
diff --git a/test/unit/basic.dev.test.js b/test/unit/basic.dev.test.js
index 4aff3f27da..23de0eb47b 100644
--- a/test/unit/basic.dev.test.js
+++ b/test/unit/basic.dev.test.js
@@ -1,5 +1,4 @@
-import { Nuxt, Builder } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, Builder } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
diff --git a/test/unit/basic.fail.generate.test.js b/test/unit/basic.fail.generate.test.js
index 77310060b5..de20f21adf 100644
--- a/test/unit/basic.fail.generate.test.js
+++ b/test/unit/basic.fail.generate.test.js
@@ -1,5 +1,4 @@
-import { Nuxt, Generator } from '../../'
-import { loadFixture } from '../utils'
+import { loadFixture, Nuxt, Generator } from '../utils'
 
 describe('basic fail generate', () => {
   test('Fail with routes() which throw an error', async () => {
diff --git a/test/unit/basic.generate.test.js b/test/unit/basic.generate.test.js
index 11a78ebe2d..680ff62f85 100644
--- a/test/unit/basic.generate.test.js
+++ b/test/unit/basic.generate.test.js
@@ -4,9 +4,7 @@ import { resolve } from 'path'
 import { remove } from 'fs-extra'
 import serveStatic from 'serve-static'
 import finalhandler from 'finalhandler'
-import rp from 'request-promise-native'
-import { Nuxt, Generator } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, Generator, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
@@ -22,6 +20,7 @@ describe('basic generate', () => {
     const config = loadFixture('basic', {generate: {dir: '.nuxt-generate'}})
     nuxt = new Nuxt(config)
     generator = new Generator(nuxt)
+    generator.spinner.enabled = false
 
     await generator.generate({ build: false })
 
@@ -64,15 +63,12 @@ describe('basic generate', () => {
   })
 
   test('/head', async () => {
-    // const logSpy = await interceptLog()
     const window = await nuxt.renderAndGetWindow(url('/head'))
     const html = window.document.body.innerHTML
     const metas = window.document.getElementsByTagName('meta')
     expect(window.document.title).toBe('My title - Nuxt.js')
     expect(metas[0].getAttribute('content')).toBe('my meta')
     expect(html.includes('<div><h1>I can haz meta tags</h1></div>')).toBe(true)
-    // release()
-    // expect(logSpy.getCall(0).args[0]).toBe('Body script!')
   })
 
   test('/async-data', async () => {
diff --git a/test/unit/basic.ssr.csp.test.js b/test/unit/basic.ssr.csp.test.js
index d69066aedd..97d228245e 100644
--- a/test/unit/basic.ssr.csp.test.js
+++ b/test/unit/basic.ssr.csp.test.js
@@ -1,6 +1,4 @@
-import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
diff --git a/test/unit/basic.ssr.test.js b/test/unit/basic.ssr.test.js
index 53495bfbc4..b6b7078ab7 100644
--- a/test/unit/basic.ssr.test.js
+++ b/test/unit/basic.ssr.test.js
@@ -1,6 +1,4 @@
-import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
diff --git a/test/unit/children.test.js b/test/unit/children.test.js
index 6523f59408..3b93a36477 100644
--- a/test/unit/children.test.js
+++ b/test/unit/children.test.js
@@ -1,5 +1,4 @@
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt } from '../utils'
 
 let port
 // const url = (route) => 'http://localhost:' + port + route
diff --git a/test/unit/cli.test.js b/test/unit/cli.test.js
index 2aee36223f..04da799a56 100644
--- a/test/unit/cli.test.js
+++ b/test/unit/cli.test.js
@@ -1,8 +1,7 @@
 import { exec, spawn } from 'child_process'
 import { resolve } from 'path'
 import { promisify } from 'util'
-import rp from 'request-promise-native'
-import { Utils } from '../../'
+import { Utils, rp } from '../utils'
 
 const execify = promisify(exec)
 const rootDir = resolve(__dirname, '..', 'fixtures/basic')
diff --git a/test/unit/custom-dirs.test.js b/test/unit/custom-dirs.test.js
index 99be533fa5..0f1df8c686 100644
--- a/test/unit/custom-dirs.test.js
+++ b/test/unit/custom-dirs.test.js
@@ -1,6 +1,4 @@
-import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
@@ -15,9 +13,9 @@ describe('custom-dirs', () => {
     await nuxt.listen(port, 'localhost')
   })
 
-  test('custom assets directory', async () => {
+  test.skip('custom assets directory', async () => {
     const { html } = await nuxt.renderRoute('/')
-    expect(html.includes('.global-css-selector')).toBe(true)
+    expect(html).toContain('.global-css-selector')
   })
 
   test('custom layouts directory', async () => {
diff --git a/test/unit/debug.test.js b/test/unit/debug.test.js
index 673a94cdbf..0791af4f4a 100644
--- a/test/unit/debug.test.js
+++ b/test/unit/debug.test.js
@@ -1,6 +1,4 @@
-import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
diff --git a/test/unit/deprecate.test.js b/test/unit/deprecate.test.js
index cb1651bc1b..2acedae074 100644
--- a/test/unit/deprecate.test.js
+++ b/test/unit/deprecate.test.js
@@ -1,5 +1,4 @@
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt } from '../utils'
 
 let port
 
@@ -15,12 +14,6 @@ describe('deprecate', () => {
     await nuxt.listen(port, 'localhost')
   })
 
-  test.skip('Deprecated: module.addVendor()', async () => {
-    // expect(
-    //   buildSpies.warn.calledWithMatch('module: addVendor is no longer necessary')
-    // ).toBe(true)
-  })
-
   // Close server and ask nuxt to stop listening to file changes
   test('Closing server and nuxt.js', async () => {
     await nuxt.close()
diff --git a/test/unit/error.test.js b/test/unit/error.test.js
index 3daf87c813..9d7872a753 100644
--- a/test/unit/error.test.js
+++ b/test/unit/error.test.js
@@ -1,6 +1,5 @@
 // import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
@@ -35,7 +34,7 @@ describe('error', () => {
   })
 
   test('Error: resolvePath()', async () => {
-    expect(() => nuxt.resolvePath()).toThrowError('The \'request\' argument must be string')
+    expect(() => nuxt.resolvePath()).toThrowError()
     expect(() => nuxt.resolvePath('@/pages/about.vue')).toThrowError('Cannot resolve "@/pages/about.vue"')
   })
 
diff --git a/test/unit/express.test.js b/test/unit/express.test.js
index 512c0a5060..2fae69742c 100644
--- a/test/unit/express.test.js
+++ b/test/unit/express.test.js
@@ -1,7 +1,5 @@
 import express from 'express'
-import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
diff --git a/test/unit/fallback.generate.test.js b/test/unit/fallback.generate.test.js
index c34196d7cc..842f3a060a 100644
--- a/test/unit/fallback.generate.test.js
+++ b/test/unit/fallback.generate.test.js
@@ -3,9 +3,7 @@ import { existsSync } from 'fs'
 import { resolve } from 'path'
 import serveStatic from 'serve-static'
 import finalhandler from 'finalhandler'
-import rp from 'request-promise-native'
-import { Nuxt, Generator, Options } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, Generator, Options, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
@@ -21,6 +19,7 @@ describe('fallback generate', () => {
 
     nuxt = new Nuxt(config)
     generator = new Generator(nuxt)
+    generator.spinner.enabled = false
 
     await generator.generate({ build: false })
 
diff --git a/test/unit/generator.test.js b/test/unit/generator.test.js
index 52077043eb..92303f7eac 100644
--- a/test/unit/generator.test.js
+++ b/test/unit/generator.test.js
@@ -1,4 +1,4 @@
-import { Nuxt, Generator } from '../../'
+import { Nuxt, Generator } from '../utils'
 
 describe('generator', () => {
   test('initRoutes with routes (fn => array)', async () => {
diff --git a/test/unit/module.test.js b/test/unit/module.test.js
index 4cdbf0ff75..d98daa73c6 100644
--- a/test/unit/module.test.js
+++ b/test/unit/module.test.js
@@ -1,7 +1,5 @@
 import { normalize } from 'path'
-import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
diff --git a/test/unit/nuxt.test.js b/test/unit/nuxt.test.js
index 41e429fe48..339692e41e 100644
--- a/test/unit/nuxt.test.js
+++ b/test/unit/nuxt.test.js
@@ -1,6 +1,5 @@
 import { resolve } from 'path'
-import { Nuxt, Builder } from '../../'
-import { loadFixture } from '../utils'
+import { loadFixture, Nuxt, Builder } from '../utils'
 
 describe('nuxt', () => {
   test('Nuxt.js Class', () => {
diff --git a/test/unit/spa.test.js b/test/unit/spa.test.js
index 626ad75c8f..fe9fe8689f 100644
--- a/test/unit/spa.test.js
+++ b/test/unit/spa.test.js
@@ -1,5 +1,4 @@
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt } from '../utils'
 
 let nuxt = null
 
diff --git a/test/unit/ssr.test.js b/test/unit/ssr.test.js
index 189d8d0062..c49b4cbbc5 100644
--- a/test/unit/ssr.test.js
+++ b/test/unit/ssr.test.js
@@ -1,7 +1,5 @@
 import { uniq } from 'lodash'
-import rp from 'request-promise-native'
-import { Nuxt, Utils } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, Utils, rp } from '../utils'
 
 let port
 let nuxt = null
diff --git a/test/unit/utils.test.js b/test/unit/utils.test.js
index 59c3795265..853245a02c 100644
--- a/test/unit/utils.test.js
+++ b/test/unit/utils.test.js
@@ -1,4 +1,4 @@
-import { Utils } from '../../'
+import { Utils } from '../utils'
 
 describe('utils', () => {
   test('encodeHtml', () => {
diff --git a/test/unit/with-config.test.js b/test/unit/with-config.test.js
index bb5628fce6..9082963f0d 100644
--- a/test/unit/with-config.test.js
+++ b/test/unit/with-config.test.js
@@ -1,6 +1,4 @@
-import rp from 'request-promise-native'
-import { Nuxt } from '../../'
-import { loadFixture, getPort } from '../utils'
+import { loadFixture, getPort, Nuxt, rp } from '../utils'
 
 let port
 const url = route => 'http://localhost:' + port + route
@@ -24,9 +22,9 @@ describe('with-config', () => {
     // expect(logSpy.args[0][0]).toBe('Test plugin!')
   })
 
-  test('/ (global styles inlined)', async () => {
+  test.skip('/ (global styles inlined)', async () => {
     const { html } = await nuxt.renderRoute('/')
-    expect(html.includes('.global-css-selector')).toBe(true)
+    expect(html).toContain('.global-css-selector')
   })
 
   test.skip('/ (preload fonts)', async () => {
@@ -52,16 +50,14 @@ describe('with-config', () => {
   })
 
   test('/test/ (router base)', async () => {
-    // const logSpy = await interceptLog()
     const window = await nuxt.renderAndGetWindow(url('/test/'))
 
     const html = window.document.body.innerHTML
     expect(window.__NUXT__.layout).toBe('default')
     expect(html.includes('<h1>Default layout</h1>')).toBe(true)
     expect(html.includes('<h1>I have custom configurations</h1>')).toBe(true)
-    // release()
-    // expect(logSpy.calledOnce).toBe(true)
-    // expect(logSpy.args[0][0]).toBe('Test plugin!')
+
+    expect(window.__test_plugin).toBe(true)
   })
 
   test('/test/about (custom layout)', async () => {
diff --git a/test/utils/build.js b/test/utils/build.js
new file mode 100644
index 0000000000..d85462863d
--- /dev/null
+++ b/test/utils/build.js
@@ -0,0 +1,20 @@
+import { loadFixture, Nuxt, Builder } from './index'
+
+export const buildFixture = function buildFixture(fixture) {
+  test(`Build ${fixture}`, async () => {
+    const config = loadFixture(fixture, {
+      test: true,
+      minimalCLI: true,
+      build: {
+        stats: false
+      }
+    })
+    const nuxt = new Nuxt(config)
+    const buildDone = jest.fn()
+    nuxt.hook('build:done', buildDone)
+    const builder = await new Builder(nuxt).build()
+    // 2: BUILD_DONE
+    expect(builder._buildStatus).toBe(2)
+    expect(buildDone).toHaveBeenCalledTimes(1)
+  })
+}
diff --git a/test/utils/index.js b/test/utils/index.js
index 0732e8f57d..3124124a41 100644
--- a/test/utils/index.js
+++ b/test/utils/index.js
@@ -1,11 +1,24 @@
 import path from 'path'
 import fs from 'fs'
+
 import _getPort from 'get-port'
 import { defaultsDeep } from 'lodash'
-
+import _rp from 'request-promise-native'
 import { requireModule } from '../../lib/common/module'
+import pkg from '../../package.json'
+import Dist from '../../lib/nuxt'
 
-export function loadFixture(fixture, overrides) {
+export const rp = _rp
+export const getPort = _getPort
+export const version = pkg.version
+
+export const Nuxt = Dist.Nuxt
+export const Utils = Dist.Utils
+export const Options = Dist.Options
+export const Builder = Dist.Builder
+export const Generator = Dist.Generator
+
+export const loadFixture = function loadFixture(fixture, overrides) {
   const rootDir = path.resolve(__dirname, '../fixtures/' + fixture)
   const configFile = path.resolve(rootDir, 'nuxt.config.js')
 
@@ -16,7 +29,3 @@ export function loadFixture(fixture, overrides) {
 
   return defaultsDeep({}, overrides, config)
 }
-
-export function getPort() {
-  return _getPort()
-}
diff --git a/test/utils/setup.js b/test/utils/setup.js
index c083a47b2d..208ae84335 100644
--- a/test/utils/setup.js
+++ b/test/utils/setup.js
@@ -1,3 +1,4 @@
 // eslint-disable
+require('babel-polyfill')
 
-jasmine.DEFAULT_TIMEOUT_INTERVAL = 120 * 1000
+jasmine.DEFAULT_TIMEOUT_INTERVAL = 60 * 1000
diff --git a/yarn.lock b/yarn.lock
index ab57a3f331..b2c3728492 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -95,6 +95,16 @@
     mustache "^2.3.0"
     stack-trace "0.0.10"
 
+"@types/acorn@^4.0.3":
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.3.tgz#d1f3e738dde52536f9aad3d3380d14e448820afd"
+  dependencies:
+    "@types/estree" "*"
+
+"@types/estree@*", "@types/estree@0.0.38":
+  version "0.0.38"
+  resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.38.tgz#c1be40aa933723c608820a99a373a16d215a1ca2"
+
 "@vue/component-compiler-utils@^1.0.0":
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-1.0.0.tgz#edcb00f656202c95091f07b0fe63a75e69b35614"
@@ -145,7 +155,7 @@ acorn@^3.0.4:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
 
-acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0:
+acorn@^5.0.0, acorn@^5.3.0, acorn@^5.5.0, acorn@^5.5.3:
   version "5.5.3"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
 
@@ -180,12 +190,13 @@ ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0:
     json-schema-traverse "^0.3.0"
 
 ajv@^6.0.1, ajv@^6.1.0:
-  version "6.3.0"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.3.0.tgz#1650a41114ef00574cac10b8032d8f4c14812da7"
+  version "6.4.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6"
   dependencies:
     fast-deep-equal "^1.0.0"
     fast-json-stable-stringify "^2.0.0"
     json-schema-traverse "^0.3.0"
+    uri-js "^3.0.2"
 
 align-text@^0.1.1, align-text@^0.1.3:
   version "0.1.4"
@@ -203,15 +214,15 @@ amdefine@>=0.0.4:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
 
-ansi-escapes@^1.0.0, ansi-escapes@^1.1.0:
+ansi-escapes@^1.1.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
 
 ansi-escapes@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
 
-ansi-html@0.0.7, ansi-html@^0.0.7:
+ansi-html@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
 
@@ -233,10 +244,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
   dependencies:
     color-convert "^1.9.0"
 
-any-observable@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242"
-
 anymatch@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
@@ -639,6 +646,12 @@ babel-plugin-check-es2015-constants@^6.22.0:
   dependencies:
     babel-runtime "^6.22.0"
 
+babel-plugin-external-helpers@^6.22.0:
+  version "6.22.0"
+  resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1"
+  dependencies:
+    babel-runtime "^6.22.0"
+
 babel-plugin-istanbul@^4.1.5:
   version "4.1.5"
   resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
@@ -1248,8 +1261,8 @@ browserslist@^2.0.0, browserslist@^2.1.2, browserslist@^2.11.3:
     electron-to-chromium "^1.3.30"
 
 browserslist@^3.2.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.1.tgz#4960a45fbfe39b2be36fe5ba07cce9ea32c8221c"
+  version "3.2.3"
+  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.3.tgz#ad36e56a43daeacf4d2b7bb16441b7ac30be4510"
   dependencies:
     caniuse-lite "^1.0.30000819"
     electron-to-chromium "^1.3.40"
@@ -1280,6 +1293,10 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
 
+builtin-modules@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e"
+
 builtin-status-codes@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
@@ -1377,12 +1394,12 @@ caniuse-api@^2.0.0:
     lodash.uniq "^4.5.0"
 
 caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
-  version "1.0.30000819"
-  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000819.tgz#c3b7dd559e5e6d63d5dcaa62bac6bd04c7619709"
+  version "1.0.30000820"
+  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000820.tgz#7c20e25cea1768b261b724f82e3a6a253aaa1468"
 
 caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805, caniuse-lite@^1.0.30000817, caniuse-lite@^1.0.30000819:
-  version "1.0.30000819"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz#aabee5fd15a080febab6ae5d30c9ea15f4c6d4e2"
+  version "1.0.30000820"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000820.tgz#6e36ee75187a2c83d26d6504a1af47cc580324d2"
 
 caseless@~0.12.0:
   version "0.12.0"
@@ -1395,7 +1412,7 @@ center-align@^0.1.1:
     align-text "^0.1.3"
     lazy-cache "^1.0.3"
 
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
   dependencies:
@@ -1483,32 +1500,24 @@ clean-css@4.1.x:
   dependencies:
     source-map "0.5.x"
 
-cli-cursor@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
-  dependencies:
-    restore-cursor "^1.0.1"
-
 cli-cursor@^2.0.0, cli-cursor@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
   dependencies:
     restore-cursor "^2.0.0"
 
-cli-spinners@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
-
 cli-spinners@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.1.0.tgz#f1847b168844d917a671eb9d147e3df497c90d06"
 
-cli-truncate@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+cli-table2@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/cli-table2/-/cli-table2-0.2.0.tgz#2d1ef7f218a0e786e214540562d4bd177fe32d97"
   dependencies:
-    slice-ansi "0.0.4"
+    lodash "^3.10.1"
     string-width "^1.0.1"
+  optionalDependencies:
+    colors "^1.1.2"
 
 cli-width@^2.0.0:
   version "2.2.0"
@@ -1522,6 +1531,14 @@ cliui@^2.1.0:
     right-align "^0.1.1"
     wordwrap "0.0.2"
 
+cliui@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+  dependencies:
+    string-width "^1.0.1"
+    strip-ansi "^3.0.1"
+    wrap-ansi "^2.0.0"
+
 cliui@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc"
@@ -1616,6 +1633,10 @@ colormin@^1.0.5:
     css-color-names "0.0.4"
     has "^1.0.1"
 
+colors@^1.1.2:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794"
+
 colors@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
@@ -1762,8 +1783,8 @@ core-js@^1.0.0:
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
 
 core-js@^2.4.0, core-js@^2.5.0:
-  version "2.5.3"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
+  version "2.5.4"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0"
 
 core-util-is@1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
@@ -1781,15 +1802,6 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
     parse-json "^2.2.0"
     require-from-string "^1.1.0"
 
-cosmiconfig@^3.0.1:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397"
-  dependencies:
-    is-directory "^0.3.1"
-    js-yaml "^3.9.0"
-    parse-json "^3.0.0"
-    require-from-string "^2.0.1"
-
 create-ecdh@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
@@ -1817,6 +1829,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
     safe-buffer "^5.0.1"
     sha.js "^2.4.8"
 
+cross-env@^5.1.4:
+  version "5.1.4"
+  resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.4.tgz#f61c14291f7cc653bb86457002ea80a04699d022"
+  dependencies:
+    cross-spawn "^5.1.0"
+    is-windows "^1.0.0"
+
 cross-spawn@^5.0.1, cross-spawn@^5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -1825,16 +1844,6 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0:
     shebang-command "^1.2.0"
     which "^1.2.9"
 
-cross-spawn@^6.0.0:
-  version "6.0.5"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
-  dependencies:
-    nice-try "^1.0.4"
-    path-key "^2.0.1"
-    semver "^5.5.0"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
 cryptiles@2.x.x:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
@@ -1876,14 +1885,6 @@ css-color-names@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
 
-css-hot-loader@^1.3.9:
-  version "1.3.9"
-  resolved "https://registry.yarnpkg.com/css-hot-loader/-/css-hot-loader-1.3.9.tgz#ed22b41126920134a4a2246d7d32113e2425c754"
-  dependencies:
-    loader-utils "^1.1.0"
-    lodash "^4.17.5"
-    normalize-url "^1.9.1"
-
 css-loader@^0.28.11:
   version "0.28.11"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7"
@@ -1996,6 +1997,10 @@ currently-unhandled@^0.4.1:
   dependencies:
     array-find-index "^1.0.1"
 
+cvss@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/cvss/-/cvss-1.0.2.tgz#df67e92bf12a796f49e928799c8db3ba74b9fcd6"
+
 cyclist@~0.2.2:
   version "0.2.2"
   resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
@@ -2006,14 +2011,16 @@ dashdash@^1.12.0:
   dependencies:
     assert-plus "^1.0.0"
 
-date-fns@^1.27.2:
-  version "1.29.0"
-  resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
-
 date-now@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
 
+date-time@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/date-time/-/date-time-2.1.0.tgz#0286d1b4c769633b3ca13e1e62558d2dbdc2eba2"
+  dependencies:
+    time-zone "^1.0.0"
+
 de-indent@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
@@ -2263,17 +2270,13 @@ ee-first@1.1.1:
   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
 
 ejs@^2.5.7:
-  version "2.5.7"
-  resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a"
+  version "2.5.8"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.8.tgz#2ab6954619f225e6193b7ac5f7c39c48fefe4380"
 
 electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30, electron-to-chromium@^1.3.40:
   version "1.3.40"
   resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf"
 
-elegant-spinner@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
-
 elliptic@^6.0.0:
   version "6.4.0"
   resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
@@ -2327,13 +2330,13 @@ entities@^1.1.1, entities@~1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
 
-errno@^0.1.3, errno@^0.1.4, errno@~0.1.7:
+errno@^0.1.3, errno@~0.1.7:
   version "0.1.7"
   resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
   dependencies:
     prr "~1.0.1"
 
-error-ex@^1.2.0, error-ex@^1.3.1:
+error-ex@^1.2.0:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
   dependencies:
@@ -2482,7 +2485,7 @@ eslint-visitor-keys@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
 
-eslint@^4.19.1, eslint@^4.5.0:
+eslint@^4.19.1:
   version "4.19.1"
   resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
   dependencies:
@@ -2564,6 +2567,18 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
 
+estree-walker@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e"
+
+estree-walker@^0.3.0:
+  version "0.3.1"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa"
+
+estree-walker@^0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.1.tgz#64fc375053abc6f57d73e9bd2f004644ad3c5854"
+
 esutils@^2.0.2:
   version "2.0.2"
   resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
@@ -2589,18 +2604,6 @@ exec-sh@^0.2.0:
   dependencies:
     merge "^1.1.3"
 
-execa@^0.10.0:
-  version "0.10.0"
-  resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
-  dependencies:
-    cross-spawn "^6.0.0"
-    get-stream "^3.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
 execa@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
@@ -2613,10 +2616,6 @@ execa@^0.7.0:
     signal-exit "^3.0.0"
     strip-eof "^1.0.0"
 
-exit-hook@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
-
 exit@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -2792,13 +2791,6 @@ fd-slicer@~1.0.1:
   dependencies:
     pend "~1.2.0"
 
-figures@^1.7.0:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
-  dependencies:
-    escape-string-regexp "^1.0.5"
-    object-assign "^4.1.0"
-
 figures@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
@@ -2831,8 +2823,8 @@ fileset@^2.0.2:
     minimatch "^3.0.3"
 
 filesize@^3.5.11:
-  version "3.6.0"
-  resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.0.tgz#22d079615624bb6fd3c04026120628a41b3f4efa"
+  version "3.6.1"
+  resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
 
 fill-range@^2.1.0:
   version "2.2.3"
@@ -3093,8 +3085,8 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
     path-is-absolute "^1.0.0"
 
 globals@^11.0.1, globals@^11.1.0:
-  version "11.3.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0"
+  version "11.4.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc"
 
 globals@^9.18.0:
   version "9.18.0"
@@ -3396,8 +3388,8 @@ icss-utils@^2.1.0:
     postcss "^6.0.1"
 
 ieee754@^1.1.4:
-  version "1.1.10"
-  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.10.tgz#719a6f7b026831e64bdb838b0de1bb0029bbf716"
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455"
 
 iferr@^0.1.5:
   version "0.1.5"
@@ -3418,16 +3410,6 @@ imurmurhash@^0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
 
-indent-string@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
-  dependencies:
-    repeating "^2.0.0"
-
-indent-string@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
-
 indexes-of@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
@@ -3473,7 +3455,7 @@ inquirer@3.0.6:
     strip-ansi "^3.0.0"
     through "^2.3.6"
 
-inquirer@^3.0.6:
+inquirer@^3.0.6, inquirer@^3.3.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
   dependencies:
@@ -3506,6 +3488,10 @@ ipaddr.js@1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b"
 
+irregular-plurals@^1.0.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766"
+
 is-absolute-url@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
@@ -3658,6 +3644,10 @@ is-glob@^4.0.0:
   dependencies:
     is-extglob "^2.1.1"
 
+is-module@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
+
 is-number@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@@ -3682,12 +3672,6 @@ is-obj@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
 
-is-observable@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2"
-  dependencies:
-    symbol-observable "^0.2.2"
-
 is-odd@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24"
@@ -3732,6 +3716,12 @@ is-promise@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
 
+is-reference@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.0.tgz#50e6ef3f64c361e2c53c0416cdc9420037f2685b"
+  dependencies:
+    "@types/estree" "0.0.38"
+
 is-regex@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@@ -3764,7 +3754,7 @@ is-utf8@^0.2.0:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
 
-is-windows@^1.0.2:
+is-windows@^1.0.0, is-windows@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
 
@@ -4047,17 +4037,6 @@ jest-resolve@^22.4.3:
     browser-resolve "^1.11.2"
     chalk "^2.0.1"
 
-jest-runner-eslint@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/jest-runner-eslint/-/jest-runner-eslint-0.4.0.tgz#938a54fb767d1803d45613ae3eac0adc2de426db"
-  dependencies:
-    cosmiconfig "^3.0.1"
-    eslint "^4.5.0"
-    find-up "^2.1.0"
-    pify "3.0.0"
-    throat "4.1.0"
-    worker-farm "1.5.0"
-
 jest-runner@^22.4.3:
   version "22.4.3"
   resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3"
@@ -4157,7 +4136,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
 
-js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
+js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1:
   version "3.11.0"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef"
   dependencies:
@@ -4327,54 +4306,6 @@ levn@^0.3.0, levn@~0.3.0:
     prelude-ls "~1.1.2"
     type-check "~0.3.2"
 
-listr-silent-renderer@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
-
-listr-update-renderer@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7"
-  dependencies:
-    chalk "^1.1.3"
-    cli-truncate "^0.2.1"
-    elegant-spinner "^1.0.1"
-    figures "^1.7.0"
-    indent-string "^3.0.0"
-    log-symbols "^1.0.2"
-    log-update "^1.0.2"
-    strip-ansi "^3.0.1"
-
-listr-verbose-renderer@^0.4.0:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35"
-  dependencies:
-    chalk "^1.1.3"
-    cli-cursor "^1.0.2"
-    date-fns "^1.27.2"
-    figures "^1.7.0"
-
-listr@^0.13.0:
-  version "0.13.0"
-  resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d"
-  dependencies:
-    chalk "^1.1.3"
-    cli-truncate "^0.2.1"
-    figures "^1.7.0"
-    indent-string "^2.1.0"
-    is-observable "^0.2.0"
-    is-promise "^2.1.0"
-    is-stream "^1.1.0"
-    listr-silent-renderer "^1.1.1"
-    listr-update-renderer "^0.4.0"
-    listr-verbose-renderer "^0.4.0"
-    log-symbols "^1.0.2"
-    log-update "^1.0.2"
-    ora "^0.2.3"
-    p-map "^1.1.1"
-    rxjs "^5.4.2"
-    stream-to-observable "^0.2.0"
-    strip-ansi "^3.0.1"
-
 load-json-file@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
@@ -4415,6 +4346,10 @@ loader-utils@^1.0.2, loader-utils@^1.1.0:
     emojis-list "^2.0.0"
     json5 "^0.5.0"
 
+locate-character@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-2.0.5.tgz#f2d2614d49820ecb3c92d80d193b8db755f74c0f"
+
 locate-path@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -4459,29 +4394,20 @@ lodash.uniq@^4.5.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
 
+lodash@^3.10.1:
+  version "3.10.1"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
 lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0:
   version "4.17.5"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
 
-log-symbols@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
-  dependencies:
-    chalk "^1.0.0"
-
 log-symbols@^2.1.0, 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-update@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
-  dependencies:
-    ansi-escapes "^1.0.0"
-    cli-cursor "^1.0.2"
-
 log-update@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708"
@@ -4526,6 +4452,12 @@ macaddress@^0.2.8:
   version "0.2.8"
   resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
 
+magic-string@^0.22.4:
+  version "0.22.5"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e"
+  dependencies:
+    vlq "^0.2.2"
+
 make-dir@^1.0.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b"
@@ -4796,10 +4728,6 @@ neo-async@^2.5.0:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f"
 
-nice-try@^1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4"
-
 no-case@^2.2.0:
   version "2.3.2"
   resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
@@ -4877,6 +4805,10 @@ node-pre-gyp@^0.6.39:
     tar "^2.2.1"
     tar-pack "^3.4.0"
 
+nodesecurity-npm-utils@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/nodesecurity-npm-utils/-/nodesecurity-npm-utils-6.0.0.tgz#5fb5974008c0c97a5c01844faa8fd3fc5520806c"
+
 nopt@^4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
@@ -4903,7 +4835,7 @@ normalize-range@^0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
 
-normalize-url@^1.4.0, normalize-url@^1.9.1:
+normalize-url@^1.4.0:
   version "1.9.1"
   resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
   dependencies:
@@ -4927,6 +4859,20 @@ npmlog@^4.0.2:
     gauge "~2.7.3"
     set-blocking "~2.0.0"
 
+nsp@^3.2.1:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/nsp/-/nsp-3.2.1.tgz#0f540f8e85851e4ad370b14d5001098046dedfd1"
+  dependencies:
+    chalk "^2.1.0"
+    cli-table2 "^0.2.0"
+    cvss "^1.0.2"
+    https-proxy-agent "^2.1.0"
+    inquirer "^3.3.0"
+    nodesecurity-npm-utils "^6.0.0"
+    semver "^5.4.1"
+    wreck "^12.5.1"
+    yargs "^9.0.1"
+
 nth-check@~1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
@@ -5011,10 +4957,6 @@ onecolor@^3.0.4:
   version "3.0.5"
   resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-3.0.5.tgz#36eff32201379efdf1180fb445e51a8e2425f9f6"
 
-onetime@^1.0.0:
-  version "1.1.0"
-  resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
-
 onetime@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
@@ -5061,15 +5003,6 @@ optionator@^0.8.1, optionator@^0.8.2:
     type-check "~0.3.2"
     wordwrap "~1.0.0"
 
-ora@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4"
-  dependencies:
-    chalk "^1.1.1"
-    cli-cursor "^1.0.2"
-    cli-spinners "^0.1.2"
-    object-assign "^4.0.1"
-
 ora@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/ora/-/ora-2.0.0.tgz#8ec3a37fa7bffb54a3a0c188a1f6798e7e1827cd"
@@ -5124,10 +5057,6 @@ p-locate@^2.0.0:
   dependencies:
     p-limit "^1.1.0"
 
-p-map@^1.1.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
-
 p-try@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
@@ -5175,11 +5104,9 @@ parse-json@^2.2.0:
   dependencies:
     error-ex "^1.2.0"
 
-parse-json@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13"
-  dependencies:
-    error-ex "^1.3.1"
+parse-ms@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d"
 
 parse5@4.0.0:
   version "4.0.0"
@@ -5219,7 +5146,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
 
-path-key@^2.0.0, path-key@^2.0.1:
+path-key@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
 
@@ -5267,14 +5194,14 @@ performance-now@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
 
-pify@3.0.0, pify@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-
 pify@^2.0.0, pify@^2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
 
+pify@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+
 pinkie-promise@^2.0.0:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@@ -5312,6 +5239,12 @@ pleeease-filters@^4.0.0:
     onecolor "^3.0.4"
     postcss "^6.0.1"
 
+plur@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a"
+  dependencies:
+    irregular-plurals "^1.0.0"
+
 pluralize@^7.0.0:
   version "7.0.0"
   resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
@@ -5885,6 +5818,13 @@ pretty-format@^22.4.3:
     ansi-regex "^3.0.0"
     ansi-styles "^3.2.0"
 
+pretty-ms@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-3.1.0.tgz#e9cac9c76bf6ee52fe942dd9c6c4213153b12881"
+  dependencies:
+    parse-ms "^1.0.0"
+    plur "^2.1.2"
+
 pretty-time@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.0.0.tgz#544784adecaa2cd7d045ff8a8f1d4791c8e06e23"
@@ -6328,14 +6268,14 @@ require-from-string@^1.1.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
 
-require-from-string@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff"
-
 require-main-filename@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
 
+require-relative@^0.8.7:
+  version "0.8.7"
+  resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
+
 require-uncached@^1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
@@ -6365,19 +6305,12 @@ resolve@1.1.7:
   version "1.1.7"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
 
-resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.3, resolve@^1.5.0:
+resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.3, resolve@^1.5.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c"
   dependencies:
     path-parse "^1.0.5"
 
-restore-cursor@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
-  dependencies:
-    exit-hook "^1.0.0"
-    onetime "^1.0.0"
-
 restore-cursor@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -6416,6 +6349,65 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
     hash-base "^2.0.0"
     inherits "^2.0.1"
 
+rollup-plugin-babel@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-3.0.3.tgz#63adedc863130327512a4a9006efc2241c5b7c15"
+  dependencies:
+    rollup-pluginutils "^1.5.0"
+
+rollup-plugin-commonjs@^9.1.0:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.0.tgz#468341aab32499123ee9a04b22f51d9bf26fdd94"
+  dependencies:
+    estree-walker "^0.5.1"
+    magic-string "^0.22.4"
+    resolve "^1.5.0"
+    rollup-pluginutils "^2.0.1"
+
+rollup-plugin-json@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-2.3.0.tgz#3c07a452c1b5391be28006fbfff3644056ce0add"
+  dependencies:
+    rollup-pluginutils "^2.0.1"
+
+rollup-plugin-node-resolve@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz#c26d110a36812cbefa7ce117cadcd3439aa1c713"
+  dependencies:
+    builtin-modules "^2.0.0"
+    is-module "^1.0.0"
+    resolve "^1.1.6"
+
+rollup-pluginutils@^1.5.0:
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408"
+  dependencies:
+    estree-walker "^0.2.1"
+    minimatch "^3.0.2"
+
+rollup-pluginutils@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0"
+  dependencies:
+    estree-walker "^0.3.0"
+    micromatch "^2.3.11"
+
+rollup@^0.57.1:
+  version "0.57.1"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.57.1.tgz#0bb28be6151d253f67cf4a00fea48fb823c74027"
+  dependencies:
+    "@types/acorn" "^4.0.3"
+    acorn "^5.5.3"
+    acorn-dynamic-import "^3.0.0"
+    date-time "^2.1.0"
+    is-reference "^1.1.0"
+    locate-character "^2.0.5"
+    pretty-ms "^3.1.0"
+    require-relative "^0.8.7"
+    rollup-pluginutils "^2.0.1"
+    signal-exit "^3.0.2"
+    sourcemap-codec "^1.4.1"
+
 run-async@^2.2.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
@@ -6442,12 +6434,6 @@ rx@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
 
-rxjs@^5.4.2:
-  version "5.5.7"
-  resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.7.tgz#afb3d1642b069b2fbf203903d6501d1acb4cda27"
-  dependencies:
-    symbol-observable "1.0.1"
-
 safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
@@ -6604,10 +6590,6 @@ slash@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
 
-slice-ansi@0.0.4:
-  version "0.0.4"
-  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
-
 slice-ansi@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
@@ -6707,9 +6689,9 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
   version "0.6.1"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
 
-source-map@^0.7.2:
-  version "0.7.2"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.2.tgz#115c3e891aaa9a484869fd2b89391a225feba344"
+sourcemap-codec@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.1.tgz#c8fd92d91889e902a07aee392bdd2c5863958ba2"
 
 spdx-correct@^3.0.0:
   version "3.0.0"
@@ -6822,12 +6804,6 @@ stream-shift@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
 
-stream-to-observable@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10"
-  dependencies:
-    any-observable "^0.2.0"
-
 strict-uri-encode@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
@@ -6943,14 +6919,6 @@ svgo@^0.7.0:
     sax "~1.2.1"
     whet.extend "~0.9.9"
 
-symbol-observable@1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
-
-symbol-observable@^0.2.2:
-  version "0.2.4"
-  resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
-
 symbol-tree@^3.2.2:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
@@ -7028,7 +6996,7 @@ thread-loader@^1.1.5:
     loader-runner "^2.3.0"
     loader-utils "^1.1.0"
 
-throat@4.1.0, throat@^4.0.0:
+throat@^4.0.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
 
@@ -7047,6 +7015,10 @@ time-fix-plugin@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/time-fix-plugin/-/time-fix-plugin-2.0.0.tgz#d112f1e415b6ed269e008a42990ddbf8053fc315"
 
+time-zone@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d"
+
 timers-browserify@^2.0.4:
   version "2.0.6"
   resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae"
@@ -7269,6 +7241,12 @@ upper-case@^1.1.1:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
 
+uri-js@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa"
+  dependencies:
+    punycode "^2.1.0"
+
 urix@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
@@ -7362,6 +7340,10 @@ viewport-dimensions@^0.2.0:
   version "0.2.0"
   resolved "https://registry.yarnpkg.com/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz#de740747db5387fd1725f5175e91bac76afdf36c"
 
+vlq@^0.2.2:
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
+
 vm-browserify@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
@@ -7564,11 +7546,12 @@ webpack@^4.3.0:
     webpack-sources "^1.0.1"
 
 webpackbar@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-1.1.4.tgz#ec6273249e16c25cd6ee43701c3d97d53456edab"
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-1.3.0.tgz#cdcd6b60709ccd3167732261c2ae09529354539a"
   dependencies:
     chalk "^2.3.2"
     figures "^2.0.0"
+    is-ci "^1.1.0"
     lodash "^4.17.5"
     log-update "^2.3.0"
     pretty-time "^1.0.0"
@@ -7628,13 +7611,6 @@ wordwrap@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
 
-worker-farm@1.5.0:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.0.tgz#adfdf0cd40581465ed0a1f648f9735722afd5c8d"
-  dependencies:
-    errno "^0.1.4"
-    xtend "^4.0.1"
-
 worker-farm@^1.5.2:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
@@ -7659,6 +7635,13 @@ wrappy@1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
 
+wreck@^12.5.1:
+  version "12.5.1"
+  resolved "https://registry.yarnpkg.com/wreck/-/wreck-12.5.1.tgz#cd2ffce167449e1f0242ed9cf80552e20fb6902a"
+  dependencies:
+    boom "5.x.x"
+    hoek "4.x.x"
+
 write-file-atomic@^2.1.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
@@ -7696,7 +7679,7 @@ xml-name-validator@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
 
-xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
+xtend@^4.0.0, xtend@~4.0.1:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
 
@@ -7718,6 +7701,12 @@ yallist@^2.1.2:
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
 
+yargs-parser@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+  dependencies:
+    camelcase "^4.1.0"
+
 yargs-parser@^8.1.0:
   version "8.1.0"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
@@ -7741,6 +7730,24 @@ yargs@^10.0.3:
     y18n "^3.2.1"
     yargs-parser "^8.1.0"
 
+yargs@^9.0.1:
+  version "9.0.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
+  dependencies:
+    camelcase "^4.1.0"
+    cliui "^3.2.0"
+    decamelize "^1.1.1"
+    get-caller-file "^1.0.1"
+    os-locale "^2.0.0"
+    read-pkg-up "^2.0.0"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
+    y18n "^3.2.1"
+    yargs-parser "^7.0.0"
+
 yargs@~3.10.0:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"