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

Merge branch 'perf' into client-manifest

parents d75accb8 f0b94b1b
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
}, },
"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",
"firebase": "^3.7.2", "firebase": "^3.7.2",
......
...@@ -8,6 +8,7 @@ const resolve = file => path.resolve(__dirname, file) ...@@ -8,6 +8,7 @@ const resolve = file => path.resolve(__dirname, file)
const { createBundleRenderer } = require('vue-server-renderer') 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}`
...@@ -26,7 +27,8 @@ function createRenderer (bundle, options) { ...@@ -26,7 +27,8 @@ function createRenderer (bundle, options) {
maxAge: 1000 * 60 * 15 maxAge: 1000 * 60 * 15
}), }),
// this is only needed when vue-server-renderer is npm-linked // this is only needed when vue-server-renderer is npm-linked
basedir: resolve('./dist') basedir: resolve('./dist'),
directMode: true
})) }))
} }
...@@ -62,9 +64,9 @@ app.use('/public', serve('./public', true)) ...@@ -62,9 +64,9 @@ 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'))
// 1-second micro-cache. // 1-second microcache.
// https://www.nginx.com/blog/benefits-of-microcaching-nginx/ // https://www.nginx.com/blog/benefits-of-microcaching-nginx/
const pageCache = LRU({ const microCache = LRU({
max: 100, max: 100,
maxAge: 1000 maxAge: 1000
}) })
...@@ -73,7 +75,7 @@ const pageCache = LRU({ ...@@ -73,7 +75,7 @@ const pageCache = LRU({
// if your app involves user-specific content, you need to implement custom // 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 // logic to determine whether a request is cacheable based on its url and
// headers. // headers.
const isCacheable = req => true const isCacheable = req => useMicroCache
app.get('*', (req, res) => { app.get('*', (req, res) => {
if (!renderer) { if (!renderer) {
...@@ -98,7 +100,7 @@ app.get('*', (req, res) => { ...@@ -98,7 +100,7 @@ app.get('*', (req, res) => {
const cacheable = isCacheable(req) const cacheable = isCacheable(req)
if (cacheable) { if (cacheable) {
const hit = pageCache.get(req.url) const hit = microCache.get(req.url)
if (hit) { if (hit) {
if (!isProd) { if (!isProd) {
console.log(`cache hit!`) console.log(`cache hit!`)
...@@ -113,7 +115,7 @@ app.get('*', (req, res) => { ...@@ -113,7 +115,7 @@ app.get('*', (req, res) => {
} }
res.end(html) res.end(html)
if (cacheable) { if (cacheable) {
pageCache.set(req.url, html) microCache.set(req.url, html)
} }
if (!isProd) { if (!isProd) {
console.log(`whole request: ${Date.now() - s}ms`) console.log(`whole request: ${Date.now() - s}ms`)
......
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__) {
api = process.__API__
} else {
Firebase.initializeApp(config)
api = process.__API__ = Firebase.database().ref(version)
if (process.__API__) { api.onServer = true
api = process.__API__
} else {
Firebase.initializeApp(config)
api = process.__API__ = Firebase.database().ref(version)
api.onServer = true
// fetched item cache // fetched item cache
api.cachedItems = LRU({ api.cachedItems = LRU({
max: 1000, max: 1000,
maxAge: 1000 * 60 * 15 // 15 min cache maxAge: 1000 * 60 * 15 // 15 min cache
}) })
// cache the latest story ids // cache the latest story ids
api.cachedIds = {} api.cachedIds = {}
;['top', 'new', 'show', 'ask', 'job'].forEach(type => { ;['top', 'new', 'show', 'ask', 'job'].forEach(type => {
api.child(`${type}stories`).on('value', snapshot => { api.child(`${type}stories`).on('value', snapshot => {
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 * as filters from './filters'
// sync the router with the vuex store.
// this registers `store.state.route`
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 () {
const app = new Vue({ // create store and router instances
router, const store = createStore()
store, const router = createRouter()
render: h => h(App)
}) // sync the router with the vuex store.
// this registers `store.state.route`
sync(store, router)
// create the app instance.
// here we inject the router and store to all child components,
// making them available everywhere as `this.$router` and `this.$store`.
const app = new Vue({
router,
store,
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 }
}
...@@ -22,9 +22,7 @@ ...@@ -22,9 +22,7 @@
<script> <script>
import Spinner from './Spinner.vue' import Spinner from './Spinner.vue'
import Item from './Item.vue' import Item from './Item.vue'
import { watchList } from '../store/api' import { watchList } from '../api'
let isInitialRender = true
export default { export default {
name: 'item-list', name: 'item-list',
...@@ -39,18 +37,13 @@ export default { ...@@ -39,18 +37,13 @@ export default {
}, },
data () { data () {
const data = { const isInitialRender = !this.$root._isMounted
return {
loading: false, loading: false,
transition: 'slide-up', transition: 'slide-up',
// if this is the initial render, directly render with the store state
// 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, displayedPage: isInitialRender ? Number(this.$store.state.route.params.page) || 1 : -1,
displayedItems: isInitialRender ? this.$store.getters.activeItems : [] displayedItems: isInitialRender ? this.$store.getters.activeItems : []
} }
isInitialRender = false
return data
}, },
computed: { computed: {
......
import 'es6-promise/auto' import 'es6-promise/auto'
import { app, store, router } from './app' import { createApp } from './app'
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.
......
import { app, router, store } from './app' import { createApp } from './app'
const isDev = process.env.NODE_ENV !== 'production' const isDev = process.env.NODE_ENV !== 'production'
...@@ -10,6 +10,8 @@ const isDev = process.env.NODE_ENV !== 'production' ...@@ -10,6 +10,8 @@ const isDev = process.env.NODE_ENV !== 'production'
export default context => { export default context => {
const s = isDev && Date.now() const s = isDev && Date.now()
const { app, router, store } = createApp()
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// set router's location // set router's location
router.push(context.url) router.push(context.url)
......
...@@ -3,34 +3,24 @@ import Router from 'vue-router' ...@@ -3,34 +3,24 @@ 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 () {
mode: 'history', return new Router({
scrollBehavior: () => ({ y: 0 }), mode: 'history',
routes: [ scrollBehavior: () => ({ y: 0 }),
{ path: '/top/:page(\\d+)?', component: createListView('top') }, routes: [
{ path: '/new/:page(\\d+)?', component: createListView('new') }, { path: '/top/:page(\\d+)?', component: createListView('top') },
{ path: '/show/:page(\\d+)?', component: createListView('show') }, { path: '/new/:page(\\d+)?', component: createListView('new') },
{ path: '/ask/:page(\\d+)?', component: createListView('ask') }, { path: '/show/:page(\\d+)?', component: createListView('show') },
{ path: '/job/:page(\\d+)?', component: createListView('job') }, { path: '/ask/:page(\\d+)?', component: createListView('ask') },
{ path: '/item/:id(\\d+)', component: ItemView }, { path: '/job/:page(\\d+)?', component: createListView('job') },
{ path: '/user/:id', component: UserView }, { path: '/item/:id(\\d+)', component: ItemView },
{ path: '/', redirect: '/top' } { path: '/user/:id', component: UserView },
] { 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', { 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 () {
state: { return new Vuex.Store({
activeType: null, state: {
itemsPerPage: 20, activeType: null,
items: {/* [id: number]: Item */}, itemsPerPage: 20,
users: {/* [id: string]: User */}, items: {/* [id: number]: Item */},
lists: { users: {/* [id: string]: User */},
top: [/* number */], lists: {
new: [], top: [/* number */],
show: [], new: [],
ask: [], show: [],
job: [] ask: [],
} job: []
},
actions: {
// 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', { 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 []
} }
}, },
actions,
// items that should be currently displayed. mutations,
// this Array may not be fully fetched. getters
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, { user }) => {
Vue.set(state.users, user.id, user)
}
}
...@@ -3,7 +3,7 @@ import ItemList from '../components/ItemList.vue' ...@@ -3,7 +3,7 @@ import ItemList from '../components/ItemList.vue'
// 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! // this will be called during SSR to pre-fetch data into the store!
......
...@@ -44,8 +44,8 @@ ajv-keywords@^1.1.1: ...@@ -44,8 +44,8 @@ ajv-keywords@^1.1.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.7.0, ajv@^4.9.1:
version "4.11.5" version "4.11.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.5.tgz#b6ee74657b993a01dce44b7944d56f485828d5bd" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.6.tgz#947e93049790942b2a2d60a8289b28924d39f987"
dependencies: dependencies:
co "^4.6.0" co "^4.6.0"
json-stable-stringify "^1.0.1" json-stable-stringify "^1.0.1"
...@@ -175,8 +175,8 @@ async-each@^1.0.0: ...@@ -175,8 +175,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"
...@@ -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"
...@@ -431,17 +431,17 @@ camelcase@^3.0.0: ...@@ -431,17 +431,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.30000649"
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.30000649.tgz#1ee1754a6df235450c8b7cd15e0ebf507221a86a"
capture-stack-trace@^1.0.0: capture-stack-trace@^1.0.0:
version "1.0.0" version "1.0.0"
...@@ -496,8 +496,8 @@ clap@^1.0.9: ...@@ -496,8 +496,8 @@ clap@^1.0.9:
chalk "^1.1.3" chalk "^1.1.3"
clean-css@4.0.x: clean-css@4.0.x:
version "4.0.9" version "4.0.11"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.9.tgz#63ff450b3f939508cc0cd2989bb9daaedc98333e" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.0.11.tgz#a6d88bffb399420b24298db49d99a1ed067534a8"
dependencies: dependencies:
source-map "0.5.x" source-map "0.5.x"
...@@ -588,10 +588,10 @@ commander@2.9.x, commander@^2.9.0: ...@@ -588,10 +588,10 @@ commander@2.9.x, commander@^2.9.0:
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"
...@@ -709,9 +709,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2: ...@@ -709,9 +709,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"
...@@ -1033,8 +1033,8 @@ ee-first@1.1.1: ...@@ -1033,8 +1033,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.3"
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.3.tgz#651eb63fe89f39db70ffc8dbd5d9b66958bc6a0e"
elliptic@^6.0.0: elliptic@^6.0.0:
version "6.4.0" version "6.4.0"
...@@ -1238,8 +1238,8 @@ find-up@^1.0.0: ...@@ -1238,8 +1238,8 @@ 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.7.5"
resolved "https://registry.yarnpkg.com/firebase/-/firebase-3.7.3.tgz#5f143638a84874095a7faf411589e059ac419ccc" resolved "https://registry.yarnpkg.com/firebase/-/firebase-3.7.5.tgz#54190ddf6956662a43123ef060734acbd9663985"
dependencies: dependencies:
dom-storage "2.0.2" dom-storage "2.0.2"
faye-websocket "0.9.3" faye-websocket "0.9.3"
...@@ -1266,8 +1266,8 @@ forever-agent@~0.6.1: ...@@ -1266,8 +1266,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"
...@@ -1289,16 +1289,6 @@ friendly-errors-webpack-plugin@^1.6.1: ...@@ -1289,16 +1289,6 @@ friendly-errors-webpack-plugin@^1.6.1:
error-stack-parser "^2.0.0" error-stack-parser "^2.0.0"
string-length "^1.0.1" string-length "^1.0.1"
fs-extra@^0.30.0:
version "0.30.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^2.1.0"
klaw "^1.0.0"
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
fs.realpath@^1.0.0: fs.realpath@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
...@@ -1424,7 +1414,7 @@ got@^5.0.0: ...@@ -1424,7 +1414,7 @@ got@^5.0.0:
unzip-response "^1.0.2" unzip-response "^1.0.2"
url-parse-lax "^1.0.0" url-parse-lax "^1.0.0"
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: graceful-fs@^4.1.11, graceful-fs@^4.1.2:
version "4.1.11" version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
...@@ -1487,8 +1477,8 @@ he@1.1.x, he@^1.1.0: ...@@ -1487,8 +1477,8 @@ he@1.1.x, he@^1.1.0:
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"
...@@ -1511,8 +1501,8 @@ html-entities@^1.2.0: ...@@ -1511,8 +1501,8 @@ html-entities@^1.2.0:
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.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2"
html-minifier@^3.2.3: html-minifier@^3.2.3:
version "3.4.2" version "3.4.3"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.2.tgz#31896baaf735c1d95f7a0b7291f9dc36c0720752" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.4.3.tgz#eb3a7297c804611f470454eeebe0aacc427e424a"
dependencies: dependencies:
camel-case "3.0.x" camel-case "3.0.x"
clean-css "4.0.x" clean-css "4.0.x"
...@@ -1521,7 +1511,7 @@ html-minifier@^3.2.3: ...@@ -1521,7 +1511,7 @@ html-minifier@^3.2.3:
ncname "1.0.x" ncname "1.0.x"
param-case "2.1.x" param-case "2.1.x"
relateurl "0.2.x" relateurl "0.2.x"
uglify-js "2.8.x" uglify-js "~2.8.22"
html-webpack-plugin@^2.28.0: html-webpack-plugin@^2.28.0:
version "2.28.0" version "2.28.0"
...@@ -1610,16 +1600,16 @@ ini@^1.3.4, ini@~1.3.0: ...@@ -1610,16 +1600,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.2"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.2.tgz#f4f623f0bb7122f15f5717c8e254b8161b5c5b2d"
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"
...@@ -1765,9 +1755,9 @@ isemail@1.x.x: ...@@ -1765,9 +1755,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"
...@@ -1812,8 +1802,8 @@ js-tokens@^3.0.0: ...@@ -1812,8 +1802,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"
...@@ -1855,12 +1845,6 @@ json5@^0.5.0: ...@@ -1855,12 +1845,6 @@ json5@^0.5.0:
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"
jsonfile@^2.1.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
optionalDependencies:
graceful-fs "^4.1.6"
jsonify@~0.0.0: 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"
...@@ -1907,12 +1891,6 @@ kind-of@^3.0.2: ...@@ -1907,12 +1891,6 @@ kind-of@^3.0.2:
dependencies: dependencies:
is-buffer "^1.0.2" is-buffer "^1.0.2"
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
optionalDependencies:
graceful-fs "^4.1.9"
latest-version@^2.0.0: latest-version@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
...@@ -1956,7 +1934,7 @@ loader-utils@^0.2.15, loader-utils@^0.2.16: ...@@ -1956,7 +1934,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:
...@@ -1980,7 +1958,7 @@ lodash.defaults@^4.2.0: ...@@ -1980,7 +1958,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"
...@@ -2001,11 +1979,11 @@ lodash.templatesettings@^4.0.0: ...@@ -2001,11 +1979,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@>=3.5 <5", lodash@^4.14.0, lodash@^4.17.3, lodash@^4.17.4: lodash@^4.14.0, lodash@^4.17.3, 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"
...@@ -2118,19 +2096,15 @@ miller-rabin@^4.0.0: ...@@ -2118,19 +2096,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"
...@@ -2176,9 +2150,13 @@ ms@0.7.2, ms@^0.7.1: ...@@ -2176,9 +2150,13 @@ 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"
ms@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-1.0.0.tgz#59adcd22edc543f7b5381862d31387b1f4bc9473"
nan@^2.3.0: nan@^2.3.0:
version "2.5.1" version "2.6.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.1.tgz#8c84f7b14c96b89f57fbc838012180ec8ca39a01"
ncname@1.0.x: ncname@1.0.x:
version "1.0.0" version "1.0.0"
...@@ -2265,8 +2243,10 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: ...@@ -2265,8 +2243,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"
...@@ -2746,8 +2726,8 @@ pretty-bytes@^4.0.2: ...@@ -2746,8 +2726,8 @@ pretty-bytes@^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: pretty-error@^2.0.2:
version "2.0.3" version "2.1.0"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.0.3.tgz#bed3d816a008e76da617cde8216f4b778849b5d9" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.0.tgz#87f4e9d706a24c87d6cbee9fabec001fcf8c75d8"
dependencies: dependencies:
renderkid "^2.0.1" renderkid "^2.0.1"
utila "~0.4" utila "~0.4"
...@@ -2765,11 +2745,11 @@ proto-list@~1.2.1: ...@@ -2765,11 +2745,11 @@ proto-list@~1.2.1:
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"
...@@ -2836,8 +2816,8 @@ range-parser@^1.0.3, range-parser@~1.2.0: ...@@ -2836,8 +2816,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"
...@@ -2875,16 +2855,16 @@ readable-stream@1.0: ...@@ -2875,16 +2855,16 @@ readable-stream@1.0:
isarray "0.0.1" isarray "0.0.1"
string_decoder "~0.10.x" 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: 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.4, readable-stream@^2.2.6:
version "2.2.6" version "2.2.9"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.6.tgz#8b43aed76e71483938d12a8d46c6cf1a00b1f816" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
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:
...@@ -2937,8 +2917,8 @@ regexpu-core@^1.0.0: ...@@ -2937,8 +2917,8 @@ 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.1.2"
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.1.2.tgz#1b9e51a185c930da34a9894b12a52ea998f1adaf"
dependencies: dependencies:
rc "^1.1.6" rc "^1.1.6"
...@@ -2962,6 +2942,10 @@ relateurl@0.2.x: ...@@ -2962,6 +2942,10 @@ relateurl@0.2.x:
version "0.2.7" version "0.2.7"
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
remove-trailing-separator@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4"
renderkid@^2.0.1: renderkid@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319"
...@@ -3096,12 +3080,12 @@ serialize-javascript@^1.3.0: ...@@ -3096,12 +3080,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:
...@@ -3177,9 +3161,9 @@ source-list-map@^0.1.7: ...@@ -3177,9 +3161,9 @@ 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"
...@@ -3240,12 +3224,12 @@ stream-browserify@^2.0.1: ...@@ -3240,12 +3224,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"
...@@ -3271,6 +3255,12 @@ string_decoder@^0.10.25, string_decoder@~0.10.x: ...@@ -3271,6 +3255,12 @@ string_decoder@^0.10.25, string_decoder@~0.10.x:
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"
...@@ -3442,19 +3432,20 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: ...@@ -3442,19 +3432,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, uglify-js@~2.8.22:
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"
...@@ -3504,8 +3495,8 @@ upper-case@^1.1.1: ...@@ -3504,8 +3495,8 @@ upper-case@^1.1.1:
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" 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"
...@@ -3593,13 +3584,13 @@ vue-hot-reload-api@^2.0.11: ...@@ -3593,13 +3584,13 @@ vue-hot-reload-api@^2.0.11:
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.0.11.tgz#bf26374fb73366ce03f799e65ef5dfd0e28a1568"
vue-loader@^11.1.4: vue-loader@^11.1.4:
version "11.2.0" version "11.3.4"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-11.2.0.tgz#4a2443d7da429193aafdcb0f64215f9f25f62260" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-11.3.4.tgz#65e10a44ce092d906e14bbc72981dec99eb090d2"
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"
...@@ -3610,12 +3601,12 @@ vue-loader@^11.1.4: ...@@ -3610,12 +3601,12 @@ vue-loader@^11.1.4:
vue-template-es2015-compiler "^1.2.2" vue-template-es2015-compiler "^1.2.2"
vue-router@^2.3.0: vue-router@^2.3.0:
version "2.3.0" version "2.4.0"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-2.3.0.tgz#a25c8359e8ca989d22ce79f64322eb0ad0c8670f" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-2.4.0.tgz#56a635e1434a1966ac095f2a485bebdcfc36cec5"
vue-server-renderer@^2.2.4: vue-server-renderer@^2.2.4:
version "2.2.4" version "2.2.6"
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.2.6.tgz#0a20535544b6948bca076380d058e19bb1304eef"
dependencies: dependencies:
de-indent "^1.0.2" de-indent "^1.0.2"
he "^1.1.0" he "^1.1.0"
...@@ -3629,33 +3620,34 @@ vue-ssr-html-stream@^2.1.0: ...@@ -3629,33 +3620,34 @@ vue-ssr-html-stream@^2.1.0:
dependencies: dependencies:
serialize-javascript "^1.3.0" serialize-javascript "^1.3.0"
vue-ssr-webpack-plugin@^1.0.2: vue-ssr-webpack-plugin@^2.0.0:
version "1.0.2" version "2.1.0"
resolved "https://registry.yarnpkg.com/vue-ssr-webpack-plugin/-/vue-ssr-webpack-plugin-1.0.2.tgz#d093f266180966b6072d25900e01fd67b2deffff" resolved "https://registry.yarnpkg.com/vue-ssr-webpack-plugin/-/vue-ssr-webpack-plugin-2.1.0.tgz#acfb3a9b94562a21b9a6fb9f1f8967c3882417a2"
dependencies: dependencies:
chalk "^1.1.3" chalk "^1.1.3"
hash-sum "^1.0.2"
vue-style-loader@^2.0.0, vue-style-loader@^2.0.4: vue-style-loader@^2.0.0, vue-style-loader@^2.0.4:
version "2.0.4" version "2.0.5"
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-2.0.4.tgz#4fc19e18bf162225338aac3b17d0fd0e1cfb7439" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-2.0.5.tgz#f0efac992febe3f12e493e334edb13cd235a3d22"
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.2.4:
version "2.2.4" version "2.2.6"
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.2.6.tgz#2e2928daf0cd0feca9dfc35a9729adeae173ec68"
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.2.4:
version "2.2.4" version "2.2.6"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.4.tgz#d0a3a050a80a12356d7950ae5a7b3131048209cc" resolved "https://registry.yarnpkg.com/vue/-/vue-2.2.6.tgz#451714b394dd6d4eae7b773c40c2034a59621aed"
vuex-router-sync@^4.1.2: vuex-router-sync@^4.1.2:
version "4.1.2" version "4.1.2"
...@@ -3683,37 +3675,30 @@ webpack-dev-middleware@^1.10.1: ...@@ -3683,37 +3675,30 @@ 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"
querystring "^0.2.0" querystring "^0.2.0"
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
webpack-manifest-plugin@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.1.0.tgz#6b6c718aade8a2537995784b46bd2e9836057caa"
dependencies:
fs-extra "^0.30.0"
lodash ">=3.5 <5"
webpack-merge@^4.0.0: webpack-merge@^4.0.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.0.tgz#6ad72223b3e0b837e531e4597c199f909361511e" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.0.tgz#6ad72223b3e0b837e531e4597c199f909361511e"
dependencies: dependencies:
lodash "^4.17.4" lodash "^4.17.4"
webpack-sources@^0.2.0: webpack-sources@^0.2.3:
version "0.2.0" version "0.2.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.0.tgz#fea93ba840f16cdd3f246f0ee95f88a9492c69fb" 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.3.3"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.0.tgz#0ae2d90350a7d48a44fddd7dd85c855642bc042e" resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.3.3.tgz#eecc083c18fb7bf958ea4f40b57a6640c5a0cc78"
dependencies: dependencies:
acorn "^4.0.4" acorn "^4.0.4"
acorn-dynamic-import "^2.0.0" acorn-dynamic-import "^2.0.0"
...@@ -3733,7 +3718,7 @@ webpack@*, webpack@^2.2.1: ...@@ -3733,7 +3718,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:
...@@ -3759,10 +3744,10 @@ which-module@^1.0.0: ...@@ -3759,10 +3744,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"
......
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