Commit 0f33f3be authored by Evan You's avatar Evan You

Merge branch 'client-manifest'

parents 43477487 99b84e2b
...@@ -5,8 +5,14 @@ const clientConfig = require('./webpack.client.config') ...@@ -5,8 +5,14 @@ const clientConfig = require('./webpack.client.config')
const serverConfig = require('./webpack.server.config') const serverConfig = require('./webpack.server.config')
module.exports = function setupDevServer (app, cb) { module.exports = function setupDevServer (app, cb) {
let bundle let bundle, clientManifest
let template let resolve
let resolved = false
const readyPromise = new Promise(r => { resolve = r })
const ready = (...args) => {
if (!resolved) resolve()
cb(...args)
}
// modify client config to work with hot middleware // modify client config to work with hot middleware
clientConfig.entry.app = ['webpack-hot-middleware/client', clientConfig.entry.app] clientConfig.entry.app = ['webpack-hot-middleware/client', clientConfig.entry.app]
...@@ -25,12 +31,12 @@ module.exports = function setupDevServer (app, cb) { ...@@ -25,12 +31,12 @@ module.exports = function setupDevServer (app, cb) {
app.use(devMiddleware) app.use(devMiddleware)
clientCompiler.plugin('done', () => { clientCompiler.plugin('done', () => {
const fs = devMiddleware.fileSystem const fs = devMiddleware.fileSystem
const filePath = path.join(clientConfig.output.path, 'index.html') const readFile = file => fs.readFileSync(path.join(clientConfig.output.path, file), 'utf-8')
if (fs.existsSync(filePath)) { clientManifest = JSON.parse(readFile('vue-ssr-client-manifest.json'))
template = fs.readFileSync(filePath, 'utf-8')
if (bundle) { if (bundle) {
cb(bundle, template) ready(bundle, {
} clientManifest
})
} }
}) })
...@@ -46,12 +52,16 @@ module.exports = function setupDevServer (app, cb) { ...@@ -46,12 +52,16 @@ module.exports = function setupDevServer (app, cb) {
stats = stats.toJson() stats = stats.toJson()
stats.errors.forEach(err => console.error(err)) stats.errors.forEach(err => console.error(err))
stats.warnings.forEach(err => console.warn(err)) stats.warnings.forEach(err => console.warn(err))
const readFile = file => mfs.readFileSync(path.join(clientConfig.output.path, file), 'utf-8')
// read bundle generated by vue-ssr-webpack-plugin // read bundle generated by vue-ssr-webpack-plugin
const bundlePath = path.join(serverConfig.output.path, 'vue-ssr-bundle.json') bundle = JSON.parse(readFile('vue-ssr-server-bundle.json'))
bundle = JSON.parse(mfs.readFileSync(bundlePath, 'utf-8')) if (clientManifest) {
if (template) { ready(bundle, {
cb(bundle, template) clientManifest
})
} }
}) })
return readyPromise
} }
module.exports = { module.exports = {
extractCSS: process.env.NODE_ENV === 'production',
preserveWhitespace: false, preserveWhitespace: false,
postcss: [ postcss: [
require('autoprefixer')({ require('autoprefixer')({
......
const path = require('path') const path = require('path')
const webpack = require('webpack')
const vueConfig = require('./vue-loader.config') const vueConfig = require('./vue-loader.config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const isProd = process.env.NODE_ENV === 'production' const isProd = process.env.NODE_ENV === 'production'
...@@ -7,19 +9,7 @@ const isProd = process.env.NODE_ENV === 'production' ...@@ -7,19 +9,7 @@ const isProd = process.env.NODE_ENV === 'production'
module.exports = { module.exports = {
devtool: isProd devtool: isProd
? false ? false
: '#cheap-module-eval-source-map', : '#cheap-module-source-map',
entry: {
app: './src/entry-client.js',
vendor: [
'es6-promise/auto',
'firebase/app',
'firebase/database',
'vue',
'vue-router',
'vuex',
'vuex-router-sync'
]
},
output: { output: {
path: path.resolve(__dirname, '../dist'), path: path.resolve(__dirname, '../dist'),
publicPath: '/dist/', publicPath: '/dist/',
...@@ -53,6 +43,15 @@ module.exports = { ...@@ -53,6 +43,15 @@ module.exports = {
limit: 10000, limit: 10000,
name: '[name].[ext]?[hash]' name: '[name].[ext]?[hash]'
} }
},
{
test: /\.css$/,
use: isProd
? ExtractTextPlugin.extract({
use: 'css-loader?minimize',
fallback: 'vue-style-loader'
})
: ['vue-style-loader', 'css-loader']
} }
] ]
}, },
...@@ -60,7 +59,16 @@ module.exports = { ...@@ -60,7 +59,16 @@ module.exports = {
maxEntrypointSize: 300000, maxEntrypointSize: 300000,
hints: isProd ? 'warning' : false hints: isProd ? 'warning' : false
}, },
plugins: isProd ? [] : [ plugins: isProd
? [
new webpack.optimize.UglifyJsPlugin({
compress: { warnings: false }
}),
new ExtractTextPlugin({
filename: 'common.[chunkhash].css'
})
]
: [
new FriendlyErrorsPlugin() new FriendlyErrorsPlugin()
] ]
} }
const webpack = require('webpack') const webpack = require('webpack')
const merge = require('webpack-merge') const merge = require('webpack-merge')
const base = require('./webpack.base.config') const base = require('./webpack.base.config')
const HTMLPlugin = require('html-webpack-plugin')
const SWPrecachePlugin = require('sw-precache-webpack-plugin') const SWPrecachePlugin = require('sw-precache-webpack-plugin')
const VueSSRClientPlugin = require('vue-server-renderer/client-plugin')
const config = merge(base, { const config = merge(base, {
entry: {
app: './src/entry-client.js'
},
resolve: { resolve: {
alias: { alias: {
'create-api': './create-api-client.js' 'create-api': './create-api-client.js'
...@@ -18,23 +21,28 @@ const config = merge(base, { ...@@ -18,23 +21,28 @@ const config = merge(base, {
}), }),
// extract vendor chunks for better caching // extract vendor chunks for better caching
new webpack.optimize.CommonsChunkPlugin({ new webpack.optimize.CommonsChunkPlugin({
name: ['vendor', 'manifest'] name: 'vendor',
minChunks: function (module) {
// a module is extracted into the vendor chunk if...
return (
// it's inside node_modules
/node_modules/.test(module.context) &&
// and not a CSS file (due to extract-text-webpack-plugin limitation)
!/\.css$/.test(module.request)
)
}
}), }),
// generate output HTML // extract webpack runtime & manifest to avoid vendor chunk hash changing
new HTMLPlugin({ // on every build.
template: 'src/index.template.html' new webpack.optimize.CommonsChunkPlugin({
}) name: 'manifest'
}),
new VueSSRClientPlugin()
] ]
}) })
if (process.env.NODE_ENV === 'production') { if (process.env.NODE_ENV === 'production') {
config.plugins.push( config.plugins.push(
// minify JS
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
}),
// auto generate service worker // auto generate service worker
new SWPrecachePlugin({ new SWPrecachePlugin({
cacheId: 'vue-hn', cacheId: 'vue-hn',
......
const webpack = require('webpack') const webpack = require('webpack')
const merge = require('webpack-merge') const merge = require('webpack-merge')
const base = require('./webpack.base.config') const base = require('./webpack.base.config')
const VueSSRPlugin = require('vue-ssr-webpack-plugin') const nodeExternals = require('webpack-node-externals')
const VueSSRServerPlugin = require('vue-server-renderer/server-plugin')
module.exports = merge(base, { module.exports = merge(base, {
target: 'node', target: 'node',
...@@ -16,12 +17,17 @@ module.exports = merge(base, { ...@@ -16,12 +17,17 @@ module.exports = merge(base, {
'create-api': './create-api-server.js' 'create-api': './create-api-server.js'
} }
}, },
externals: Object.keys(require('../package.json').dependencies), // https://webpack.js.org/configuration/externals/#externals
// https://github.com/liady/webpack-node-externals
externals: nodeExternals({
// do not externalize CSS files in case we need to import it from a dep
whitelist: /\.css$/
}),
plugins: [ plugins: [
new webpack.DefinePlugin({ new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'), 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development'),
'process.env.VUE_ENV': '"server"' 'process.env.VUE_ENV': '"server"'
}), }),
new VueSSRPlugin() new VueSSRServerPlugin()
] ]
}) })
...@@ -16,38 +16,38 @@ ...@@ -16,38 +16,38 @@
}, },
"dependencies": { "dependencies": {
"compression": "^1.6.2", "compression": "^1.6.2",
"cross-env": "^3.2.4", "cross-env": "^4.0.0",
"es6-promise": "^4.1.0", "es6-promise": "^4.1.0",
"express": "^4.15.2", "express": "^4.15.2",
"extract-text-webpack-plugin": "^2.1.0",
"firebase": "^3.7.2", "firebase": "^3.7.2",
"lru-cache": "^4.0.2", "lru-cache": "^4.0.2",
"serve-favicon": "^2.4.1", "serve-favicon": "^2.4.1",
"vue": "^2.2.4", "vue": "^2.3.0-beta.1",
"vue-router": "^2.3.0", "vue-router": "^2.5.0",
"vue-server-renderer": "^2.2.4", "vue-server-renderer": "^2.3.0-beta.1",
"vue-style-loader": "^2.0.4", "vuex": "^2.3.1",
"vuex": "^2.2.1", "vuex-router-sync": "^4.1.2"
"vuex-router-sync": "^4.1.2",
"webpack-merge": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^6.7.7", "autoprefixer": "^6.7.7",
"buble": "^0.15.2", "buble": "^0.15.2",
"buble-loader": "^0.4.1", "buble-loader": "^0.4.1",
"css-loader": "^0.27.3", "css-loader": "^0.28.0",
"file-loader": "^0.10.1", "file-loader": "^0.11.1",
"friendly-errors-webpack-plugin": "^1.6.1", "friendly-errors-webpack-plugin": "^1.6.1",
"html-webpack-plugin": "^2.28.0",
"rimraf": "^2.6.1", "rimraf": "^2.6.1",
"stylus": "^0.54.5", "stylus": "^0.54.5",
"stylus-loader": "^3.0.1", "stylus-loader": "^3.0.1",
"sw-precache-webpack-plugin": "^0.9.1", "sw-precache-webpack-plugin": "^0.9.1",
"url-loader": "^0.5.8", "url-loader": "^0.5.8",
"vue-loader": "^11.1.4", "vue-loader": "^12.0.0",
"vue-ssr-webpack-plugin": "^1.0.2", "vue-style-loader": "^3.0.0",
"vue-template-compiler": "^2.2.4", "vue-template-compiler": "^2.3.0-beta.1",
"webpack": "^2.2.1", "webpack": "^2.2.1",
"webpack-merge": "^4.0.0",
"webpack-dev-middleware": "^1.10.1", "webpack-dev-middleware": "^1.10.1",
"webpack-hot-middleware": "^2.17.1" "webpack-hot-middleware": "^2.17.1",
"webpack-node-externals": "^1.5.4"
} }
} }
const fs = require('fs') const fs = require('fs')
const path = require('path') const path = require('path')
const LRU = require('lru-cache')
const express = require('express') const express = require('express')
const favicon = require('serve-favicon') const favicon = require('serve-favicon')
const compression = require('compression') const compression = require('compression')
const resolve = file => path.resolve(__dirname, file) const resolve = file => path.resolve(__dirname, file)
const { createBundleRenderer } = require('vue-server-renderer')
const isProd = process.env.NODE_ENV === 'production' const isProd = process.env.NODE_ENV === 'production'
const useMicroCache = process.env.MICRO_CACHE !== 'false'
const serverInfo = const serverInfo =
`express/${require('express/package.json').version} ` + `express/${require('express/package.json').version} ` +
`vue-server-renderer/${require('vue-server-renderer/package.json').version}` `vue-server-renderer/${require('vue-server-renderer/package.json').version}`
const app = express() const app = express()
let renderer const template = fs.readFileSync(resolve('./src/index.template.html'), 'utf-8')
if (isProd) {
// In production: create server renderer using server bundle and index HTML
// template from real fs.
// The server bundle is generated by vue-ssr-webpack-plugin.
const bundle = require('./dist/vue-ssr-bundle.json')
// src/index.template.html is processed by html-webpack-plugin to inject
// build assets and output as dist/index.html.
const template = fs.readFileSync(resolve('./dist/index.html'), 'utf-8')
renderer = createRenderer(bundle, template)
} else {
// In development: setup the dev server with watch and hot-reload,
// and create a new renderer on bundle / index template update.
require('./build/setup-dev-server')(app, (bundle, template) => {
renderer = createRenderer(bundle, template)
})
}
function createRenderer (bundle, template) { function createRenderer (bundle, options) {
// https://github.com/vuejs/vue/blob/dev/packages/vue-server-renderer/README.md#why-use-bundlerenderer // https://github.com/vuejs/vue/blob/dev/packages/vue-server-renderer/README.md#why-use-bundlerenderer
return require('vue-server-renderer').createBundleRenderer(bundle, { return createBundleRenderer(bundle, Object.assign(options, {
template, template,
cache: require('lru-cache')({ // for component caching
cache: LRU({
max: 1000, max: 1000,
maxAge: 1000 * 60 * 15 maxAge: 1000 * 60 * 15
}),
// this is only needed when vue-server-renderer is npm-linked
basedir: resolve('./dist'),
// recommended for performance
runInNewContext: false
}))
}
let renderer
let readyPromise
if (isProd) {
// In production: create server renderer using built server bundle.
// The server bundle is generated by vue-ssr-webpack-plugin.
const bundle = require('./dist/vue-ssr-server-bundle.json')
// The client manifests are optional, but it allows the renderer
// to automatically infer preload/prefetch links and directly add <script>
// tags for any async chunks used during render, avoiding waterfall requests.
const clientManifest = require('./dist/vue-ssr-client-manifest.json')
renderer = createRenderer(bundle, {
clientManifest
}) })
} else {
// In development: setup the dev server with watch and hot-reload,
// and create a new renderer on bundle / index template update.
readyPromise = require('./build/setup-dev-server')(app, (bundle, options) => {
renderer = createRenderer(bundle, options)
}) })
} }
...@@ -52,31 +65,67 @@ app.use('/public', serve('./public', true)) ...@@ -52,31 +65,67 @@ app.use('/public', serve('./public', true))
app.use('/manifest.json', serve('./manifest.json', true)) app.use('/manifest.json', serve('./manifest.json', true))
app.use('/service-worker.js', serve('./dist/service-worker.js')) app.use('/service-worker.js', serve('./dist/service-worker.js'))
app.get('*', (req, res) => { // 1-second microcache.
if (!renderer) { // https://www.nginx.com/blog/benefits-of-microcaching-nginx/
return res.end('waiting for compilation... refresh in a moment.') const microCache = LRU({
} max: 100,
maxAge: 1000
})
// since this app has no user-specific content, every page is micro-cacheable.
// if your app involves user-specific content, you need to implement custom
// logic to determine whether a request is cacheable based on its url and
// headers.
const isCacheable = req => useMicroCache
function render (req, res) {
const s = Date.now() const s = Date.now()
res.setHeader("Content-Type", "text/html") res.setHeader("Content-Type", "text/html")
res.setHeader("Server", serverInfo) res.setHeader("Server", serverInfo)
const errorHandler = err => { const handleError = err => {
if (err && err.code === 404) { if (err && err.code === 404) {
res.status(404).end('404 | Page Not Found') res.status(404).end('404 | Page Not Found')
} else { } else {
// Render Error Page or Redirect // Render Error Page or Redirect
res.status(500).end('500 | Internal Server Error') res.status(500).end('500 | Internal Server Error')
console.error(`error during render : ${req.url}`) console.error(`error during render : ${req.url}`)
console.error(err) console.error(err.stack)
}
}
const cacheable = isCacheable(req)
if (cacheable) {
const hit = microCache.get(req.url)
if (hit) {
if (!isProd) {
console.log(`cache hit!`)
}
return res.end(hit)
} }
} }
renderer.renderToStream({ url: req.url }) const context = {
.on('error', errorHandler) title: 'Vue HN 2.0', // default title
.on('end', () => console.log(`whole request: ${Date.now() - s}ms`)) url: req.url
.pipe(res) }
renderer.renderToString(context, (err, html) => {
if (err) {
return handleError(err)
}
res.end(html)
if (cacheable) {
microCache.set(req.url, html)
}
if (!isProd) {
console.log(`whole request: ${Date.now() - s}ms`)
}
})
}
app.get('*', isProd ? render : (req, res) => {
readyPromise.then(() => render(req, res))
}) })
const port = process.env.PORT || 8080 const port = process.env.PORT || 8080
......
...@@ -92,8 +92,6 @@ a ...@@ -92,8 +92,6 @@ a
padding 15px 30px padding 15px 30px
@media (max-width 600px) @media (max-width 600px)
body
font-size 14px
.header .header
.inner .inner
padding 15px padding 15px
......
import Firebase from 'firebase/app' import Firebase from 'firebase/app'
import 'firebase/database' import 'firebase/database'
const config = { export function createAPI ({ config, version }) {
databaseURL: 'https://hacker-news.firebaseio.com' Firebase.initializeApp(config)
return Firebase.database().ref(version)
} }
const version = '/v0'
Firebase.initializeApp(config)
const api = Firebase.database().ref(version)
export default api
\ No newline at end of file
import Firebase from 'firebase' import Firebase from 'firebase'
import LRU from 'lru-cache' import LRU from 'lru-cache'
import { fetchItems } from './api'
let api export function createAPI ({ config, version }) {
const config = { let api
databaseURL: 'https://hacker-news.firebaseio.com' // this piece of code may run multiple times in development mode,
} // so we attach the instantiated API to `process` to avoid duplications
const version = '/v0' if (process.__API__) {
if (process.__API__) {
api = process.__API__ api = process.__API__
} else { } else {
Firebase.initializeApp(config) Firebase.initializeApp(config)
api = process.__API__ = Firebase.database().ref(version) api = process.__API__ = Firebase.database().ref(version)
api.onServer = true api.onServer = true
// fetched item cache // fetched item cache
...@@ -28,6 +26,6 @@ if (process.__API__) { ...@@ -28,6 +26,6 @@ if (process.__API__) {
api.cachedIds[type] = snapshot.val() api.cachedIds[type] = snapshot.val()
}) })
}) })
}
return api
} }
export default api
// this is aliased in webpack config based on server/client build // this is aliased in webpack config based on server/client build
import api from 'create-api' import { createAPI } from 'create-api'
const logRequests = !!process.env.DEBUG_API
const api = createAPI({
version: '/v0',
config: {
databaseURL: 'https://hacker-news.firebaseio.com'
}
})
// warm the front page cache every 15 min // warm the front page cache every 15 min
// make sure to do this only once across all requests // make sure to do this only once across all requests
if (api.onServer && !api.warmCacheStarted) { if (api.onServer) {
api.warmCacheStarted = true
warmCache() warmCache()
} }
...@@ -14,8 +22,10 @@ function warmCache () { ...@@ -14,8 +22,10 @@ function warmCache () {
} }
function fetch (child) { function fetch (child) {
logRequests && console.log(`fetching ${child}...`)
const cache = api.cachedItems const cache = api.cachedItems
if (cache && cache.has(child)) { if (cache && cache.has(child)) {
logRequests && console.log(`cache hit for ${child}.`)
return Promise.resolve(cache.get(child)) return Promise.resolve(cache.get(child))
} else { } else {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -24,6 +34,7 @@ function fetch (child) { ...@@ -24,6 +34,7 @@ function fetch (child) {
// mark the timestamp when this item is cached // mark the timestamp when this item is cached
if (val) val.__lastUpdated = Date.now() if (val) val.__lastUpdated = Date.now()
cache && cache.set(child, val) cache && cache.set(child, val)
logRequests && console.log(`fetched ${child}.`)
resolve(val) resolve(val)
}, reject) }, reject)
}) })
......
import Vue from 'vue' import Vue from 'vue'
import App from './App.vue' import App from './App.vue'
import store from './store' import { createStore } from './store'
import router from './router' import { createRouter } from './router'
import { sync } from 'vuex-router-sync' import { sync } from 'vuex-router-sync'
import * as filters from './filters' import titleMixin from './util/title'
import * as filters from './util/filters'
// sync the router with the vuex store. // mixin for handling title
// this registers `store.state.route` Vue.mixin(titleMixin)
sync(store, router)
// register global utility filters. // register global utility filters.
Object.keys(filters).forEach(key => { Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key]) Vue.filter(key, filters[key])
}) })
// create the app instance. // Expose a factory function that creates a fresh set of store, router,
// here we inject the router and store to all child components, // app instances on each call (which is called for each SSR request)
// making them available everywhere as `this.$router` and `this.$store`. export function createApp (ssrContext) {
const app = new Vue({ // create store and router instances
const store = createStore()
const router = createRouter()
// sync the router with the vuex store.
// this registers `store.state.route`
sync(store, router)
// create the app instance.
// here we inject the router, store and ssr context to all child components,
// making them available everywhere as `this.$router` and `this.$store`.
const app = new Vue({
router, router,
store, store,
ssrContext,
render: h => h(App) render: h => h(App)
}) })
// expose the app, the router and the store. // expose the app, the router and the store.
// note we are not mounting the app here, since bootstrapping will be // note we are not mounting the app here, since bootstrapping will be
// different depending on whether we are in a browser or on the server. // different depending on whether we are in a browser or on the server.
export { app, router, store } return { app, router, store }
}
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<span class="score">{{ item.score }}</span> <span class="score">{{ item.score }}</span>
<span class="title"> <span class="title">
<template v-if="item.url"> <template v-if="item.url">
<a :href="item.url" target="_blank">{{ item.title }}</a> <a :href="item.url" target="_blank" rel="noopener">{{ item.title }}</a>
<span class="host"> ({{ item.url | host }})</span> <span class="host"> ({{ item.url | host }})</span>
</template> </template>
<template v-else> <template v-else>
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
</template> </template>
<script> <script>
import { timeAgo } from '../filters' import { timeAgo } from '../util/filters'
export default { export default {
name: 'news-item', name: 'news-item',
......
<!-- borrowed from Nuxt! -->
<template>
<div class="progress" :style="{
'width': percent+'%',
'height': height,
'background-color': canSuccess? color : failedColor,
'opacity': show ? 1 : 0
}"></div>
</template>
<script>
export default {
data () {
return {
percent: 0,
show: false,
canSuccess: true,
duration: 3000,
height: '2px',
color: '#ffca2b',
failedColor: '#ff0000',
}
},
methods: {
start () {
this.show = true
this.canSuccess = true
if (this._timer) {
clearInterval(this._timer)
this.percent = 0
}
this._cut = 10000 / Math.floor(this.duration)
this._timer = setInterval(() => {
this.increase(this._cut * Math.random())
if (this.percent > 95) {
this.finish()
}
}, 100)
return this
},
set (num) {
this.show = true
this.canSuccess = true
this.percent = Math.floor(num)
return this
},
get () {
return Math.floor(this.percent)
},
increase (num) {
this.percent = this.percent + Math.floor(num)
return this
},
decrease (num) {
this.percent = this.percent - Math.floor(num)
return this
},
finish () {
this.percent = 100
this.hide()
return this
},
pause () {
clearInterval(this._timer)
return this
},
hide () {
clearInterval(this._timer)
this._timer = null
setTimeout(() => {
this.show = false
this.$nextTick(() => {
setTimeout(() => {
this.percent = 0
}, 200)
})
}, 500)
return this
},
fail () {
this.canSuccess = false
return this
}
}
}
</script>
<style scoped>
.progress {
position: fixed;
top: 0px;
left: 0px;
right: 0px;
height: 2px;
width: 0%;
transition: width 0.2s, opacity 0.4s;
opacity: 1;
background-color: #efc14e;
z-index: 999999;
}
</style>
...@@ -19,10 +19,6 @@ $offset = 126 ...@@ -19,10 +19,6 @@ $offset = 126
$duration = 1.4s $duration = 1.4s
.spinner .spinner
position fixed
z-index 999
right 15px
bottom 15px
transition opacity .15s ease transition opacity .15s ease
animation rotator $duration linear infinite animation rotator $duration linear infinite
animation-play-state paused animation-play-state paused
......
import Vue from 'vue'
import 'es6-promise/auto' import 'es6-promise/auto'
import { app, store, router } from './app' import { createApp } from './app'
import ProgressBar from './components/ProgressBar.vue'
// global progress bar
const bar = Vue.prototype.$bar = new Vue(ProgressBar).$mount()
document.body.appendChild(bar.$el)
// a global mixin that calls `asyncData` when a route component's params change
Vue.mixin({
beforeRouteUpdate (to, from, next) {
const { asyncData } = this.$options
if (asyncData) {
asyncData({
store: this.$store,
route: to
}).then(next).catch(next)
} else {
next()
}
}
})
const { app, router, store } = createApp()
// prime the store with server-initialized state. // prime the store with server-initialized state.
// the state is determined during SSR and inlined in the page markup. // the state is determined during SSR and inlined in the page markup.
...@@ -10,6 +33,31 @@ if (window.__INITIAL_STATE__) { ...@@ -10,6 +33,31 @@ if (window.__INITIAL_STATE__) {
// wait until router has resolved all async before hooks // wait until router has resolved all async before hooks
// and async components... // and async components...
router.onReady(() => { router.onReady(() => {
// Add router hook for handling asyncData.
// Doing it after initial route is resolved so that we don't double-fetch
// the data that we already have. Using router.beforeResolve() so that all
// async components are resolved.
router.beforeResolve((to, from, next) => {
const matched = router.getMatchedComponents(to)
const prevMatched = router.getMatchedComponents(from)
let diffed = false
const activated = matched.filter((c, i) => {
return diffed || (diffed = (prevMatched[i] !== c))
})
if (!activated.length) {
return next()
}
bar.start()
Promise.all(activated.map(c => {
if (c.asyncData) {
return c.asyncData({ store, route: to })
}
})).then(() => {
bar.finish()
next()
}).catch(next)
})
// actually mount to DOM // actually mount to DOM
app.$mount('#app') app.$mount('#app')
}) })
......
import { app, router, store } from './app' import { createApp } from './app'
const isDev = process.env.NODE_ENV !== 'production' const isDev = process.env.NODE_ENV !== 'production'
...@@ -8,9 +8,10 @@ const isDev = process.env.NODE_ENV !== 'production' ...@@ -8,9 +8,10 @@ const isDev = process.env.NODE_ENV !== 'production'
// Since data fetching is async, this function is expected to // Since data fetching is async, this function is expected to
// return a Promise that resolves to the app instance. // return a Promise that resolves to the app instance.
export default context => { export default context => {
return new Promise((resolve, reject) => {
const s = isDev && Date.now() const s = isDev && Date.now()
const { app, router, store } = createApp(context)
return new Promise((resolve, reject) => {
// set router's location // set router's location
router.push(context.url) router.push(context.url)
...@@ -21,12 +22,15 @@ export default context => { ...@@ -21,12 +22,15 @@ export default context => {
if (!matchedComponents.length) { if (!matchedComponents.length) {
reject({ code: 404 }) reject({ code: 404 })
} }
// Call preFetch hooks on components matched by the route. // Call fetchData hooks on components matched by the route.
// A preFetch hook dispatches a store action and returns a Promise, // A preFetch hook dispatches a store action and returns a Promise,
// which is resolved when the action is complete and store state has been // which is resolved when the action is complete and store state has been
// updated. // updated.
Promise.all(matchedComponents.map(component => { Promise.all(matchedComponents.map(component => {
return component.preFetch && component.preFetch(store) return component.asyncData && component.asyncData({
store,
route: router.currentRoute
})
})).then(() => { })).then(() => {
isDev && console.log(`data pre-fetch: ${Date.now() - s}ms`) isDev && console.log(`data pre-fetch: ${Date.now() - s}ms`)
// After all preFetch hooks are resolved, our store is now // After all preFetch hooks are resolved, our store is now
...@@ -38,6 +42,6 @@ export default context => { ...@@ -38,6 +42,6 @@ export default context => {
context.state = store.state context.state = store.state
resolve(app) resolve(app)
}).catch(reject) }).catch(reject)
}) }, reject)
}) })
} }
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>{{ title || 'Vue HN 2.0' }}</title>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Vue HN 2.0</title>
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">
<link rel="shortcut icon" sizes="48x48" href="/public/logo-48.png"> <link rel="shortcut icon" sizes="48x48" href="/public/logo-48.png">
<meta name="theme-color" content="#f60"> <meta name="theme-color" content="#f60">
<link rel="manifest" href="/manifest.json"> <link rel="manifest" href="/manifest.json">
<% for (var chunk of webpack.chunks) {
for (var file of chunk.files) {
if (file.match(/\.(js|css)$/)) { %>
<link rel="<%= chunk.initial?'preload':'prefetch' %>" href="<%= htmlWebpackPlugin.files.publicPath + file %>" as="<%= file.match(/\.css$/)?'style':'script' %>"><% }}} %>
</head> </head>
<body> <body>
<!--vue-ssr-outlet--> <!--vue-ssr-outlet-->
......
...@@ -3,24 +3,13 @@ import Router from 'vue-router' ...@@ -3,24 +3,13 @@ import Router from 'vue-router'
Vue.use(Router) Vue.use(Router)
// We are using Webpack code splitting here so that each route's associated // route-level code splitting
// component code is loaded on-demand only when the route is visited. const createListView = id => () => System.import('../views/CreateListView').then(m => m.default(id))
// It's actually not really necessary for a small project of this size but
// the goal is to demonstrate how to do it.
//
// Note that the dynamic import syntax should actually be just `import()`
// but buble/acorn doesn't support parsing that syntax until it's stage 4
// so we use the old System.import here instead.
//
// If using Babel, `import()` can be supported via
// babel-plugin-syntax-dynamic-import.
const createListView = name => () =>
System.import('../views/CreateListView').then(m => m.createListView(name))
const ItemView = () => System.import('../views/ItemView.vue') const ItemView = () => System.import('../views/ItemView.vue')
const UserView = () => System.import('../views/UserView.vue') const UserView = () => System.import('../views/UserView.vue')
export default new Router({ export function createRouter () {
return new Router({
mode: 'history', mode: 'history',
scrollBehavior: () => ({ y: 0 }), scrollBehavior: () => ({ y: 0 }),
routes: [ routes: [
...@@ -33,4 +22,5 @@ export default new Router({ ...@@ -33,4 +22,5 @@ export default new Router({
{ path: '/user/:id', component: UserView }, { path: '/user/:id', component: UserView },
{ path: '/', redirect: '/top' } { path: '/', redirect: '/top' }
] ]
}) })
}
import {
fetchUser,
fetchItems,
fetchIdsByType
} from '../api'
export default {
// ensure data for rendering given list type
FETCH_LIST_DATA: ({ commit, dispatch, state }, { type }) => {
commit('SET_ACTIVE_TYPE', { type })
return fetchIdsByType(type)
.then(ids => commit('SET_LIST', { type, ids }))
.then(() => dispatch('ENSURE_ACTIVE_ITEMS'))
},
// ensure all active items are fetched
ENSURE_ACTIVE_ITEMS: ({ dispatch, getters }) => {
return dispatch('FETCH_ITEMS', {
ids: getters.activeIds
})
},
FETCH_ITEMS: ({ commit, state }, { ids }) => {
// on the client, the store itself serves as a cache.
// only fetch items that we do not already have, or has expired (3 minutes)
const now = Date.now()
ids = ids.filter(id => {
const item = state.items[id]
if (!item) {
return true
}
if (now - item.__lastUpdated > 1000 * 60 * 3) {
return true
}
return false
})
if (ids.length) {
return fetchItems(ids).then(items => commit('SET_ITEMS', { items }))
} else {
return Promise.resolve()
}
},
FETCH_USER: ({ commit, state }, { id }) => {
return state.users[id]
? Promise.resolve(state.users[id])
: fetchUser(id).then(user => commit('SET_USER', { id, user }))
}
}
export default {
// ids of the items that should be currently displayed based on
// current list type and current pagination
activeIds (state) {
const { activeType, itemsPerPage, lists } = state
const page = Number(state.route.params.page) || 1
if (activeType) {
const start = (page - 1) * itemsPerPage
const end = page * itemsPerPage
return lists[activeType].slice(start, end)
} else {
return []
}
},
// items that should be currently displayed.
// this Array may not be fully fetched.
activeItems (state, getters) {
return getters.activeIds.map(id => state.items[id]).filter(_ => _)
}
}
import Vue from 'vue' import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
import { fetchItems, fetchIdsByType, fetchUser } from './api' import actions from './actions'
import mutations from './mutations'
import getters from './getters'
Vue.use(Vuex) Vue.use(Vuex)
const store = new Vuex.Store({ export function createStore () {
return new Vuex.Store({
state: { state: {
activeType: null, activeType: null,
itemsPerPage: 20, itemsPerPage: 20,
...@@ -18,94 +21,8 @@ const store = new Vuex.Store({ ...@@ -18,94 +21,8 @@ const store = new Vuex.Store({
job: [] job: []
} }
}, },
actions,
actions: { mutations,
// ensure data for rendering given list type getters
FETCH_LIST_DATA: ({ commit, dispatch, state }, { type }) => {
commit('SET_ACTIVE_TYPE', { type })
return fetchIdsByType(type)
.then(ids => commit('SET_LIST', { type, ids }))
.then(() => dispatch('ENSURE_ACTIVE_ITEMS'))
},
// ensure all active items are fetched
ENSURE_ACTIVE_ITEMS: ({ dispatch, getters }) => {
return dispatch('FETCH_ITEMS', {
ids: getters.activeIds
})
},
FETCH_ITEMS: ({ commit, state }, { ids }) => {
// on the client, the store itself serves as a cache.
// only fetch items that we do not already have, or has expired (3 minutes)
const now = Date.now()
ids = ids.filter(id => {
const item = state.items[id]
if (!item) {
return true
}
if (now - item.__lastUpdated > 1000 * 60 * 3) {
return true
}
return false
}) })
if (ids.length) { }
return fetchItems(ids).then(items => commit('SET_ITEMS', { items }))
} else {
return Promise.resolve()
}
},
FETCH_USER: ({ commit, state }, { id }) => {
return state.users[id]
? Promise.resolve(state.users[id])
: fetchUser(id).then(user => commit('SET_USER', { user }))
}
},
mutations: {
SET_ACTIVE_TYPE: (state, { type }) => {
state.activeType = type
},
SET_LIST: (state, { type, ids }) => {
state.lists[type] = ids
},
SET_ITEMS: (state, { items }) => {
items.forEach(item => {
if (item) {
Vue.set(state.items, item.id, item)
}
})
},
SET_USER: (state, { user }) => {
Vue.set(state.users, user.id, user)
}
},
getters: {
// ids of the items that should be currently displayed based on
// current list type and current pagination
activeIds (state) {
const { activeType, itemsPerPage, lists } = state
const page = Number(state.route.params.page) || 1
if (activeType) {
const start = (page - 1) * itemsPerPage
const end = page * itemsPerPage
return lists[activeType].slice(start, end)
} else {
return []
}
},
// items that should be currently displayed.
// this Array may not be fully fetched.
activeItems (state, getters) {
return getters.activeIds.map(id => state.items[id]).filter(_ => _)
}
}
})
export default store
import Vue from 'vue'
export default {
SET_ACTIVE_TYPE: (state, { type }) => {
state.activeType = type
},
SET_LIST: (state, { type, ids }) => {
state.lists[type] = ids
},
SET_ITEMS: (state, { items }) => {
items.forEach(item => {
if (item) {
Vue.set(state.items, item.id, item)
}
})
},
SET_USER: (state, { id, user }) => {
Vue.set(state.users, id, user || false) /* false means user not found */
}
}
function getTitle (vm) {
const { title } = vm.$options
if (title) {
return typeof title === 'function'
? title.call(vm)
: title
}
}
const serverTitleMixin = {
created () {
const title = getTitle(this)
if (title) {
this.$root.$options.ssrContext.title = `Vue HN 2.0 | ${title}`
}
}
}
const clientTitleMixin = {
mounted () {
const title = getTitle(this)
if (title) {
document.title = `Vue HN 2.0 | ${title}`
}
}
}
export default process.env.VUE_ENV === 'server'
? serverTitleMixin
: clientTitleMixin
import ItemList from '../components/ItemList.vue' import ItemList from './ItemList.vue'
import { setTitle } from '../util/title'
const camelize = str => str.charAt(0).toUpperCase() + str.slice(1)
// This is a factory function for dynamically creating root-level list views, // This is a factory function for dynamically creating root-level list views,
// since they share most of the logic except for the type of items to display. // since they share most of the logic except for the type of items to display.
// They are essentially higher order components wrapping ItemList.vue. // They are essentially higher order components wrapping ItemList.vue.
export function createListView (type) { export default function createListView (type) {
return { return {
name: `${type}-stories-view`, name: `${type}-stories-view`,
// this will be called during SSR to pre-fetch data into the store!
preFetch (store) { asyncData ({ store }) {
return store.dispatch('FETCH_LIST_DATA', { type }) return store.dispatch('FETCH_LIST_DATA', { type })
}, },
title: camelize(type),
render (h) { render (h) {
return h(ItemList, { props: { type }}) return h(ItemList, { props: { type }})
} }
......
<template> <template>
<div class="news-view"> <div class="news-view">
<spinner :show="loading"></spinner>
<div class="news-list-nav"> <div class="news-list-nav">
<router-link v-if="page > 1" :to="'/' + type + '/' + (page - 1)">&lt; prev</router-link> <router-link v-if="page > 1" :to="'/' + type + '/' + (page - 1)">&lt; prev</router-link>
<a v-else class="disabled">&lt; prev</a> <a v-else class="disabled">&lt; prev</a>
...@@ -20,17 +19,13 @@ ...@@ -20,17 +19,13 @@
</template> </template>
<script> <script>
import Spinner from './Spinner.vue' import { watchList } from '../api'
import Item from './Item.vue' import Item from '../components/Item.vue'
import { watchList } from '../store/api'
let isInitialRender = true
export default { export default {
name: 'item-list', name: 'item-list',
components: { components: {
Spinner,
Item Item
}, },
...@@ -39,18 +34,11 @@ export default { ...@@ -39,18 +34,11 @@ export default {
}, },
data () { data () {
const data = { return {
loading: false, transition: 'slide-right',
transition: 'slide-up', displayedPage: Number(this.$store.state.route.params.page) || 1,
// if this is the initial render, directly render with the store state displayedItems: this.$store.getters.activeItems
// otherwise this is a page switch, start with blank and wait for data load.
// we need these local state so that we can precisely control the timing
// of the transitions.
displayedPage: isInitialRender ? Number(this.$store.state.route.params.page) || 1 : -1,
displayedItems: isInitialRender ? this.$store.getters.activeItems : []
} }
isInitialRender = false
return data
}, },
computed: { computed: {
...@@ -91,7 +79,7 @@ export default { ...@@ -91,7 +79,7 @@ export default {
methods: { methods: {
loadItems (to = this.page, from = -1) { loadItems (to = this.page, from = -1) {
this.loading = true this.$bar.start()
this.$store.dispatch('FETCH_LIST_DATA', { this.$store.dispatch('FETCH_LIST_DATA', {
type: this.type type: this.type
}).then(() => { }).then(() => {
...@@ -104,7 +92,7 @@ export default { ...@@ -104,7 +92,7 @@ export default {
: to > from ? 'slide-left' : 'slide-right' : to > from ? 'slide-left' : 'slide-right'
this.displayedPage = to this.displayedPage = to
this.displayedItems = this.$store.getters.activeItems this.displayedItems = this.$store.getters.activeItems
this.loading = false this.$bar.finish()
}) })
} }
} }
...@@ -143,11 +131,11 @@ export default { ...@@ -143,11 +131,11 @@ export default {
padding 0 padding 0
margin 0 margin 0
.slide-left-enter, .slide-right-leave-active .slide-left-enter, .slide-right-leave-to
opacity 0 opacity 0
transform translate(30px, 0) transform translate(30px, 0)
.slide-left-leave-active, .slide-right-enter .slide-left-leave-to, .slide-right-enter
opacity 0 opacity 0
transform translate(-30px, 0) transform translate(-30px, 0)
......
...@@ -28,54 +28,64 @@ ...@@ -28,54 +28,64 @@
</template> </template>
<script> <script>
import { setTitle } from '../util/title'
import Spinner from '../components/Spinner.vue' import Spinner from '../components/Spinner.vue'
import Comment from '../components/Comment.vue' import Comment from '../components/Comment.vue'
function fetchItem (store) {
return store.dispatch('FETCH_ITEMS', {
ids: [store.state.route.params.id]
})
}
// recursively fetch all descendent comments
function fetchComments (store, item) {
if (item && item.kids) {
return store.dispatch('FETCH_ITEMS', {
ids: item.kids
}).then(() => Promise.all(item.kids.map(id => {
return fetchComments(store, store.state.items[id])
})))
}
}
function fetchItemAndComments (store) {
return fetchItem(store).then(() => {
const { items, route } = store.state
return fetchComments(store, items[route.params.id])
})
}
export default { export default {
name: 'item-view', name: 'item-view',
components: { Spinner, Comment }, components: { Spinner, Comment },
data () {
return { data: () => ({
loading: true loading: true
} }),
},
computed: { computed: {
item () { item () {
return this.$store.state.items[this.$route.params.id] return this.$store.state.items[this.$route.params.id]
} }
}, },
// on the server, only fetch the item itself
preFetch: fetchItem, // We only fetch the item itself before entering the view, because
// on the client, fetch everything // it might take a long time to load threads with hundreds of comments
// due to how the HN Firebase API works.
asyncData ({ store, route: { params: { id }}}) {
return store.dispatch('FETCH_ITEMS', { ids: [id] })
},
title () {
return this.item.title
},
// Fetch comments when mounted on the client
beforeMount () { beforeMount () {
fetchItemAndComments(this.$store).then(() => { this.fetchComments()
},
// refetch comments if item changed
watch: {
item: 'fetchComments'
},
methods: {
fetchComments () {
this.loading = true
fetchComments(this.$store, this.item).then(() => {
this.loading = false this.loading = false
}) })
} }
}
}
// recursively fetch all descendent comments
function fetchComments (store, item) {
if (item && item.kids) {
return store.dispatch('FETCH_ITEMS', {
ids: item.kids
}).then(() => Promise.all(item.kids.map(id => {
return fetchComments(store, store.state.items[id])
})))
}
} }
</script> </script>
...@@ -105,10 +115,8 @@ export default { ...@@ -105,10 +115,8 @@ export default {
padding 1em 0 padding 1em 0
position relative position relative
.spinner .spinner
position absolute display inline-block
top 0 margin -15px 0
right 0
bottom auto
.comment-children .comment-children
list-style-type none list-style-type none
......
<template> <template>
<div class="user-view"> <div class="user-view">
<spinner :show="!user"></spinner>
<template v-if="user"> <template v-if="user">
<h1>User : {{ user.id }}</h1> <h1>User : {{ user.id }}</h1>
<ul class="meta"> <ul class="meta">
...@@ -13,29 +12,32 @@ ...@@ -13,29 +12,32 @@
<a :href="'https://news.ycombinator.com/threads?id=' + user.id">comments</a> <a :href="'https://news.ycombinator.com/threads?id=' + user.id">comments</a>
</p> </p>
</template> </template>
<template v-else-if="user === false">
<h1>User not found.</h1>
</template>
</div> </div>
</template> </template>
<script> <script>
import Spinner from '../components/Spinner.vue' import { setTitle } from '../util/title'
function fetchUser (store) {
return store.dispatch('FETCH_USER', {
id: store.state.route.params.id
})
}
export default { export default {
name: 'user-view', name: 'user-view',
components: { Spinner },
computed: { computed: {
user () { user () {
return this.$store.state.users[this.$route.params.id] return this.$store.state.users[this.$route.params.id]
} }
}, },
preFetch: fetchUser,
beforeMount () { asyncData ({ store, route: { params: { id }}}) {
fetchUser(this.$store) return store.dispatch('FETCH_USER', { id })
},
title () {
return this.user
? this.user.id
: 'User not found'
} }
} }
</script> </script>
......
...@@ -35,17 +35,21 @@ acorn@^3.0.4, acorn@^3.1.0, acorn@^3.3.0: ...@@ -35,17 +35,21 @@ acorn@^3.0.4, acorn@^3.1.0, acorn@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
acorn@^4.0.3, acorn@^4.0.4: acorn@^4.0.3:
version "4.0.11" version "4.0.11"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
acorn@^5.0.0:
version "5.0.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
ajv-keywords@^1.1.1: ajv-keywords@^1.1.1:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
ajv@^4.7.0, ajv@^4.9.1: ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1:
version "4.11.5" version "4.11.7"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48"
dependencies: dependencies:
co "^4.6.0" co "^4.6.0"
json-stable-stringify "^1.0.1" json-stable-stringify "^1.0.1"
...@@ -96,11 +100,11 @@ aproba@^1.0.3: ...@@ -96,11 +100,11 @@ aproba@^1.0.3:
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
are-we-there-yet@~1.1.2: are-we-there-yet@~1.1.2:
version "1.1.2" version "1.1.4"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
dependencies: dependencies:
delegates "^1.0.0" delegates "^1.0.0"
readable-stream "^2.0.0 || ^1.1.13" readable-stream "^2.0.6"
argparse@^1.0.7: argparse@^1.0.7:
version "1.0.9" version "1.0.9"
...@@ -115,8 +119,8 @@ arr-diff@^2.0.0: ...@@ -115,8 +119,8 @@ arr-diff@^2.0.0:
arr-flatten "^1.0.1" arr-flatten "^1.0.1"
arr-flatten@^1.0.1: arr-flatten@^1.0.1:
version "1.0.1" version "1.0.3"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
array-find-index@^1.0.1: array-find-index@^1.0.1:
version "1.0.2" version "1.0.2"
...@@ -175,8 +179,8 @@ async-each@^1.0.0: ...@@ -175,8 +179,8 @@ async-each@^1.0.0:
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
async@^2.1.2: async@^2.1.2:
version "2.1.5" version "2.3.0"
resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9"
dependencies: dependencies:
lodash "^4.14.0" lodash "^4.14.0"
...@@ -243,7 +247,7 @@ block-stream@*: ...@@ -243,7 +247,7 @@ block-stream@*:
dependencies: dependencies:
inherits "~2.0.0" inherits "~2.0.0"
bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.4.7: bluebird@^3.0.5, bluebird@^3.1.1:
version "3.5.0" version "3.5.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
...@@ -251,10 +255,6 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: ...@@ -251,10 +255,6 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.6" version "4.11.6"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
boom@2.x.x: boom@2.x.x:
version "2.10.1" version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
...@@ -276,8 +276,8 @@ boxen@^0.6.0: ...@@ -276,8 +276,8 @@ boxen@^0.6.0:
widest-line "^1.0.0" widest-line "^1.0.0"
brace-expansion@^1.0.0: brace-expansion@^1.0.0:
version "1.1.6" version "1.1.7"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
dependencies: dependencies:
balanced-match "^0.4.1" balanced-match "^0.4.1"
concat-map "0.0.1" concat-map "0.0.1"
...@@ -328,8 +328,8 @@ browserify-rsa@^4.0.0: ...@@ -328,8 +328,8 @@ browserify-rsa@^4.0.0:
randombytes "^2.0.1" randombytes "^2.0.1"
browserify-sign@^4.0.0: browserify-sign@^4.0.0:
version "4.0.0" version "4.0.4"
resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
dependencies: dependencies:
bn.js "^4.1.1" bn.js "^4.1.1"
browserify-rsa "^4.0.0" browserify-rsa "^4.0.0"
...@@ -345,7 +345,7 @@ browserify-zlib@^0.1.4: ...@@ -345,7 +345,7 @@ browserify-zlib@^0.1.4:
dependencies: dependencies:
pako "~0.2.0" pako "~0.2.0"
browserslist@^1.0.1, browserslist@^1.5.2, browserslist@^1.7.6: browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
version "1.7.7" version "1.7.7"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
dependencies: dependencies:
...@@ -376,7 +376,7 @@ buffer-equal-constant-time@1.0.1: ...@@ -376,7 +376,7 @@ buffer-equal-constant-time@1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
buffer-shims@^1.0.0: buffer-shims@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
...@@ -404,13 +404,6 @@ bytes@2.3.0: ...@@ -404,13 +404,6 @@ bytes@2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070"
camel-case@3.0.x:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
dependencies:
no-case "^2.2.0"
upper-case "^1.1.1"
camelcase-keys@^2.0.0: camelcase-keys@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
...@@ -431,17 +424,17 @@ camelcase@^3.0.0: ...@@ -431,17 +424,17 @@ camelcase@^3.0.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
caniuse-api@^1.5.2: caniuse-api@^1.5.2:
version "1.5.3" version "1.6.1"
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.5.3.tgz#5018e674b51c393e4d50614275dc017e27c4a2a2" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
dependencies: dependencies:
browserslist "^1.0.1" browserslist "^1.3.6"
caniuse-db "^1.0.30000346" caniuse-db "^1.0.30000529"
lodash.memoize "^4.1.0" lodash.memoize "^4.1.2"
lodash.uniq "^4.3.0" lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000346, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000640" version "1.0.30000662"
resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000640.tgz#7b7fd3cf13c0d9d41f8754b577b202113e2be7ca" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000662.tgz#616b17a525b52fec14611f88af3d5a9b5438c050"
capture-stack-trace@^1.0.0: capture-stack-trace@^1.0.0:
version "1.0.0" version "1.0.0"
...@@ -495,12 +488,6 @@ clap@^1.0.9: ...@@ -495,12 +488,6 @@ clap@^1.0.9:
dependencies: dependencies:
chalk "^1.1.3" chalk "^1.1.3"
clean-css@4.0.x:
version "4.0.9"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.9.tgz#63ff450b3f939508cc0cd2989bb9daaedc98333e"
dependencies:
source-map "0.5.x"
cli-boxes@^1.0.0: cli-boxes@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
...@@ -581,17 +568,17 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: ...@@ -581,17 +568,17 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@2.9.x, commander@^2.9.0: commander@^2.9.0:
version "2.9.0" version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
dependencies: dependencies:
graceful-readlink ">= 1.0.0" graceful-readlink ">= 1.0.0"
compressible@~2.0.8: compressible@~2.0.8:
version "2.0.9" version "2.0.10"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd"
dependencies: dependencies:
mime-db ">= 1.24.0 < 2" mime-db ">= 1.27.0 < 2"
compression@^1.6.2: compression@^1.6.2:
version "1.6.2" version "1.6.2"
...@@ -670,14 +657,15 @@ core-util-is@~1.0.0: ...@@ -670,14 +657,15 @@ core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
version "2.1.1" version "2.1.2"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.2.tgz#c43ae86d238f08f1728a345ed60ceb0aef63c060"
dependencies: dependencies:
is-directory "^0.3.1"
js-yaml "^3.4.3" js-yaml "^3.4.3"
json-parse-helpfulerror "^1.0.3"
minimist "^1.2.0" minimist "^1.2.0"
object-assign "^4.1.0" object-assign "^4.1.0"
os-homedir "^1.0.1" os-homedir "^1.0.1"
parse-json "^2.2.0"
require-from-string "^1.1.0" require-from-string "^1.1.0"
create-ecdh@^4.0.0: create-ecdh@^4.0.0:
...@@ -709,9 +697,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2: ...@@ -709,9 +697,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2:
create-hash "^1.1.0" create-hash "^1.1.0"
inherits "^2.0.1" inherits "^2.0.1"
cross-env@^3.2.4: cross-env@^4.0.0:
version "3.2.4" version "4.0.0"
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.2.4.tgz#9e0585f277864ed421ce756f81a980ff0d698aba" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-4.0.0.tgz#16083862d08275a4628b0b243b121bedaa55dd80"
dependencies: dependencies:
cross-spawn "^5.1.0" cross-spawn "^5.1.0"
is-windows "^1.0.0" is-windows "^1.0.0"
...@@ -749,9 +737,9 @@ css-color-names@0.0.4: ...@@ -749,9 +737,9 @@ css-color-names@0.0.4:
version "0.0.4" version "0.0.4"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
css-loader@^0.27.3: css-loader@^0.28.0:
version "0.27.3" version "0.28.0"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.27.3.tgz#69ab6f47b69bfb1b5acee61bac2aab14302ff0dc" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.0.tgz#417cfa9789f8cde59a30ccbf3e4da7a806889bad"
dependencies: dependencies:
babel-code-frame "^6.11.0" babel-code-frame "^6.11.0"
css-selector-tokenizer "^0.7.0" css-selector-tokenizer "^0.7.0"
...@@ -770,15 +758,6 @@ css-parse@1.7.x: ...@@ -770,15 +758,6 @@ css-parse@1.7.x:
version "1.7.0" version "1.7.0"
resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b"
css-select@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
dependencies:
boolbase "~1.0.0"
css-what "2.1"
domutils "1.5.1"
nth-check "~1.0.1"
css-selector-tokenizer@^0.6.0: css-selector-tokenizer@^0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.6.0.tgz#6445f582c7930d241dcc5007a43d6fcb8f073152"
...@@ -795,10 +774,6 @@ css-selector-tokenizer@^0.7.0: ...@@ -795,10 +774,6 @@ css-selector-tokenizer@^0.7.0:
fastparse "^1.1.1" fastparse "^1.1.1"
regexpu-core "^1.0.0" regexpu-core "^1.0.0"
css-what@2.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
cssesc@^0.1.0: cssesc@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
...@@ -867,23 +842,23 @@ de-indent@^1.0.2: ...@@ -867,23 +842,23 @@ de-indent@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
debug@*, debug@~2.2.0: debug@*, debug@2.6.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
dependencies:
ms "0.7.1"
debug@2.6.1:
version "2.6.1" version "2.6.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
dependencies: dependencies:
ms "0.7.2" ms "0.7.2"
debug@2.6.3, debug@^2.2.0: debug@2.6.4, debug@^2.2.0:
version "2.6.3" version "2.6.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0"
dependencies: dependencies:
ms "0.7.2" ms "0.7.3"
debug@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
dependencies:
ms "0.7.1"
decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
version "1.2.0" version "1.2.0"
...@@ -940,20 +915,7 @@ diffie-hellman@^5.0.0: ...@@ -940,20 +915,7 @@ diffie-hellman@^5.0.0:
miller-rabin "^4.0.0" miller-rabin "^4.0.0"
randombytes "^2.0.0" randombytes "^2.0.0"
dom-converter@~0.1: dom-storage@^2.0.2:
version "0.1.4"
resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
dependencies:
utila "~0.3"
dom-serializer@0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
dependencies:
domelementtype "~1.1.1"
entities "~1.1.1"
dom-storage@2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.0.2.tgz#ed17cbf68abd10e0aef8182713e297c5e4b500b0" resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.0.2.tgz#ed17cbf68abd10e0aef8182713e297c5e4b500b0"
...@@ -967,33 +929,6 @@ domain-browser@^1.1.1: ...@@ -967,33 +929,6 @@ domain-browser@^1.1.1:
version "1.1.7" version "1.1.7"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
domelementtype@1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
domelementtype@~1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
domhandler@2.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
dependencies:
domelementtype "1"
domutils@1.1:
version "1.1.6"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
dependencies:
domelementtype "1"
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
dependencies:
dom-serializer "0"
domelementtype "1"
dot-prop@^3.0.0: dot-prop@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
...@@ -1033,8 +968,8 @@ ee-first@1.1.1: ...@@ -1033,8 +968,8 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
electron-to-chromium@^1.2.7: electron-to-chromium@^1.2.7:
version "1.2.7" version "1.3.8"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.2.7.tgz#4f748061407e478c76256d04496972b71f647407" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.8.tgz#b2c8a2c79bb89fbbfd3724d9555e15095b5f5fb6"
elliptic@^6.0.0: elliptic@^6.0.0:
version "6.4.0" version "6.4.0"
...@@ -1065,10 +1000,6 @@ enhanced-resolve@^3.0.0: ...@@ -1065,10 +1000,6 @@ enhanced-resolve@^3.0.0:
object-assign "^4.0.1" object-assign "^4.0.1"
tapable "^0.2.5" tapable "^0.2.5"
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.3:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
...@@ -1180,6 +1111,15 @@ extglob@^0.3.1: ...@@ -1180,6 +1111,15 @@ extglob@^0.3.1:
dependencies: dependencies:
is-extglob "^1.0.0" is-extglob "^1.0.0"
extract-text-webpack-plugin@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.0.tgz#69315b885f876dbf96d3819f6a9f1cca7aebf159"
dependencies:
ajv "^4.11.2"
async "^2.1.2"
loader-utils "^1.0.2"
webpack-sources "^0.1.0"
extsprintf@1.0.2: extsprintf@1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
...@@ -1194,9 +1134,9 @@ faye-websocket@0.9.3: ...@@ -1194,9 +1134,9 @@ faye-websocket@0.9.3:
dependencies: dependencies:
websocket-driver ">=0.5.1" websocket-driver ">=0.5.1"
file-loader@^0.10.1: file-loader@^0.11.1:
version "0.10.1" version "0.11.1"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.1.tgz#6b328ee1234a729e4e47d36375dd6d35c0e1db84"
dependencies: dependencies:
loader-utils "^1.0.2" loader-utils "^1.0.2"
...@@ -1219,10 +1159,10 @@ filled-array@^1.0.0: ...@@ -1219,10 +1159,10 @@ filled-array@^1.0.0:
resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
finalhandler@~1.0.0: finalhandler@~1.0.0:
version "1.0.1" version "1.0.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.1.tgz#bcd15d1689c0e5ed729b6f7f541a6df984117db8" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.2.tgz#d0e36f9dbc557f2de14423df6261889e9d60c93a"
dependencies: dependencies:
debug "2.6.3" debug "2.6.4"
encodeurl "~1.0.1" encodeurl "~1.0.1"
escape-html "~1.0.3" escape-html "~1.0.3"
on-finished "~2.3.0" on-finished "~2.3.0"
...@@ -1238,14 +1178,14 @@ find-up@^1.0.0: ...@@ -1238,14 +1178,14 @@ find-up@^1.0.0:
pinkie-promise "^2.0.0" pinkie-promise "^2.0.0"
firebase@^3.7.2: firebase@^3.7.2:
version "3.7.3" version "3.9.0"
resolved "https://registry.yarnpkg.com/firebase/-/firebase-3.7.3.tgz#5f143638a84874095a7faf411589e059ac419ccc" resolved "https://registry.yarnpkg.com/firebase/-/firebase-3.9.0.tgz#c4237f50f58eeb25081b1839d6cbf175f8f7ed9b"
dependencies: dependencies:
dom-storage "2.0.2" dom-storage "^2.0.2"
faye-websocket "0.9.3" faye-websocket "0.9.3"
jsonwebtoken "7.1.9" jsonwebtoken "^7.3.0"
rsvp "3.2.1" promise-polyfill "^6.0.2"
xmlhttprequest "1.8.0" xmlhttprequest "^1.8.0"
flatten@^1.0.2: flatten@^1.0.2:
version "1.0.2" version "1.0.2"
...@@ -1266,8 +1206,8 @@ forever-agent@~0.6.1: ...@@ -1266,8 +1206,8 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
form-data@~2.1.1: form-data@~2.1.1:
version "2.1.2" version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
dependencies: dependencies:
asynckit "^0.4.0" asynckit "^0.4.0"
combined-stream "^1.0.5" combined-stream "^1.0.5"
...@@ -1322,8 +1262,8 @@ function-bind@^1.0.2: ...@@ -1322,8 +1262,8 @@ function-bind@^1.0.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
gauge@~2.7.1: gauge@~2.7.1:
version "2.7.3" version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
dependencies: dependencies:
aproba "^1.0.3" aproba "^1.0.3"
console-control-strings "^1.0.0" console-control-strings "^1.0.0"
...@@ -1343,8 +1283,8 @@ get-stdin@^4.0.1: ...@@ -1343,8 +1283,8 @@ get-stdin@^4.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
getpass@^0.1.1: getpass@^0.1.1:
version "0.1.6" version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
dependencies: dependencies:
assert-plus "^1.0.0" assert-plus "^1.0.0"
...@@ -1472,13 +1412,13 @@ hawk@~3.1.3: ...@@ -1472,13 +1412,13 @@ hawk@~3.1.3:
hoek "2.x.x" hoek "2.x.x"
sntp "1.x.x" sntp "1.x.x"
he@1.1.x, he@^1.1.0: he@^1.1.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
hmac-drbg@^1.0.0: hmac-drbg@^1.0.0:
version "1.0.0" version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
dependencies: dependencies:
hash.js "^1.0.3" hash.js "^1.0.3"
minimalistic-assert "^1.0.0" minimalistic-assert "^1.0.0"
...@@ -1489,49 +1429,16 @@ hoek@2.x.x: ...@@ -1489,49 +1429,16 @@ hoek@2.x.x:
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
hosted-git-info@^2.1.4: hosted-git-info@^2.1.4:
version "2.4.1" version "2.4.2"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.1.tgz#4b0445e41c004a8bd1337773a4ff790ca40318c8" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67"
html-comment-regex@^1.1.0: html-comment-regex@^1.1.0:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
html-entities@^1.2.0: html-entities@^1.2.0:
version "1.2.0" version "1.2.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
html-minifier@^3.2.3:
version "3.4.2"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.2.tgz#31896baaf735c1d95f7a0b7291f9dc36c0720752"
dependencies:
camel-case "3.0.x"
clean-css "4.0.x"
commander "2.9.x"
he "1.1.x"
ncname "1.0.x"
param-case "2.1.x"
relateurl "0.2.x"
uglify-js "2.8.x"
html-webpack-plugin@^2.28.0:
version "2.28.0"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz#2e7863b57e5fd48fe263303e2ffc934c3064d009"
dependencies:
bluebird "^3.4.7"
html-minifier "^3.2.3"
loader-utils "^0.2.16"
lodash "^4.17.3"
pretty-error "^2.0.2"
toposort "^1.0.0"
htmlparser2@~3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
dependencies:
domelementtype "1"
domhandler "2.1"
domutils "1.1"
readable-stream "1.0"
http-errors@~1.6.1: http-errors@~1.6.1:
version "1.6.1" version "1.6.1"
...@@ -1600,16 +1507,16 @@ ini@^1.3.4, ini@~1.3.0: ...@@ -1600,16 +1507,16 @@ ini@^1.3.4, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
interpret@^1.0.0: interpret@^1.0.0:
version "1.0.1" version "1.0.3"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
invert-kv@^1.0.0: invert-kv@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
ipaddr.js@1.2.0: ipaddr.js@1.3.0:
version "1.2.0" version "1.3.0"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec"
is-absolute-url@^2.0.0: is-absolute-url@^2.0.0:
version "2.1.0" version "2.1.0"
...@@ -1625,7 +1532,7 @@ is-binary-path@^1.0.0: ...@@ -1625,7 +1532,7 @@ is-binary-path@^1.0.0:
dependencies: dependencies:
binary-extensions "^1.0.0" binary-extensions "^1.0.0"
is-buffer@^1.0.2: is-buffer@^1.1.5:
version "1.1.5" version "1.1.5"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
...@@ -1635,6 +1542,10 @@ is-builtin-module@^1.0.0: ...@@ -1635,6 +1542,10 @@ is-builtin-module@^1.0.0:
dependencies: dependencies:
builtin-modules "^1.0.0" builtin-modules "^1.0.0"
is-directory@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
is-dotfile@^1.0.0: is-dotfile@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
...@@ -1755,9 +1666,9 @@ isemail@1.x.x: ...@@ -1755,9 +1666,9 @@ isemail@1.x.x:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a"
isexe@^1.1.1: isexe@^2.0.0:
version "1.1.2" version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
isobject@^2.0.0: isobject@^2.0.0:
version "2.1.0" version "2.1.0"
...@@ -1769,6 +1680,10 @@ isstream@~0.1.2: ...@@ -1769,6 +1680,10 @@ isstream@~0.1.2:
version "0.1.2" version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
jju@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa"
jodid25519@^1.0.0: jodid25519@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
...@@ -1802,8 +1717,8 @@ js-tokens@^3.0.0: ...@@ -1802,8 +1717,8 @@ js-tokens@^3.0.0:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
js-yaml@^3.4.3: js-yaml@^3.4.3:
version "3.8.2" version "3.8.3"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766"
dependencies: dependencies:
argparse "^1.0.7" argparse "^1.0.7"
esprima "^3.1.1" esprima "^3.1.1"
...@@ -1827,6 +1742,12 @@ json-loader@^0.5.4: ...@@ -1827,6 +1742,12 @@ json-loader@^0.5.4:
version "0.5.4" version "0.5.4"
resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
json-parse-helpfulerror@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc"
dependencies:
jju "^1.1.0"
json-schema@0.2.3: json-schema@0.2.3:
version "0.2.3" version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
...@@ -1841,7 +1762,7 @@ json-stringify-safe@~5.0.1: ...@@ -1841,7 +1762,7 @@ json-stringify-safe@~5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
json5@^0.5.0: json5@^0.5.0, json5@^0.5.1:
version "0.5.1" version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
...@@ -1849,12 +1770,12 @@ jsonify@~0.0.0: ...@@ -1849,12 +1770,12 @@ jsonify@~0.0.0:
version "0.0.0" version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
jsonwebtoken@7.1.9: jsonwebtoken@^7.3.0:
version "7.1.9" version "7.4.0"
resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz#847804e5258bec5a9499a8dc4a5e7a3bae08d58a" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.4.0.tgz#515bf2bba070ec615bad97fd2e945027eb476946"
dependencies: dependencies:
joi "^6.10.1" joi "^6.10.1"
jws "^3.1.3" jws "^3.1.4"
lodash.once "^4.0.0" lodash.once "^4.0.0"
ms "^0.7.1" ms "^0.7.1"
xtend "^4.0.1" xtend "^4.0.1"
...@@ -1877,7 +1798,7 @@ jwa@^1.1.4: ...@@ -1877,7 +1798,7 @@ jwa@^1.1.4:
ecdsa-sig-formatter "1.0.9" ecdsa-sig-formatter "1.0.9"
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
jws@^3.1.3: jws@^3.1.4:
version "3.1.4" version "3.1.4"
resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2"
dependencies: dependencies:
...@@ -1886,10 +1807,10 @@ jws@^3.1.3: ...@@ -1886,10 +1807,10 @@ jws@^3.1.3:
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
kind-of@^3.0.2: kind-of@^3.0.2:
version "3.1.0" version "3.2.0"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07"
dependencies: dependencies:
is-buffer "^1.0.2" is-buffer "^1.1.5"
latest-version@^2.0.0: latest-version@^2.0.0:
version "2.0.0" version "2.0.0"
...@@ -1934,7 +1855,7 @@ loader-utils@^0.2.15, loader-utils@^0.2.16: ...@@ -1934,7 +1855,7 @@ loader-utils@^0.2.15, loader-utils@^0.2.16:
json5 "^0.5.0" json5 "^0.5.0"
object-assign "^4.0.1" object-assign "^4.0.1"
loader-utils@^1.0.2: loader-utils@^1.0.2, loader-utils@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
dependencies: dependencies:
...@@ -1958,7 +1879,7 @@ lodash.defaults@^4.2.0: ...@@ -1958,7 +1879,7 @@ lodash.defaults@^4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
lodash.memoize@^4.1.0: lodash.memoize@^4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
...@@ -1979,11 +1900,11 @@ lodash.templatesettings@^4.0.0: ...@@ -1979,11 +1900,11 @@ lodash.templatesettings@^4.0.0:
dependencies: dependencies:
lodash._reinterpolate "~3.0.0" lodash._reinterpolate "~3.0.0"
lodash.uniq@^4.3.0: lodash.uniq@^4.5.0:
version "4.5.0" version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
lodash@^4.14.0, lodash@^4.17.3, lodash@^4.17.4: lodash@^4.14.0, lodash@^4.17.4:
version "4.17.4" version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
...@@ -1998,10 +1919,6 @@ loud-rejection@^1.0.0: ...@@ -1998,10 +1919,6 @@ loud-rejection@^1.0.0:
currently-unhandled "^0.4.1" currently-unhandled "^0.4.1"
signal-exit "^3.0.0" signal-exit "^3.0.0"
lower-case@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
lowercase-keys@^1.0.0: lowercase-keys@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
...@@ -2096,19 +2013,15 @@ miller-rabin@^4.0.0: ...@@ -2096,19 +2013,15 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0" bn.js "^4.0.0"
brorand "^1.0.1" brorand "^1.0.1"
"mime-db@>= 1.24.0 < 2": "mime-db@>= 1.27.0 < 2", mime-db@~1.27.0:
version "1.27.0" version "1.27.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
mime-db@~1.26.0: mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7:
version "1.26.0" version "2.1.15"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7:
version "2.1.14"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
dependencies: dependencies:
mime-db "~1.26.0" mime-db "~1.27.0"
mime@1.3.4, mime@1.3.x, mime@^1.3.4: mime@1.3.4, mime@1.3.x, mime@^1.3.4:
version "1.3.4" version "1.3.4"
...@@ -2154,26 +2067,22 @@ ms@0.7.2, ms@^0.7.1: ...@@ -2154,26 +2067,22 @@ ms@0.7.2, ms@^0.7.1:
version "0.7.2" version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
nan@^2.3.0: ms@0.7.3:
version "2.5.1" version "0.7.3"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff"
ncname@1.0.x: ms@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" resolved "https://registry.yarnpkg.com/ms/-/ms-1.0.0.tgz#59adcd22edc543f7b5381862d31387b1f4bc9473"
dependencies:
xml-char-classes "^1.0.0" nan@^2.3.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45"
negotiator@0.6.1: negotiator@0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
no-case@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081"
dependencies:
lower-case "^1.1.1"
node-libs-browser@^2.0.0: node-libs-browser@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
...@@ -2234,8 +2143,8 @@ nopt@~3.0.1: ...@@ -2234,8 +2143,8 @@ nopt@~3.0.1:
abbrev "1" abbrev "1"
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
version "2.3.6" version "2.3.8"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb"
dependencies: dependencies:
hosted-git-info "^2.1.4" hosted-git-info "^2.1.4"
is-builtin-module "^1.0.0" is-builtin-module "^1.0.0"
...@@ -2243,8 +2152,10 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: ...@@ -2243,8 +2152,10 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
validate-npm-package-license "^3.0.1" validate-npm-package-license "^3.0.1"
normalize-path@^2.0.1: normalize-path@^2.0.1:
version "2.0.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
dependencies:
remove-trailing-separator "^1.0.1"
normalize-range@^0.1.2: normalize-range@^0.1.2:
version "0.1.2" version "0.1.2"
...@@ -2268,12 +2179,6 @@ npmlog@^4.0.2: ...@@ -2268,12 +2179,6 @@ npmlog@^4.0.2:
gauge "~2.7.1" gauge "~2.7.1"
set-blocking "~2.0.0" set-blocking "~2.0.0"
nth-check@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
dependencies:
boolbase "~1.0.0"
num2fraction@^1.2.2: num2fraction@^1.2.2:
version "1.2.2" version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
...@@ -2351,12 +2256,6 @@ pako@~0.2.0: ...@@ -2351,12 +2256,6 @@ pako@~0.2.0:
version "0.2.9" version "0.2.9"
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
param-case@2.1.x:
version "2.1.1"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
dependencies:
no-case "^2.2.0"
parse-asn1@^5.0.0: parse-asn1@^5.0.0:
version "5.1.0" version "5.1.0"
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
...@@ -2703,8 +2602,8 @@ postcss-zindex@^2.0.1: ...@@ -2703,8 +2602,8 @@ postcss-zindex@^2.0.1:
uniqs "^2.0.0" uniqs "^2.0.0"
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.21, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
version "5.2.16" version "5.2.17"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.16.tgz#732b3100000f9ff8379a48a53839ed097376ad57" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b"
dependencies: dependencies:
chalk "^1.1.3" chalk "^1.1.3"
js-base64 "^2.1.9" js-base64 "^2.1.9"
...@@ -2723,13 +2622,6 @@ pretty-bytes@^4.0.2: ...@@ -2723,13 +2622,6 @@ pretty-bytes@^4.0.2:
version "4.0.2" version "4.0.2"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
pretty-error@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.0.3.tgz#bed3d816a008e76da617cde8216f4b778849b5d9"
dependencies:
renderkid "^2.0.1"
utila "~0.4"
process-nextick-args@~1.0.6: process-nextick-args@~1.0.6:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
...@@ -2738,16 +2630,20 @@ process@^0.11.0: ...@@ -2738,16 +2630,20 @@ process@^0.11.0:
version "0.11.9" version "0.11.9"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
promise-polyfill@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162"
proto-list@~1.2.1: proto-list@~1.2.1:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
proxy-addr@~1.1.3: proxy-addr@~1.1.3:
version "1.1.3" version "1.1.4"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.3.tgz#dc97502f5722e888467b3fa2297a7b1ff47df074" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3"
dependencies: dependencies:
forwarded "~0.1.0" forwarded "~0.1.0"
ipaddr.js "1.2.0" ipaddr.js "1.3.0"
prr@~0.0.0: prr@~0.0.0:
version "0.0.0" version "0.0.0"
...@@ -2784,8 +2680,8 @@ qs@6.4.0, qs@~6.4.0: ...@@ -2784,8 +2680,8 @@ qs@6.4.0, qs@~6.4.0:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
query-string@^4.1.0: query-string@^4.1.0:
version "4.3.2" version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.2.tgz#ec0fd765f58a50031a3968c2431386f8947a5cdd" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
dependencies: dependencies:
object-assign "^4.1.0" object-assign "^4.1.0"
strict-uri-encode "^1.0.0" strict-uri-encode "^1.0.0"
...@@ -2814,8 +2710,8 @@ range-parser@^1.0.3, range-parser@~1.2.0: ...@@ -2814,8 +2710,8 @@ range-parser@^1.0.3, range-parser@~1.2.0:
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
version "1.1.7" version "1.2.1"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
dependencies: dependencies:
deep-extend "~0.4.0" deep-extend "~0.4.0"
ini "~1.3.0" ini "~1.3.0"
...@@ -2844,25 +2740,16 @@ read-pkg@^1.0.0: ...@@ -2844,25 +2740,16 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2" normalize-package-data "^2.3.2"
path-type "^1.0.0" path-type "^1.0.0"
readable-stream@1.0: readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.6:
version "1.0.34" version "2.2.9"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.4:
version "2.2.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816"
dependencies: dependencies:
buffer-shims "^1.0.0" buffer-shims "~1.0.0"
core-util-is "~1.0.0" core-util-is "~1.0.0"
inherits "~2.0.1" inherits "~2.0.1"
isarray "~1.0.0" isarray "~1.0.0"
process-nextick-args "~1.0.6" process-nextick-args "~1.0.6"
string_decoder "~0.10.x" string_decoder "~1.0.0"
util-deprecate "~1.0.1" util-deprecate "~1.0.1"
readdirp@^2.0.0: readdirp@^2.0.0:
...@@ -2915,10 +2802,11 @@ regexpu-core@^1.0.0: ...@@ -2915,10 +2802,11 @@ regexpu-core@^1.0.0:
regjsparser "^0.1.4" regjsparser "^0.1.4"
registry-auth-token@^3.0.1: registry-auth-token@^3.0.1:
version "3.1.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.0.tgz#57ae67347e73d96345ed1bc01294c7237c02aa63"
dependencies: dependencies:
rc "^1.1.6" rc "^1.1.6"
safe-buffer "^5.0.1"
registry-url@^3.0.3: registry-url@^3.0.3:
version "3.1.0" version "3.1.0"
...@@ -2936,19 +2824,9 @@ regjsparser@^0.1.4: ...@@ -2936,19 +2824,9 @@ regjsparser@^0.1.4:
dependencies: dependencies:
jsesc "~0.5.0" jsesc "~0.5.0"
relateurl@0.2.x: remove-trailing-separator@^1.0.1:
version "0.2.7" version "1.0.1"
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4"
renderkid@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319"
dependencies:
css-select "^1.1.0"
dom-converter "~0.1"
htmlparser2 "~3.3.0"
strip-ansi "^3.0.0"
utila "~0.3"
repeat-element@^1.1.2: repeat-element@^1.1.2:
version "1.1.2" version "1.1.2"
...@@ -3003,9 +2881,9 @@ require-main-filename@^1.0.1: ...@@ -3003,9 +2881,9 @@ require-main-filename@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
resolve@^1.2.0: resolve@^1.2.0, resolve@^1.3.3:
version "1.3.2" version "1.3.3"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
dependencies: dependencies:
path-parse "^1.0.5" path-parse "^1.0.5"
...@@ -3025,10 +2903,6 @@ ripemd160@^1.0.0: ...@@ -3025,10 +2903,6 @@ ripemd160@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e"
rsvp@3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a"
safe-buffer@^5.0.1: safe-buffer@^5.0.1:
version "5.0.1" version "5.0.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
...@@ -3074,12 +2948,12 @@ serialize-javascript@^1.3.0: ...@@ -3074,12 +2948,12 @@ serialize-javascript@^1.3.0:
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.3.0.tgz#86a4f3752f5c7e47295449b0bbb63d64ba533f05" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.3.0.tgz#86a4f3752f5c7e47295449b0bbb63d64ba533f05"
serve-favicon@^2.4.1: serve-favicon@^2.4.1:
version "2.4.1" version "2.4.2"
resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.4.1.tgz#491a860f5414dbc82e0fd9ceaf20068ffab3ee16" resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.4.2.tgz#aed1d8de67d5b83192cf31fdf53d2ea29464363e"
dependencies: dependencies:
etag "~1.8.0" etag "~1.8.0"
fresh "0.5.0" fresh "0.5.0"
ms "0.7.2" ms "1.0.0"
parseurl "~1.3.1" parseurl "~1.3.1"
serve-static@1.12.1: serve-static@1.12.1:
...@@ -3151,13 +3025,13 @@ sort-keys@^1.0.0: ...@@ -3151,13 +3025,13 @@ sort-keys@^1.0.0:
dependencies: dependencies:
is-plain-obj "^1.0.0" is-plain-obj "^1.0.0"
source-list-map@^0.1.7: source-list-map@^0.1.7, source-list-map@~0.1.7:
version "0.1.8" version "0.1.8"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
source-list-map@^1.0.1: source-list-map@^1.1.1:
version "1.0.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.0.1.tgz#cc1fc17122ae0a51978024c2cc0f8c35659026b8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4"
source-map@0.1.x: source-map@0.1.x:
version "0.1.43" version "0.1.43"
...@@ -3165,7 +3039,7 @@ source-map@0.1.x: ...@@ -3165,7 +3039,7 @@ source-map@0.1.x:
dependencies: dependencies:
amdefine ">=0.0.4" amdefine ">=0.0.4"
source-map@0.5.6, source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: source-map@0.5.6, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
version "0.5.6" version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
...@@ -3188,8 +3062,8 @@ sprintf-js@~1.0.2: ...@@ -3188,8 +3062,8 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
sshpk@^1.7.0: sshpk@^1.7.0:
version "1.11.0" version "1.13.0"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c"
dependencies: dependencies:
asn1 "~0.2.3" asn1 "~0.2.3"
assert-plus "^1.0.0" assert-plus "^1.0.0"
...@@ -3218,12 +3092,12 @@ stream-browserify@^2.0.1: ...@@ -3218,12 +3092,12 @@ stream-browserify@^2.0.1:
readable-stream "^2.0.2" readable-stream "^2.0.2"
stream-http@^2.3.1: stream-http@^2.3.1:
version "2.6.3" version "2.7.0"
resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6"
dependencies: dependencies:
builtin-status-codes "^3.0.0" builtin-status-codes "^3.0.0"
inherits "^2.0.1" inherits "^2.0.1"
readable-stream "^2.1.0" readable-stream "^2.2.6"
to-arraybuffer "^1.0.0" to-arraybuffer "^1.0.0"
xtend "^4.0.0" xtend "^4.0.0"
...@@ -3245,10 +3119,16 @@ string-width@^1.0.1, string-width@^1.0.2: ...@@ -3245,10 +3119,16 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^1.0.0" is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
string_decoder@^0.10.25, string_decoder@~0.10.x: string_decoder@^0.10.25:
version "0.10.31" version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
string_decoder@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667"
dependencies:
buffer-shims "~1.0.0"
stringstream@~0.0.4: stringstream@~0.0.4:
version "0.0.5" version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
...@@ -3391,10 +3271,6 @@ topo@1.x.x: ...@@ -3391,10 +3271,6 @@ topo@1.x.x:
dependencies: dependencies:
hoek "2.x.x" hoek "2.x.x"
toposort@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.3.tgz#f02cd8a74bd8be2fc0e98611c3bacb95a171869c"
tough-cookie@~2.3.0: tough-cookie@~2.3.0:
version "2.3.2" version "2.3.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
...@@ -3420,19 +3296,20 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: ...@@ -3420,19 +3296,20 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
type-is@~1.6.14: type-is@~1.6.14:
version "1.6.14" version "1.6.15"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
dependencies: dependencies:
media-typer "0.3.0" media-typer "0.3.0"
mime-types "~2.1.13" mime-types "~2.1.15"
uglify-js@2.8.x, uglify-js@^2.8.5: uglify-js@^2.8.5:
version "2.8.14" version "2.8.22"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.14.tgz#25b15d1af39b21752ee33703adbf432e8bc8f77d" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0"
dependencies: dependencies:
source-map "~0.5.1" source-map "~0.5.1"
uglify-to-browserify "~1.0.0"
yargs "~3.10.0" yargs "~3.10.0"
optionalDependencies:
uglify-to-browserify "~1.0.0"
uglify-to-browserify@~1.0.0: uglify-to-browserify@~1.0.0:
version "1.0.2" version "1.0.2"
...@@ -3477,13 +3354,9 @@ update-notifier@^1.0.3: ...@@ -3477,13 +3354,9 @@ update-notifier@^1.0.3:
semver-diff "^2.0.0" semver-diff "^2.0.0"
xdg-basedir "^2.0.0" xdg-basedir "^2.0.0"
upper-case@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
urijs@^1.16.1: urijs@^1.16.1:
version "1.18.9" version "1.18.10"
resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.18.9.tgz#06d503d4f1907dcbd906fbd808b38457ec40dee6" resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.18.10.tgz#b94463eaba59a1a796036a467bb633c667f221ab"
url-loader@^0.5.8: url-loader@^0.5.8:
version "0.5.8" version "0.5.8"
...@@ -3515,14 +3388,6 @@ util@0.10.3, util@^0.10.3: ...@@ -3515,14 +3388,6 @@ util@0.10.3, util@^0.10.3:
dependencies: dependencies:
inherits "2.0.1" inherits "2.0.1"
utila@~0.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
utila@~0.4:
version "0.4.0"
resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
utils-merge@1.0.0: utils-merge@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
...@@ -3557,8 +3422,8 @@ verror@1.3.6: ...@@ -3557,8 +3422,8 @@ verror@1.3.6:
extsprintf "1.0.2" extsprintf "1.0.2"
vlq@^0.2.1: vlq@^0.2.1:
version "0.2.1" version "0.2.2"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1"
vm-browserify@0.0.4: vm-browserify@0.0.4:
version "0.0.4" version "0.0.4"
...@@ -3566,82 +3431,73 @@ vm-browserify@0.0.4: ...@@ -3566,82 +3431,73 @@ vm-browserify@0.0.4:
dependencies: dependencies:
indexof "0.0.1" indexof "0.0.1"
vue-hot-reload-api@^2.0.11: vue-hot-reload-api@^2.1.0:
version "2.0.11" version "2.1.0"
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.0.11.tgz#bf26374fb73366ce03f799e65ef5dfd0e28a1568" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.1.0.tgz#9ca58a6e0df9078554ce1708688b6578754d86de"
vue-loader@^11.1.4: vue-loader@^12.0.0:
version "11.2.0" version "12.0.0"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-11.2.0.tgz#4a2443d7da429193aafdcb0f64215f9f25f62260" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-12.0.0.tgz#b429a70624244bbef37304337073dc06c5029759"
dependencies: dependencies:
consolidate "^0.14.0" consolidate "^0.14.0"
hash-sum "^1.0.2" hash-sum "^1.0.2"
js-beautify "^1.6.3" js-beautify "^1.6.3"
loader-utils "^1.0.2" loader-utils "^1.1.0"
lru-cache "^4.0.1" lru-cache "^4.0.1"
postcss "^5.0.21" postcss "^5.0.21"
postcss-load-config "^1.1.0" postcss-load-config "^1.1.0"
postcss-selector-parser "^2.0.0" postcss-selector-parser "^2.0.0"
resolve "^1.3.3"
source-map "^0.5.6" source-map "^0.5.6"
vue-hot-reload-api "^2.0.11" vue-hot-reload-api "^2.1.0"
vue-style-loader "^2.0.0" vue-style-loader "^3.0.0"
vue-template-es2015-compiler "^1.2.2" vue-template-es2015-compiler "^1.2.2"
vue-router@^2.3.0: vue-router@^2.5.0:
version "2.3.0" version "2.5.2"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-2.3.0.tgz#a25c8359e8ca989d22ce79f64322eb0ad0c8670f" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-2.5.2.tgz#870db3b63ead0aab4cd0bac63a7b81341c593f56"
vue-server-renderer@^2.2.4: vue-server-renderer@^2.3.0-beta.1:
version "2.2.4" version "2.3.0-beta.1"
resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.2.4.tgz#ec5ea747aaebb49b8ab9896a8fdeba22f4fe7c80" resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.3.0-beta.1.tgz#6e3eedf1df2f523a70dea8d85a8534c6e8709cd4"
dependencies: dependencies:
de-indent "^1.0.2" chalk "^1.1.3"
hash-sum "^1.0.2"
he "^1.1.0" he "^1.1.0"
lodash.template "^4.4.0"
resolve "^1.2.0" resolve "^1.2.0"
source-map "0.5.6"
vue-ssr-html-stream "^2.1.0"
vue-ssr-html-stream@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/vue-ssr-html-stream/-/vue-ssr-html-stream-2.2.0.tgz#56d78b96c9c172b43749a324c156e888aca96d92"
dependencies:
serialize-javascript "^1.3.0" serialize-javascript "^1.3.0"
source-map "0.5.6"
vue-ssr-webpack-plugin@^1.0.2: vue-style-loader@^3.0.0:
version "1.0.2" version "3.0.1"
resolved "https://registry.yarnpkg.com/vue-ssr-webpack-plugin/-/vue-ssr-webpack-plugin-1.0.2.tgz#d093f266180966b6072d25900e01fd67b2deffff" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-3.0.1.tgz#c8b639bb2f24baf9d78274dc17e4f264c1deda08"
dependencies:
chalk "^1.1.3"
vue-style-loader@^2.0.0, vue-style-loader@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-2.0.4.tgz#4fc19e18bf162225338aac3b17d0fd0e1cfb7439"
dependencies: dependencies:
hash-sum "^1.0.2" hash-sum "^1.0.2"
loader-utils "^1.0.2" loader-utils "^1.0.2"
vue-template-compiler@^2.2.4: vue-template-compiler@^2.3.0-beta.1:
version "2.2.4" version "2.3.0-beta.1"
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.2.4.tgz#2856fb09f1571e9098872bf3c512d670eeeafba9" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.3.0-beta.1.tgz#7eba99ce9e47870cd31c8978781b84d1682b6edc"
dependencies: dependencies:
de-indent "^1.0.2" de-indent "^1.0.2"
he "^1.1.0" he "^1.1.0"
vue-template-es2015-compiler@^1.2.2: vue-template-es2015-compiler@^1.2.2:
version "1.5.1" version "1.5.2"
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.5.1.tgz#0c36cc57aa3a9ec13e846342cb14a72fcac8bd93" resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.5.2.tgz#a0a6c50c941d2a4abda963f2f42c337ac450ee95"
vue@^2.2.4: vue@^2.3.0-beta.1:
version "2.2.4" version "2.3.0-beta.1"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.4.tgz#d0a3a050a80a12356d7950ae5a7b3131048209cc" resolved "https://registry.yarnpkg.com/vue/-/vue-2.3.0-beta.1.tgz#cea07a499c561f535ee320d623fd17a775c1591b"
vuex-router-sync@^4.1.2: vuex-router-sync@^4.1.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.yarnpkg.com/vuex-router-sync/-/vuex-router-sync-4.1.2.tgz#584d6315909257adec2914a63d54b428c016b8ec" resolved "https://registry.yarnpkg.com/vuex-router-sync/-/vuex-router-sync-4.1.2.tgz#584d6315909257adec2914a63d54b428c016b8ec"
vuex@^2.2.1: vuex@^2.3.1:
version "2.2.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-2.2.1.tgz#a42d0ce18cb0e0359258f84bfd76835ed468c185" resolved "https://registry.yarnpkg.com/vuex/-/vuex-2.3.1.tgz#cde8e997c1f9957719bc7dea154f9aa691d981a6"
watchpack@^1.3.1: watchpack@^1.3.1:
version "1.3.1" version "1.3.1"
...@@ -3652,8 +3508,8 @@ watchpack@^1.3.1: ...@@ -3652,8 +3508,8 @@ watchpack@^1.3.1:
graceful-fs "^4.1.2" graceful-fs "^4.1.2"
webpack-dev-middleware@^1.10.1: webpack-dev-middleware@^1.10.1:
version "1.10.1" version "1.10.2"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.2.tgz#2e252ce1dfb020dbda1ccb37df26f30ab014dbd1"
dependencies: dependencies:
memory-fs "~0.4.1" memory-fs "~0.4.1"
mime "^1.3.4" mime "^1.3.4"
...@@ -3661,8 +3517,8 @@ webpack-dev-middleware@^1.10.1: ...@@ -3661,8 +3517,8 @@ webpack-dev-middleware@^1.10.1:
range-parser "^1.0.3" range-parser "^1.0.3"
webpack-hot-middleware@^2.17.1: webpack-hot-middleware@^2.17.1:
version "2.17.1" version "2.18.0"
resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.17.1.tgz#0c8fbf6f93ff29c095d684b07ab6d6c0f2f951d7" resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.18.0.tgz#a16bb535b83a6ac94a78ac5ebce4f3059e8274d3"
dependencies: dependencies:
ansi-html "0.0.7" ansi-html "0.0.7"
html-entities "^1.2.0" html-entities "^1.2.0"
...@@ -3675,18 +3531,29 @@ webpack-merge@^4.0.0: ...@@ -3675,18 +3531,29 @@ webpack-merge@^4.0.0:
dependencies: dependencies:
lodash "^4.17.4" lodash "^4.17.4"
webpack-sources@^0.2.0: webpack-node-externals@^1.5.4:
version "0.2.0" version "1.5.4"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.0.tgz#fea93ba840f16cdd3f246f0ee95f88a9492c69fb" resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.5.4.tgz#ea05ba17108a23e776c35c42e7bb0e86c225be00"
webpack-sources@^0.1.0:
version "0.1.5"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750"
dependencies:
source-list-map "~0.1.7"
source-map "~0.5.3"
webpack-sources@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
dependencies: dependencies:
source-list-map "^1.0.1" source-list-map "^1.1.1"
source-map "~0.5.3" source-map "~0.5.3"
webpack@*, webpack@^2.2.1: webpack@*, webpack@^2.2.1:
version "2.3.0" version "2.4.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.0.tgz#0ae2d90350a7d48a44fddd7dd85c855642bc042e" resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.4.1.tgz#15a91dbe34966d8a4b99c7d656efd92a2e5a6f6a"
dependencies: dependencies:
acorn "^4.0.4" acorn "^5.0.0"
acorn-dynamic-import "^2.0.0" acorn-dynamic-import "^2.0.0"
ajv "^4.7.0" ajv "^4.7.0"
ajv-keywords "^1.1.1" ajv-keywords "^1.1.1"
...@@ -3694,6 +3561,7 @@ webpack@*, webpack@^2.2.1: ...@@ -3694,6 +3561,7 @@ webpack@*, webpack@^2.2.1:
enhanced-resolve "^3.0.0" enhanced-resolve "^3.0.0"
interpret "^1.0.0" interpret "^1.0.0"
json-loader "^0.5.4" json-loader "^0.5.4"
json5 "^0.5.1"
loader-runner "^2.3.0" loader-runner "^2.3.0"
loader-utils "^0.2.16" loader-utils "^0.2.16"
memory-fs "~0.4.1" memory-fs "~0.4.1"
...@@ -3704,7 +3572,7 @@ webpack@*, webpack@^2.2.1: ...@@ -3704,7 +3572,7 @@ webpack@*, webpack@^2.2.1:
tapable "~0.2.5" tapable "~0.2.5"
uglify-js "^2.8.5" uglify-js "^2.8.5"
watchpack "^1.3.1" watchpack "^1.3.1"
webpack-sources "^0.2.0" webpack-sources "^0.2.3"
yargs "^6.0.0" yargs "^6.0.0"
websocket-driver@>=0.5.1: websocket-driver@>=0.5.1:
...@@ -3730,10 +3598,10 @@ which-module@^1.0.0: ...@@ -3730,10 +3598,10 @@ which-module@^1.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
which@^1.2.9: which@^1.2.9:
version "1.2.12" version "1.2.14"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
dependencies: dependencies:
isexe "^1.1.1" isexe "^2.0.0"
wide-align@^1.1.0: wide-align@^1.1.0:
version "1.1.0" version "1.1.0"
...@@ -3767,8 +3635,8 @@ wrappy@1: ...@@ -3767,8 +3635,8 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
write-file-atomic@^1.1.2: write-file-atomic@^1.1.2:
version "1.3.1" version "1.3.3"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.3.tgz#831dd22d491bdc135180bb996a0eb3f8bf587791"
dependencies: dependencies:
graceful-fs "^4.1.11" graceful-fs "^4.1.11"
imurmurhash "^0.1.4" imurmurhash "^0.1.4"
...@@ -3780,11 +3648,7 @@ xdg-basedir@^2.0.0: ...@@ -3780,11 +3648,7 @@ xdg-basedir@^2.0.0:
dependencies: dependencies:
os-homedir "^1.0.0" os-homedir "^1.0.0"
xml-char-classes@^1.0.0: xmlhttprequest@^1.8.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
xmlhttprequest@1.8.0:
version "1.8.0" version "1.8.0"
resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment