feat: simplify vite server (#15416)

This commit is contained in:
Barthélémy Ledoux
2021-03-31 11:16:31 -05:00
committed by GitHub
parent 651df1b2ad
commit adc2fc893f
37 changed files with 615 additions and 246 deletions

View File

@@ -1164,7 +1164,13 @@ jobs:
at: ~/
- run:
name: Run tests
command: yarn workspace @cypress/vite-dev-server test
command: yarn test --reporter cypress-circleci-reporter --reporter-options resultsDir=./test_results
working_directory: npm/vite-dev-server
- store_test_results:
path: npm/vite-dev-server/test_results
- store_artifacts:
path: npm/vite-dev-server/cypress/videos
- store-npm-logs
npm-rollup-dev-server:
<<: *defaults

View File

@@ -12,6 +12,5 @@
"**/__image_snapshots__/*"
],
"componentFolder": "src",
"experimentalFetchPolyfill": true,
"fixturesFolder": false
}

View File

@@ -1,72 +1,11 @@
// @ts-check
const { startDevServer } = require('@cypress/webpack-dev-server')
const path = require('path')
const babelConfig = require('../../babel.config.js')
/** @type import("webpack").Configuration */
const webpackConfig = {
resolve: {
extensions: ['.js', '.ts', '.jsx', '.tsx', '.scss', '.css'],
},
mode: 'development',
devtool: false,
output: {
publicPath: '/',
chunkFilename: '[name].bundle.js',
},
module: {
rules: [
{
test: /\.(js|jsx|mjs|ts|tsx)$/,
loader: 'babel-loader',
options: { ...babelConfig, cacheDirectory: path.resolve(__dirname, '..', '..', '.babel-cache') },
},
{
test: /\.modules?\.s[ac]ss$/i,
exclude: [/node_modules/],
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: true,
},
},
'sass-loader',
],
},
{
test: /\.s[ac]ss$/i,
exclude: [/node_modules/, /\.modules?\.s[ac]ss$/i],
use: ['style-loader', 'css-loader', 'sass-loader'],
},
{
// some of our examples import SVG
test: /\.svg$/,
loader: 'svg-url-loader',
},
{
// some of our examples import SVG
test: /\.svg$/,
loader: 'svg-url-loader',
},
{
test: /\.(png|jpg)$/,
use: ['file-loader'],
},
{
test: /\.(svg|eot|woff|woff2|ttf)$/,
use: ['file-loader'],
},
],
},
}
const { startDevServer } = require('@cypress/vite-dev-server')
/**
* @type Cypress.PluginConfig
*/
module.exports = (on, config) => {
on('dev-server:start', (options) => startDevServer({ options, webpackConfig, disableLazyCompilation: false }))
on('dev-server:start', (options) => startDevServer({ options }))
return config
}

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html lang="en">
<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>AUT Frame</title>
</head>
<body>
</body>
</html>

View File

@@ -31,7 +31,7 @@
"@babel/preset-react": "7.0.0",
"@babel/preset-typescript": "7.10.4",
"@cypress/react": "0.0.0-development",
"@cypress/webpack-dev-server": "0.0.0-development",
"@cypress/vite-dev-server": "0.0.0-development",
"@percy/cypress": "2.3.2",
"@rollup/plugin-commonjs": "^17.1.0",
"@rollup/plugin-image": "2.0.6",
@@ -53,11 +53,8 @@
"rollup-plugin-postcss-modules": "2.0.2",
"rollup-plugin-typescript2": "^0.29.0",
"sass": "1.32.8",
"sass-loader": "10.1.1",
"style-loader": "0.23.1",
"svg-url-loader": "3.0.3",
"typescript": "4.0.3",
"webpack": "4.44.1"
"vite": "2.1.3"
},
"peerDependencies": {
"react": "^=16.x || ^=17.x",

View File

@@ -21,13 +21,34 @@
return node
}
/**
* Format the requested spec file.
* Nollup writes everything to a single directory (eg /dist)
* All outputted files are *.js.
* RunnerCt requests specs using the original filename including extension.
*
* Example usage:
* formatSpecName('/cypress/component/foo.spec.tsx') //=> 'foo.spec.js'
*/
function formatSpecName (filename) {
const split = filename.split('/')
const name = split[split.length - 1]
const pos = name.lastIndexOf('.')
const newName = `${name.substr(0, pos < 0 ? name.length : pos)}.js`
return `/${newName}`
}
const Cypress = window.Cypress = parent.Cypress
const specPath = `/__cypress/src/${formatSpecName(window.location.pathname)}`
const importsToLoad = [
() => import('{{{specPath}}}'),
() => {
{{{supportFile}}}
}
},
() => import(specPath),
]
Cypress.onSpecWindow(window, importsToLoad)

View File

@@ -6,7 +6,7 @@
"scripts": {
"build": "tsc",
"build-prod": "tsc",
"cy:open": "node ../../scripts/start.js --component-testing --project ${PWD}",
"cy:open": "node ../../scripts/cypress.js open-ct --project ${PWD}",
"cy:run": "node ../../scripts/cypress.js run-ct --project ${PWD}",
"test": "yarn cy:run",
"watch": "tsc -w"

View File

@@ -6,33 +6,11 @@ import { Express } from 'express'
const indexHtmlPath = resolve(__dirname, '../index-template.html')
const readIndexHtml = () => readFileSync(indexHtmlPath).toString()
/**
* Rormat the requested spec file.
* Nollup writes everything to a single directory (eg /dist)
* All outputted files are *.js.
* RunnerCt requests specs using the original filename including extension.
*
* Example usage:
* formatSpecName('/cypress/component/foo.spec.tsx') //=> 'foo.spec.js'
*/
function formatSpecName (publicPath: string, filename: string) {
const split = filename.split('/')
const name = split[split.length - 1]
const pos = name.lastIndexOf('.')
const newName = `${name.substr(0, pos < 0 ? name.length : pos)}.js`
return `${publicPath}/${newName}`
}
function handleIndex (indexHtml: string, publicPath: string, supportFilePath: string, cypressSpecPath: string) {
const specPath = `/${cypressSpecPath}`
console.log(supportFilePath)
function handleIndex (indexHtml: string, projectRoot: string, supportFilePath: string) {
const supportFile = readFileSync(supportFilePath).toString()
return render(indexHtml, {
supportFile,
specPath: formatSpecName(publicPath, specPath),
})
}
@@ -47,9 +25,8 @@ export const makeHtmlPlugin = (
server.use(`${publicPath}/index.html`, (req, res) => {
const html = handleIndex(
indexHtml,
publicPath,
projectRoot,
supportFilePath,
req.headers.__cypress_spec_path as string,
)
res.end(html)

View File

@@ -0,0 +1,48 @@
// This file is merged in a <script type=module> into index.html
// it will be used to load and kick start the selected spec
const supportPath = import.meta.env.__cypress_supportPath
const originAutUrl = import.meta.env.__cypress_originAutUrl
const specPath = window.location.pathname.replace(originAutUrl, '')
const importsToLoad = [() => import(/* @vite-ignore */ specPath)]
if (supportPath) {
importsToLoad.unshift(() => import(/* @vite-ignore */ supportPath))
}
const CypressInstance = window.Cypress = parent.Cypress
if (!CypressInstance) {
throw new Error('Tests cannot run without a reference to Cypress!')
}
// load the support and spec
CypressInstance.onSpecWindow(window, importsToLoad)
// then start the test process
CypressInstance.action('app:window:before:load', window)
// Before all tests we are mounting the root element,
// Cleaning up platform between tests is the responsibility of the specific adapter
// because unmounting react/vue component should be done using specific framework API
// (for devtools and to get rid of global event listeners from previous tests.)
CypressInstance.on('test:before:run', () => {
// leave the error overlay alone if it exists
if (document.body.querySelectorAll('vite-error-overlay').length) {
// make the error more readable by giving it more space
Cypress.action('cy:viewport:changed', { viewportWidth: 1000, viewportHeight: 500 })
return
}
// reset the viewport to default when in normal mode
Cypress.action('cy:viewport:changed', {
viewportWidth: Cypress.config('viewportWidth'),
viewportHeight: Cypress.config('viewportHeight'),
})
})
// Make usage of node test plugins possible
window.global = window

View File

@@ -1,5 +0,0 @@
import React from 'react'
export const Foo: React.FC = () => {
return <div>Hello world!!!!</div>
}

View File

@@ -0,0 +1,10 @@
import React from 'react'
import './foo.css'
import logo from './logo.png'
export const Foo: React.FC = () => {
return (<>
<div>Hello world!!!!</div>
<img src={logo} />
</>)
}

View File

@@ -0,0 +1,10 @@
div{
color: white;
background: hotpink;
padding: 20px;
text-align: center;
}
img{
width:50%;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -13,10 +13,12 @@ describe('React', () => {
cy.get('div').contains('Hello world')
})
it('renders a react component #3', () => {
mount(<Foo />)
cy.get('div').contains('Hello world')
})
it('renders a react component with a different viewport',
{ viewportWidth: 200, viewportHeight: 170 },
() => {
mount(<Foo />)
cy.get('div').contains('Hello world')
})
it('renders a react component #4', () => {
mount(<Foo />)

View File

@@ -0,0 +1,41 @@
// In this test file we demo how to test a component with slots and a scoped slot.
// Usage is the same as Vue Test Utils, since slots and scopedSlots
// in the render options are directly passed through to the Utils mount().
/// <reference types="cypress" />
import { mount } from '@cypress/vue'
import Card from './Card.vue'
describe('Card', () => {
it('skipped slots', () => {
mount(Card)
cy.contains('Nothing used the Scoped content!').should('be.visible')
})
it('renders slots', () => {
mount(Card, {
slots: {
header: '<h1>HEADER</h1>',
footer: '<div>FOOTER</div>',
},
})
cy.contains('h1', 'HEADER')
cy.contains('div', 'FOOTER')
})
it('renders scopedSlots', () => {
mount(Card, {
slots: {
default: `<template #default="props">
<p>Yay! {{props.content}}</p>
</template>`,
},
})
cy.contains('Yay! Scoped content!').should('be.visible')
cy.contains('Nothing used the Scoped content!').should('not.exist')
})
})

View File

@@ -0,0 +1,24 @@
<template>
<div class="card">
<img src="./logo.png" />
<slot name="header" />
<slot :content="content">
<!-- Fallback content if no default slot is given -->
<p>Nothing used the {{ content }}</p>
</slot>
<slot name="footer" />
</div>
</template>
<script>
// example from https://github.com/testing-library/vue-testing-library/blob/master/src/__tests__/components/Card.vue
// For the sake of demoing scopedSlots, this Card component
// passes a simple string down to its default slot.
export default {
data() {
return {
content: "Scoped content!",
};
},
};
</script>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1,16 @@
/// <reference types="cypress" />
import { mount } from '@cypress/vue'
import Hello from './Hello.vue'
describe('Hello', () => {
it('shows error for short text', () => {
cy.viewport(300, 200)
mount(Hello)
// use the component like a real user
cy.findByRole('textbox').type('abc')
cy.contains('.error', 'enter a longer username')
// now enter a longer string
cy.findByRole('textbox').type('12345')
cy.get('.error').should('not.exist')
})
})

View File

@@ -0,0 +1,43 @@
<template>
<div class="wrapper">
<input v-model="username" />
<div v-if="error" class="error">{{ error }}</div>
<img src="./logo.png" />
</div>
</template>
<script>
export default {
name: "Hello",
data() {
return {
username: "",
};
},
computed: {
error() {
console.log(this.username);
return this.username.trim().length < 7
? "Please enter a longer username"
: "";
},
},
};
</script>
<style scoped>
.wrapper {
background: hotpink;
padding: 30px;
text-align: center;
}
input {
display: block;
margin: 20px auto;
}
img {
width: 50px;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -1,7 +1,13 @@
import { startDevServer } from '@cypress/vite-dev-server'
import viteConfig from '../vite.config'
module.exports = (on, config) => {
on('dev-server:start', async (options) => startDevServer({ options }))
on('dev-server:start', async (options) => {
return startDevServer({
options,
viteConfig,
})
})
return config
}

View File

@@ -1,3 +1,5 @@
import '@testing-library/cypress/add-commands'
before(() => {
window.supportFileWasLoaded = true
})

View File

@@ -1,69 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<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="app"></div>
<script type="module">
function appendTargetIfNotExists (id, tag = 'div', parent = document.body) {
let node = document.getElementById(id)
if (!node) {
node = document.createElement(tag)
node.setAttribute('id', id)
parent.appendChild(node)
}
node.innerHTML = ''
return node
}
const specPath = "{{{specPath}}}"
let importsToLoad = [() => import(specPath).catch(e => {
// if the import failed, it might be because of dependencies
// so we try a quick refresh just in case it is
// Since vite does not work with IE we can use URLSearchParams without polyfill
const searchParams = new URLSearchParams(window.location.search);
const r = searchParams.has("refresh") ? parseInt(searchParams.get("refresh"), 10) + 1 : 0
// limit the number of refresh (dependency discovery depths)
// to 2 instead of 1 for React-DOM
if (r < 2) {
searchParams.set('refresh', r)
window.location.search = searchParams
} else {
throw new Error(`
**Error during compilation.**
Check the terminal log for more info
`, e)
}
})];
if ("{{{supportPath}}}") {
importsToLoad.push(() => import("{{{supportPath}}}"));
}
const Cypress = window.Cypress = parent.Cypress
if (!Cypress) {
throw new Error('Tests cannot run without a reference to Cypress!')
}
Cypress.onSpecWindow(window, importsToLoad)
Cypress.action('app:window:before:load', window)
before(() => {
const root = appendTargetIfNotExists('__cy_root')
root.appendChild(appendTargetIfNotExists('__cy_app'))
})
</script>
</body>
</html>

View File

@@ -1,2 +1 @@
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference path="../../cli/types/cypress.d.ts" />
export * from "./dist"

View File

@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<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>AUT Frame</title>
</head>
<body>
<div id="__cy_root"></div>
</body>
</html>

View File

@@ -12,19 +12,27 @@
"watch": "tsc -w"
},
"dependencies": {
"debug": "4.3.2",
"mustache": "4.1.0"
"debug": "4.3.2"
},
"devDependencies": {
"@types/mustache": "4.1.1",
"vite": "2.0.5"
"@cypress/react": "0.0.0-development",
"@cypress/vue": "3.0.0-alpha.4",
"@testing-library/cypress": "7.0.4",
"@vitejs/plugin-vue": "1.2.0",
"@vue/compiler-sfc": "3.0.9",
"cypress": "0.0.0-development",
"cypress-circleci-reporter": "0.2.0",
"react": "17.0.2",
"vite": "2.1.3",
"vue": "3.0.9"
},
"peerDependencies": {
"vite": ">= 2"
},
"files": [
"dist",
"index-template.html"
"client",
"index.html"
],
"license": "MIT",
"repository": {
@@ -33,6 +41,7 @@
},
"homepage": "https://github.com/cypress-io/cypress/tree/master/npm/vite-dev-server#readme",
"bugs": "https://github.com/cypress-io/cypress/issues/new?template=1-bug-report.md",
"module": "dist/index.js",
"publishConfig": {
"access": "public"
}

View File

@@ -27,11 +27,10 @@ export interface ResolvedDevServerConfig {
export async function startDevServer (startDevServerArgs: StartDevServer): Promise<ResolvedDevServerConfig> {
const viteDevServer = await createDevServer(startDevServerArgs)
return new Promise(async (resolve) => {
const app = await viteDevServer.listen()
const port = app.config.server.port
const app = await viteDevServer.listen()
const port = app.config.server.port
debug('Component testing vite server started on port', port)
resolve({ port, server: app.httpServer })
})
debug('Component testing vite server started on port', port)
return { port, server: app.httpServer }
}

View File

@@ -1,41 +1,58 @@
import { EventEmitter } from 'events'
import { relative, resolve } from 'path'
import { readFileSync } from 'fs'
import { resolve } from 'path'
import { readFile } from 'fs'
import { promisify } from 'util'
import { Plugin, ViteDevServer } from 'vite'
import { render } from 'mustache'
const read = promisify(readFile)
const pluginName = 'cypress-transform-html'
const indexHtmlPath = resolve(__dirname, '../index-template.html')
const readIndexHtml = () => readFileSync(indexHtmlPath).toString()
function handleIndex (indexHtml, projectRoot, publicPath, supportFilePath, req, res) {
const specPath = `${publicPath}/${req.headers.__cypress_spec_path}`
const supportPath = supportFilePath ? `/${relative(projectRoot, supportFilePath)}` : null
res.end(render(indexHtml, { supportPath, specPath }))
}
const INIT_FILEPATH = resolve(__dirname, '../client/initCypressTests.js')
export const makeCypressPlugin = (
projectRoot: string,
supportFilePath: string,
publicPath: string,
devServerEvents: EventEmitter,
): Plugin => {
let base = '/'
return {
name: pluginName,
enforce: 'pre',
configureServer: (server: ViteDevServer) => {
const indexHtml = readIndexHtml()
config (_, env) {
if (env) {
return {
define: {
'import.meta.env.__cypress_supportPath': JSON.stringify(resolve(projectRoot, supportFilePath)),
'import.meta.env.__cypress_originAutUrl': JSON.stringify('__cypress/iframes/'),
},
}
}
},
configResolved (config) {
base = config.base
},
transformIndexHtml () {
return [
{
tag: 'script',
attrs: { type: 'module', src: INIT_FILEPATH },
},
]
},
configureServer: async (server: ViteDevServer) => {
const indexHtml = await read(resolve(__dirname, '..', 'index.html'), { encoding: 'utf8' })
server.middlewares.use(`${publicPath}/index.html`, (req, res) => handleIndex(indexHtml, projectRoot, publicPath, supportFilePath, req, res))
const transformedIndexHtml = await server.transformIndexHtml(base, indexHtml)
server.middlewares.use(`${base}index.html`, (req, res) => res.end(transformedIndexHtml))
},
handleHotUpdate: () => {
// restart tests when code is updated
devServerEvents.emit('dev-server:compile:success')
return []
},
// TODO subscribe on the compile error hook and call the
// devServerEvents.emit('dev-server:compile:error', err)
// it looks like for now (02.02.2021) there is no way to subscribe to an error
}
}

View File

@@ -1,21 +1,28 @@
import Debug from 'debug'
import { StartDevServer } from '.'
import { createServer, ViteDevServer, InlineConfig } from 'vite'
import { resolve } from 'path'
import { dirname, resolve } from 'path'
import { makeCypressPlugin } from './makeCypressPlugin'
import { EventEmitter } from 'events'
const debug = Debug('cypress:vite-dev-server:start')
// TODO: Pull in types for Options so we can infer these
const serverConfig = (projectRoot: string, supportFilePath: string, publicPath: string, devServerEvents: EventEmitter): InlineConfig => {
const serverConfig = (projectRoot: string, supportFilePath: string, devServerEvents: EventEmitter): InlineConfig => {
return {
root: resolve(__dirname, projectRoot),
base: '/__cypress/src/',
plugins: [makeCypressPlugin(projectRoot, supportFilePath, publicPath, devServerEvents)],
plugins: [makeCypressPlugin(projectRoot, supportFilePath, devServerEvents)],
server: {
port: 0,
},
resolve: {
alias: {
// Necessary to avoid a "prefixIdentifiers" issue from slots mounting
// Could be resolved in test-utils
'@vue/compiler-core': resolve(dirname(require.resolve('@vue/compiler-core')), 'dist', 'compiler-core.cjs.js'),
},
},
}
}
@@ -23,7 +30,6 @@ const resolveServerConfig = ({ viteConfig, options }: StartDevServer) => {
const defaultServerConfig = serverConfig(
options.config.projectRoot,
options.config.supportFile,
options.config.devServerPublicPathRoute,
options.devServerEvents,
)

View File

@@ -1,8 +1,9 @@
{
"compilerOptions": {
/* Basic Options */
"target": "es2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */,
"target": "ESNEXT" /* 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'. */,
"moduleResolution": "node",
"skipLibCheck": true,
"lib": [
"es2015",

View File

@@ -0,0 +1,8 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [
vue(),
],
})

View File

@@ -0,0 +1 @@
// created automatically when cy:open starts

View File

@@ -41,12 +41,12 @@
"tailwindcss": "1.1.4",
"typescript": "3.9.6",
"unfetch": "4.1.0",
"vue": "2.6.11",
"vue": "2.6.12",
"vue-i18n": "8.9.0",
"vue-loader": "15.9.3",
"vue-router": "3.0.5",
"vue-style-loader": "4.1.2",
"vue-template-compiler": "2.6.11",
"vue-template-compiler": "2.6.12",
"vuex": "3.1.1",
"webpack": "4.42.0"
},

View File

@@ -26,7 +26,6 @@
"expect": "^26.6.2",
"mocha": "^8.1.3"
},
"peerDependencies": {},
"files": [
"src"
]

300
yarn.lock
View File

@@ -522,11 +522,21 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79"
integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==
"@babel/parser@^7.12.0":
version "7.13.11"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.11.tgz#f93ebfc99d21c1772afbbaa153f47e7ce2f50b88"
integrity sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q==
"@babel/parser@^7.12.3":
version "7.12.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd"
integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==
"@babel/parser@^7.13.9":
version "7.13.13"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df"
integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==
"@babel/plugin-proposal-async-generator-functions@^7.10.4", "@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.2.0", "@babel/plugin-proposal-async-generator-functions@^7.8.3":
version "7.12.12"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566"
@@ -1866,6 +1876,24 @@
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@babel/types@^7.12.0":
version "7.13.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80"
integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==
dependencies:
"@babel/helper-validator-identifier" "^7.12.11"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@babel/types@^7.13.0":
version "7.13.14"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d"
integrity sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==
dependencies:
"@babel/helper-validator-identifier" "^7.12.11"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@babel/types@^7.5.0":
version "7.12.1"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae"
@@ -2285,6 +2313,23 @@
dependencies:
css.escape "^1.5.1"
"@cypress/vue@3.0.0-alpha.4":
version "3.0.0-alpha.4"
resolved "https://registry.yarnpkg.com/@cypress/vue/-/vue-3.0.0-alpha.4.tgz#32a75f56e0b6e10081083da62b6ab3d0ef9ea183"
integrity sha512-AMPfyeRK+Ljo4qYFXWJEx5ATux13sMMK868ncH0DIWxE68NMueDqeClZaouDTjxwRTYj8BfmeGqVlqxY6VoIFw==
dependencies:
"@cypress/webpack-dev-server" "1.0.3"
"@vue/test-utils" "^2.0.0-rc.1"
"@cypress/webpack-dev-server@1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@cypress/webpack-dev-server/-/webpack-dev-server-1.0.3.tgz#efe261faa9d4724a90aeafdf679516dc23662c71"
integrity sha512-lp2lKrhf1fLEtmmVBmHlFbbwbq+eagoJSk3Jynx0XvXQK1t2SbIUto//ZQvZpHCKb/SVaS+ZiibKPL8EsbROaw==
dependencies:
debug "4.3.2"
semver "^7.3.4"
webpack-merge "^5.4.0"
"@cypress/what-is-circular@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@cypress/what-is-circular/-/what-is-circular-1.0.1.tgz#c88adb7106a4e1624e403512fc87c18e9700c877"
@@ -5363,6 +5408,14 @@
"@babel/runtime" "^7.11.2"
"@testing-library/dom" "^7.22.2"
"@testing-library/cypress@7.0.4":
version "7.0.4"
resolved "https://registry.yarnpkg.com/@testing-library/cypress/-/cypress-7.0.4.tgz#38a55880712f222ddb9671bc899fe80f8c41bfc0"
integrity sha512-5I1amLVB2ExIRWuHlvG35dVFVC2KiNBZ0U1ASJUJZASFPQ0BhqJG4s0B8B8wNAE7TrR8KWlrzcNutkgxXL6VOg==
dependencies:
"@babel/runtime" "^7.12.5"
"@testing-library/dom" "^7.28.1"
"@testing-library/dom@^7.22.2":
version "7.29.2"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.2.tgz#6cba65d961d8b36d621a98caa8537444075fb42e"
@@ -5377,6 +5430,20 @@
lz-string "^1.4.4"
pretty-format "^26.6.2"
"@testing-library/dom@^7.28.1":
version "7.30.0"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.30.0.tgz#53697851f7708a1448cc30b74a2ea056dd709cd6"
integrity sha512-v4GzWtltaiDE0yRikLlcLAfEiiK8+ptu6OuuIebm9GdC2XlZTNDPGEfM2UkEtnH7hr9TRq2sivT5EA9P1Oy7bw==
dependencies:
"@babel/code-frame" "^7.10.4"
"@babel/runtime" "^7.12.5"
"@types/aria-query" "^4.2.0"
aria-query "^4.2.2"
chalk "^4.1.0"
dom-accessibility-api "^0.5.4"
lz-string "^1.4.4"
pretty-format "^26.6.2"
"@tootallnate/once@1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
@@ -6414,6 +6481,11 @@
resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
"@vitejs/plugin-vue@1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.0.tgz#f0a92470b74761f90afc8cda204fa3bec9df09f4"
integrity sha512-IhSJfJH6IDNEAnhr91+2vhLLe/1SqkA/2BP19jwtn54DGI+cNbZIxiPhHIdKUpdRo0QwErOh6Jy1Maxk2uVo7A==
"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz#31624a7a505fb14da1d58023725a4c5f270e6a81"
@@ -6642,6 +6714,55 @@
semver "^6.1.0"
strip-ansi "^6.0.0"
"@vue/compiler-core@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.9.tgz#ec7efa676889aee006fc43739ee4a67a952ac623"
integrity sha512-bHAPwfVoLhGx8d6KV/OfGf/3gwpymVirgfmSyhgv5YuXDybLa6BwjSLvhNMAyDP+4q4pp0p6g248LuoOy5W6OA==
dependencies:
"@babel/parser" "^7.12.0"
"@babel/types" "^7.12.0"
"@vue/shared" "3.0.9"
estree-walker "^2.0.1"
source-map "^0.6.1"
"@vue/compiler-dom@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.9.tgz#1fd554097d9ab36eca73bc6d0d9607fecf94e71c"
integrity sha512-tkq6umPSELaghvOExWfGNwrCRc7FTul3RLykKzBZWhb87sSESq0XxiKELfBOfEbzdhWg6BJ1WXKDeq+al/viEQ==
dependencies:
"@vue/compiler-core" "3.0.9"
"@vue/shared" "3.0.9"
"@vue/compiler-sfc@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.0.9.tgz#0f993a6e159ca6ad351d8ee0c4734771d2590115"
integrity sha512-meneFRb9xIDgv/gYWCr9xKryvPi0tVffQzLjCkyN4RF1EndqLS71xugUX9wQsS4F1SAP+zlZbcgMFmTSC4OpHw==
dependencies:
"@babel/parser" "^7.13.9"
"@babel/types" "^7.13.0"
"@vue/compiler-core" "3.0.9"
"@vue/compiler-dom" "3.0.9"
"@vue/compiler-ssr" "3.0.9"
"@vue/shared" "3.0.9"
consolidate "^0.16.0"
estree-walker "^2.0.1"
hash-sum "^2.0.0"
lru-cache "^5.1.1"
magic-string "^0.25.7"
merge-source-map "^1.1.0"
postcss "^8.1.10"
postcss-modules "^4.0.0"
postcss-selector-parser "^6.0.4"
source-map "^0.6.1"
"@vue/compiler-ssr@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.0.9.tgz#aebce25e573b9db34964b682bb1631a7240ba43d"
integrity sha512-99h5k6Up+s8AzTNH1ljtXE/QlnG8yaGLePwQ4XQaWfk23ESUnmGZWEC+y+ZXznf8pIfJ0uPeD9EVgQzQAyZ2aA==
dependencies:
"@vue/compiler-dom" "3.0.9"
"@vue/shared" "3.0.9"
"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2":
version "3.2.0"
resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz#8f85182ceed28e9b3c75313de669f83166d11e5d"
@@ -6663,6 +6784,35 @@
resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab"
integrity sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==
"@vue/reactivity@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.0.9.tgz#875f241b8c10262560b190ccdeff2d0ab7053e11"
integrity sha512-W1AbGhzphVjY+TL32lQDwLDNvLzZKOcUgaIaLOoALWMtjzN4ExOUJzrR1FC3ynlpMHIEfcUo8GPgfnNmvMGdgQ==
dependencies:
"@vue/shared" "3.0.9"
"@vue/runtime-core@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.0.9.tgz#9665f149468355a524a304cb8f260147a4d294e6"
integrity sha512-j94xZ/wRZTVhqpoUgmxBTlojnPFu6TTXNw1Vw8oQkW1ZTGD0IwiJe3ycsKd1bpleXEMVt55GzGlCopI33/Gdmg==
dependencies:
"@vue/reactivity" "3.0.9"
"@vue/shared" "3.0.9"
"@vue/runtime-dom@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.0.9.tgz#16a1d001dc746a9f346ee7fb9de90d52ad097b61"
integrity sha512-6NCjpwa5hNBFDdokquAgMl2tNEYyQD6kBy9Mh6M2776bxYLXZCqL4/e0UrpBuBiHTrkAlUGODD7PyYGaqH6fyA==
dependencies:
"@vue/runtime-core" "3.0.9"
"@vue/shared" "3.0.9"
csstype "^2.6.8"
"@vue/shared@3.0.9":
version "3.0.9"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.9.tgz#09882d745ded52b07e4481d036659d733edd2a9a"
integrity sha512-lv20q1O5dybwro+V+vnxHCmSIxi9mvTORSgAbGrANGYK8zF4K1S9TOankIvdkcvfZ88IR95O2pTI2Pb3c3BaNg==
"@vue/test-utils@^1.1.3":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.1.3.tgz#747f5683d8d4633c85a385fe2e02c1bb35bec153"
@@ -6672,6 +6822,11 @@
lodash "^4.17.15"
pretty "^2.0.0"
"@vue/test-utils@^2.0.0-rc.1":
version "2.0.0-rc.4"
resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-2.0.0-rc.4.tgz#536175be968e7c5741e9c95f117024d5053ea54c"
integrity sha512-DocrrFP28M7NO7y7iGiX9sf9n1AKEqkxXO5wedtp5FkHiAkc0xfmD4lvxgi4re5+xw7Zzb9U/vrhXKQZ0I4Q9g==
"@vue/web-component-wrapper@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1"
@@ -11575,6 +11730,11 @@ colorette@^1.2.1:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
colorette@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
colors@1.0.3, colors@1.0.x:
version "1.0.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
@@ -11910,6 +12070,13 @@ consolidate@^0.15.1:
dependencies:
bluebird "^3.1.1"
consolidate@^0.16.0:
version "0.16.0"
resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16"
integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==
dependencies:
bluebird "^3.7.2"
constant-case@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46"
@@ -12833,6 +13000,11 @@ csstype@^2.5.2, csstype@^2.5.7:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.14.tgz#004822a4050345b55ad4dcc00be1d9cf2f4296de"
integrity sha512-2mSc+VEpGPblzAxyeR+vZhJKgYg0Og0nnRi7pmRXFYYxSfnOnW8A5wwQb4n4cE2nIOzqKOAzLCaEX6aBmNEv8A==
csstype@^2.6.8:
version "2.6.16"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39"
integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q==
csstype@^3.0.2:
version "3.0.6"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef"
@@ -14839,10 +15011,10 @@ es6-weak-map@^2.0.1:
es6-iterator "^2.0.3"
es6-symbol "^3.1.1"
esbuild@^0.8.52:
version "0.8.57"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.57.tgz#a42d02bc2b57c70bcd0ef897fe244766bb6dd926"
integrity sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==
esbuild@^0.9.3:
version "0.9.6"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.6.tgz#2cae519e7ce2328ecf57ae738090d07ce7245850"
integrity sha512-F6vASxU0wT/Davt9aj2qtDwDNSkQxh9VbyO56M7PDWD+D/Vgq/rmUDGDQo7te76W5auauVojjnQr/wTu3vpaUA==
escalade@^3.0.1, escalade@^3.1.1:
version "3.1.1"
@@ -19062,6 +19234,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.0, icss-utils@^4.1.1:
dependencies:
postcss "^7.0.14"
icss-utils@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
identity-obj-proxy@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14"
@@ -27172,6 +27349,11 @@ postcss-modules-extract-imports@^2.0.0:
dependencies:
postcss "^7.0.5"
postcss-modules-extract-imports@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
postcss-modules-local-by-default@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
@@ -27199,6 +27381,15 @@ postcss-modules-local-by-default@^3.0.2, postcss-modules-local-by-default@^3.0.3
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.1.0"
postcss-modules-local-by-default@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
dependencies:
icss-utils "^5.0.0"
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.1.0"
postcss-modules-scope@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
@@ -27215,6 +27406,13 @@ postcss-modules-scope@^2.1.0, postcss-modules-scope@^2.1.1, postcss-modules-scop
postcss "^7.0.6"
postcss-selector-parser "^6.0.0"
postcss-modules-scope@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
dependencies:
postcss-selector-parser "^6.0.4"
postcss-modules-values@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
@@ -27239,6 +27437,13 @@ postcss-modules-values@^3.0.0:
icss-utils "^4.0.0"
postcss "^7.0.6"
postcss-modules-values@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
dependencies:
icss-utils "^5.0.0"
postcss-modules@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-2.0.0.tgz#473d0d7326651d8408585c2a154115d5cb36cce0"
@@ -27265,6 +27470,20 @@ postcss-modules@^3.2.0:
postcss-modules-values "^3.0.0"
string-hash "^1.1.1"
postcss-modules@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.0.0.tgz#2bc7f276ab88f3f1b0fadf6cbd7772d43b5f3b9b"
integrity sha512-ghS/ovDzDqARm4Zj6L2ntadjyQMoyJmi0JkLlYtH2QFLrvNlxH5OAVRPWPeKilB0pY7SbuhO173KOWkPAxRJcw==
dependencies:
generic-names "^2.0.1"
icss-replace-symbols "^1.1.0"
lodash.camelcase "^4.3.0"
postcss-modules-extract-imports "^3.0.0"
postcss-modules-local-by-default "^4.0.0"
postcss-modules-scope "^3.0.0"
postcss-modules-values "^4.0.0"
string-hash "^1.1.1"
postcss-nested@^4.1.1:
version "4.2.3"
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-4.2.3.tgz#c6f255b0a720549776d220d00c4b70cd244136f6"
@@ -27546,7 +27765,7 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
indexes-of "^1.0.1"
uniq "^1.0.1"
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3"
integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==
@@ -27657,6 +27876,15 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.11, postcss@^7.0.14, po
source-map "^0.6.1"
supports-color "^6.1.0"
postcss@^8.1.10:
version "8.2.8"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece"
integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw==
dependencies:
colorette "^1.2.2"
nanoid "^3.1.20"
source-map "^0.6.1"
postcss@^8.2.1:
version "8.2.4"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.4.tgz#20a98a39cf303d15129c2865a9ec37eda0031d04"
@@ -29000,6 +29228,14 @@ react@16.8.6:
prop-types "^15.6.2"
scheduler "^0.13.6"
react@17.0.2:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
react@^15.3.2:
version "15.7.0"
resolved "https://registry.yarnpkg.com/react/-/react-15.7.0.tgz#10308fd42ac6912a250bf00380751abc41ac7106"
@@ -30386,17 +30622,6 @@ sass-loader@10.1.0:
schema-utils "^3.0.0"
semver "^7.3.2"
sass-loader@10.1.1, sass-loader@^10.0.3:
version "10.1.1"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d"
integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==
dependencies:
klona "^2.0.4"
loader-utils "^2.0.0"
neo-async "^2.6.2"
schema-utils "^3.0.0"
semver "^7.3.2"
sass-loader@7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.2.0.tgz#e34115239309d15b2527cb62b5dfefb62a96ff7f"
@@ -30419,6 +30644,17 @@ sass-loader@8.0.2:
schema-utils "^2.6.1"
semver "^6.3.0"
sass-loader@^10.0.3:
version "10.1.1"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d"
integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw==
dependencies:
klona "^2.0.4"
loader-utils "^2.0.0"
neo-async "^2.6.2"
schema-utils "^3.0.0"
semver "^7.3.2"
sass-lookup@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-3.0.0.tgz#3b395fa40569738ce857bc258e04df2617c48cac"
@@ -34956,12 +35192,12 @@ vinyl@^2.0.0, vinyl@^2.1.0, vinyl@^2.2.0:
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
vite@2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/vite/-/vite-2.0.5.tgz#ac46857a3fa8686d077921e61bd48a986931df1d"
integrity sha512-QTgEDbq1WsTtr6j+++ewjhBFEk6c8v0xz4fb/OWJQKNYU8ZZtphOshwOqAlnarSstPBtWCBR0tsugXx6ajfoUg==
vite@2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/vite/-/vite-2.1.3.tgz#a31a844d26d3846b5a78f06970d1ea1f8a442955"
integrity sha512-bUzArZIUwADVJS/3ywCr4KKFn3a7izs4M87ZDlAlY2V34E4g1kH6p3sVNAh8/IXCn/56fwgMh3rRavPUW7qEQQ==
dependencies:
esbuild "^0.8.52"
esbuild "^0.9.3"
postcss "^8.2.1"
resolve "^1.19.0"
rollup "^2.38.5"
@@ -35047,10 +35283,10 @@ vue-style-loader@4.1.2, vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
hash-sum "^1.0.2"
loader-utils "^1.0.2"
vue-template-compiler@2.6.11:
version "2.6.11"
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
vue-template-compiler@2.6.12:
version "2.6.12"
resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e"
integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==
dependencies:
de-indent "^1.0.2"
he "^1.1.0"
@@ -35060,16 +35296,20 @@ vue-template-es2015-compiler@^1.9.0:
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
vue@2.6.11:
version "2.6.11"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==
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.0.9:
version "3.0.9"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.0.9.tgz#c68ffc0e4aa2b0f1905124a9037b6e352de469ad"
integrity sha512-MOvqDpvDslMWJo5kyGW1nTsTIPAuSzgVqmlzSQInIEqkHOu16pNbXuTjnG7jc/yIvQYFSQZqv6Pvad0iO5QkyQ==
dependencies:
"@vue/compiler-dom" "3.0.9"
"@vue/runtime-dom" "3.0.9"
"@vue/shared" "3.0.9"
vuex@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.1.1.tgz#0c264bfe30cdbccf96ab9db3177d211828a5910e"