Merge branch 'dev' into dev

This commit is contained in:
Daniel Roe 2019-03-23 17:44:34 +00:00 committed by GitHub
commit 847f2f1268
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 337 additions and 152 deletions

View File

@ -60,7 +60,7 @@
"@nuxt/cli": "2.5.1", "@nuxt/cli": "2.5.1",
"@nuxt/core": "2.5.1", "@nuxt/core": "2.5.1",
"@nuxt/generator": "2.5.1", "@nuxt/generator": "2.5.1",
"@nuxt/loading-screen": "^0.1.2", "@nuxt/loading-screen": "^0.2.0",
"@nuxt/opencollective": "^0.2.1", "@nuxt/opencollective": "^0.2.1",
"@nuxt/typescript": "2.5.1", "@nuxt/typescript": "2.5.1",
"@nuxt/webpack": "2.5.1" "@nuxt/webpack": "2.5.1"

View File

@ -58,7 +58,7 @@
"@nuxt/cli": "2.5.1", "@nuxt/cli": "2.5.1",
"@nuxt/core": "2.5.1", "@nuxt/core": "2.5.1",
"@nuxt/generator": "2.5.1", "@nuxt/generator": "2.5.1",
"@nuxt/loading-screen": "^0.1.2", "@nuxt/loading-screen": "^0.2.0",
"@nuxt/opencollective": "^0.2.1", "@nuxt/opencollective": "^0.2.1",
"@nuxt/webpack": "2.5.1" "@nuxt/webpack": "2.5.1"
}, },

View File

@ -1,5 +0,0 @@
import { createNetworkInterface } from 'apollo-client'
export default (ctx) => {
return createNetworkInterface({ uri: 'https://api.graph.cool/simple/v1/cj1dqiyvqqnmj0113yuqamkuu' })
}

View File

@ -1,8 +1,10 @@
export default { export default {
modules: ['@nuxtjs/apollo'], modules: ['@nuxtjs/apollo'],
apollo: { apollo: {
networkInterfaces: { clientConfigs: {
default: '~/apollo/network-interfaces/default.js' default: {
httpEndpoint: 'https://api.graph.cool/simple/v1/cj1dqiyvqqnmj0113yuqamkuu'
}
} }
} }
} }

View File

@ -1,7 +1,9 @@
{ {
"name": "example-vue-apollo", "name": "example-vue-apollo",
"dependencies": { "dependencies": {
"@nuxtjs/apollo": "^2.1.1", "@nuxtjs/apollo": "^4.0.0-rc.4",
"core-js": "^2.6.5",
"node-fetch": "^2.3.0",
"nuxt": "latest" "nuxt": "latest"
}, },
"scripts": { "scripts": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,42 @@
<template>
<div class="column">
<div class="card">
<header class="card-header">
<p class="card-header-title has-text-grey">
{{ title }}
</p>
</header>
<div class="card-content">
<div class="content has-text-centered">
<b-icon
:icon="icon"
size="is-large"
type="is-primary"
/>
</div>
</div>
<footer class="card-footer">
<div class="card-footer-item">
<span>
<slot />
</span>
</div>
</footer>
</div>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
required: true
},
icon: {
type: String,
required: true
}
}
}
</script>

View File

@ -3,8 +3,9 @@ export default {
** Customize the progress bar color ** Customize the progress bar color
*/ */
loading: { color: '#3B8070' }, loading: { color: '#3B8070' },
mode: 'spa', modules: [
plugins: ['~plugins/buefy'], 'nuxt-buefy'
],
router: { router: {
linkActiveClass: 'is-active' linkActiveClass: 'is-active'
} }

View File

@ -10,12 +10,7 @@
"post-update": "yarn upgrade --latest" "post-update": "yarn upgrade --latest"
}, },
"dependencies": { "dependencies": {
"buefy": "^0.5.4",
"nuxt": "latest", "nuxt": "latest",
"vue": "~2.4.4" "nuxt-buefy": "latest"
},
"devDependencies": {
"node-sass": "^4.6.0",
"sass-loader": "^6.0.6"
} }
} }

View File

@ -1,3 +0,0 @@
<template>
<h1>About</h1>
</template>

View File

@ -1,28 +1,45 @@
<template> <template>
<nav class="navbar has-shadow is-light"> <section class="section">
<div class="container"> <div class="columns is-mobile">
<div class="navbar-brand">
<NuxtLink to="/" class="navbar-item"> <card
<img src="~/assets/logo.png"> title="Free"
</NuxtLink> icon="github-circle"
</div> >
<div class="navbar-menu"> Open source on <a href="https://github.com/buefy/buefy"> GitHub</a>
<div class="navbar-start"> </card>
<NuxtLink to="/" class="navbar-item is-tab" exact>
Home <card
</NuxtLink> title="Responsive"
<NuxtLink to="/about" class="navbar-item is-tab" exact> icon="cellphone-link"
About >
</NuxtLink> <b class="has-text-grey">Every</b> component is responsive
</div> </card>
</div>
<card
title="Modern"
icon="alert-decagram"
>
Built with <a href="https://vuejs.org/">Vue.js</a> and <a href="http://bulma.io/">Bulma</a>
</card>
<card
title="Lightweight"
icon="arrange-bring-to-front"
>
No other internal dependency
</card>
</div> </div>
</nav> </section>
</template> </template>
<style lang="scss"> <script>
$primary: blue; import Card from '~/components/Card'
$navbar-tab-active-border-bottom-color: red; export default {
@import "~bulma"; name: 'HomePage',
@import "~buefy/src/scss/buefy"; components: {
</style> Card
}
}
</script>

View File

@ -1,4 +0,0 @@
import Vue from 'vue'
import Buefy from 'buefy'
Vue.use(Buefy)

View File

@ -3,14 +3,14 @@
"version": "1.0.0", "version": "1.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"element-ui": "^2", "element-ui": "^2.6.3",
"nuxt": "latest", "nuxt": "latest"
"post-update": "yarn upgrade --latest"
}, },
"scripts": { "scripts": {
"dev": "nuxt", "dev": "nuxt",
"build": "nuxt build", "build": "nuxt build",
"start": "nuxt start" "start": "nuxt start",
"post-update": "yarn upgrade --latest"
}, },
"devDependencies": { "devDependencies": {
"node-sass": "^4.6.0", "node-sass": "^4.6.0",

View File

@ -17,7 +17,7 @@
"@babel/plugin-transform-runtime": "^7.4.0", "@babel/plugin-transform-runtime": "^7.4.0",
"@babel/preset-env": "^7.4.2", "@babel/preset-env": "^7.4.2",
"@babel/runtime": "^7.4.2", "@babel/runtime": "^7.4.2",
"@vue/babel-preset-jsx": "^1.0.0-beta.2", "@vue/babel-preset-jsx": "^1.0.0-beta.3",
"core-js": "^2.6.5" "core-js": "^2.6.5"
}, },
"publishConfig": { "publishConfig": {

View File

@ -11,7 +11,7 @@
"@nuxt/devalue": "^1.2.2", "@nuxt/devalue": "^1.2.2",
"@nuxt/utils": "2.5.1", "@nuxt/utils": "2.5.1",
"@nuxt/vue-app": "2.5.1", "@nuxt/vue-app": "2.5.1",
"chokidar": "^2.1.2", "chokidar": "^2.1.5",
"consola": "^2.5.7", "consola": "^2.5.7",
"fs-extra": "^7.0.1", "fs-extra": "^7.0.1",
"glob": "^7.1.3", "glob": "^7.1.3",

View File

@ -222,7 +222,7 @@ export default class Builder {
'Using npm:\n', 'Using npm:\n',
`npm i ${dependencyFixes.join(' ')}\n` `npm i ${dependencyFixes.join(' ')}\n`
) )
throw new Error('Missing Template Dependencies') throw new Error('Missing App Dependencies')
} }
} }

View File

@ -263,7 +263,7 @@ describe('builder: builder build', () => {
.mockReturnValueOnce({ version: 'alpha' }) .mockReturnValueOnce({ version: 'alpha' })
.mockReturnValueOnce(undefined) .mockReturnValueOnce(undefined)
expect(() => builder.validateTemplate()).toThrow('Missing Template Dependencies') expect(() => builder.validateTemplate()).toThrow('Missing App Dependencies')
expect(nuxt.resolver.requireModule).toBeCalledTimes(2) expect(nuxt.resolver.requireModule).toBeCalledTimes(2)
expect(nuxt.resolver.requireModule).nthCalledWith(1, 'join(vue, package.json)') expect(nuxt.resolver.requireModule).nthCalledWith(1, 'join(vue, package.json)')

View File

@ -13,7 +13,7 @@
"@types/etag": "^1.8.0", "@types/etag": "^1.8.0",
"@types/express": "^4.16.1", "@types/express": "^4.16.1",
"@types/html-minifier": "^3.5.3", "@types/html-minifier": "^3.5.3",
"@types/node": "^11.11.4", "@types/node": "^11.11.6",
"@types/optimize-css-assets-webpack-plugin": "^1.3.4", "@types/optimize-css-assets-webpack-plugin": "^1.3.4",
"@types/serve-static": "^1.13.2", "@types/serve-static": "^1.13.2",
"@types/terser-webpack-plugin": "^1.2.1", "@types/terser-webpack-plugin": "^1.2.1",

View File

@ -35,16 +35,33 @@ export async function getLockPath(config) {
export async function lock({ id, dir, root, options }) { export async function lock({ id, dir, root, options }) {
const lockPath = await getLockPath({ id, dir, root }) const lockPath = await getLockPath({ id, dir, root })
const locked = await properlock.check(lockPath) try {
if (locked) { const locked = await properlock.check(lockPath)
consola.fatal(`A lock with id '${id}' already exists on ${dir}`) if (locked) {
consola.fatal(`A lock with id '${id}' already exists on ${dir}`)
}
} catch (e) {
consola.debug(`Check for an existing lock with id '${id}' on ${dir} failed`, e)
} }
options = getLockOptions(options) let lockWasCompromised = false
const release = await properlock.lock(lockPath, options) let release
try {
options = getLockOptions(options)
const onCompromised = options.onCompromised
options.onCompromised = (err) => {
onCompromised(err)
lockWasCompromised = true
}
release = await properlock.lock(lockPath, options)
} catch (e) {}
if (!release) { if (!release) {
consola.warn(`Unable to get a lock with id '${id}' on ${dir} (but will continue)`) consola.warn(`Unable to get a lock with id '${id}' on ${dir} (but will continue)`)
return false
} }
if (!lockPaths.size) { if (!lockPaths.size) {
@ -59,8 +76,27 @@ export async function lock({ id, dir, root, options }) {
lockPaths.add(lockPath) lockPaths.add(lockPath)
return async function lockRelease() { return async function lockRelease() {
await release() try {
await fs.remove(lockPath) await fs.remove(lockPath)
lockPaths.delete(lockPath) lockPaths.delete(lockPath)
// release as last so the lockPath is still removed
// when it fails on a compromised lock
await release()
} catch (e) {
if (!lockWasCompromised || !e.message.includes('already released')) {
consola.debug(e)
return
}
// proper-lockfile doesnt remove lockDir when lock is compromised
// removing it here could cause the 'other' process to throw an error
// as well, but in our case its much more likely the lock was
// compromised due to mtime update timeouts
const lockDir = `${lockPath}.lock`
if (await fs.exists(lockDir)) {
await fs.remove(lockDir)
}
}
} }
} }

View File

@ -61,7 +61,7 @@ describe('util: locking', () => {
}) })
test('lock creates a lock and returns a release fn', async () => { test('lock creates a lock and returns a release fn', async () => {
properlock.lock.mockImplementationOnce(() => true) properlock.lock.mockReturnValue(true)
const fn = await lock(lockConfig) const fn = await lock(lockConfig)
@ -75,7 +75,7 @@ describe('util: locking', () => {
}) })
test('lock throws error when lock already exists', async () => { test('lock throws error when lock already exists', async () => {
properlock.check.mockImplementationOnce(() => true) properlock.check.mockReturnValue(true)
await lock(lockConfig) await lock(lockConfig)
expect(properlock.check).toHaveBeenCalledTimes(1) expect(properlock.check).toHaveBeenCalledTimes(1)
@ -84,7 +84,19 @@ describe('util: locking', () => {
}) })
test('lock logs warning when it couldnt get a lock', async () => { test('lock logs warning when it couldnt get a lock', async () => {
properlock.lock.mockImplementationOnce(() => false) properlock.lock.mockReturnValue(false)
const fn = await lock(lockConfig)
expect(fn).toBe(false)
expect(properlock.lock).toHaveBeenCalledTimes(1)
expect(consola.warn).toHaveBeenCalledTimes(1)
expect(consola.warn).toHaveBeenCalledWith(`Unable to get a lock with id '${lockConfig.id}' on ${lockConfig.dir} (but will continue)`)
})
test('lock logs warning when proper.lock threw error', async () => {
properlock.lock.mockImplementation(() => {
throw new Error('test error')
})
await lock(lockConfig) await lock(lockConfig)
expect(properlock.lock).toHaveBeenCalledTimes(1) expect(properlock.lock).toHaveBeenCalledTimes(1)
@ -94,7 +106,7 @@ describe('util: locking', () => {
test('lock returns a release method for unlocking both lockfile as lockPath', async () => { test('lock returns a release method for unlocking both lockfile as lockPath', async () => {
const release = jest.fn() const release = jest.fn()
properlock.lock.mockImplementationOnce(() => release) properlock.lock.mockImplementation(() => release)
const fn = await lock(lockConfig) const fn = await lock(lockConfig)
await fn() await fn()
@ -105,7 +117,7 @@ describe('util: locking', () => {
test('lock release also cleansup onExit set', async () => { test('lock release also cleansup onExit set', async () => {
const release = jest.fn() const release = jest.fn()
properlock.lock.mockImplementationOnce(() => release) properlock.lock.mockImplementation(() => release)
const fn = await lock(lockConfig) const fn = await lock(lockConfig)
expect(lockPaths.size).toBe(1) expect(lockPaths.size).toBe(1)
@ -114,8 +126,58 @@ describe('util: locking', () => {
expect(lockPaths.size).toBe(0) expect(lockPaths.size).toBe(0)
}) })
test('lock release only logs error when error thrown', async () => {
const release = jest.fn(() => {
throw new Error('test error')
})
properlock.lock.mockImplementation(() => release)
const fn = await lock(lockConfig)
await expect(fn()).resolves.not.toThrow()
expect(consola.debug).toHaveBeenCalledTimes(1)
})
test('lock check only logs error when error thrown', async () => {
const testError = new Error('check error')
properlock.lock.mockImplementation(() => () => {})
properlock.check.mockImplementation(() => {
throw testError
})
const fn = await lock(lockConfig)
expect(fn).toEqual(expect.any(Function))
expect(consola.debug).toHaveBeenCalledTimes(1)
expect(consola.debug).toHaveBeenCalledWith(`Check for an existing lock with id '${lockConfig.id}' on ${lockConfig.dir} failed`, testError)
})
test('lock release doesnt log error when error thrown because lock compromised', async () => {
fs.exists.mockReturnValue(true)
const testError = new Error('Lock is already released')
const release = jest.fn(() => {
throw testError
})
properlock.lock.mockImplementation((path, options) => {
options.onCompromised()
return release
})
const fn = await lock({
...lockConfig,
options: {
// overwrite default compromised which calls consola.warn
onCompromised() {}
}
})
await expect(fn()).resolves.not.toThrow()
expect(consola.warn).not.toHaveBeenCalled()
})
test('lock sets exit listener once to remove lockPaths', async () => { test('lock sets exit listener once to remove lockPaths', async () => {
properlock.lock.mockImplementationOnce(() => true) properlock.lock.mockReturnValue(true)
await lock(lockConfig) await lock(lockConfig)
await lock(lockConfig) await lock(lockConfig)
@ -124,8 +186,10 @@ describe('util: locking', () => {
}) })
test('exit listener removes all lockPaths when called', async () => { test('exit listener removes all lockPaths when called', async () => {
properlock.lock.mockReturnValue(true)
let callback let callback
onExit.mockImplementationOnce(cb => (callback = cb)) onExit.mockImplementation(cb => (callback = cb))
const lockConfig2 = Object.assign({}, lockConfig, { id: 'id2' }) const lockConfig2 = Object.assign({}, lockConfig, { id: 'id2' })
@ -145,7 +209,7 @@ describe('util: locking', () => {
}) })
test('lock uses setLockOptions to set defaults', async () => { test('lock uses setLockOptions to set defaults', async () => {
const spy = properlock.lock.mockImplementationOnce(() => true) const spy = properlock.lock.mockReturnValue(true)
await lock(lockConfig) await lock(lockConfig)

View File

@ -12,6 +12,7 @@
"main": "dist/vue-app.js", "main": "dist/vue-app.js",
"typings": "types/index.d.ts", "typings": "types/index.d.ts",
"dependencies": { "dependencies": {
"core-js": "^2.6.5",
"node-fetch": "^2.3.0", "node-fetch": "^2.3.0",
"unfetch": "^4.1.0", "unfetch": "^4.1.0",
"vue": "^2.6.10", "vue": "^2.6.10",

View File

@ -259,14 +259,14 @@ export function promisify(fn, context) {
// Imported from vue-router // Imported from vue-router
export function getLocation(base, mode) { export function getLocation(base, mode) {
let path = window.location.pathname let path = decodeURI(window.location.pathname)
if (mode === 'hash') { if (mode === 'hash') {
return window.location.hash.replace(/^#\//, '') return window.location.hash.replace(/^#\//, '')
} }
if (base && path.indexOf(base) === 0) { if (base && path.indexOf(base) === 0) {
path = path.slice(base.length) path = path.slice(base.length)
} }
return decodeURI(path || '/') + window.location.search + window.location.hash return (path || '/') + window.location.search + window.location.hash
} }
export function urlJoin() { export function urlJoin() {

View File

@ -33,6 +33,10 @@ export default class VueRenderer {
spaTemplate: undefined, spaTemplate: undefined,
errorTemplate: this.parseTemplate('Nuxt.js Internal Server Error') errorTemplate: this.parseTemplate('Nuxt.js Internal Server Error')
}) })
// Default status
this._state = 'created'
this._error = null
} }
get assetsMapping() { get assetsMapping() {
@ -120,12 +124,25 @@ export default class VueRenderer {
return context.renderResourceHints() return context.renderResourceHints()
} }
async ready() { ready() {
if (this._readyCalled) { if (!this._readyPromise) {
return this this._state = 'loading'
this._readyPromise = this._ready()
.then(() => {
this._state = 'ready'
return this
})
.catch((error) => {
this._state = 'error'
this._error = error
throw error
})
} }
this._readyCalled = true
return this._readyPromise
}
async _ready() {
// Resolve dist path // Resolve dist path
this.distPath = path.resolve(this.context.options.buildDir, 'dist', 'server') this.distPath = path.resolve(this.context.options.buildDir, 'dist', 'server')
@ -140,7 +157,7 @@ export default class VueRenderer {
// Try once to load SSR resources from fs // Try once to load SSR resources from fs
await this.loadResources(fs) await this.loadResources(fs)
// Without using `nuxt start` (Programmatic, Tests and Generate) // Without using `nuxt start` (programmatic, tests and generate)
if (!this.context.options._start) { if (!this.context.options._start) {
this.context.nuxt.hook('build:resources', () => this.loadResources(fs)) this.context.nuxt.hook('build:resources', () => this.loadResources(fs))
return return
@ -156,8 +173,6 @@ export default class VueRenderer {
`No build files found in ${this.distPath}.\nUse either \`nuxt build\` or \`builder.build()\` or start nuxt in development mode.` `No build files found in ${this.distPath}.\nUse either \`nuxt build\` or \`builder.build()\` or start nuxt in development mode.`
) )
} }
return this
} }
async loadResources(_fs) { async loadResources(_fs) {
@ -186,7 +201,6 @@ export default class VueRenderer {
// Skip unavailable resources // Skip unavailable resources
if (!resource) { if (!resource) {
consola.debug('Resource not available:', resourceName)
continue continue
} }
@ -212,9 +226,6 @@ export default class VueRenderer {
this.createRenderer() this.createRenderer()
} }
// Call resourcesLoaded hook
consola.debug('Resources loaded:', updated.join(','))
return this.context.nuxt.callHook('render:resourcesLoaded', this.context.resources) return this.context.nuxt.callHook('render:resourcesLoaded', this.context.resources)
} }
@ -437,23 +448,23 @@ export default class VueRenderer {
} }
} }
_throwNotReadyError() {
const error = new Error()
error.statusCode = 500
if (!this._readyCalled) {
error.message = 'Nuxt is not initialized! `nuxt.ready()` should be called.'
} else {
error.message = `SSR renderer is not initialized! Please check ${this.distPath} existence.`
}
throw error
}
async renderRoute(url, context = {}) { async renderRoute(url, context = {}) {
/* istanbul ignore if */ /* istanbul ignore if */
if (!this.isReady) { if (!this.isReady) {
// Production
if (!this.context.options.dev) { if (!this.context.options.dev) {
return this._throwNotReadyError() switch (this._state) {
case 'created':
throw new Error('Renderer ready() is not called! Please ensure `nuxt.ready()` is called and awaited.')
case 'loading':
throw new Error(`Renderer is loading.`)
case 'error':
throw this._error
case 'ready':
throw new Error(`Renderer is loaded but not all resources are unavailable! Please check ${this.distPath} existence.`)
default:
throw new Error('Renderer is in unknown state!')
}
} }
// Tell nuxt middleware to render UI // Tell nuxt middleware to render UI
return false return false

View File

@ -20,7 +20,7 @@
"css-loader": "^2.1.1", "css-loader": "^2.1.1",
"cssnano": "^4.1.10", "cssnano": "^4.1.10",
"eventsource-polyfill": "^0.9.6", "eventsource-polyfill": "^0.9.6",
"extract-css-chunks-webpack-plugin": "^4.0.1", "extract-css-chunks-webpack-plugin": "^4.0.2",
"file-loader": "^3.0.1", "file-loader": "^3.0.1",
"fs-extra": "^7.0.1", "fs-extra": "^7.0.1",
"glob": "^7.1.3", "glob": "^7.1.3",

View File

@ -173,6 +173,9 @@ export class WebpackBundler {
// Actual error will be printed by webpack // Actual error will be printed by webpack
throw new Error('Nuxt Build Error') throw new Error('Nuxt Build Error')
} }
// Await for renderer to load resources (programmatic, tests and generate)
await nuxt.callHook('build:resources')
} }
async webpackDev(compiler) { async webpackDev(compiler) {

View File

@ -19,8 +19,7 @@ describe('unicode-base', () => {
const window = await nuxt.server.renderAndGetWindow(url('/ö/')) const window = await nuxt.server.renderAndGetWindow(url('/ö/'))
const html = window.document.body.innerHTML const html = window.document.body.innerHTML
// important to have the actual page transition classes here -> page works, no hydration error expect(html).toContain('<h1>Unicode base works!</h1>')
expect(html).toContain('<h1 class="page-enter page-enter-active">Unicode base works!</h1>')
}) })
// Close server and ask nuxt to stop listening to file changes // Close server and ask nuxt to stop listening to file changes

122
yarn.lock
View File

@ -1461,10 +1461,10 @@
error-stack-parser "^2.0.0" error-stack-parser "^2.0.0"
string-width "^2.0.0" string-width "^2.0.0"
"@nuxt/loading-screen@^0.1.2": "@nuxt/loading-screen@^0.2.0":
version "0.1.2" version "0.2.0"
resolved "https://registry.npmjs.org/@nuxt/loading-screen/-/loading-screen-0.1.2.tgz#2438ce21fcc1ae33cbd5168430b763c7ee93626d" resolved "https://registry.npmjs.org/@nuxt/loading-screen/-/loading-screen-0.2.0.tgz#fbdfd75814a9935f1827574f2b4c924ac3de81c9"
integrity sha512-IsSySwZ5nHF34RUdsTEElvx/dLP8uBDTek1xL5vuqgBL+4hsanbBPMhz2B9XSkCLM0wrqKORaZAfY1ZYXmHajA== integrity sha512-QprkUsdOMqwQuw4OeQUX/Fj4LOyLSAAi0aa6mxxpITjfLScTp6Bx2Z+flG0cU19w0L2WSZtdqfQtjY6tYaTVuw==
dependencies: dependencies:
connect "^3.6.6" connect "^3.6.6"
fs-extra "^7.0.1" fs-extra "^7.0.1"
@ -1684,11 +1684,16 @@
resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
"@types/node@*", "@types/node@^11.11.4", "@types/node@^11.9.5": "@types/node@*", "@types/node@^11.9.5":
version "11.11.4" version "11.11.4"
resolved "https://registry.npmjs.org/@types/node/-/node-11.11.4.tgz#8808bd5a82bbf6f5d412eff1c228d178e7c24bb3" resolved "https://registry.npmjs.org/@types/node/-/node-11.11.4.tgz#8808bd5a82bbf6f5d412eff1c228d178e7c24bb3"
integrity sha512-02tIL+QIi/RW4E5xILdoAMjeJ9kYq5t5S2vciUdFPXv/ikFTb0zK8q9vXkg4+WAJuYXGiVT1H28AkD2C+IkXVw== integrity sha512-02tIL+QIi/RW4E5xILdoAMjeJ9kYq5t5S2vciUdFPXv/ikFTb0zK8q9vXkg4+WAJuYXGiVT1H28AkD2C+IkXVw==
"@types/node@^11.11.6":
version "11.11.6"
resolved "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a"
integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==
"@types/optimize-css-assets-webpack-plugin@^1.3.4": "@types/optimize-css-assets-webpack-plugin@^1.3.4":
version "1.3.4" version "1.3.4"
resolved "https://registry.npmjs.org/@types/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-1.3.4.tgz#6838ab7a3a5ec1253ad98c348bdcd009e91b39cd" resolved "https://registry.npmjs.org/@types/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-1.3.4.tgz#6838ab7a3a5ec1253ad98c348bdcd009e91b39cd"
@ -1785,68 +1790,68 @@
resolved "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.10.tgz#17a8ec65cd8e88f51b418ceb271af18d3137df67" resolved "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.10.tgz#17a8ec65cd8e88f51b418ceb271af18d3137df67"
integrity sha512-WsVzTPshvCSbHThUduGGxbmnwcpkgSctHGHTqzWyFg4lYAuV5qXlyFPOsP3OWqCINfmg/8VXP+zJaa4OxEsBQQ== integrity sha512-WsVzTPshvCSbHThUduGGxbmnwcpkgSctHGHTqzWyFg4lYAuV5qXlyFPOsP3OWqCINfmg/8VXP+zJaa4OxEsBQQ==
"@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.2": "@vue/babel-helper-vue-jsx-merge-props@^1.0.0-beta.3":
version "1.0.0-beta.2" version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.2.tgz#f3e20d77b89ddb7a4b9b7a75372f05cd3ac22d92" resolved "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0-beta.3.tgz#e4c2e7125b3e0d2a9d493e457850b2abb0fd3cad"
integrity sha512-Yj92Q1GcGjjctecBfnBmVqKSlMdyZaVq10hlZB4HSd1DJgu4cWgpEImJSzcJRUCZmas6UigwE7f4IjJuQs+JvQ== integrity sha512-cbFQnd3dDPsfWuxbWW2phynX2zsckwC4GfAkcE1QH1lZL2ZAD2V97xY3BmvTowMkjeFObRKQt1P3KKA6AoB0hQ==
"@vue/babel-plugin-transform-vue-jsx@^1.0.0-beta.2": "@vue/babel-plugin-transform-vue-jsx@^1.0.0-beta.3":
version "1.0.0-beta.2" version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.2.tgz#6f7903fe66a34a02163f418c426cf419e862d97e" resolved "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0-beta.3.tgz#a1a44e801d8ed615e49f145ef1b3eaca2c16e2e6"
integrity sha512-fvAymRZAPHitomRE+jIipWRj0STXNSMqeOSdOFu9Ffjqg9WGOxSdCjORxexManfZ2y5QDv7gzI1xfgprsK3nlw== integrity sha512-yn+j2B/2aEagaxXrMSK3qcAJnlidfXg9v+qmytqrjUXc4zfi8QVC/b4zCev1FDmTip06/cs/csENA4law6Xhpg==
dependencies: dependencies:
"@babel/helper-module-imports" "^7.0.0" "@babel/helper-module-imports" "^7.0.0"
"@babel/plugin-syntax-jsx" "^7.2.0" "@babel/plugin-syntax-jsx" "^7.2.0"
"@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2" "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.3"
html-tags "^2.0.0" html-tags "^2.0.0"
lodash.kebabcase "^4.1.1" lodash.kebabcase "^4.1.1"
svg-tags "^1.0.0" svg-tags "^1.0.0"
"@vue/babel-preset-jsx@^1.0.0-beta.2": "@vue/babel-preset-jsx@^1.0.0-beta.3":
version "1.0.0-beta.2" version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.2.tgz#3e5dc2b73da58391c1c7327c2bd2ef154fe4e46e" resolved "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0-beta.3.tgz#15c584bd62c0286a80f0196749ae38cde5cd703b"
integrity sha512-nZoAKBR/h6iPMQ66ieQcIdlpPBmqhtUUcgjBS541jIVxSog1rwzrc00jlsuecLonzUMWPU0PabyitsG74vhN1w== integrity sha512-qMKGRorTI/0nE83nLEM7MyQiBZUqc62sZyjkBdVaaU7S61MHI8RKHPtbLMMZlWXb2NCJ0fQci8xJWUK5JE+TFA==
dependencies: dependencies:
"@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2" "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.3"
"@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.3"
"@vue/babel-sugar-functional-vue" "^1.0.0-beta.2" "@vue/babel-sugar-functional-vue" "^1.0.0-beta.3"
"@vue/babel-sugar-inject-h" "^1.0.0-beta.2" "@vue/babel-sugar-inject-h" "^1.0.0-beta.3"
"@vue/babel-sugar-v-model" "^1.0.0-beta.2" "@vue/babel-sugar-v-model" "^1.0.0-beta.3"
"@vue/babel-sugar-v-on" "^1.0.0-beta.2" "@vue/babel-sugar-v-on" "^1.0.0-beta.3"
"@vue/babel-sugar-functional-vue@^1.0.0-beta.2": "@vue/babel-sugar-functional-vue@^1.0.0-beta.3":
version "1.0.0-beta.2" version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.2.tgz#8831f686e7614f282d5170b902483ef538deef38" resolved "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0-beta.3.tgz#41a855786971dacbbe8044858eefe98de089bf12"
integrity sha512-5qvi4hmExgjtrESDk0vflL69dIxkDAukJcYH9o4663E8Nh12Jpbmr+Ja8WmgkAPtTVhk90UVcVUFCCZLHBmhkQ== integrity sha512-CBIa0sQWn3vfBS2asfTgv0WwdyKvNTKtE/cCfulZ7MiewLBh0RlvvSmdK9BIMTiHErdeZNSGUGlU6JuSHLyYkQ==
dependencies: dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0" "@babel/plugin-syntax-jsx" "^7.2.0"
"@vue/babel-sugar-inject-h@^1.0.0-beta.2": "@vue/babel-sugar-inject-h@^1.0.0-beta.3":
version "1.0.0-beta.2" version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.2.tgz#5f92f994bf4b4126fad8633f554e8a426b51b413" resolved "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0-beta.3.tgz#be1d00b74a1a89fed35a9b1415a738c36f125966"
integrity sha512-qGXZ6yE+1trk82xCVJ9j3shsgI+R2ePj3+o8b2Ee7JNaRqQvMfTwpgx5BRlk4q1+CTjvYexdqBS+q4Kg7sSxcg== integrity sha512-HKMBMmFfdK9GBp3rX2bHIwILBdgc5F3ahmCB72keJxzaAQrgDAnD+ho70exUge+inAGlNF34WsQcGPElTf9QZg==
dependencies: dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0" "@babel/plugin-syntax-jsx" "^7.2.0"
"@vue/babel-sugar-v-model@^1.0.0-beta.2": "@vue/babel-sugar-v-model@^1.0.0-beta.3":
version "1.0.0-beta.2" version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.2.tgz#051d3ae3ef5e70d514e09058ec5790f6a42e8c28" resolved "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0-beta.3.tgz#ea935b0e08bf58c125a1349b819156059590993c"
integrity sha512-63US3IMEtATJzzK2le/Na53Sk2bp3LHfwZ8eMFwbTaz6e2qeV9frBl3ZYaha64ghT4IDSbrDXUmm0J09EAzFfA== integrity sha512-et39eTEh7zW4wfZoSl9Jf0/n2r9OTT8U02LtSbXsjgYcqaDQFusN0+n7tw4bnOqvnnSVjEp7bVsQCWwykC3Wgg==
dependencies: dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0" "@babel/plugin-syntax-jsx" "^7.2.0"
"@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.2" "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0-beta.3"
"@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.3"
camelcase "^5.0.0" camelcase "^5.0.0"
html-tags "^2.0.0" html-tags "^2.0.0"
svg-tags "^1.0.0" svg-tags "^1.0.0"
"@vue/babel-sugar-v-on@^1.0.0-beta.2": "@vue/babel-sugar-v-on@^1.0.0-beta.3":
version "1.0.0-beta.2" version "1.0.0-beta.3"
resolved "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.2.tgz#3e2d122e229b10017f091d178346b601d9245260" resolved "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0-beta.3.tgz#2f5fedb43883f603fe76010f253b85c7465855fe"
integrity sha512-XH/m3k11EKdMY0MrTg4+hQv8BFM8juzHT95chYkgxDmvDdVJnSCuf9+mcysEJttWD4PVuUGN7EHoIWsIhC0dRw== integrity sha512-F+GapxCiy50jf2Q2B4exw+KYBzlGdeKMAMW1Dbvb0Oa59SA0CH6tsUOIAsXb0A05jwwg/of0LaVeo+4aLefVxQ==
dependencies: dependencies:
"@babel/plugin-syntax-jsx" "^7.2.0" "@babel/plugin-syntax-jsx" "^7.2.0"
"@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.2" "@vue/babel-plugin-transform-vue-jsx" "^1.0.0-beta.3"
camelcase "^5.0.0" camelcase "^5.0.0"
"@vue/component-compiler-utils@^2.4.0", "@vue/component-compiler-utils@^2.5.1": "@vue/component-compiler-utils@^2.4.0", "@vue/component-compiler-utils@^2.5.1":
@ -3022,7 +3027,7 @@ cheerio@^1.0.0-rc.2:
lodash "^4.15.0" lodash "^4.15.0"
parse5 "^3.0.1" parse5 "^3.0.1"
chokidar@*, chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.2: chokidar@*, chokidar@^2.0.2, chokidar@^2.0.4:
version "2.1.2" version "2.1.2"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058"
integrity sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg== integrity sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==
@ -3041,6 +3046,25 @@ chokidar@*, chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.2:
optionalDependencies: optionalDependencies:
fsevents "^1.2.7" fsevents "^1.2.7"
chokidar@^2.1.5:
version "2.1.5"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d"
integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==
dependencies:
anymatch "^2.0.0"
async-each "^1.0.1"
braces "^2.3.2"
glob-parent "^3.1.0"
inherits "^2.0.3"
is-binary-path "^1.0.0"
is-glob "^4.0.0"
normalize-path "^3.0.0"
path-is-absolute "^1.0.0"
readdirp "^2.2.1"
upath "^1.1.1"
optionalDependencies:
fsevents "^1.2.7"
chownr@^1.1.1: chownr@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
@ -4766,10 +4790,10 @@ extglob@^2.0.4:
snapdragon "^0.8.1" snapdragon "^0.8.1"
to-regex "^3.0.1" to-regex "^3.0.1"
extract-css-chunks-webpack-plugin@^4.0.1: extract-css-chunks-webpack-plugin@^4.0.2:
version "4.0.1" version "4.0.2"
resolved "https://registry.npmjs.org/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.0.1.tgz#8a25ecf89e4a31d74351e487e616ecc79e873052" resolved "https://registry.npmjs.org/extract-css-chunks-webpack-plugin/-/extract-css-chunks-webpack-plugin-4.0.2.tgz#67c1de090079247b9eb4f9d179cd2717ca43c361"
integrity sha512-axin0Qz65T4ZQl8FEGW1ZN31kwUJOO7CoiWv0aTupYjmmQdtr56qsW061MuLglzTNwDKTcSe7KbtuzMZ5uc3Cw== integrity sha512-svwrtf8iENEm5DRhzJp2qpfvapEsVEkrElqUqz8/ZtyfvKA8uT6y4GneOgKBCKK6oh+iVPSHZ+FrI89sxG6EOQ==
dependencies: dependencies:
loader-utils "^1.1.0" loader-utils "^1.1.0"
lodash "^4.17.11" lodash "^4.17.11"
@ -11037,7 +11061,7 @@ unset-value@^1.0.0:
has-value "^0.3.1" has-value "^0.3.1"
isobject "^3.0.0" isobject "^3.0.0"
upath@^1.1.0, upath@^1.1.2: upath@^1.1.0, upath@^1.1.1, upath@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" resolved "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068"
integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==