feat: Add vue2 package from npm/vue/v2 branch (#21026)
* Add vue2 package from npm/vue/v2 branch * Add vue2 as automatic export * remove npm/vue2/examples * remove cypress directory from vue2 * fix: ordering of build scripts * remove unneeded files from output, name module cypress-vue2 / CypressVue2 * fix types package resolution Co-authored-by: Lachlan Miller <lachlan.miller.1990@outlook.com> Co-authored-by: Tim Griesser <tgriesser10@gmail.com>
@@ -41,6 +41,7 @@ cli/types
|
||||
# cli/react, cli/vue, and cli/mount-utils are all copied from dist'd builds
|
||||
cli/react
|
||||
cli/vue
|
||||
cli/vue2
|
||||
cli/mount-utils
|
||||
|
||||
# packages/example is not linted (think about changing this)
|
||||
@@ -69,6 +70,9 @@ npm/cypress-schematic/src/**/*.js
|
||||
/npm/create-cypress-tests/initial-template
|
||||
/npm/create-cypress-tests/**/*.template.*
|
||||
|
||||
# The global eslint configuration is not set up to parse vue@2 files
|
||||
/npm/vue2/**/*.vue
|
||||
|
||||
packages/data-context/test/unit/codegen/files
|
||||
|
||||
# community templates we test against, no need to lint
|
||||
|
||||
@@ -15,5 +15,6 @@ module.exports = {
|
||||
],
|
||||
extends: 'semantic-release-monorepo',
|
||||
branches: [
|
||||
'master',
|
||||
],
|
||||
}
|
||||
|
||||
@@ -956,7 +956,7 @@ commands:
|
||||
command: ls -la types
|
||||
working_directory: cli/build
|
||||
- run:
|
||||
command: ls -la vue mount-utils react
|
||||
command: ls -la vue vue2 mount-utils react
|
||||
working_directory: cli/build
|
||||
- unless:
|
||||
condition:
|
||||
|
||||
@@ -16,5 +16,6 @@ build
|
||||
# ignore packages synced at build-time via
|
||||
# the sync-exported-npm-with-cli.js script
|
||||
vue
|
||||
vue2
|
||||
react
|
||||
mount-utils
|
||||
mount-utils
|
||||
|
||||
@@ -106,7 +106,8 @@
|
||||
"types/net-stubbing.ts",
|
||||
"mount-utils",
|
||||
"vue",
|
||||
"react"
|
||||
"react",
|
||||
"vue2"
|
||||
],
|
||||
"bin": {
|
||||
"cypress": "bin/cypress"
|
||||
@@ -124,6 +125,10 @@
|
||||
"import": "./vue/dist/cypress-vue.esm-bundler.js",
|
||||
"require": "./vue/dist/cypress-vue.cjs.js"
|
||||
},
|
||||
"./vue2": {
|
||||
"import": "./vue2/dist/cypress-vue2.esm-bundler.js",
|
||||
"require": "./vue2/dist/cypress-vue2.cjs.js"
|
||||
},
|
||||
"./package.json": {
|
||||
"import": "./package.json",
|
||||
"require": "./package.json"
|
||||
|
||||
@@ -10,6 +10,7 @@ const npmModulesToCopy = [
|
||||
'mount-utils',
|
||||
'react',
|
||||
'vue',
|
||||
'vue2',
|
||||
]
|
||||
|
||||
npmModulesToCopy.forEach((folder) => {
|
||||
|
||||
@@ -23,7 +23,7 @@ shell.set('-e') // any error is fatal
|
||||
fs.ensureDirSync(join(__dirname, '..', 'types'))
|
||||
|
||||
includeTypes.forEach((folder) => {
|
||||
const source = resolvePkg(`@types/${folder}`, { cwd: join(__dirname, '..', '..') })
|
||||
const source = resolvePkg(`@types/${folder}`, { cwd: __dirname })
|
||||
|
||||
fs.copySync(source, join(__dirname, '..', 'types', folder))
|
||||
})
|
||||
|
||||
@@ -226,7 +226,7 @@ describe('init component tests script', () => {
|
||||
}) as any)
|
||||
|
||||
await initComponentTesting({ config: {}, cypressConfigPath, useYarn: true })
|
||||
expect(execStub).to.be.calledWith('yarn add @cypress/vue@3 --dev')
|
||||
expect(execStub).to.be.calledWith('yarn add @cypress/vue --dev')
|
||||
})
|
||||
|
||||
it('suggest the right instruction based on user template choice', async () => {
|
||||
|
||||
@@ -48,10 +48,16 @@ type InstallAdapterOptions = {
|
||||
useYarn: boolean
|
||||
}
|
||||
|
||||
const frameworkDependencies = {
|
||||
react: '@cypress/react',
|
||||
'vue@2': '@cypress/vue2',
|
||||
'vue@3': '@cypress/vue',
|
||||
}
|
||||
|
||||
export async function installFrameworkAdapter (cwd: string, options: InstallAdapterOptions) {
|
||||
const framework = await guessOrAskForFramework(cwd)
|
||||
|
||||
await installDependency(`@cypress/${framework}`, options)
|
||||
await installDependency(frameworkDependencies[framework], options)
|
||||
|
||||
return framework
|
||||
}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
"description": "Browser-based Component Testing for Vue.js with Cypress.io ✌️🌲",
|
||||
"main": "dist/cypress-vue.cjs.js",
|
||||
"scripts": {
|
||||
"build": "rimraf dist && rollup -c rollup.config.js",
|
||||
"postbuild": "node ../../scripts/sync-exported-npm-with-cli.js",
|
||||
"build-prod": "yarn build",
|
||||
"cy:open": "node ../../scripts/cypress.js open --component --project ${PWD}",
|
||||
"cy:run": "node ../../scripts/cypress.js run --component --project ${PWD}",
|
||||
"build": "rimraf dist && rollup -c rollup.config.js",
|
||||
"postbuild": "node ../../scripts/sync-exported-npm-with-cli.js",
|
||||
"typecheck": "vue-tsc --noEmit",
|
||||
"test": "yarn cy:run",
|
||||
"watch": "yarn build --watch --watch.exclude ./dist/**/*",
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"plugins": [
|
||||
"cypress"
|
||||
],
|
||||
"extends": [
|
||||
"plugin:@cypress/dev/tests"
|
||||
],
|
||||
"env": {
|
||||
"cypress/globals": true
|
||||
},
|
||||
"rules": {
|
||||
"mocha/no-global-tests": "off",
|
||||
"no-unused-vars": "off",
|
||||
"no-console": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
registry=http://registry.npmjs.org/
|
||||
save-exact=true
|
||||
progress=false
|
||||
package-lock=true
|
||||
@@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
...require('../../.releaserc.base'),
|
||||
branches: [
|
||||
// this one releases v3 on master on the latest channel
|
||||
'master',
|
||||
],
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
# @cypress/vue2-v1.0.0 (2021-06-17)
|
||||
|
||||
### Features
|
||||
|
||||
* Split out as separate package from `@cypress/vue`, based on the `npm/vue/v2` branch.
|
||||
@@ -0,0 +1,688 @@
|
||||
# @cypress/vue
|
||||
|
||||
[![NPM][npm-icon] ][npm-url]
|
||||
|
||||
[![semantic-release][semantic-image] ][semantic-url]
|
||||
|
||||
> Browser-based Component Testing for Vue.js with the Open-Source [Cypress.io](https://www.cypress.io/) Test Runner ✌️🌲
|
||||
>
|
||||
**✨ New** We're growing the Cypress Community Discord. We have dedicated sections on Component Testing. 👉 [Join now](https://discord.com/invite/TmzTGUW) and let's chat!
|
||||
|
||||
**Jump to:** [Comparison](#comparison), [Blog posts](#blog-posts), Examples: [basic](#basic-examples), [advanced](#advanced-examples), [full](#full-examples), [external](#external-examples), [Code coverage](#code-coverage), [Development](#development)
|
||||
|
||||
### What is @cypress/vue?
|
||||
This package allows you to use the [Cypress](https://www.cypress.io/) test runner to mount and test your components within Cypress. It is built on top of the [Vue Test Utils](https://github.com/vuejs/vue-test-utils) package.
|
||||
|
||||

|
||||
|
||||
### How is this different from Vue Test Utils?
|
||||
It uses [Vue Test Utils](https://github.com/vuejs/vue-test-utils) under the hood. This is more of a replacement for node-based testing than it is replacing Vue Test Utils and its API. Instead of running your tests in node (using Jest or Mocha), the Cypress Component Testing Library runs each component in the **real browser** with full power of the Cypress Framework: [live GUI, full API, screen recording, CI support, cross-platform](https://www.cypress.io/features/). One benefit to using Cypress instead of a node-based runner is that limitations of Vue Test Utils in Node (e.g. manually awaiting Vue's internal event loop) are hidden from the user due to Cypress's retry-ability logic.
|
||||
|
||||
- If you like using `@testing-library/vue`, you can use `@testing-library/cypress` for the same `findBy`, `queryBy` commands, see one of the examples in the list below
|
||||
|
||||
## Installation
|
||||
|
||||
- Requires Cypress v7.0.0 or later
|
||||
- Requires [Node](https://nodejs.org/en/) version 12 or above
|
||||
- Supports webpack-based projects, vite in alpha, if you would like us to support another, please [create an issue](https://github.com/cypress-io/cypress/issues/new?assignees=&labels=npm:%20@cypress/vue&template=3-feature.md) or, if an issue already exists subscribe to it.
|
||||
|
||||
Now you are ready to install.
|
||||
|
||||
### Manual Installation
|
||||
|
||||
Using [@cypress/webpack-dev-server](https://github.com/cypress-io/cypress-webpack-preprocessor#readme) and [vue-loader](https://github.com/vuejs/vue-loader).
|
||||
|
||||
```js
|
||||
// cypress/plugins/index.js
|
||||
const webpack = require('@cypress/webpack-dev-server')
|
||||
const webpackOptions = {
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
const options = {
|
||||
// send in the options from your webpack.config.js, so it works the same
|
||||
// as your app's code
|
||||
webpackOptions,
|
||||
watchOptions: {},
|
||||
}
|
||||
|
||||
module.exports = (on) => {
|
||||
on('dev-server:start', webpack(options))
|
||||
}
|
||||
```
|
||||
|
||||
Install dev dependencies
|
||||
|
||||
```shell
|
||||
npm i -D @cypress/webpack-dev-server \
|
||||
vue-loader vue-template-compiler css-loader
|
||||
```
|
||||
|
||||
And write a test
|
||||
|
||||
```js
|
||||
import Hello from '../../components/Hello.vue'
|
||||
import { mountCallback } from '@cypress/vue2'
|
||||
|
||||
describe('Hello.vue', () => {
|
||||
beforeEach(mountCallback(Hello))
|
||||
|
||||
it('shows hello', () => {
|
||||
cy.contains('Hello World!')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
## Usage and Examples
|
||||
|
||||
```js
|
||||
// components/HelloWorld.spec.js
|
||||
import { mount } from '@cypress/vue2'
|
||||
import { HelloWorld } from './HelloWorld.vue'
|
||||
describe('HelloWorld component', () => {
|
||||
it('works', () => {
|
||||
mount(HelloWorld)
|
||||
// now use standard Cypress commands
|
||||
cy.contains('Hello World!').should('be.visible')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
### Options
|
||||
|
||||
You can pass additional styles, css files and external stylesheets to load, see [docs/styles.md](./docs/styles.md) for full list.
|
||||
|
||||
```js
|
||||
import Todo from './Todo.vue'
|
||||
const todo = {
|
||||
id: '123',
|
||||
title: 'Write more tests',
|
||||
}
|
||||
|
||||
mount(Todo, {
|
||||
propsData: { todo },
|
||||
stylesheets: [
|
||||
'https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.css',
|
||||
],
|
||||
})
|
||||
```
|
||||
|
||||
See examples below for details.
|
||||
|
||||
### Global Vue Options
|
||||
|
||||
You can pass extensions (global components, mixins, modules to use)
|
||||
when mounting Vue component. Use `{ extensions: { ... }}` object inside
|
||||
the `options`.
|
||||
|
||||
- `components` - object of 'id' and components to register globally, see [Components](cypress/component/basic/components) example
|
||||
- `use` (alias `plugins`) - list of plugins, see [Plugins](cypress/component/basic/plugins)
|
||||
- `mixin` (alias `mixins`) - list of global mixins, see [Mixins](cypress/component/basic/mixins) example
|
||||
- `filters` - hash of global filters, see [Filters](cypress/component/basic/filters) example
|
||||
|
||||
### intro example
|
||||
|
||||
Take a look at the first Vue v2 example:
|
||||
[Declarative Rendering](https://vuejs.org/v2/guide/#Declarative-Rendering).
|
||||
The code is pretty simple
|
||||
|
||||
```html
|
||||
<div id="app">
|
||||
{{ message }}
|
||||
</div>
|
||||
```
|
||||
|
||||
```js
|
||||
var app = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return { message: 'Hello Vue!' }
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
It shows the message when running in the browser
|
||||
|
||||
```
|
||||
Hello Vue!
|
||||
```
|
||||
|
||||
Let's test it in [Cypress.io][cypress.io] (for the current version see
|
||||
[cypress/integration/spec.js](cypress/integration/spec.js)).
|
||||
|
||||
```js
|
||||
import { mountCallback } from '@cypress/vue2'
|
||||
|
||||
describe('Declarative rendering', () => {
|
||||
// Vue code from https://vuejs.org/v2/guide/#Declarative-Rendering
|
||||
const template = `
|
||||
<div id="app">
|
||||
{{ message }}
|
||||
</div>
|
||||
`
|
||||
|
||||
const data = {
|
||||
message: 'Hello Vue!',
|
||||
}
|
||||
|
||||
// that's all you need to do
|
||||
beforeEach(mountCallback({ template, data }))
|
||||
|
||||
it('shows hello', () => {
|
||||
cy.contains('Hello Vue!')
|
||||
})
|
||||
|
||||
it('changes message if data changes', () => {
|
||||
// mounted Vue instance is available under Cypress.vue
|
||||
Cypress.vue.message = 'Vue rocks!'
|
||||
cy.contains('Vue rocks!')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
Fire up Cypress test runner and have real browser (Electron, Chrome) load
|
||||
Vue and mount your test code and be able to interact with the instance through
|
||||
the reference `Cypress.vue.$data` and via GUI. The full power of the
|
||||
[Cypress API](https://on.cypress.io/api) is available.
|
||||
|
||||

|
||||
|
||||
### list example
|
||||
|
||||
There is a list example next in the Vue docs.
|
||||
|
||||
```html
|
||||
<div id="app-4">
|
||||
<ol>
|
||||
<li v-for="todo in todos">
|
||||
{{ todo.text }}
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
```
|
||||
|
||||
```js
|
||||
var app4 = new Vue({
|
||||
el: '#app-4',
|
||||
data: {
|
||||
todos: [
|
||||
{ text: 'Learn JavaScript' },
|
||||
{ text: 'Learn Vue' },
|
||||
{ text: 'Build something awesome' },
|
||||
],
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
Let's test it. Simple.
|
||||
|
||||
```js
|
||||
import { mountCallback } from '@cypress/vue2'
|
||||
|
||||
describe('Declarative rendering', () => {
|
||||
// List example from https://vuejs.org/v2/guide/#Declarative-Rendering
|
||||
const template = `
|
||||
<ol>
|
||||
<li v-for="todo in todos">
|
||||
{{ todo.text }}
|
||||
</li>
|
||||
</ol>
|
||||
`
|
||||
|
||||
function data() {
|
||||
return {
|
||||
todos: [
|
||||
{ text: 'Learn JavaScript' },
|
||||
{ text: 'Learn Vue' },
|
||||
{ text: 'Build something awesome' },
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
beforeEach(mountCallback({ template, data }))
|
||||
|
||||
it('shows 3 items', () => {
|
||||
cy.get('li').should('have.length', 3)
|
||||
})
|
||||
|
||||
it('can add an item', () => {
|
||||
Cypress.vue.todos.push({ text: 'Test using Cypress' })
|
||||
cy.get('li').should('have.length', 4)
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Handling User Input
|
||||
|
||||
The next section in the Vue docs starts with [reverse message example](https://vuejs.org/v2/guide/#Handling-User-Input).
|
||||
|
||||
```html
|
||||
<div id="app-5">
|
||||
<p>{{ message }}</p>
|
||||
<button @click="reverseMessage">Reverse Message</button>
|
||||
</div>
|
||||
```
|
||||
|
||||
```js
|
||||
var app5 = new Vue({
|
||||
el: '#app-5',
|
||||
data: {
|
||||
message: 'Hello Vue.js!',
|
||||
},
|
||||
methods: {
|
||||
reverseMessage: function () {
|
||||
this.message = this.message.split('').reverse().join('')
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
We can write the test the same way
|
||||
|
||||
```js
|
||||
import { mountCallback } from '@cypress/vue2'
|
||||
|
||||
describe('Handling User Input', () => {
|
||||
// Example from https://vuejs.org/v2/guide/#Handling-User-Input
|
||||
const template = `
|
||||
<div>
|
||||
<p>{{ message }}</p>
|
||||
<button @click="reverseMessage">Reverse Message</button>
|
||||
</div>
|
||||
`
|
||||
|
||||
function data() {
|
||||
return { message: 'Hello Vue.js!' }
|
||||
}
|
||||
|
||||
const methods = {
|
||||
reverseMessage: function () {
|
||||
this.message = this.message.split('').reverse().join('')
|
||||
},
|
||||
}
|
||||
|
||||
beforeEach(mountCallback({ template, data, methods }))
|
||||
|
||||
it('reverses text', () => {
|
||||
cy.contains('Hello Vue')
|
||||
cy.get('button').click()
|
||||
cy.contains('!sj.euV olleH')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
Take a look at the video of the test. When you hover over the `CLICK` step
|
||||
the test runner is showing _before_ and _after_ DOM snapshots. Not only that,
|
||||
the application is fully functioning, you can interact with the application
|
||||
because it is really running!
|
||||
|
||||

|
||||
|
||||
<a name="component-example"/>
|
||||
|
||||
### Component example
|
||||
|
||||
Let us test a complex example. Let us test a [single file Vue component](https://vuejs.org/v2/guide/single-file-components.html). Here is the [Hello.vue](Hello.vue) file
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<p>{{ greeting }} World!</p>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
greeting: 'Hello',
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
p {
|
||||
font-size: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
**note** to learn how to load Vue component files in Cypress, see
|
||||
[Bundling](#bundling) section.
|
||||
|
||||
Do you want to interact with the component? Go ahead! Do you want
|
||||
to have multiple components? No problem!
|
||||
|
||||
```js
|
||||
import Hello from '../../components/Hello.vue'
|
||||
import { mountCallback } from '@cypress/vue2'
|
||||
describe('Several components', () => {
|
||||
const template = `
|
||||
<div>
|
||||
<hello></hello>
|
||||
<hello></hello>
|
||||
<hello></hello>
|
||||
</div>
|
||||
`
|
||||
const components = {
|
||||
hello: Hello,
|
||||
}
|
||||
beforeEach(mountCallback({ template, components }))
|
||||
|
||||
it('greets the world 3 times', () => {
|
||||
cy.get('p').should('have.length', 3)
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
### Spying example
|
||||
|
||||
Button counter component is used in several Vue doc examples
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<button @click="incrementCounter">{{ counter }}</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
counter: 0,
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
incrementCounter: function () {
|
||||
this.counter += 1
|
||||
this.$emit('increment')
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
button {
|
||||
margin: 5px 10px;
|
||||
padding: 5px 10px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
Let us test it - how do we ensure the event is emitted when the button is clicked?
|
||||
Simple - let us spy on the event, [spying and stubbing is built into Cypress](https://on.cypress.io/stubs-spies-and-clocks)
|
||||
|
||||
```js
|
||||
import ButtonCounter from '../../components/ButtonCounter.vue'
|
||||
import { mountCallback } from '@cypress/vue2'
|
||||
|
||||
describe('ButtonCounter', () => {
|
||||
beforeEach(mountCallback(ButtonCounter))
|
||||
|
||||
it('starts with zero', () => {
|
||||
cy.contains('button', '0')
|
||||
})
|
||||
|
||||
it('increments the counter on click', () => {
|
||||
cy.get('button').click().click().click().contains('3')
|
||||
})
|
||||
|
||||
it('emits "increment" event on click', () => {
|
||||
const spy = cy.spy()
|
||||
Cypress.vue.$on('increment', spy)
|
||||
cy.get('button')
|
||||
.click()
|
||||
.click()
|
||||
.then(() => {
|
||||
expect(spy).to.be.calledTwice
|
||||
})
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
The component is really updating the counter in response to the click
|
||||
and is emitting an event.
|
||||
|
||||

|
||||
|
||||
[cypress.io]: https://www.cypress.io/
|
||||
|
||||
<a name="xhr-spying-stubbing"/>
|
||||
|
||||
### XHR spying and stubbing
|
||||
|
||||
The mount function automatically wraps XMLHttpRequest giving you an ability to intercept XHR requests your component might do. For full documentation see [Network Requests](https://on.cypress.io/network-requests). In this repo see [components/AjaxList.vue](components/AjaxList.vue) and the corresponding tests [cypress/integration/ajax-list-spec.js](cypress/integration/ajax-list-spec.js).
|
||||
|
||||
```js
|
||||
// component use axios to get list of users
|
||||
created() {
|
||||
axios.get(`https://jsonplaceholder.cypress.io/users?_limit=3`)
|
||||
.then(response => {
|
||||
// JSON responses are automatically parsed.
|
||||
this.users = response.data
|
||||
})
|
||||
}
|
||||
// test can observe, return mock data, delay and a lot more
|
||||
beforeEach(mountCallback(AjaxList))
|
||||
it('can inspect real data in XHR', () => {
|
||||
cy.server()
|
||||
cy.route('/users?_limit=3').as('users')
|
||||
cy.wait('@users').its('response.body').should('have.length', 3)
|
||||
})
|
||||
it('can display mock XHR response', () => {
|
||||
cy.server()
|
||||
const users = [{id: 1, name: 'foo'}]
|
||||
cy.route('GET', '/users?_limit=3', users).as('users')
|
||||
cy.get('li').should('have.length', 1)
|
||||
.first().contains('foo')
|
||||
})
|
||||
```
|
||||
|
||||
<a name="spying-window-alert"/>
|
||||
|
||||
### Spying on `window.alert`
|
||||
|
||||
Calls to `window.alert` are automatically recorded, but do not show up. Instead you can spy on them, see [AlertMessage.vue](components/AlertMessage.vue) and its test [cypress/integration/alert-spec.js](cypress/integration/alert-spec.js)
|
||||
|
||||
## Comparison
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
Feature | Vue Test Utils or @testing-library/vue | Cypress + `@cypress/vue`
|
||||
--- | --- | ---
|
||||
Test runs in real browser | ❌ | ✅
|
||||
Uses full mount | ❌ | ✅
|
||||
Test speed | 🏎 | as fast as the app works in the browser
|
||||
Test can use additional plugins | maybe | use any [Cypress plugin](https://on.cypress.io/plugins)
|
||||
Test can interact with component | synthetic limited API | use any [Cypress command](https://on.cypress.io/api)
|
||||
Test can be debugged | via terminal and Node debugger | use browser DevTools
|
||||
Built-in time traveling debugger | ❌ | Cypress time traveling debugger
|
||||
Re-run tests on file or test change | ✅ | ✅
|
||||
Test output on CI | terminal | terminal, screenshots, videos
|
||||
Tests can be run in parallel | ✅ | ✅ via [parallelization](https://on.cypress.io/parallelization)
|
||||
Test against interface | if using `@testing-library/vue` | ✅ and can use `@testing-library/cypress`
|
||||
Spying and mocking | Jest mocks | Sinon library
|
||||
Code coverage | ✅ | ✅
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
## Examples
|
||||
|
||||
```js
|
||||
// components/HelloWorld.spec.js
|
||||
import { mount } from '@cypress/vue2'
|
||||
import { HelloWorld } from './HelloWorld.vue'
|
||||
describe('HelloWorld component', () => {
|
||||
it('works', () => {
|
||||
mount(HelloWorld)
|
||||
// now use standard Cypress commands
|
||||
cy.contains('Hello World!').should('be.visible')
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
### Basic examples
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
Spec | Description
|
||||
--- | ---
|
||||
[Components](cypress/component/basic/components) | Registers global components to use
|
||||
[Filters](cypress/component/basic/filters) | Registering global filters
|
||||
[Hello](cypress/component/basic/hello) | Testing examples from Vue2 cookbook
|
||||
[Mixins](cypress/component/basic/mixins) | Registering Vue mixins
|
||||
[Plugins](cypress/component/basic/plugins) | Loading additional plugins
|
||||
[Props](cypress/component/basic/props) | Pass props to the component during mount
|
||||
[Slots](cypress/component/basic/slots) | Passing slots and scopedSlots to the component
|
||||
[Small examples](cypress/component/basic/small-examples) | A few small examples testing forms, buttons
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
### Advanced examples
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
Spec | Description
|
||||
--- | ---
|
||||
[access-component](cypress/component/advanced/access-component) | Access the mounted component directly from test
|
||||
[i18n](cypress/component/advanced/i18n) | Testing component that uses [Vue I18n](https://kazupon.github.io/vue-i18n/) plugin
|
||||
[mocking-axios](cypress/component/advanced/mocking-axios) | Mocking 3rd party CommonJS modules like `axios`
|
||||
[mocking-fetch](cypress/component/advanced/mocking-fetch) | Mocking `window.fetch` to stub responses and test the UI
|
||||
[fetch-polyfill](ypress/component/advanced/fetch-polyfill) | Using experimental `fetch` polyfill to spy on / stub those Ajax requests using regular Cypress network methods
|
||||
[mocking-components](cypress/component/advanced/mocking-components) | Mocking locally registered child components during tests
|
||||
[mocking-imports](cypress/component/advanced/mocking-imports) | Stub ES6 imports from the tests
|
||||
[render-functions](cypress/component/advanced/render-functions) | Mounting components with a [render function](https://www.tutorialandexample.com/vue-js-render-functions/)
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
### Full examples
|
||||
|
||||
We have several subfolders in [examples](examples) folder.
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
Folder Name | Description
|
||||
--- | ---
|
||||
[cli](examples/cli) | An example app scaffolded using Vue CLI and the component testing added using `vue add cypress-experimental` command.
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
### External examples
|
||||
|
||||
<!-- prettier-ignore-start -->
|
||||
Repo | Description
|
||||
--- | ---
|
||||
[vue-component-test-example](https://github.com/bahmutov/vue-component-test-example) | Scaffolded Vue CLI v3 project with added component tests, read [Write Your First Vue Component Test](https://glebbahmutov.com/blog/first-vue-component-test/).
|
||||
<!-- prettier-ignore-end -->
|
||||
|
||||
|
||||
|
||||
## Code coverage
|
||||
|
||||
This plugin uses `babel-plugin-istanbul` to automatically instrument `.js` and `.vue` files and generates the code coverage report using dependency [cypress-io/code-coverage](https://github.com/cypress-io/code-coverage) (included). The output reports are saved in the folder "coverage" at the end of the test run.
|
||||
|
||||
If you want to disable code coverage instrumentation and reporting, use `--env coverage=false` or `CYPRESS_coverage=false` or set in your `cypress.json` file
|
||||
|
||||
```json
|
||||
{
|
||||
"env": {
|
||||
"coverage": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Note ⚠️:** if the component `.vue` file does not have a `<script>` section, it will not have any code coverage information.
|
||||
|
||||
## What happened to cypress-vue-unit-test?
|
||||
|
||||
We were in the middle of moving into the Cypress NPM org, so any references to `cypress-vue-unit-test` should be switched to `@cypress/vue`. Once complete, the old repository will be archived.
|
||||
|
||||
## Development
|
||||
|
||||
To see all local tests, install dependencies, build the code and open Cypress using the open-ct command
|
||||
|
||||
```sh
|
||||
yarn install
|
||||
yarn workspace @cypress/vue build
|
||||
```
|
||||
|
||||
The build is done using `rollup`. It bundles all files from [src](src) to the `dist` folder. You can then run component tests by opening Cypress
|
||||
|
||||
```sh
|
||||
# cypress open-ct
|
||||
yarn workspace @cypress/vue cy:open
|
||||
```
|
||||
|
||||
Larger tests that use full application and run on CI (see [circle.yml](circle.yml)) are located in the folder [examples](examples).
|
||||
|
||||
### Debugging
|
||||
|
||||
Run Cypress with environment variable
|
||||
|
||||
```
|
||||
DEBUG=@cypress/vue
|
||||
```
|
||||
|
||||
If some deeply nested objects are abbreviated and do not print fully, set the maximum logging depth
|
||||
|
||||
```
|
||||
DEBUG=@cypress/vue DEBUG_DEPTH=10
|
||||
```
|
||||
|
||||
## Related info
|
||||
|
||||
- [Testing Vue web applications with Vuex data store & REST backend](https://www.cypress.io/blog/2017/11/28/testing-vue-web-application-with-vuex-data-store-and-rest-backend/)
|
||||
- [Why Cypress?](https://on.cypress.io/why-cypress)
|
||||
- [Cypress API](https://on.cypress.io/api)
|
||||
- [Learn TDD in Vue](https://learntdd.in/vue)
|
||||
- [@cypress/vue vs vue-test-utils](https://codingitwrong.com/2018/03/04/comparing-vue-component-testing-tools.html)
|
||||
|
||||
## Blog posts
|
||||
|
||||
- [Write Your First Vue Component Test](https://glebbahmutov.com/blog/first-vue-component-test/)
|
||||
|
||||
## Test adapters for other frameworks
|
||||
|
||||
- [@cypress/react](https://github.com/cypress-io/@cypress/react)
|
||||
- [cypress-cycle-unit-test](https://github.com/bahmutov/cypress-cycle-unit-test)
|
||||
- [cypress-svelte-unit-test](https://github.com/bahmutov/cypress-svelte-unit-test)
|
||||
- [@cypress/angular](https://github.com/bahmutov/@cypress/angular)
|
||||
- [cypress-hyperapp-unit-test](https://github.com/bahmutov/cypress-hyperapp-unit-test)
|
||||
- [cypress-angularjs-unit-test](https://github.com/bahmutov/cypress-angularjs-unit-test)
|
||||
|
||||
## Maintainers
|
||||
|
||||
The Cypress.io Component Testing Team
|
||||
|
||||
- [Jessica Sachs](https://github.com/jessicasachs) (Current Maintainer, [Vue Test Utils](https://github.com/vuejs/vue-test-utils) Maintainer)
|
||||
- [Lachlan Miller](https://github.com/lmiller1990) (Current Maintainer, [Vue Test Utils](https://github.com/vuejs/vue-test-utils) Maintainer)
|
||||
- [Bart Ledoux](https://github.com/elevatebart) (Current Maintainer, [Vue Styleguidist](https://github.com/vue-styleguidist/vue-styleguidist) Maintainer)
|
||||
- [Gleb Bahmutov](https://github.com/bahmutov) (Original Author, Current Maintainer of [@cypress/react](https://github.com//cypress-io/@cypress/react))
|
||||
|
||||
Support: if you find any problems with this module, [tweet](https://twitter.com/_jessicasachs) / [open issue](https://github.com/cypress-io/cypress/issues) on Github
|
||||
|
||||
## License
|
||||
|
||||
[](https://github.com/cypress-io/cypress/blob/master/LICENSE)
|
||||
|
||||
This project is licensed under the terms of the [MIT license](/LICENSE).
|
||||
|
||||
## Changelog
|
||||
|
||||
[Changelog](./CHANGELOG.md)
|
||||
|
||||
## Badges
|
||||
|
||||
Let the world know your project is using Cypress.io to test with this cool badge
|
||||
|
||||
[](https://www.cypress.io/)
|
||||
|
||||
[npm-icon]: https://nodei.co/npm/@cypress/vue.svg?downloads=true
|
||||
[npm-url]: https://npmjs.org/package/@cypress/vue
|
||||
[semantic-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
|
||||
[semantic-url]: https://github.com/semantic-release/semantic-release
|
||||
[cypress-badge]: https://img.shields.io/badge/cypress.io-tests-green.svg?style=flat-square
|
||||
[renovate-badge]: https://img.shields.io/badge/renovate-app-blue.svg
|
||||
[renovate-app]: https://renovateapp.com/
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"plugins": [
|
||||
"@babel/plugin-transform-modules-commonjs",
|
||||
[
|
||||
"babel-plugin-istanbul",
|
||||
{
|
||||
"extension": [
|
||||
".js",
|
||||
".vue"
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.4 MiB |
@@ -0,0 +1,35 @@
|
||||
# Manual Installation
|
||||
|
||||
> _Not Recommended_: All of this is done automatically with Vue CLI
|
||||
|
||||
1. Install `cypress` and `@cypress/vue`
|
||||
|
||||
```sh
|
||||
npm install -D cypress @cypress/vue
|
||||
```
|
||||
|
||||
2. Include this plugin from your project's `cypress/plugin/index.js` file
|
||||
|
||||
```js
|
||||
const preprocessor = require('@cypress/vue/dist/plugins/webpack')
|
||||
module.exports = (on, config) => {
|
||||
preprocessor(on, config)
|
||||
// IMPORTANT return the config object
|
||||
return config
|
||||
}
|
||||
```
|
||||
|
||||
3. Include the support file from your project's `cypress/support/index.js` file
|
||||
|
||||
```js
|
||||
import '@cypress/vue/dist/support'
|
||||
```
|
||||
|
||||
4. ⚠️ Turn the experimental component support on in your `cypress.json`. You can also specify where component spec files are located. For exampled to have them located in `src` folder use:
|
||||
|
||||
```json
|
||||
{
|
||||
"experimentalComponentTesting": true,
|
||||
"componentFolder": "src"
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,60 @@
|
||||
# styles
|
||||
|
||||
If you component imports its own style, the style should be applied during the Cypress test. But sometimes you need more power.
|
||||
|
||||
You can 2 options to load additional styles:
|
||||
|
||||
```js
|
||||
const myComponent = {
|
||||
template: '<button class="orange"><slot/></button>'
|
||||
}
|
||||
|
||||
mount(myComponent, {
|
||||
style: string, // load inline style CSS
|
||||
stylesheets: string | string[] // load external stylesheets
|
||||
})
|
||||
```
|
||||
|
||||
## Inline styles
|
||||
|
||||
You can add individual style to the mounted component by passing its text as an option
|
||||
|
||||
```js
|
||||
it('can be passed as an option', () => {
|
||||
const style = `
|
||||
.component-button {
|
||||
display: inline-flex;
|
||||
width: 25%;
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
|
||||
.component-button.orange button {
|
||||
background-color: #F5923E;
|
||||
color: white;
|
||||
}
|
||||
`
|
||||
const myComponent = {
|
||||
template: '<button class="orange"><slot/></button>'
|
||||
}
|
||||
|
||||
mount(myComponent, { style })
|
||||
cy.get('.orange button').should(
|
||||
'have.css',
|
||||
'background-color',
|
||||
'rgb(245, 146, 62)',
|
||||
)
|
||||
})
|
||||
```
|
||||
|
||||
## Load external stylesheets
|
||||
|
||||
```js
|
||||
const myComponent = {
|
||||
template: '<button class="orange"><slot/></button>'
|
||||
}
|
||||
mount(myComponent, {
|
||||
stylesheets: [
|
||||
'https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.css',
|
||||
],
|
||||
})
|
||||
```
|
||||
|
After Width: | Height: | Size: 171 KiB |
|
After Width: | Height: | Size: 565 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 918 KiB |
|
After Width: | Height: | Size: 194 KiB |
|
After Width: | Height: | Size: 227 KiB |
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"name": "@cypress/vue2",
|
||||
"version": "0.0.0-development",
|
||||
"description": "Browser-based Component Testing for Vue.js@2 with Cypress.io ✌️🌲",
|
||||
"main": "dist/cypress-vue2.cjs.js",
|
||||
"scripts": {
|
||||
"typecheck": "tsc --noEmit",
|
||||
"build": "rimraf dist && yarn rollup -c rollup.config.js",
|
||||
"postbuild": "node ../../scripts/sync-exported-npm-with-cli.js",
|
||||
"build-prod": "yarn build",
|
||||
"test": "yarn cy:run",
|
||||
"watch": "yarn build --watch --watch.exclude ./dist/**/*",
|
||||
"test-ci": "node ../../scripts/run-ct-examples.js --examplesList=./examples.env"
|
||||
},
|
||||
"dependencies": {
|
||||
"@cypress/mount-utils": "file:../mount-utils",
|
||||
"@vue/test-utils": "^1.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rollup/plugin-commonjs": "^17.1.0",
|
||||
"@rollup/plugin-json": "^4.1.0",
|
||||
"@rollup/plugin-node-resolve": "^11.1.1",
|
||||
"@rollup/plugin-replace": "^2.3.1",
|
||||
"rollup-plugin-typescript2": "^0.29.0",
|
||||
"tslib": "^2.1.0",
|
||||
"typescript": "^4.2.3",
|
||||
"vue": "2.6.12"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"cypress": ">=4.5.0",
|
||||
"vue": "^2.0.0"
|
||||
},
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"src/**/*.js"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"types": "dist",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/cypress-io/cypress.git"
|
||||
},
|
||||
"homepage": "https://github.com/cypress-io/cypress/blob/master/npm/vue/#readme",
|
||||
"bugs": "https://github.com/cypress-io/cypress/issues/new?assignees=&labels=npm%3A%20%40cypress%2Fvue&template=1-bug-report.md&title=",
|
||||
"keywords": [
|
||||
"cypress",
|
||||
"vue"
|
||||
],
|
||||
"unpkg": "dist/cypress-vue2.browser.js",
|
||||
"module": "dist/cypress-vue2.esm-bundler.js",
|
||||
"publishConfig": {
|
||||
"access": "public",
|
||||
"registry": "http://registry.npmjs.org/"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
import ts from 'rollup-plugin-typescript2'
|
||||
import resolve from '@rollup/plugin-node-resolve'
|
||||
import commonjs from '@rollup/plugin-commonjs'
|
||||
import json from '@rollup/plugin-json'
|
||||
import replace from '@rollup/plugin-replace'
|
||||
|
||||
import pkg from './package.json'
|
||||
|
||||
const banner = `
|
||||
/**
|
||||
* ${pkg.name} v${pkg.version}
|
||||
* (c) ${new Date().getFullYear()} Cypress.io
|
||||
* Released under the MIT License
|
||||
*/
|
||||
`
|
||||
|
||||
function createEntry (options) {
|
||||
const {
|
||||
format,
|
||||
input,
|
||||
isBrowser,
|
||||
} = options
|
||||
|
||||
const config = {
|
||||
input,
|
||||
external: [
|
||||
'vue',
|
||||
],
|
||||
plugins: [
|
||||
resolve({ preferBuiltins: true }),
|
||||
commonjs(),
|
||||
json(),
|
||||
/**
|
||||
* Vue 2 core tries to load require.resolve(`./package.json`) in the browser for the
|
||||
* sole purpose of throwing an error about Vue Loader.
|
||||
* Just truncate this for now for simplicity.
|
||||
*/
|
||||
replace({
|
||||
'vueVersion && vueVersion !== packageVersion': JSON.stringify(false),
|
||||
}),
|
||||
],
|
||||
output: {
|
||||
banner,
|
||||
name: 'CypressVue2',
|
||||
file: pkg.unpkg,
|
||||
format,
|
||||
globals: {
|
||||
vue: 'Vue',
|
||||
},
|
||||
exports: 'auto',
|
||||
},
|
||||
}
|
||||
|
||||
if (input === 'src/index.ts') {
|
||||
if (format === 'es') {
|
||||
config.output.file = pkg.module
|
||||
if (isBrowser) {
|
||||
config.output.file = pkg.unpkg
|
||||
}
|
||||
}
|
||||
|
||||
if (format === 'cjs') {
|
||||
config.output.file = pkg.main
|
||||
}
|
||||
} else {
|
||||
config.output.file = input.replace(/^src\//, 'dist/')
|
||||
}
|
||||
|
||||
console.log(`Building ${format}: ${config.output.file}`)
|
||||
|
||||
config.plugins.push(
|
||||
ts({
|
||||
check: format === 'es' && isBrowser,
|
||||
tsconfigOverride: {
|
||||
compilerOptions: {
|
||||
declaration: format === 'es',
|
||||
target: 'es5', // not sure what this should be?
|
||||
module: format === 'cjs' ? 'es2015' : 'esnext',
|
||||
},
|
||||
exclude: ['tests'],
|
||||
},
|
||||
}),
|
||||
)
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
export default [
|
||||
createEntry({ format: 'es', input: 'src/index.ts', isBrowser: false }),
|
||||
createEntry({ format: 'es', input: 'src/index.ts', isBrowser: true }),
|
||||
createEntry({ format: 'iife', input: 'src/index.ts', isBrowser: true }),
|
||||
createEntry({ format: 'cjs', input: 'src/index.ts', isBrowser: false }),
|
||||
]
|
||||
@@ -0,0 +1,395 @@
|
||||
/// <reference types="cypress" />
|
||||
import Vue from 'vue'
|
||||
import {
|
||||
createLocalVue,
|
||||
mount as testUtilsMount,
|
||||
VueTestUtilsConfigOptions,
|
||||
Wrapper,
|
||||
enableAutoDestroy,
|
||||
} from '@vue/test-utils'
|
||||
import {
|
||||
injectStylesBeforeElement,
|
||||
StyleOptions,
|
||||
ROOT_ID,
|
||||
setupHooks,
|
||||
} from '@cypress/mount-utils'
|
||||
|
||||
const defaultOptions: (keyof MountOptions)[] = [
|
||||
'vue',
|
||||
'extensions',
|
||||
]
|
||||
|
||||
const registerGlobalComponents = (Vue, options) => {
|
||||
const globalComponents = Cypress._.get(options, 'extensions.components')
|
||||
|
||||
if (Cypress._.isPlainObject(globalComponents)) {
|
||||
Cypress._.forEach(globalComponents, (component, id) => {
|
||||
Vue.component(id, component)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const installFilters = (Vue, options) => {
|
||||
const filters: VueFilters | undefined = Cypress._.get(
|
||||
options,
|
||||
'extensions.filters',
|
||||
)
|
||||
|
||||
if (Cypress._.isPlainObject(filters)) {
|
||||
Object.keys(filters).forEach((name) => {
|
||||
Vue.filter(name, filters[name])
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const installPlugins = (Vue, options, props) => {
|
||||
const plugins: VuePlugins =
|
||||
Cypress._.get(props, 'plugins') ||
|
||||
Cypress._.get(options, 'extensions.use') ||
|
||||
Cypress._.get(options, 'extensions.plugins') ||
|
||||
[]
|
||||
|
||||
// @ts-ignore
|
||||
plugins.forEach((p) => {
|
||||
Array.isArray(p) ? Vue.use(...p) : Vue.use(p)
|
||||
})
|
||||
}
|
||||
|
||||
const installMixins = (Vue, options) => {
|
||||
const mixins =
|
||||
Cypress._.get(options, 'extensions.mixin') ||
|
||||
Cypress._.get(options, 'extensions.mixins')
|
||||
|
||||
if (Cypress._.isArray(mixins)) {
|
||||
mixins.forEach((mixin) => {
|
||||
Vue.mixin(mixin)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const hasStore = ({ store }: { store: any }) => Boolean(store && store._vm)
|
||||
|
||||
const forEachValue = <T>(obj: Record<string, T>, fn: (value: T, key: string) => void) => {
|
||||
return Object.keys(obj).forEach((key) => fn(obj[key], key))
|
||||
}
|
||||
|
||||
const resetStoreVM = (Vue, { store }) => {
|
||||
// bind store public getters
|
||||
store.getters = {}
|
||||
const wrappedGetters = store._wrappedGetters as Record<string, (store: any) => void>
|
||||
const computed = {}
|
||||
|
||||
forEachValue(wrappedGetters, (fn, key) => {
|
||||
// use computed to leverage its lazy-caching mechanism
|
||||
computed[key] = () => fn(store)
|
||||
Object.defineProperty(store.getters, key, {
|
||||
get: () => store._vm[key],
|
||||
enumerable: true, // for local getters
|
||||
})
|
||||
})
|
||||
|
||||
store._watcherVM = new Vue()
|
||||
store._vm = new Vue({
|
||||
data: {
|
||||
$$state: store._vm._data.$$state,
|
||||
},
|
||||
computed,
|
||||
})
|
||||
|
||||
return store
|
||||
}
|
||||
|
||||
/**
|
||||
* Type for component passed to "mount"
|
||||
*
|
||||
* @interface VueComponent
|
||||
* @example
|
||||
* import Hello from './Hello.vue'
|
||||
* ^^^^^ this type
|
||||
* mount(Hello)
|
||||
*/
|
||||
type VueComponent = Vue.ComponentOptions<any> | Vue.VueConstructor
|
||||
|
||||
/**
|
||||
* Options to pass to the component when creating it, like
|
||||
* props.
|
||||
*
|
||||
* @interface ComponentOptions
|
||||
*/
|
||||
type ComponentOptions = Record<string, unknown>
|
||||
|
||||
// local placeholder types
|
||||
type VueLocalComponents = Record<string, VueComponent>
|
||||
|
||||
type VueFilters = {
|
||||
[key: string]: (value: string) => string
|
||||
}
|
||||
|
||||
type VueMixin = unknown
|
||||
type VueMixins = VueMixin | VueMixin[]
|
||||
|
||||
type VuePluginOptions = unknown
|
||||
type VuePlugin = unknown | [unknown, VuePluginOptions]
|
||||
/**
|
||||
* A single Vue plugin or a list of plugins to register
|
||||
*/
|
||||
type VuePlugins = VuePlugin[]
|
||||
|
||||
/**
|
||||
* Additional Vue services to register while mounting the component, like
|
||||
* local components, plugins, etc.
|
||||
*
|
||||
* @interface MountOptionsExtensions
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
*/
|
||||
interface MountOptionsExtensions {
|
||||
/**
|
||||
* Extra local components
|
||||
*
|
||||
* @memberof MountOptionsExtensions
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
* @example
|
||||
* import Hello from './Hello.vue'
|
||||
* // imagine Hello needs AppComponent
|
||||
* // that it uses in its template like <app-component ... />
|
||||
* // during testing we can replace it with a mock component
|
||||
* const appComponent = ...
|
||||
* const components = {
|
||||
* 'app-component': appComponent
|
||||
* },
|
||||
* mount(Hello, { extensions: { components }})
|
||||
*/
|
||||
components?: VueLocalComponents
|
||||
|
||||
/**
|
||||
* Optional Vue filters to install while mounting the component
|
||||
*
|
||||
* @memberof MountOptionsExtensions
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
* @example
|
||||
* const filters = {
|
||||
* reverse: (s) => s.split('').reverse().join(''),
|
||||
* }
|
||||
* mount(Hello, { extensions: { filters }})
|
||||
*/
|
||||
filters?: VueFilters
|
||||
|
||||
/**
|
||||
* Optional Vue mixin(s) to install when mounting the component
|
||||
*
|
||||
* @memberof MountOptionsExtensions
|
||||
* @alias mixins
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
*/
|
||||
mixin?: VueMixins
|
||||
|
||||
/**
|
||||
* Optional Vue mixin(s) to install when mounting the component
|
||||
*
|
||||
* @memberof MountOptionsExtensions
|
||||
* @alias mixin
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
*/
|
||||
mixins?: VueMixins
|
||||
|
||||
/**
|
||||
* A single plugin or multiple plugins.
|
||||
*
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
* @alias plugins
|
||||
* @memberof MountOptionsExtensions
|
||||
*/
|
||||
use?: VuePlugins
|
||||
|
||||
/**
|
||||
* A single plugin or multiple plugins.
|
||||
*
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
* @alias use
|
||||
* @memberof MountOptionsExtensions
|
||||
*/
|
||||
plugins?: VuePlugins
|
||||
}
|
||||
|
||||
/**
|
||||
* Options controlling how the component is going to be mounted,
|
||||
* including global Vue plugins and extensions.
|
||||
*
|
||||
* @interface MountOptions
|
||||
*/
|
||||
interface MountOptions {
|
||||
/**
|
||||
* Vue instance to use.
|
||||
*
|
||||
* @deprecated
|
||||
* @memberof MountOptions
|
||||
*/
|
||||
vue: unknown
|
||||
|
||||
/**
|
||||
* Extra Vue plugins, mixins, local components to register while
|
||||
* mounting this component
|
||||
*
|
||||
* @memberof MountOptions
|
||||
* @see https://github.com/cypress-io/cypress/tree/master/npm/vue#examples
|
||||
*/
|
||||
extensions: MountOptionsExtensions
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility type for union of options passed to "mount(..., options)"
|
||||
*/
|
||||
type MountOptionsArgument = Partial<ComponentOptions & MountOptions & StyleOptions & VueTestUtilsConfigOptions>
|
||||
|
||||
// when we mount a Vue component, we add it to the global Cypress object
|
||||
// so here we extend the global Cypress namespace and its Cypress interface
|
||||
declare global {
|
||||
// eslint-disable-next-line no-redeclare
|
||||
namespace Cypress {
|
||||
interface Cypress {
|
||||
/**
|
||||
* Mounted Vue instance is available under Cypress.vue
|
||||
* @memberof Cypress
|
||||
* @example
|
||||
* mount(Greeting)
|
||||
* .then(() => {
|
||||
* Cypress.vue.message = 'Hello There'
|
||||
* })
|
||||
* // new message is displayed
|
||||
* cy.contains('Hello There').should('be.visible')
|
||||
*/
|
||||
vue: Vue
|
||||
vueWrapper: Wrapper<Vue>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Direct Vue errors to the top error handler
|
||||
* where they will fail Cypress test
|
||||
* @see https://vuejs.org/v2/api/#errorHandler
|
||||
* @see https://github.com/cypress-io/cypress/issues/7910
|
||||
*/
|
||||
function failTestOnVueError (err, vm, info) {
|
||||
console.error(`Vue error`)
|
||||
console.error(err)
|
||||
console.error('component:', vm)
|
||||
console.error('info:', info)
|
||||
window.top.onerror(err)
|
||||
}
|
||||
|
||||
function registerAutoDestroy ($destroy: () => void) {
|
||||
Cypress.on('test:before:run', () => {
|
||||
$destroy()
|
||||
})
|
||||
}
|
||||
|
||||
enableAutoDestroy(registerAutoDestroy)
|
||||
|
||||
const injectStyles = (options: StyleOptions) => {
|
||||
const el = document.getElementById(ROOT_ID)
|
||||
|
||||
return injectStylesBeforeElement(options, document, el)
|
||||
}
|
||||
|
||||
/**
|
||||
* Mounts a Vue component inside Cypress browser.
|
||||
* @param {object} component imported from Vue file
|
||||
* @example
|
||||
* import Greeting from './Greeting.vue'
|
||||
* import { mount } from '@cypress/vue2'
|
||||
* it('works', () => {
|
||||
* // pass props, additional extensions, etc
|
||||
* mount(Greeting, { ... })
|
||||
* // use any Cypress command to test the component
|
||||
* cy.get('#greeting').should('be.visible')
|
||||
* })
|
||||
*/
|
||||
export const mount = (
|
||||
component: VueComponent,
|
||||
optionsOrProps: MountOptionsArgument = {},
|
||||
) => {
|
||||
const options: Partial<MountOptions> = Cypress._.pick(
|
||||
optionsOrProps,
|
||||
defaultOptions,
|
||||
)
|
||||
const props: Partial<ComponentOptions> = Cypress._.omit(
|
||||
optionsOrProps,
|
||||
defaultOptions,
|
||||
)
|
||||
|
||||
return cy
|
||||
.window({
|
||||
log: false,
|
||||
})
|
||||
.then(() => {
|
||||
const { style, stylesheets, stylesheet, styles, cssFiles, cssFile } = optionsOrProps
|
||||
|
||||
injectStyles({
|
||||
style,
|
||||
stylesheets,
|
||||
stylesheet,
|
||||
styles,
|
||||
cssFiles,
|
||||
cssFile,
|
||||
})
|
||||
})
|
||||
.then((win) => {
|
||||
const localVue = createLocalVue()
|
||||
|
||||
// @ts-ignore
|
||||
win.Vue = localVue
|
||||
localVue.config.errorHandler = failTestOnVueError
|
||||
|
||||
// set global Vue instance:
|
||||
// 1. convenience for debugging in DevTools
|
||||
// 2. some libraries might check for this global
|
||||
// appIframe.contentWindow.Vue = localVue
|
||||
|
||||
// refresh inner Vue instance of Vuex store
|
||||
// @ts-ignore
|
||||
if (hasStore(component)) {
|
||||
// @ts-ignore
|
||||
component.store = resetStoreVM(localVue, component)
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
const document: Document = cy.state('document')
|
||||
|
||||
let el = document.getElementById(ROOT_ID)
|
||||
|
||||
const componentNode = document.createElement('div')
|
||||
|
||||
el.append(componentNode)
|
||||
|
||||
// setup Vue instance
|
||||
installFilters(localVue, options)
|
||||
installMixins(localVue, options)
|
||||
installPlugins(localVue, options, props)
|
||||
registerGlobalComponents(localVue, options)
|
||||
|
||||
props.attachTo = componentNode
|
||||
|
||||
const wrapper = localVue.extend(component as any)
|
||||
|
||||
const VTUWrapper = testUtilsMount(wrapper, { localVue, ...props })
|
||||
|
||||
Cypress.vue = VTUWrapper.vm
|
||||
Cypress.vueWrapper = VTUWrapper
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for mounting a component quickly in test hooks.
|
||||
* @example
|
||||
* import {mountCallback} from '@cypress/vue2'
|
||||
* beforeEach(mountVue(component, options))
|
||||
*/
|
||||
export const mountCallback = (
|
||||
component: VueComponent,
|
||||
options?: MountOptionsArgument,
|
||||
) => {
|
||||
return () => mount(component, options)
|
||||
}
|
||||
|
||||
setupHooks()
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Basic Options */
|
||||
"target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */,
|
||||
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
|
||||
"skipLibCheck": true,
|
||||
"lib": [
|
||||
"es2015",
|
||||
"dom"
|
||||
] /* Specify library files to be included in the compilation: */,
|
||||
"allowJs": true /* Allow javascript files to be compiled. */,
|
||||
// "checkJs": true, /* Report errors in .js files. */
|
||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
||||
"declaration": true /* Generates corresponding '.d.ts' file. */,
|
||||
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
||||
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||
"outDir": "dist" /* Redirect output structure to the directory. */,
|
||||
// "rootDir": "src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||
// "removeComments": true, /* Do not emit comments to output. */
|
||||
// "noEmit": true, /* Do not emit outputs. */
|
||||
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
||||
|
||||
/* Strict Type-Checking Options */
|
||||
"strict": false /* Enable all strict type-checking options. */,
|
||||
"noImplicitAny": false,
|
||||
|
||||
/* Module Resolution Options */
|
||||
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
||||
"baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
||||
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
||||
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||
// "typeRoots": [], /* List of folders to include type definitions from. */
|
||||
"types": [
|
||||
"cypress"
|
||||
] /* Type declaration files to be included in compilation. */,
|
||||
"allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */,
|
||||
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
||||
|
||||
/* Source Map Options */
|
||||
// "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||
// "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||
|
||||
/* Experimental Options */
|
||||
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
||||
"esModuleInterop": true
|
||||
},
|
||||
"include": ["src/**/*.*"],
|
||||
"exclude": ["src/**/*-spec.*"]
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
// A basic webpack configuration
|
||||
// The default for running tests in this project
|
||||
// https://vue-loader.vuejs.org/guide/#manual-setup
|
||||
const VueLoaderPlugin = require('vue-loader/lib/plugin')
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const path = require('path')
|
||||
const pkg = require('package.json')
|
||||
|
||||
module.exports = {
|
||||
mode: 'development',
|
||||
output: {
|
||||
path: path.join(__dirname, 'dist'),
|
||||
filename: 'js/[name].js',
|
||||
publicPath: '/',
|
||||
chunkFilename: 'js/[name].js',
|
||||
},
|
||||
|
||||
resolve: {
|
||||
extensions: ['.js', '.json', '.vue'],
|
||||
alias: {
|
||||
// point at the built file
|
||||
'@cypress/vue2': path.join(__dirname, pkg.main),
|
||||
vue: 'vue/dist/vue.esm.js',
|
||||
},
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
},
|
||||
// this will apply to both plain `.css` files
|
||||
// AND `<style>` blocks in `.vue` files
|
||||
{
|
||||
test: /\.css$/,
|
||||
use: ['vue-style-loader', 'css-loader'],
|
||||
},
|
||||
// https://github.com/intlify/vue-i18n-loader
|
||||
{
|
||||
resourceQuery: /blockType=i18n/,
|
||||
type: 'javascript/auto',
|
||||
loader: '@intlify/vue-i18n-loader',
|
||||
},
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
// make sure to include the plugin for the magic
|
||||
new VueLoaderPlugin(),
|
||||
],
|
||||
}
|
||||
@@ -2,10 +2,9 @@
|
||||
/// <reference path="../support/e2e.ts" />
|
||||
import type { ProjectFixtureDir } from '@tooling/system-tests/lib/fixtureDirs'
|
||||
|
||||
const PROJECTS: ProjectFixtureDir[] = ['nuxtjs2']
|
||||
const PROJECTS: ProjectFixtureDir[] = ['nuxtjs2', 'vuecli4-vue2']
|
||||
|
||||
// Add to this list to focus on a particular permutation
|
||||
// TODO: run vuecli4-vue2 tests once cypress/vue-2 is bundled
|
||||
const ONLY_PROJECTS: ProjectFixtureDir[] = []
|
||||
|
||||
for (const project of PROJECTS) {
|
||||
|
||||
@@ -5,8 +5,7 @@ import type { ProjectFixtureDir } from '@tooling/system-tests/lib/fixtureDirs'
|
||||
const PROJECTS: ProjectFixtureDir[] = ['vuecli4-vue2', 'vuecli4-vue3', 'vuecli5-vue3']
|
||||
|
||||
// Add to this list to focus on a particular permutation
|
||||
// TODO: run vuecli4-vue2 tests once cypress/vue-2 is bundled
|
||||
const ONLY_PROJECTS: ProjectFixtureDir[] = ['vuecli4-vue3', 'vuecli5-vue3']
|
||||
const ONLY_PROJECTS: ProjectFixtureDir[] = ['vuecli4-vue2']
|
||||
|
||||
for (const project of PROJECTS) {
|
||||
if (ONLY_PROJECTS.length && !ONLY_PROJECTS.includes(project)) {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"binary-release": "node ./scripts/binary.js release",
|
||||
"binary-upload": "node ./scripts/binary.js upload",
|
||||
"binary-zip": "node ./scripts/binary.js zip",
|
||||
"build": "lerna run build --stream --no-bail --ignore create-cypress-tests --ignore \"'@packages/{runner}'\" && node ./cli/scripts/post-build.js && lerna run build --stream --scope create-cypress-tests",
|
||||
"build": "lerna run build --scope cypress && lerna run build --stream --no-bail --ignore create-cypress-tests --ignore \"'@packages/{runner}'\" && node ./cli/scripts/post-build.js && lerna run build --stream --scope create-cypress-tests",
|
||||
"build-prod": "lerna run build-prod-ui --stream && lerna run build-prod --stream --ignore create-cypress-tests && node ./cli/scripts/post-build.js && lerna run build-prod --stream --scope create-cypress-tests",
|
||||
"check-node-version": "node scripts/check-node-version.js",
|
||||
"check-terminal": "node scripts/check-terminal.js",
|
||||
|
||||
@@ -23,7 +23,7 @@ describe('packagesToInstall', () => {
|
||||
|
||||
const actual = await ctx.wizard.installDependenciesCommand()
|
||||
|
||||
expect(actual).to.eq(`npm install -D @cypress/vue@^2.0.0 webpack@^4.0.0 @cypress/webpack-dev-server@latest webpack-dev-server@^4.0.0 html-webpack-plugin@^4.0.0`)
|
||||
expect(actual).to.eq(`npm install -D @cypress/vue2@^1.0.0 webpack@^4.0.0 @cypress/webpack-dev-server@latest webpack-dev-server@^4.0.0 html-webpack-plugin@^4.0.0`)
|
||||
})
|
||||
|
||||
it('vueclivue3-unconfigured', async () => {
|
||||
@@ -95,7 +95,7 @@ describe('packagesToInstall', () => {
|
||||
|
||||
const actual = await ctx.wizard.installDependenciesCommand()
|
||||
|
||||
expect(actual).to.eq('npm install -D @cypress/vue@^2.0.0 webpack@^4.0.0 @cypress/webpack-dev-server@latest webpack-dev-server@^4.0.0 html-webpack-plugin@^4.0.0')
|
||||
expect(actual).to.eq('npm install -D @cypress/vue2@^1.0.0 webpack@^4.0.0 @cypress/webpack-dev-server@latest webpack-dev-server@^4.0.0 html-webpack-plugin@^4.0.0')
|
||||
})
|
||||
|
||||
it('pristine-with-e2e-testing-and-storybook', async () => {
|
||||
|
||||
@@ -8,17 +8,25 @@ We will also attempt to scaffold a configuration file for projects using React a
|
||||
|
||||
### Supported Frameworks and Libraries
|
||||
|
||||
| Name | Tool Version | Dev Server | Dev Server Version | Library Version (s) | Component Adaptor Version | Example Project
|
||||
| --- | ---- | ---- | --- | ---- | ---- | --- |
|
||||
| Create React App | 5.x | Webpack | 5.x | React 16, 17 | `@cypress/react@latest` | [TODO]
|
||||
| Create React App | 4.x | Webpack | 4.x | React 16, React 17 | `@cypress/react@latest` | [Link](../../system-tests/projects/create-react-app-configured)
|
||||
| React | - | Vite | 2.x | React 16, React 17 | `@cypress/react@latest` | [Link](../../system-tests/projects/react-vite-ts-configured)
|
||||
| Vue | - | Vite | 2.x | Vue 3 | `@cypress/vue@^3.0.0` | [Link](../../system-tests/projects/vue3-vite-ts-configured)
|
||||
| Vue CLI | 4.x | Webpack | 4.x | Vue 2 | `@cypress/vue@2.0.4` | [Link](../../system-tests/projects/vueclivue2-configured)
|
||||
| Vue CLI | 4.x | Webpack | 4.x | Vue 3 | `@cypress/vue@latest` | [Link](../../system-tests/projects/vueclivue3-configured)
|
||||
| Vue CLI | 5.x | Webpack | 5.x | Vue 2 | `@cypress/vue@^2.0.0` | Covered by other Vue CLI test projects.
|
||||
| Vue CLI | 5.x | Webpack | 5.x | Vue 3 | `@cypress/vue@^3.0.0` | [Link](../../system-tests/projects/vuecli5vue3-configured)
|
||||
| Nuxt.js | 2.x | Webpack | 4.x, 5.x | Vue 2 | `@cypress/vue@2.0.4` | [Link](../../system-tests/projects/pristine-nuxtjs-vue2-configured)
|
||||
| Name | Version | Dev Server | Version | Library | Component Adaptor | Example Project |
|
||||
| ---------------- | ------- | ---------- | -------- | ------------ | ----------------------- | ------------------------------------------------------------------- |
|
||||
| Create React App | 5.x | Webpack | 5.x | React 16, 17 | `@cypress/react@latest` | [TODO] |
|
||||
| Create React App | 4.x | Webpack | 4.x | React 16, 17 | `@cypress/react@latest` | [Link](../../system-tests/projects/create-react-app-configured) |
|
||||
| React | - | Vite | 2.x | React 16, 17 | `@cypress/react@latest` | [Link](../../system-tests/projects/react-vite-ts-configured) |
|
||||
| Vue | - | Vite | 2.x | Vue 3 | `@cypress/vue@latest` | [Link](../../system-tests/projects/vue3-vite-ts-configured) |
|
||||
| Vue CLI | 4.x | Webpack | 4.x | Vue 2 | `@cypress/vue2@latest` | [Link](../../system-tests/projects/vueclivue2-configured) |
|
||||
| Vue CLI | 4.x | Webpack | 4.x | Vue 3 | `@cypress/vue@latest` | [Link](../../system-tests/projects/vueclivue3-configured) |
|
||||
| Vue CLI | 5.x | Webpack | 5.x | Vue 2 | `@cypress/vue2@latest` | Covered by other Vue CLI test projects. |
|
||||
| Vue CLI | 5.x | Webpack | 5.x | Vue 3 | `@cypress/vue@latest` | [Link](../../system-tests/projects/vuecli5vue3-configured) |
|
||||
| Nuxt.js | 2.x | Webpack | 4.x, 5.x | Vue 2 | `@cypress/vue2@latest` | [Link](../../system-tests/projects/pristine-nuxtjs-vue2-configured) |
|
||||
|
||||
### TODO
|
||||
|
||||
These should be supported but currently are not configured.
|
||||
|
||||
| Name | Version | Dev Server | Version | Library | Component Adaptor | Example Project |
|
||||
| ---------------- | ---------- | ---------- | -------- | ------------ | ----------------------- | ------------------------------------------------------------------- |
|
||||
| Next.js | 11.x, 12.x | Webpack | 4.x, 5.x | React 16, 17 | `@cypress/react@latest` | [Link](../../system-tests/projects/nextjs-configured) |
|
||||
|
||||
### Adding More Projects
|
||||
|
||||
@@ -26,15 +34,7 @@ The process for adding a new library/framework/bundler is as follows:
|
||||
|
||||
1. Add your framework in [`src/frameworks.ts`](./src/frameworks.ts).
|
||||
2. Any new dependencies are declared in [`src/constants.ts`](./src/constants.ts). Don't forget to add a description.
|
||||
3. Ensure your project has the correct library and bundler detected with a test in [`test/integration/detect.ts`](./test/integration/scaffold-config.spec.ts)
|
||||
3. Add a new project with the correct `cypress.config.js` and `package.json` to [system-tests/projects](../../system-tests/projects). It should be `<name>-configured`, which is a working example with some specs. Ensure it will run on CI by adding it to [`component_testing_spec.ts`](../../system-tests/test/component_testing_spec.ts).
|
||||
3. Ensure your project has the correct library and bundler detected with a test in [`test/unit/detect.spec.ts`](./test/unit/detect.spec.ts).
|
||||
3. Add a new project with the correct `cypress.config.js` and `package.json` to [system-tests/projects](../../system-tests/projects). It should be `<name>-configured`, which is a working example with some specs. Ensure it will run on CI by adding it to [`component_testing_spec.ts`](../../system-tests/test/component_testing_spec.ts).
|
||||
4. Add another project called `<name>-unconfigured`, which represents the project prior to having Cypress added. This will be used in step 5.
|
||||
5. Add a test to [`scaffold-component-testing.cy.ts`](../launchpad/cypress/e2e/scaffold-component-testing.cy.ts) to ensure your project has the correct `cypress.config.js` generated. Use an existing test as a template.
|
||||
|
||||
### TODO
|
||||
|
||||
These should be supported but currently are not configured.
|
||||
|
||||
| Name | Tool Version | Dev Server | Dev Server Version | Library Version (s) | Component Adaptor Version | Example Project
|
||||
| --- | ---- | ---- | --- | ---- | ---- | --- |
|
||||
| Next.js | 11.x, 12.x | Webpack | 4.x, 5.x | React 16, 17 | `@cypress/react@latest` | [Link](../../system-tests/projects/nextjs-configured)
|
||||
@@ -25,10 +25,10 @@ export const STORYBOOK_DEPS = [
|
||||
|
||||
export const CYPRESS_VUE_2 = {
|
||||
type: 'cypress-adapter',
|
||||
name: 'Cypress Vue',
|
||||
package: '@cypress/vue',
|
||||
installer: '@cypress/vue@^2.0.0',
|
||||
description: 'Allows Cypress to mount each Vue component using <span class="text-purple-400">cy.mount()</span>',
|
||||
name: 'Cypress Vue2',
|
||||
package: '@cypress/vue2',
|
||||
installer: '@cypress/vue2@^1.0.0',
|
||||
description: 'Allows Cypress to mount each Vue@2 component using <span class="text-purple-400">cy.mount()</span>',
|
||||
} as const
|
||||
|
||||
export const CYPRESS_VUE_3 = {
|
||||
@@ -36,7 +36,7 @@ export const CYPRESS_VUE_3 = {
|
||||
name: 'Cypress Vue',
|
||||
package: '@cypress/vue',
|
||||
installer: '@cypress/vue@^3.0.0',
|
||||
description: 'Allows Cypress to mount each Vue component using <span class="text-purple-400">cy.mount()</span>',
|
||||
description: 'Allows Cypress to mount each Vue@3 component using <span class="text-purple-400">cy.mount()</span>',
|
||||
} as const
|
||||
|
||||
export const WEBPACK_DEV_SERVER_4 = {
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
component: {
|
||||
devServer: {
|
||||
framework: 'vue-cli',
|
||||
bundler: 'webpack'
|
||||
}
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<title>Components App</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="__cy_root"></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,16 @@
|
||||
import { mount } from 'cypress/vue2'
|
||||
import HelloWorld from './HelloWorld.vue'
|
||||
|
||||
describe('<Logo />', () => {
|
||||
it('contains the default slot in its h1', () => {
|
||||
const slotContent = 'Welcome to testing in Vue CLI'
|
||||
|
||||
mount(HelloWorld, {
|
||||
propsData: {
|
||||
msg: slotContent,
|
||||
},
|
||||
})
|
||||
|
||||
cy.contains('h1', slotContent)
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,56 @@
|
||||
<template>
|
||||
<div class="hello">
|
||||
<h1>{{ msg }}</h1>
|
||||
<p>
|
||||
For a guide and recipes on how to configure / customize this project,<br>
|
||||
check out the
|
||||
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
|
||||
</p>
|
||||
<h3>Installed CLI Plugins</h3>
|
||||
<ul>
|
||||
</ul>
|
||||
<h3>Essential Links</h3>
|
||||
<ul>
|
||||
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
|
||||
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
|
||||
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
|
||||
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
|
||||
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
|
||||
</ul>
|
||||
<h3>Ecosystem</h3>
|
||||
<ul>
|
||||
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
|
||||
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
|
||||
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
|
||||
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
|
||||
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'HelloWorld',
|
||||
props: {
|
||||
msg: String
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
<style scoped>
|
||||
h3 {
|
||||
margin: 40px 0 0;
|
||||
}
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
li {
|
||||
display: inline-block;
|
||||
margin: 0 10px;
|
||||
}
|
||||
a {
|
||||
color: #42b983;
|
||||
}
|
||||
</style>
|
||||
@@ -6,5 +6,5 @@
|
||||
"@vue/cli-service": "~4.5.17",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
},
|
||||
"projectFixtureDirectory": "vue-cli"
|
||||
"projectFixtureDirectory": "vue2-cli"
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"vue": "^2.6.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@cypress/vue": "^2.0.0",
|
||||
"@cypress/vue2": "file:../../../npm/vue2",
|
||||
"@cypress/webpack-dev-server": "^1.0.0",
|
||||
"@vue/cli-service": "~4.5.15",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { mount } from '@cypress/vue'
|
||||
import { mount } from 'cypress/vue2'
|
||||
import HelloWorld from './HelloWorld.vue'
|
||||
|
||||
describe('<Logo />', () => {
|
||||
|
||||
@@ -2,6 +2,15 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@achrinza/node-ipc@9.2.2":
|
||||
version "9.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz#ae1b5d3d6a9362034eea60c8d946b93893c2e4ec"
|
||||
integrity sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==
|
||||
dependencies:
|
||||
"@node-ipc/js-queue" "2.0.3"
|
||||
event-pubsub "4.3.0"
|
||||
js-message "1.0.7"
|
||||
|
||||
"@babel/code-frame@^7.0.0":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
|
||||
@@ -15,33 +24,30 @@
|
||||
integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
|
||||
|
||||
"@babel/highlight@^7.16.7":
|
||||
version "7.16.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88"
|
||||
integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==
|
||||
version "7.17.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3"
|
||||
integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.16.7"
|
||||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@cypress/mount-utils@1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@cypress/mount-utils/-/mount-utils-1.0.2.tgz#afbc4f8c350b7cd86edc5ad0db0cbe1e0181edc8"
|
||||
integrity sha512-Fn3fdTiyayHoy8Ol0RSu4MlBH2maQ2ZEXeEVKl/zHHXEQpld5HX3vdNLhK5YLij8cLynA4DxOT/nO9iEnIiOXw==
|
||||
"@cypress/mount-utils@file:../../../npm/mount-utils":
|
||||
version "0.0.0-development"
|
||||
|
||||
"@cypress/vue@^2.0.0":
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@cypress/vue/-/vue-2.2.4.tgz#a8d53e2b36816aae6ee3d7248b9e2e4b07d443e3"
|
||||
integrity sha512-ve6aPUj1UHZRpfU9U/NKfsVgzCYVR2CeTdN/knhdWs8sbW5ERgbD1EkEdJ9+VCdqXcIoqRWdMQovnJUmJW6FLA==
|
||||
"@cypress/vue2@file:../../../npm/vue2":
|
||||
version "0.0.0-development"
|
||||
dependencies:
|
||||
"@cypress/mount-utils" "1.0.2"
|
||||
"@cypress/mount-utils" "file:../../../../../.cache/yarn/v6/npm-@cypress-vue2-0.0.0-development-fae1627f-469d-4c0e-883d-8dd054557026-1649705521580/node_modules/@cypress/mount-utils"
|
||||
"@vue/test-utils" "^1.1.3"
|
||||
|
||||
"@cypress/webpack-dev-server@^1.0.0":
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@cypress/webpack-dev-server/-/webpack-dev-server-1.8.1.tgz#5e37e15082b84a1e681198acd4a8473c10c95d9f"
|
||||
integrity sha512-gE+VIcRH/vmIQdzSRAz/xCkzcOxZKL4hK2IMWGqRG34Vm51HROXm4mgOkXdCmXacEoO16cWJawZTqSVVsSTH3w==
|
||||
version "1.8.4"
|
||||
resolved "https://registry.yarnpkg.com/@cypress/webpack-dev-server/-/webpack-dev-server-1.8.4.tgz#00c1d7510dccfcaef6ec69f70342d011bbdefc19"
|
||||
integrity sha512-kDg57ozD4vzIwHa0FhT44IoMKqsgFy7WV5SbBjWLBPdoOhuCdf22gy8VukaxwYqh+MFKxqVJ7hqVLErmMgpAYA==
|
||||
dependencies:
|
||||
debug "^4.3.2"
|
||||
lodash "^4.17.21"
|
||||
semver "^7.3.4"
|
||||
webpack-merge "^5.4.0"
|
||||
|
||||
@@ -94,6 +100,13 @@
|
||||
call-me-maybe "^1.0.1"
|
||||
glob-to-regexp "^0.3.0"
|
||||
|
||||
"@node-ipc/js-queue@2.0.3":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz#ac7fe33d766fa53e233ef8fedaf3443a01c5a4cd"
|
||||
integrity sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==
|
||||
dependencies:
|
||||
easy-stack "1.0.1"
|
||||
|
||||
"@nodelib/fs.stat@^1.1.2":
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
|
||||
@@ -172,9 +185,9 @@
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/json-schema@^7.0.5":
|
||||
version "7.0.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
|
||||
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
|
||||
version "7.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
|
||||
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
|
||||
|
||||
"@types/mime@^1":
|
||||
version "1.3.2"
|
||||
@@ -192,9 +205,9 @@
|
||||
integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
|
||||
|
||||
"@types/node@*":
|
||||
version "17.0.19"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.19.tgz#726171367f404bfbe8512ba608a09ebad810c7e6"
|
||||
integrity sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==
|
||||
version "17.0.23"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da"
|
||||
integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==
|
||||
|
||||
"@types/normalize-package-data@^2.4.0":
|
||||
version "2.4.1"
|
||||
@@ -235,9 +248,9 @@
|
||||
integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==
|
||||
|
||||
"@types/uglify-js@*":
|
||||
version "3.13.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea"
|
||||
integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==
|
||||
version "3.13.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.2.tgz#1044c1713fb81cb1ceef29ad8a9ee1ce08d690ef"
|
||||
integrity sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q==
|
||||
dependencies:
|
||||
source-map "^0.6.1"
|
||||
|
||||
@@ -273,27 +286,27 @@
|
||||
anymatch "^3.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
"@vue/cli-overlay@^4.5.15":
|
||||
version "4.5.15"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.5.15.tgz#0700fd6bad39336d4189ba3ff7d25e638e818c9c"
|
||||
integrity sha512-0zI0kANAVmjFO2LWGUIzdGPMeE3+9k+KeRDXsUqB30YfRF7abjfiiRPq5BU9pOzlJbVdpRkisschBrvdJqDuDg==
|
||||
"@vue/cli-overlay@^4.5.17":
|
||||
version "4.5.17"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.5.17.tgz#4e0e24b7c3b71ff86de86f532821fd3abb48d10c"
|
||||
integrity sha512-QKKp66VbMg+X8Qh0wgXSwgxLfxY7EIkZkV6bZ6nFqBx8xtaJQVDbTL+4zcUPPA6nygbIcQ6gvTinNEqIqX6FUQ==
|
||||
|
||||
"@vue/cli-plugin-router@^4.5.15":
|
||||
version "4.5.15"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.15.tgz#1e75c8c89df42c694f143b9f1028de3cf5d61e1e"
|
||||
integrity sha512-q7Y6kP9b3k55Ca2j59xJ7XPA6x+iSRB+N4ac0ZbcL1TbInVQ4j5wCzyE+uqid40hLy4fUdlpl4X9fHJEwuVxPA==
|
||||
"@vue/cli-plugin-router@^4.5.17":
|
||||
version "4.5.17"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.17.tgz#9de189a7a8740817cde2a4e57aade14552ff68c3"
|
||||
integrity sha512-9r9CSwqv2+39XHQPDZJ0uaTtTP7oe0Gx17m7kBhHG3FA7R7AOSk2aVzhHZmDRhzlOxjx9kQSvrOSMfUG0kV4dQ==
|
||||
dependencies:
|
||||
"@vue/cli-shared-utils" "^4.5.15"
|
||||
"@vue/cli-shared-utils" "^4.5.17"
|
||||
|
||||
"@vue/cli-plugin-vuex@^4.5.15":
|
||||
version "4.5.15"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.15.tgz#466c1f02777d02fef53a9bb49a36cc3a3bcfec4e"
|
||||
integrity sha512-fqap+4HN+w+InDxlA3hZTOGE0tzBTgXhKLoDydhywqgmhQ1D9JA6Feh94ze6tG8DsWX58/ujYUqA8jAz17FJtg==
|
||||
"@vue/cli-plugin-vuex@^4.5.17":
|
||||
version "4.5.17"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.17.tgz#eb6f597c775f3c847bf5a638ad65a0d03c11dcbf"
|
||||
integrity sha512-ck/ju2T2dmPKLWK/5QctNJs9SCb+eSZbbmr8neFkMc7GlbXw6qLWw5v3Vpd4KevdQA8QuQOA1pjUmzpCiU/mYQ==
|
||||
|
||||
"@vue/cli-service@~4.5.15":
|
||||
version "4.5.15"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.5.15.tgz#0e9a186d51550027d0e68e95042077eb4d115b45"
|
||||
integrity sha512-sFWnLYVCn4zRfu45IcsIE9eXM0YpDV3S11vlM2/DVbIPAGoYo5ySpSof6aHcIvkeGsIsrHFpPHzNvDZ/efs7jA==
|
||||
version "4.5.17"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.5.17.tgz#6f796056363b70b69065d95815ac170b7772d0c6"
|
||||
integrity sha512-MqfkRYIcIUACe3nYlzNrYstJTWRXHlIqh6JCkbWbdnXWN+IfaVdlG8zw5Q0DVcSdGvkevUW7zB4UhtZB4uyAcA==
|
||||
dependencies:
|
||||
"@intervolga/optimize-cssnano-plugin" "^1.0.5"
|
||||
"@soda/friendly-errors-webpack-plugin" "^1.7.1"
|
||||
@@ -301,10 +314,10 @@
|
||||
"@types/minimist" "^1.2.0"
|
||||
"@types/webpack" "^4.0.0"
|
||||
"@types/webpack-dev-server" "^3.11.0"
|
||||
"@vue/cli-overlay" "^4.5.15"
|
||||
"@vue/cli-plugin-router" "^4.5.15"
|
||||
"@vue/cli-plugin-vuex" "^4.5.15"
|
||||
"@vue/cli-shared-utils" "^4.5.15"
|
||||
"@vue/cli-overlay" "^4.5.17"
|
||||
"@vue/cli-plugin-router" "^4.5.17"
|
||||
"@vue/cli-plugin-vuex" "^4.5.17"
|
||||
"@vue/cli-shared-utils" "^4.5.17"
|
||||
"@vue/component-compiler-utils" "^3.1.2"
|
||||
"@vue/preload-webpack-plugin" "^1.1.0"
|
||||
"@vue/web-component-wrapper" "^1.2.0"
|
||||
@@ -353,17 +366,17 @@
|
||||
optionalDependencies:
|
||||
vue-loader-v16 "npm:vue-loader@^16.1.0"
|
||||
|
||||
"@vue/cli-shared-utils@^4.5.15":
|
||||
version "4.5.15"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.15.tgz#dba3858165dbe3465755f256a4890e69084532d6"
|
||||
integrity sha512-SKaej9hHzzjKSOw1NlFmc6BSE0vcqUQMQiv1cxQ2DhVyy4QxZXBmzmiLBUBe+hYZZs1neXW7n//udeN9bCAY+Q==
|
||||
"@vue/cli-shared-utils@^4.5.17":
|
||||
version "4.5.17"
|
||||
resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.17.tgz#bb4aac8b816036cf5c0adf3af3cc1cb9c425501e"
|
||||
integrity sha512-VoFNdxvTW4vZu3ne+j1Mf7mU99J2SAoRVn9XPrsouTUUJablglM8DASk7Ixhsh6ymyL/W9EADQFR6Pgj8Ujjuw==
|
||||
dependencies:
|
||||
"@achrinza/node-ipc" "9.2.2"
|
||||
"@hapi/joi" "^15.0.1"
|
||||
chalk "^2.4.2"
|
||||
execa "^1.0.0"
|
||||
launch-editor "^2.2.1"
|
||||
lru-cache "^5.1.1"
|
||||
node-ipc "^9.1.1"
|
||||
open "^6.3.0"
|
||||
ora "^3.4.0"
|
||||
read-pkg "^5.1.1"
|
||||
@@ -635,9 +648,9 @@ ansi-regex@^2.0.0:
|
||||
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
|
||||
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
|
||||
integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
|
||||
|
||||
ansi-regex@^5.0.1:
|
||||
version "5.0.1"
|
||||
@@ -967,7 +980,7 @@ braces@^2.3.1, braces@^2.3.2:
|
||||
split-string "^3.0.2"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
braces@^3.0.1, braces@~3.0.2:
|
||||
braces@^3.0.2, braces@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||
@@ -1041,12 +1054,12 @@ browserify-zlib@^0.2.0:
|
||||
pako "~1.0.5"
|
||||
|
||||
browserslist@^4.0.0, browserslist@^4.12.0:
|
||||
version "4.19.3"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383"
|
||||
integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==
|
||||
version "4.20.2"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88"
|
||||
integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30001312"
|
||||
electron-to-chromium "^1.4.71"
|
||||
caniuse-lite "^1.0.30001317"
|
||||
electron-to-chromium "^1.4.84"
|
||||
escalade "^3.1.1"
|
||||
node-releases "^2.0.2"
|
||||
picocolors "^1.0.0"
|
||||
@@ -1198,10 +1211,10 @@ caniuse-api@^3.0.0:
|
||||
lodash.memoize "^4.1.2"
|
||||
lodash.uniq "^4.5.0"
|
||||
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001312:
|
||||
version "1.0.30001312"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f"
|
||||
integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001317:
|
||||
version "1.0.30001327"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz#c1546d7d7bb66506f0ccdad6a7d07fc6d668c858"
|
||||
integrity sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==
|
||||
|
||||
case-sensitive-paths-webpack-plugin@^2.3.0:
|
||||
version "2.4.0"
|
||||
@@ -1519,7 +1532,7 @@ condense-newlines@^0.2.1:
|
||||
is-whitespace "^0.3.0"
|
||||
kind-of "^3.0.2"
|
||||
|
||||
config-chain@^1.1.12:
|
||||
config-chain@^1.1.13:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
|
||||
integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
|
||||
@@ -1742,13 +1755,13 @@ css-select@^2.0.0:
|
||||
nth-check "^1.0.2"
|
||||
|
||||
css-select@^4.1.3:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd"
|
||||
integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b"
|
||||
integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==
|
||||
dependencies:
|
||||
boolbase "^1.0.0"
|
||||
css-what "^5.1.0"
|
||||
domhandler "^4.3.0"
|
||||
css-what "^6.0.1"
|
||||
domhandler "^4.3.1"
|
||||
domutils "^2.8.0"
|
||||
nth-check "^2.0.1"
|
||||
|
||||
@@ -1773,10 +1786,10 @@ css-what@^3.2.1:
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
|
||||
integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
|
||||
|
||||
css-what@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe"
|
||||
integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==
|
||||
css-what@^6.0.1:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
|
||||
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
|
||||
|
||||
cssesc@^3.0.0:
|
||||
version "3.0.0"
|
||||
@@ -1882,7 +1895,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.1.1, debug@^3.2.6:
|
||||
debug@^3.1.1, debug@^3.2.7:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
|
||||
@@ -1890,9 +1903,9 @@ debug@^3.1.1, debug@^3.2.6:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.1.0, debug@^4.1.1, debug@^4.3.2:
|
||||
version "4.3.3"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
|
||||
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
@@ -2072,9 +2085,9 @@ dom-serializer@0:
|
||||
entities "^2.0.0"
|
||||
|
||||
dom-serializer@^1.0.1:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91"
|
||||
integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30"
|
||||
integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==
|
||||
dependencies:
|
||||
domelementtype "^2.0.1"
|
||||
domhandler "^4.2.0"
|
||||
@@ -2091,14 +2104,14 @@ domelementtype@1:
|
||||
integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
|
||||
|
||||
domelementtype@^2.0.1, domelementtype@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
|
||||
integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
|
||||
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
|
||||
|
||||
domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626"
|
||||
integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==
|
||||
domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c"
|
||||
integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==
|
||||
dependencies:
|
||||
domelementtype "^2.2.0"
|
||||
|
||||
@@ -2151,7 +2164,7 @@ duplexify@^3.4.2, duplexify@^3.6.0:
|
||||
readable-stream "^2.0.0"
|
||||
stream-shift "^1.0.0"
|
||||
|
||||
easy-stack@^1.0.1:
|
||||
easy-stack@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066"
|
||||
integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==
|
||||
@@ -2184,10 +2197,10 @@ ejs@^2.6.1:
|
||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
|
||||
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
||||
|
||||
electron-to-chromium@^1.4.71:
|
||||
version "1.4.71"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6"
|
||||
integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==
|
||||
electron-to-chromium@^1.4.84:
|
||||
version "1.4.106"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz#e7a3bfa9d745dd9b9e597616cb17283cc349781a"
|
||||
integrity sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==
|
||||
|
||||
elliptic@^6.5.3:
|
||||
version "6.5.4"
|
||||
@@ -2270,9 +2283,9 @@ error-stack-parser@^2.0.6:
|
||||
stackframe "^1.1.1"
|
||||
|
||||
es-abstract@^1.17.2, es-abstract@^1.19.1:
|
||||
version "1.19.1"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3"
|
||||
integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==
|
||||
version "1.19.2"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f"
|
||||
integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
es-to-primitive "^1.2.1"
|
||||
@@ -2280,15 +2293,15 @@ es-abstract@^1.17.2, es-abstract@^1.19.1:
|
||||
get-intrinsic "^1.1.1"
|
||||
get-symbol-description "^1.0.0"
|
||||
has "^1.0.3"
|
||||
has-symbols "^1.0.2"
|
||||
has-symbols "^1.0.3"
|
||||
internal-slot "^1.0.3"
|
||||
is-callable "^1.2.4"
|
||||
is-negative-zero "^2.0.1"
|
||||
is-negative-zero "^2.0.2"
|
||||
is-regex "^1.1.4"
|
||||
is-shared-array-buffer "^1.0.1"
|
||||
is-string "^1.0.7"
|
||||
is-weakref "^1.0.1"
|
||||
object-inspect "^1.11.0"
|
||||
is-weakref "^1.0.2"
|
||||
object-inspect "^1.12.0"
|
||||
object-keys "^1.1.1"
|
||||
object.assign "^4.1.2"
|
||||
string.prototype.trimend "^1.0.4"
|
||||
@@ -2369,7 +2382,7 @@ events@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
|
||||
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
|
||||
|
||||
eventsource@^1.0.7:
|
||||
eventsource@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf"
|
||||
integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==
|
||||
@@ -2528,7 +2541,7 @@ fast-json-stable-stringify@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||
|
||||
faye-websocket@^0.11.3:
|
||||
faye-websocket@^0.11.3, faye-websocket@^0.11.4:
|
||||
version "0.11.4"
|
||||
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
|
||||
integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
|
||||
@@ -2838,9 +2851,9 @@ globby@^9.2.0:
|
||||
slash "^2.0.0"
|
||||
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
||||
version "4.2.9"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
|
||||
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
|
||||
version "4.2.10"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
|
||||
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
|
||||
|
||||
gzip-size@^5.0.0:
|
||||
version "5.1.1"
|
||||
@@ -2883,10 +2896,10 @@ has-flag@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
has-symbols@^1.0.1, has-symbols@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
|
||||
integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
|
||||
has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
|
||||
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
|
||||
|
||||
has-tostringtag@^1.0.0:
|
||||
version "1.0.0"
|
||||
@@ -3082,9 +3095,9 @@ http-errors@~1.6.2:
|
||||
statuses ">= 1.4.0 < 2"
|
||||
|
||||
http-parser-js@>=0.5.1:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5"
|
||||
integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd"
|
||||
integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==
|
||||
|
||||
http-proxy-middleware@0.19.1:
|
||||
version "0.19.1"
|
||||
@@ -3464,15 +3477,15 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
|
||||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-negative-zero@^2.0.1:
|
||||
is-negative-zero@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
|
||||
integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
|
||||
|
||||
is-number-object@^1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
|
||||
integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
|
||||
integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
|
||||
dependencies:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
@@ -3543,9 +3556,11 @@ is-resolvable@^1.0.0:
|
||||
integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
|
||||
|
||||
is-shared-array-buffer@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6"
|
||||
integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
|
||||
integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
|
||||
is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
@@ -3576,7 +3591,7 @@ is-typedarray@~1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||
|
||||
is-weakref@^1.0.1:
|
||||
is-weakref@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
|
||||
integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
|
||||
@@ -3638,11 +3653,11 @@ javascript-stringify@^2.0.1:
|
||||
integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==
|
||||
|
||||
js-beautify@^1.6.12:
|
||||
version "1.14.0"
|
||||
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.0.tgz#2ce790c555d53ce1e3d7363227acf5dc69024c2d"
|
||||
integrity sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ==
|
||||
version "1.14.3"
|
||||
resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.3.tgz#3dd11c949178de7f3bdf3f6f752778d3bed95150"
|
||||
integrity sha512-f1ra8PHtOEu/70EBnmiUlV8nJePS58y9qKjl4JHfYWlFH6bo7ogZBz//FAZp7jDuXtYnGYKymZPlrg2I/9Zo4g==
|
||||
dependencies:
|
||||
config-chain "^1.1.12"
|
||||
config-chain "^1.1.13"
|
||||
editorconfig "^0.15.3"
|
||||
glob "^7.1.3"
|
||||
nopt "^5.0.0"
|
||||
@@ -3652,13 +3667,6 @@ js-message@1.0.7:
|
||||
resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47"
|
||||
integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==
|
||||
|
||||
js-queue@2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.2.tgz#0be590338f903b36c73d33c31883a821412cd482"
|
||||
integrity sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==
|
||||
dependencies:
|
||||
easy-stack "^1.0.1"
|
||||
|
||||
js-tokens@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
@@ -3702,11 +3710,6 @@ json-stringify-safe@~5.0.1:
|
||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||
|
||||
json3@^3.3.3:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
|
||||
integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
|
||||
|
||||
json5@^0.5.0:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
|
||||
@@ -3720,11 +3723,9 @@ json5@^1.0.1:
|
||||
minimist "^1.2.0"
|
||||
|
||||
json5@^2.1.2:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
|
||||
integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
|
||||
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
|
||||
|
||||
jsonfile@^4.0.0:
|
||||
version "4.0.0"
|
||||
@@ -3902,12 +3903,10 @@ lru-cache@^5.1.1:
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
lru-cache@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
lru-cache@^7.4.0:
|
||||
version "7.8.1"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.8.1.tgz#68ee3f4807a57d2ba185b7fd90827d5c21ce82bb"
|
||||
integrity sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==
|
||||
|
||||
make-dir@^2.0.0:
|
||||
version "2.1.0"
|
||||
@@ -4023,12 +4022,12 @@ micromatch@^3.1.10, micromatch@^3.1.4:
|
||||
to-regex "^3.0.2"
|
||||
|
||||
micromatch@^4.0.2:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
|
||||
integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
|
||||
version "4.0.5"
|
||||
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
|
||||
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
|
||||
dependencies:
|
||||
braces "^3.0.1"
|
||||
picomatch "^2.2.3"
|
||||
braces "^3.0.2"
|
||||
picomatch "^2.3.1"
|
||||
|
||||
miller-rabin@^4.0.0:
|
||||
version "4.0.1"
|
||||
@@ -4038,22 +4037,17 @@ miller-rabin@^4.0.0:
|
||||
bn.js "^4.0.0"
|
||||
brorand "^1.0.1"
|
||||
|
||||
mime-db@1.51.0:
|
||||
version "1.51.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c"
|
||||
integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==
|
||||
|
||||
"mime-db@>= 1.43.0 < 2":
|
||||
mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
|
||||
version "1.52.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
|
||||
version "2.1.34"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24"
|
||||
integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==
|
||||
version "2.1.35"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
dependencies:
|
||||
mime-db "1.51.0"
|
||||
mime-db "1.52.0"
|
||||
|
||||
mime@1.6.0:
|
||||
version "1.6.0"
|
||||
@@ -4102,10 +4096,10 @@ minimatch@^3.0.4:
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimist@^1.2.0, minimist@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
minipass@^3.1.1:
|
||||
version "3.1.6"
|
||||
@@ -4139,11 +4133,11 @@ mixin-deep@^1.2.0:
|
||||
is-extendable "^1.0.1"
|
||||
|
||||
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
||||
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
||||
version "0.5.6"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
||||
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
minimist "^1.2.6"
|
||||
|
||||
move-concurrently@^1.0.1:
|
||||
version "1.0.1"
|
||||
@@ -4243,15 +4237,6 @@ node-forge@^0.10.0:
|
||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
|
||||
integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
|
||||
|
||||
node-ipc@^9.1.1:
|
||||
version "9.2.1"
|
||||
resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.2.1.tgz#b32f66115f9d6ce841dc4ec2009d6a733f98bb6b"
|
||||
integrity sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==
|
||||
dependencies:
|
||||
event-pubsub "4.3.0"
|
||||
js-message "1.0.7"
|
||||
js-queue "2.0.2"
|
||||
|
||||
node-libs-browser@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
|
||||
@@ -4282,9 +4267,9 @@ node-libs-browser@^2.2.1:
|
||||
vm-browserify "^1.0.1"
|
||||
|
||||
node-releases@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01"
|
||||
integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96"
|
||||
integrity sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==
|
||||
|
||||
nopt@^5.0.0:
|
||||
version "5.0.0"
|
||||
@@ -4387,7 +4372,7 @@ object-copy@^0.1.0:
|
||||
define-property "^0.2.5"
|
||||
kind-of "^3.0.3"
|
||||
|
||||
object-inspect@^1.11.0, object-inspect@^1.9.0:
|
||||
object-inspect@^1.12.0, object-inspect@^1.9.0:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
|
||||
integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
|
||||
@@ -4736,7 +4721,7 @@ picocolors@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3:
|
||||
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
@@ -5092,9 +5077,9 @@ postcss-selector-parser@^3.0.0:
|
||||
uniq "^1.0.1"
|
||||
|
||||
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
|
||||
version "6.0.9"
|
||||
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f"
|
||||
integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==
|
||||
version "6.0.10"
|
||||
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
|
||||
integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
|
||||
dependencies:
|
||||
cssesc "^3.0.0"
|
||||
util-deprecate "^1.0.2"
|
||||
@@ -5141,9 +5126,9 @@ prepend-http@^1.0.0:
|
||||
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
|
||||
|
||||
"prettier@^1.18.2 || ^2.0.0":
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
|
||||
integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032"
|
||||
integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
|
||||
|
||||
pretty-error@^2.0.2:
|
||||
version "2.1.2"
|
||||
@@ -5605,11 +5590,11 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.3.0:
|
||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||
|
||||
semver@^7.3.4:
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
|
||||
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
|
||||
version "7.3.6"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.6.tgz#5d73886fb9c0c6602e79440b97165c29581cbb2b"
|
||||
integrity sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
lru-cache "^7.4.0"
|
||||
|
||||
send@0.17.2:
|
||||
version "0.17.2"
|
||||
@@ -5801,16 +5786,15 @@ snapdragon@^0.8.1:
|
||||
use "^3.1.0"
|
||||
|
||||
sockjs-client@^1.5.0:
|
||||
version "1.5.2"
|
||||
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.2.tgz#4bc48c2da9ce4769f19dc723396b50f5c12330a3"
|
||||
integrity sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.0.tgz#e0277b8974558edcb557eafc7d3027ef6128d865"
|
||||
integrity sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ==
|
||||
dependencies:
|
||||
debug "^3.2.6"
|
||||
eventsource "^1.0.7"
|
||||
faye-websocket "^0.11.3"
|
||||
debug "^3.2.7"
|
||||
eventsource "^1.1.0"
|
||||
faye-websocket "^0.11.4"
|
||||
inherits "^2.0.4"
|
||||
json3 "^3.3.3"
|
||||
url-parse "^1.5.3"
|
||||
url-parse "^1.5.10"
|
||||
|
||||
sockjs@^0.3.21:
|
||||
version "0.3.24"
|
||||
@@ -6438,10 +6422,10 @@ url-loader@^2.2.0:
|
||||
mime "^2.4.4"
|
||||
schema-utils "^2.5.0"
|
||||
|
||||
url-parse@^1.4.3, url-parse@^1.5.3:
|
||||
version "1.5.9"
|
||||
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.9.tgz#05ff26484a0b5e4040ac64dcee4177223d74675e"
|
||||
integrity sha512-HpOvhKBvre8wYez+QhHcYiVvVmeF6DVnuSOOPhe3cTum3BnqHhvKaZm8FU5yTiOu/Jut2ZpB2rA/SbBA1JIGlQ==
|
||||
url-parse@^1.4.3, url-parse@^1.5.10:
|
||||
version "1.5.10"
|
||||
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
|
||||
integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
|
||||
dependencies:
|
||||
querystringify "^2.1.1"
|
||||
requires-port "^1.0.0"
|
||||
|
||||
@@ -15,7 +15,7 @@ describe('component testing projects', function () {
|
||||
project: 'vueclivue2-configured',
|
||||
testingType: 'component',
|
||||
spec: 'src/components/HelloWorld.cy.js',
|
||||
browser: 'chrome',
|
||||
browser: 'electron',
|
||||
expectedExitCode: 0,
|
||||
})
|
||||
|
||||
|
||||
@@ -1446,18 +1446,18 @@
|
||||
"@babel/types" "^7.16.7"
|
||||
|
||||
"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.9.0":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41"
|
||||
integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==
|
||||
version "7.17.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd"
|
||||
integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==
|
||||
dependencies:
|
||||
"@babel/helper-environment-visitor" "^7.16.7"
|
||||
"@babel/helper-module-imports" "^7.16.7"
|
||||
"@babel/helper-simple-access" "^7.16.7"
|
||||
"@babel/helper-simple-access" "^7.17.7"
|
||||
"@babel/helper-split-export-declaration" "^7.16.7"
|
||||
"@babel/helper-validator-identifier" "^7.16.7"
|
||||
"@babel/template" "^7.16.7"
|
||||
"@babel/traverse" "^7.16.7"
|
||||
"@babel/types" "^7.16.7"
|
||||
"@babel/traverse" "^7.17.3"
|
||||
"@babel/types" "^7.17.0"
|
||||
|
||||
"@babel/helper-optimise-call-expression@^7.16.7":
|
||||
version "7.16.7"
|
||||
@@ -1496,12 +1496,12 @@
|
||||
"@babel/traverse" "^7.16.7"
|
||||
"@babel/types" "^7.16.7"
|
||||
|
||||
"@babel/helper-simple-access@^7.12.1", "@babel/helper-simple-access@^7.16.7", "@babel/helper-simple-access@^7.8.3":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7"
|
||||
integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==
|
||||
"@babel/helper-simple-access@^7.12.1", "@babel/helper-simple-access@^7.16.7", "@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.8.3":
|
||||
version "7.17.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367"
|
||||
integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==
|
||||
dependencies:
|
||||
"@babel/types" "^7.16.7"
|
||||
"@babel/types" "^7.17.0"
|
||||
|
||||
"@babel/helper-skip-transparent-expression-wrappers@^7.16.0":
|
||||
version "7.16.0"
|
||||
@@ -3297,6 +3297,9 @@
|
||||
resolved "https://registry.yarnpkg.com/@cypress/mount-utils/-/mount-utils-1.0.2.tgz#afbc4f8c350b7cd86edc5ad0db0cbe1e0181edc8"
|
||||
integrity sha512-Fn3fdTiyayHoy8Ol0RSu4MlBH2maQ2ZEXeEVKl/zHHXEQpld5HX3vdNLhK5YLij8cLynA4DxOT/nO9iEnIiOXw==
|
||||
|
||||
"@cypress/mount-utils@file:npm/mount-utils":
|
||||
version "0.0.0-development"
|
||||
|
||||
"@cypress/parse-domain@2.4.0":
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@cypress/parse-domain/-/parse-domain-2.4.0.tgz#3034b50babfd0adffa2a018aa03264b1e5be4d9e"
|
||||
@@ -7896,6 +7899,14 @@
|
||||
is-module "^1.0.0"
|
||||
resolve "^1.19.0"
|
||||
|
||||
"@rollup/plugin-replace@^2.3.1":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a"
|
||||
integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^3.1.0"
|
||||
magic-string "^0.25.7"
|
||||
|
||||
"@rollup/plugin-typescript@^8.2.1":
|
||||
version "8.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.2.1.tgz#f1a32d4030cc83432ce36a80a922280f0f0b5d44"
|
||||
@@ -11194,6 +11205,15 @@
|
||||
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.0.0-rc.19.tgz#cd10480b695027481981085c3f705081495a7ca0"
|
||||
integrity sha512-vQ/34z9NH/pqJzl9YTWtTq/vrx5JzLbMojcBB0qydeb7FtGqxp11nLYCgVso+pa8ZOSn2j+OQfjc5aBnb32uzw==
|
||||
|
||||
"@vue/test-utils@^1.1.3":
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.0.tgz#d563decdcd9c68a7bca151d4179a2bfd6d5c3e15"
|
||||
integrity sha512-Xk2Xiyj2k5dFb8eYUKkcN9PzqZSppTlx7LaQWBbdA8tqh3jHr/KHX2/YLhNFc/xwDrgeLybqd+4ZCPJSGPIqeA==
|
||||
dependencies:
|
||||
dom-event-types "^1.0.0"
|
||||
lodash "^4.17.15"
|
||||
pretty "^2.0.0"
|
||||
|
||||
"@vue/web-component-wrapper@^1.2.0":
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a"
|
||||
@@ -19352,6 +19372,11 @@ dom-converter@^0.2, dom-converter@^0.2.0:
|
||||
dependencies:
|
||||
utila "~0.4"
|
||||
|
||||
dom-event-types@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.1.0.tgz#120c1f92ddea7758db1ccee0a100a33c39f4701b"
|
||||
integrity sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ==
|
||||
|
||||
dom-helpers@^3.3.1:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
|
||||
@@ -27793,11 +27818,9 @@ json5@^1.0.1:
|
||||
minimist "^1.2.0"
|
||||
|
||||
json5@^2.1.0, json5@^2.1.2, json5@^2.1.3, json5@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3"
|
||||
integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
|
||||
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
|
||||
|
||||
jsonc-eslint-parser@^0.6.0:
|
||||
version "0.6.2"
|
||||
@@ -35148,7 +35171,7 @@ pretty-ms@7.0.0:
|
||||
dependencies:
|
||||
parse-ms "^2.1.0"
|
||||
|
||||
pretty@2.0.0:
|
||||
pretty@2.0.0, pretty@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5"
|
||||
integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=
|
||||
@@ -43963,6 +43986,11 @@ vue3-file-selector@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/vue3-file-selector/-/vue3-file-selector-1.0.1.tgz#bcae2f5ab44c406c1d72a60885990883051b688b"
|
||||
integrity sha512-popFgEvLrkRFo9MWs8mzlb4HH+Mg2+5DhJF7MzKmUrE9179rtVt4Wf7/w+0FvhDRVELQ6f8Z9BhF+SDSUSpRVw==
|
||||
|
||||
vue@2.6.12:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123"
|
||||
integrity sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==
|
||||
|
||||
vue@3.2.31, vue@^3.2.4:
|
||||
version "3.2.31"
|
||||
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.31.tgz#e0c49924335e9f188352816788a4cca10f817ce6"
|
||||
|
||||