Merge remote-tracking branch 'upstream/minor'

This commit is contained in:
三咲智子 Kevin Deng 2023-12-26 23:45:32 +08:00
commit 116c3f37ae
No known key found for this signature in database
GPG Key ID: 69992F2250DFD93E
48 changed files with 785 additions and 380 deletions

View File

@ -63,7 +63,7 @@ Hi! I'm really excited that you are interested in contributing to Vue.js. Before
You will need [Node.js](https://nodejs.org) **version 18.12+**, and [PNPM](https://pnpm.io) **version 8+**.
We also recommend installing [ni](https://github.com/antfu/ni) to help switching between repos using different package managers. `ni` also provides the handy `nr` command which running npm scripts easier.
We also recommend installing [@antfu/ni](https://github.com/antfu/ni) to help switching between repos using different package managers. `ni` also provides the handy `nr` command which running npm scripts easier.
After cloning the repo, run:
@ -86,11 +86,11 @@ The project uses [simple-git-hooks](https://github.com/toplenboren/simple-git-ho
- Type check the entire project
- Automatically format changed files using Prettier
- Verify commit message format (logic in `scripts/verifyCommit.js`)
- Verify commit message format (logic in `scripts/verify-commit.js`)
## Scripts
**The examples below will be using the `nr` command from the [ni](https://github.com/antfu/ni) package.** You can also use plain `npm run`, but you will need to pass all additional arguments after the command after an extra `--`. For example, `nr build runtime --all` is equivalent to `npm run build -- runtime --all`.
**The examples below will be using the `nr` command from the [@antfu/ni](https://github.com/antfu/ni) package.** You can also use plain `npm run`, but you will need to pass all additional arguments after the command after an extra `--`. For example, `nr build runtime --all` is equivalent to `npm run build -- runtime --all`.
The `run-s` and `run-p` commands found in some scripts are from [npm-run-all](https://github.com/mysticatea/npm-run-all) for orchestrating multiple scripts. `run-s` means "run in sequence" while `run-p` means "run in parallel".

View File

@ -1,3 +1,56 @@
# [3.4.0-rc.2](https://github.com/vuejs/core/compare/v3.4.0-rc.1...v3.4.0-rc.2) (2023-12-26)
### Bug Fixes
* **deps:** update dependency @vue/repl to ^3.1.0 ([#9911](https://github.com/vuejs/core/issues/9911)) ([f96c413](https://github.com/vuejs/core/commit/f96c413e8ef2f24cacda5bb499492922f62c6e8b))
* **types:** fix distribution of union types when unwrapping setup bindings ([#9909](https://github.com/vuejs/core/issues/9909)) ([0695c69](https://github.com/vuejs/core/commit/0695c69e0dfaf99882a623fe75b433c9618ea648)), closes [#9903](https://github.com/vuejs/core/issues/9903)
* **warning:** ensure prod hydration warnings actually work ([b4ebe7a](https://github.com/vuejs/core/commit/b4ebe7ae8b904f28cdda33caf87bc05718d3a08a))
### Features
* **compiler-sfc:** export aggregated error messages for compiler-core and compiler-dom ([25c726e](https://github.com/vuejs/core/commit/25c726eca81fc384b41fafbeba5e8dfcda1f030f))
# [3.4.0-rc.1](https://github.com/vuejs/core/compare/v3.4.0-beta.4...v3.4.0-rc.1) (2023-12-25)
### Bug Fixes
* **compiler-core:** fix parsing `<script setup>` generics with > ([7aa3f25](https://github.com/vuejs/core/commit/7aa3f250f26d58ee2db82af907de8b9105e6e418)), closes [#9890](https://github.com/vuejs/core/issues/9890)
* **compiler-sfc:** fix type resolution for shared type w/ different generic parameters ([a8d0b1b](https://github.com/vuejs/core/commit/a8d0b1b38b092ec2d10b32bedcee2eea33b77657)), closes [#9871](https://github.com/vuejs/core/issues/9871)
* **ssr:** avoid hydration mismatch warning for classes with different order ([e585b0d](https://github.com/vuejs/core/commit/e585b0db43150c8b8b3d78f71e12efccc018a38d))
# [3.4.0-beta.4](https://github.com/vuejs/core/compare/v3.3.13...v3.4.0-beta.4) (2023-12-19)
### Bug Fixes
* **compile-sfc:** fix identifier prefixing edge case caused by reused AST ([#9867](https://github.com/vuejs/core/issues/9867)) ([eb51b23](https://github.com/vuejs/core/commit/eb51b23d8512f15665d6f8bcdfd51582e0cd8ce8)), closes [#9853](https://github.com/vuejs/core/issues/9853) [#9863](https://github.com/vuejs/core/issues/9863)
* **ssr:** fix hydration prop mismatch check for class on SVG elements ([e8448b0](https://github.com/vuejs/core/commit/e8448b018d9f837c08eace90cab404a27f68e31a))
### Features
* **runtime-core:** throw real error when scheduler detects infinite loop during dev ([#7447](https://github.com/vuejs/core/issues/7447)) ([1d79b64](https://github.com/vuejs/core/commit/1d79b64ebce884d97136d71aa722347470b13e35)), closes [#7437](https://github.com/vuejs/core/issues/7437)
## [3.3.13](https://github.com/vuejs/core/compare/v3.3.12...v3.3.13) (2023-12-19)
### Bug Fixes
* **compiler-core:** fix v-on with modifiers on inline expression of undefined ([#9866](https://github.com/vuejs/core/issues/9866)) ([bae79dd](https://github.com/vuejs/core/commit/bae79ddf8564a2da4a5365cfeb8d811990f42335)), closes [#9865](https://github.com/vuejs/core/issues/9865)
* **runtime-dom:** cache event handlers by key/modifiers ([#9851](https://github.com/vuejs/core/issues/9851)) ([04d2c05](https://github.com/vuejs/core/commit/04d2c05054c26b02fbc1d84839b0ed5cd36455b6)), closes [#9849](https://github.com/vuejs/core/issues/9849)
* **types:** extract properties from extended collections ([#9854](https://github.com/vuejs/core/issues/9854)) ([24b1c1d](https://github.com/vuejs/core/commit/24b1c1dd57fd55d998aa231a147500e010b10219)), closes [#9852](https://github.com/vuejs/core/issues/9852)
# [3.4.0-beta.3](https://github.com/vuejs/core/compare/v3.3.12...v3.4.0-beta.3) (2023-12-16)

View File

@ -1,7 +1,7 @@
{
"private": true,
"version": "0.0.0-vapor",
"packageManager": "pnpm@8.12.0",
"packageManager": "pnpm@8.12.1",
"type": "module",
"scripts": {
"dev": "node scripts/dev.js vue vue-vapor",
@ -60,8 +60,8 @@
"node": ">=18.12.0"
},
"devDependencies": {
"@babel/parser": "^7.23.5",
"@babel/types": "^7.23.5",
"@babel/parser": "^7.23.6",
"@babel/types": "^7.23.6",
"@codspeed/vitest-plugin": "^2.3.1",
"@rollup/plugin-alias": "^5.0.1",
"@rollup/plugin-commonjs": "^25.0.7",
@ -71,16 +71,16 @@
"@rollup/plugin-terser": "^0.4.4",
"@types/hash-sum": "^1.0.2",
"@types/minimist": "^1.2.5",
"@types/node": "^20.10.4",
"@types/node": "^20.10.5",
"@types/semver": "^7.5.5",
"@typescript-eslint/parser": "^6.13.2",
"@vitest/coverage-istanbul": "^1.0.4",
"@typescript-eslint/parser": "^6.15.0",
"@vitest/coverage-istanbul": "^1.1.0",
"@vue/consolidate": "0.17.3",
"conventional-changelog-cli": "^4.1.0",
"enquirer": "^2.4.1",
"esbuild": "^0.19.5",
"esbuild-plugin-polyfill-node": "^0.3.0",
"eslint": "^8.55.0",
"eslint": "^8.56.0",
"eslint-define-config": "^1.24.1",
"eslint-plugin-jest": "^27.6.0",
"estree-walker": "^2.0.2",
@ -90,14 +90,14 @@
"lodash": "^4.17.21",
"magic-string": "^0.30.5",
"markdown-table": "^3.0.3",
"marked": "^11.0.1",
"marked": "^11.1.0",
"minimist": "^1.2.8",
"npm-run-all": "^4.1.5",
"picocolors": "^1.0.0",
"prettier": "^3.1.1",
"pretty-bytes": "^6.1.1",
"pug": "^3.0.2",
"puppeteer": "~21.6.0",
"puppeteer": "~21.6.1",
"rimraf": "^5.0.5",
"rollup": "^4.1.4",
"rollup-plugin-dts": "^6.1.0",
@ -109,9 +109,9 @@
"terser": "^5.22.0",
"todomvc-app-css": "^2.4.3",
"tslib": "^2.6.2",
"tsx": "^4.6.2",
"tsx": "^4.7.0",
"typescript": "^5.2.2",
"vite": "^5.0.5",
"vitest": "^1.0.4"
"vitest": "^1.1.0"
}
}

View File

@ -838,9 +838,9 @@ exports[`compiler: parse > Errors > EOF_BEFORE_TAG_NAME > <template>< 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 13,
"column": 12,
"line": 1,
"offset": 12,
"offset": 11,
},
"source": "<template><",
"start": {
@ -908,9 +908,9 @@ exports[`compiler: parse > Errors > EOF_BEFORE_TAG_NAME > <template></ 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 14,
"column": 13,
"line": 1,
"offset": 13,
"offset": 12,
},
"source": "<template></",
"start": {
@ -962,9 +962,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[ 1`]
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<svg><![CDATA[",
"start": {
@ -983,9 +983,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[ 1`]
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<template><svg><![CDATA[",
"start": {
@ -1055,9 +1055,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[cdata
"codegenNode": undefined,
"loc": {
"end": {
"column": 31,
"column": 30,
"line": 1,
"offset": 30,
"offset": 29,
},
"source": "<svg><![CDATA[cdata",
"start": {
@ -1076,9 +1076,9 @@ exports[`compiler: parse > Errors > EOF_IN_CDATA > <template><svg><![CDATA[cdata
"codegenNode": undefined,
"loc": {
"end": {
"column": 31,
"column": 30,
"line": 1,
"offset": 30,
"offset": 29,
},
"source": "<template><svg><![CDATA[cdata",
"start": {
@ -1128,9 +1128,9 @@ exports[`compiler: parse > Errors > EOF_IN_COMMENT > <template><!-- 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 16,
"column": 15,
"line": 1,
"offset": 15,
"offset": 14,
},
"source": "<template><!--",
"start": {
@ -1198,9 +1198,9 @@ exports[`compiler: parse > Errors > EOF_IN_COMMENT > <template><!--comment 1`] =
"codegenNode": undefined,
"loc": {
"end": {
"column": 23,
"column": 22,
"line": 1,
"offset": 22,
"offset": 21,
},
"source": "<template><!--comment",
"start": {
@ -1250,9 +1250,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <div></div 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 12,
"column": 11,
"line": 1,
"offset": 11,
"offset": 10,
},
"source": "<div></div",
"start": {
@ -1302,9 +1302,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 17,
"column": 16,
"line": 1,
"offset": 16,
"offset": 15,
},
"source": "<template><div ",
"start": {
@ -1354,9 +1354,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 16,
"column": 15,
"line": 1,
"offset": 15,
"offset": 14,
},
"source": "<template><div",
"start": {
@ -1406,9 +1406,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 20,
"column": 19,
"line": 1,
"offset": 19,
"offset": 18,
},
"source": "<template><div id ",
"start": {
@ -1458,9 +1458,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id = 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 21,
"column": 20,
"line": 1,
"offset": 20,
"offset": 19,
},
"source": "<template><div id =",
"start": {
@ -1510,9 +1510,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 19,
"column": 18,
"line": 1,
"offset": 18,
"offset": 17,
},
"source": "<template><div id",
"start": {
@ -1562,9 +1562,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 24,
"column": 23,
"line": 1,
"offset": 23,
"offset": 22,
},
"source": "<template><div id="abc",
"start": {
@ -1614,9 +1614,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc" 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 25,
"column": 24,
"line": 1,
"offset": 24,
"offset": 23,
},
"source": "<template><div id="abc"",
"start": {
@ -1684,9 +1684,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id="abc"/ 1`] =
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<template><div id="abc"/",
"start": {
@ -1736,9 +1736,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 24,
"column": 23,
"line": 1,
"offset": 23,
"offset": 22,
},
"source": "<template><div id='abc",
"start": {
@ -1788,9 +1788,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc' 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 25,
"column": 24,
"line": 1,
"offset": 24,
"offset": 23,
},
"source": "<template><div id='abc'",
"start": {
@ -1858,9 +1858,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id='abc'/ 1`] =
"codegenNode": undefined,
"loc": {
"end": {
"column": 26,
"column": 25,
"line": 1,
"offset": 25,
"offset": 24,
},
"source": "<template><div id='abc'/",
"start": {
@ -1928,9 +1928,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id=abc / 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 25,
"column": 24,
"line": 1,
"offset": 24,
"offset": 23,
},
"source": "<template><div id=abc /",
"start": {
@ -1980,9 +1980,9 @@ exports[`compiler: parse > Errors > EOF_IN_TAG > <template><div id=abc 1`] = `
"codegenNode": undefined,
"loc": {
"end": {
"column": 23,
"column": 22,
"line": 1,
"offset": 22,
"offset": 21,
},
"source": "<template><div id=abc",
"start": {

View File

@ -984,6 +984,89 @@ describe('compiler: parse', () => {
})
})
test('attribute value with >', () => {
const ast = baseParse(
'<script setup lang="ts" generic="T extends Record<string,string>"></script>',
{ parseMode: 'sfc' }
)
const element = ast.children[0] as ElementNode
expect(element).toMatchObject({
type: NodeTypes.ELEMENT,
ns: Namespaces.HTML,
tag: 'script',
tagType: ElementTypes.ELEMENT,
codegenNode: undefined,
children: [],
innerLoc: {
start: { column: 67, line: 1, offset: 66 },
end: { column: 67, line: 1, offset: 66 }
},
props: [
{
loc: {
source: 'setup',
end: { column: 14, line: 1, offset: 13 },
start: { column: 9, line: 1, offset: 8 }
},
name: 'setup',
nameLoc: {
source: 'setup',
end: { column: 14, line: 1, offset: 13 },
start: { column: 9, line: 1, offset: 8 }
},
type: NodeTypes.ATTRIBUTE,
value: undefined
},
{
loc: {
source: 'lang="ts"',
end: { column: 24, line: 1, offset: 23 },
start: { column: 15, line: 1, offset: 14 }
},
name: 'lang',
nameLoc: {
source: 'lang',
end: { column: 19, line: 1, offset: 18 },
start: { column: 15, line: 1, offset: 14 }
},
type: NodeTypes.ATTRIBUTE,
value: {
content: 'ts',
loc: {
source: '"ts"',
end: { column: 24, line: 1, offset: 23 },
start: { column: 20, line: 1, offset: 19 }
},
type: NodeTypes.TEXT
}
},
{
loc: {
source: 'generic="T extends Record<string,string>"',
end: { column: 66, line: 1, offset: 65 },
start: { column: 25, line: 1, offset: 24 }
},
name: 'generic',
nameLoc: {
source: 'generic',
end: { column: 32, line: 1, offset: 31 },
start: { column: 25, line: 1, offset: 24 }
},
type: NodeTypes.ATTRIBUTE,
value: {
content: 'T extends Record<string,string>',
loc: {
source: '"T extends Record<string,string>"',
end: { column: 66, line: 1, offset: 65 },
start: { column: 33, line: 1, offset: 32 }
},
type: NodeTypes.TEXT
}
}
]
})
})
test('multiple attributes', () => {
const ast = baseParse('<div id=a class="c" inert style=\'\'></div>')
const element = ast.children[0] as ElementNode

View File

@ -95,6 +95,10 @@ describe('isMemberExpression', () => {
expect(fn(`123[a]`)).toBe(true)
expect(fn(`foo() as string`)).toBe(false)
expect(fn(`a + b as string`)).toBe(false)
// #9865
expect(fn('""')).toBe(false)
expect(fn('undefined')).toBe(false)
expect(fn('null')).toBe(false)
})
})

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-core",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/compiler-core",
"main": "index.js",
"module": "dist/compiler-core.esm-bundler.js",
@ -32,13 +32,13 @@
},
"homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-core#readme",
"dependencies": {
"@babel/parser": "^7.23.5",
"@babel/parser": "^7.23.6",
"@vue/shared": "workspace:*",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
},
"devDependencies": {
"@babel/types": "^7.23.5"
"@babel/types": "^7.23.6"
}
}

View File

@ -55,14 +55,24 @@ export function walkIdentifiers(
// mark property in destructure pattern
;(node as any).inPattern = true
} else if (isFunctionType(node)) {
// walk function expressions and add its arguments to known identifiers
// so that we don't prefix them
walkFunctionParams(node, id => markScopeIdentifier(node, id, knownIds))
if (node.scopeIds) {
node.scopeIds.forEach(id => markKnownIds(id, knownIds))
} else {
// walk function expressions and add its arguments to known identifiers
// so that we don't prefix them
walkFunctionParams(node, id =>
markScopeIdentifier(node, id, knownIds)
)
}
} else if (node.type === 'BlockStatement') {
// #3445 record block-level local variables
walkBlockDeclarations(node, id =>
markScopeIdentifier(node, id, knownIds)
)
if (node.scopeIds) {
node.scopeIds.forEach(id => markKnownIds(id, knownIds))
} else {
// #3445 record block-level local variables
walkBlockDeclarations(node, id =>
markScopeIdentifier(node, id, knownIds)
)
}
}
},
leave(node: Node & { scopeIds?: Set<string> }, parent: Node | undefined) {
@ -227,6 +237,14 @@ export function extractIdentifiers(
return nodes
}
function markKnownIds(name: string, knownIds: Record<string, number>) {
if (name in knownIds) {
knownIds[name]++
} else {
knownIds[name] = 1
}
}
function markScopeIdentifier(
node: Node & { scopeIds?: Set<string> },
child: Identifier,
@ -236,11 +254,7 @@ function markScopeIdentifier(
if (node.scopeIds && node.scopeIds.has(name)) {
return
}
if (name in knownIds) {
knownIds[name]++
} else {
knownIds[name] = 1
}
markKnownIds(name, knownIds)
;(node.scopeIds || (node.scopeIds = new Set())).add(name)
}

View File

@ -145,13 +145,6 @@ const tokenizer = new Tokenizer(stack, {
loc: getLoc(start - 1, end),
codegenNode: undefined
}
if (tokenizer.inSFCRoot) {
// in SFC mode, generate locations for root-level tags' inner content.
currentOpenTag.innerLoc = getLoc(
end + fastForward(end, CharCodes.Gt) + 1,
end
)
}
},
onopentagend(end) {
@ -572,6 +565,10 @@ function getSlice(start: number, end: number) {
}
function endOpenTag(end: number) {
if (tokenizer.inSFCRoot) {
// in SFC mode, generate locations for root-level tags' inner content.
currentOpenTag!.innerLoc = getLoc(end + 1, end + 1)
}
addNode(currentOpenTag!)
const { tag, ns } = currentOpenTag!
if (ns === Namespaces.HTML && currentOptions.isPreTag(tag)) {
@ -616,7 +613,7 @@ function onCloseTag(el: ElementNode, end: number, isImplied = false) {
// implied close, end should be backtracked to close
setLocEnd(el.loc, backTrack(end, CharCodes.Lt))
} else {
setLocEnd(el.loc, end + fastForward(end, CharCodes.Gt) + 1)
setLocEnd(el.loc, end + 1)
}
if (tokenizer.inSFCRoot) {
@ -738,17 +735,6 @@ function onCloseTag(el: ElementNode, end: number, isImplied = false) {
}
}
function fastForward(start: number, c: number) {
let offset = 0
while (
currentInput.charCodeAt(start + offset) !== CharCodes.Gt &&
start + offset < currentInput.length
) {
offset++
}
return offset
}
function backTrack(index: number, c: number) {
let i = index
while (currentInput.charCodeAt(i) !== c && i >= 0) i--

View File

@ -169,7 +169,7 @@ export const isMemberExpressionNode = __BROWSER__
return (
ret.type === 'MemberExpression' ||
ret.type === 'OptionalMemberExpression' ||
ret.type === 'Identifier'
(ret.type === 'Identifier' && ret.name !== 'undefined')
)
} catch (e) {
return false

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-dom",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/compiler-dom",
"main": "index.js",
"module": "dist/compiler-dom.esm-bundler.js",

View File

@ -1383,6 +1383,21 @@ return { D, C, B, Foo }
})"
`;
exports[`SFC compile <script setup> > with TypeScript > with generic attribute 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
type Bar = {}
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { }
}
})"
`;
exports[`SFC genDefaultAs > <script setup> only 1`] = `
"const a = 1

View File

@ -938,6 +938,14 @@ describe('SFC compile <script setup>', () => {
expect(content).toMatch(`return { get Baz() { return Baz } }`)
assertCode(content)
})
test('with generic attribute', () => {
const { content } = compile(`
<script setup lang="ts" generic="T extends Record<string,string>">
type Bar = {}
</script>`)
assertCode(content)
})
})
describe('async/await detection', () => {

View File

@ -939,6 +939,34 @@ describe('resolveType', () => {
manufacturer: ['Object']
})
})
// #9871
test('shared generics with different args', () => {
const files = {
'/foo.ts': `export interface Foo<T> { value: T }`
}
const { props } = resolve(
`import type { Foo } from './foo'
defineProps<Foo<string>>()`,
files,
undefined,
`/One.vue`
)
expect(props).toStrictEqual({
value: ['String']
})
const { props: props2 } = resolve(
`import type { Foo } from './foo'
defineProps<Foo<number>>()`,
files,
undefined,
`/Two.vue`,
false /* do not invalidate cache */
)
expect(props2).toStrictEqual({
value: ['Number']
})
})
})
describe('errors', () => {
@ -1012,7 +1040,8 @@ function resolve(
code: string,
files: Record<string, string> = {},
options?: Partial<SFCScriptCompileOptions>,
sourceFileName: string = '/Test.vue'
sourceFileName: string = '/Test.vue',
invalidateCache = true
) {
const { descriptor } = parse(`<script setup lang="ts">\n${code}\n</script>`, {
filename: sourceFileName
@ -1030,8 +1059,10 @@ function resolve(
...options
})
for (const file in files) {
invalidateTypeCache(file)
if (invalidateCache) {
for (const file in files) {
invalidateTypeCache(file)
}
}
// ctx.userImports is collected when calling compileScript(), but we are

View File

@ -4,6 +4,7 @@ import {
SFCTemplateCompileOptions
} from '../src/compileTemplate'
import { parse, SFCTemplateBlock } from '../src/parse'
import { compileScript } from '../src'
function compile(opts: Omit<SFCTemplateCompileOptions, 'id'>) {
return compileTemplate({
@ -397,6 +398,35 @@ test('dynamic v-on + static v-on should merged', () => {
expect(result.code).toMatchSnapshot()
})
// #9853 regression found in Nuxt tests
// walkIdentifiers can get called multiple times on the same node
// due to #9729 calling it during SFC template usage check.
// conditions needed:
// 1. `<script setup lang="ts">`
// 2. Has import
// 3. inlineTemplate: false
// 4. AST being reused
test('prefixing edge case for reused AST', () => {
const src = `
<script setup lang="ts">
import { Foo } from './foo'
</script>
<template>
{{ list.map((t, index) => ({ t: t })) }}
</template>
`
const { descriptor } = parse(src)
// compileScript triggers importUsageCheck
compileScript(descriptor, { id: 'xxx' })
const { code } = compileTemplate({
id: 'xxx',
filename: 'test.vue',
ast: descriptor.template!.ast,
source: descriptor.template!.content
})
expect(code).not.toMatch(`_ctx.t`)
})
interface Pos {
line: number
column: number

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-sfc",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/compiler-sfc",
"main": "dist/compiler-sfc.cjs.js",
"module": "dist/compiler-sfc.esm-browser.js",
@ -32,7 +32,7 @@
},
"homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/compiler-sfc#readme",
"dependencies": {
"@babel/parser": "^7.23.5",
"@babel/parser": "^7.23.6",
"@vue/compiler-core": "workspace:*",
"@vue/compiler-dom": "workspace:*",
"@vue/compiler-ssr": "workspace:*",
@ -43,7 +43,7 @@
"source-map-js": "^1.0.2"
},
"devDependencies": {
"@babel/types": "^7.23.5",
"@babel/types": "^7.23.6",
"@vue/consolidate": "^0.17.3",
"hash-sum": "^2.0.0",
"lru-cache": "^10.1.0",

View File

@ -834,6 +834,7 @@ export function compileScript(
// inline it right here
const { code, ast, preamble, tips, errors } = compileTemplate({
filename,
ast: sfc.template.ast,
source: sfc.template.content,
inMap: sfc.template.map,
...options.templateOptions,

View File

@ -12,6 +12,17 @@ import { SFCParseResult, parseCache as _parseCache } from './parse'
// #9521 export parseCache as a simple map to avoid exposing LRU types
export const parseCache = _parseCache as Map<string, SFCParseResult>
// error messages
import {
errorMessages as coreErrorMessages,
DOMErrorMessages
} from '@vue/compiler-dom'
export const errorMessages = {
...coreErrorMessages,
...DOMErrorMessages
}
// Utilities
export { parse as babelParse } from '@babel/parser'
import MagicString from 'magic-string'

View File

@ -115,7 +115,7 @@ export class TypeScope {
public types: Record<string, ScopeTypeNode> = Object.create(null),
public declares: Record<string, ScopeTypeNode> = Object.create(null)
) {}
isGenericScope = false
resolvedImportSources: Record<string, string> = Object.create(null)
exportedTypes: Record<string, ScopeTypeNode> = Object.create(null)
exportedDeclares: Record<string, ScopeTypeNode> = Object.create(null)
@ -146,15 +146,17 @@ export function resolveTypeElements(
scope?: TypeScope,
typeParameters?: Record<string, Node>
): ResolvedElements {
if (node._resolvedElements) {
const canCache = !typeParameters
if (canCache && node._resolvedElements) {
return node._resolvedElements
}
return (node._resolvedElements = innerResolveTypeElements(
const resolved = innerResolveTypeElements(
ctx,
node,
node._ownerScope || scope || ctxToScope(ctx),
typeParameters
))
)
return canCache ? (node._resolvedElements = resolved) : resolved
}
function innerResolveTypeElements(
@ -215,17 +217,18 @@ function innerResolveTypeElements(
}
const resolved = resolveTypeReference(ctx, node, scope)
if (resolved) {
const typeParams: Record<string, Node> = Object.create(null)
let typeParams: Record<string, Node> | undefined
if (
(resolved.type === 'TSTypeAliasDeclaration' ||
resolved.type === 'TSInterfaceDeclaration') &&
resolved.typeParameters &&
node.typeParameters
) {
typeParams = Object.create(null)
resolved.typeParameters.params.forEach((p, i) => {
let param = typeParameters && typeParameters[p.name]
if (!param) param = node.typeParameters!.params[i]
typeParams[p.name] = param
typeParams![p.name] = param
})
}
return resolveTypeElements(
@ -322,6 +325,7 @@ function typeElementsToMap(
// capture generic parameters on node's scope
if (typeParameters) {
scope = createChildScope(scope)
scope.isGenericScope = true
Object.assign(scope.types, typeParameters)
}
;(e as MaybeWithScope)._ownerScope = scope
@ -694,16 +698,18 @@ function resolveTypeReference(
name?: string,
onlyExported = false
): ScopeTypeNode | undefined {
if (node._resolvedReference) {
const canCache = !scope?.isGenericScope
if (canCache && node._resolvedReference) {
return node._resolvedReference
}
return (node._resolvedReference = innerResolveTypeReference(
const resolved = innerResolveTypeReference(
ctx,
scope || ctxToScope(ctx),
name || getReferenceName(node),
node,
onlyExported
))
)
return canCache ? (node._resolvedReference = resolved) : resolved
}
function innerResolveTypeReference(

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-ssr",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/compiler-ssr",
"main": "dist/compiler-ssr.cjs.js",
"types": "dist/compiler-ssr.d.ts",

View File

@ -77,6 +77,18 @@ describe('should unwrap Map correctly', () => {
expectType<number>(wm2.get({})!.wrap)
})
describe('should unwrap extended Map correctly', () => {
class ExtendendMap1 extends Map<string, { wrap: Ref<number> }> {
foo = ref('foo')
bar = 1
}
const emap1 = reactive(new ExtendendMap1())
expectType<string>(emap1.foo)
expectType<number>(emap1.bar)
expectType<number>(emap1.get('a')!.wrap)
})
describe('should unwrap Set correctly', () => {
const set = reactive(new Set<Ref<number>>())
expectType<Set<Ref<number>>>(set)
@ -90,3 +102,14 @@ describe('should unwrap Set correctly', () => {
const ws2 = reactive(new WeakSet<{ wrap: Ref<number> }>())
expectType<WeakSet<{ wrap: number }>>(ws2)
})
describe('should unwrap extended Set correctly', () => {
class ExtendendSet1 extends Set<{ wrap: Ref<number> }> {
foo = ref('foo')
bar = 1
}
const eset1 = reactive(new ExtendendSet1())
expectType<string>(eset1.foo)
expectType<number>(eset1.bar)
})

View File

@ -244,13 +244,19 @@ expectType<typeof r1>(p1)
// proxyRefs: `ShallowUnwrapRef`
const r2 = {
a: ref(1),
c: computed(() => 1),
u: undefined,
obj: {
k: ref('foo')
}
},
union: Math.random() > 0 - 5 ? ref({ name: 'yo' }) : null
}
const p2 = proxyRefs(r2)
expectType<number>(p2.a)
expectType<number>(p2.c)
expectType<undefined>(p2.u)
expectType<Ref<string>>(p2.obj.k)
expectType<{ name: string } | null>(p2.union)
// toRef and toRefs
{

View File

@ -1,6 +1,6 @@
{
"name": "@vue/reactivity",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/reactivity",
"main": "index.js",
"module": "dist/reactivity.esm-bundler.js",

View File

@ -490,15 +490,11 @@ type BaseTypes = string | number | boolean
export interface RefUnwrapBailTypes {}
export type ShallowUnwrapRef<T> = {
[K in keyof T]: T[K] extends Ref<infer V>
? V // if `V` is `unknown` that means it does not extend `Ref` and is undefined
: T[K] extends Ref<infer V> | undefined
? unknown extends V
? undefined
: V | undefined
: T[K]
[K in keyof T]: DistrubuteRef<T[K]>
}
type DistrubuteRef<T> = T extends Ref<infer V> ? V : T
export type UnwrapRef<T> = T extends ShallowRef<infer V>
? V
: T extends Ref<infer V>
@ -513,13 +509,14 @@ export type UnwrapRefSimple<T> = T extends
| { [RawSymbol]?: true }
? T
: T extends Map<infer K, infer V>
? Map<K, UnwrapRefSimple<V>>
? Map<K, UnwrapRefSimple<V>> & UnwrapRef<Omit<T, keyof Map<any, any>>>
: T extends WeakMap<infer K, infer V>
? WeakMap<K, UnwrapRefSimple<V>>
? WeakMap<K, UnwrapRefSimple<V>> &
UnwrapRef<Omit<T, keyof WeakMap<any, any>>>
: T extends Set<infer V>
? Set<UnwrapRefSimple<V>>
? Set<UnwrapRefSimple<V>> & UnwrapRef<Omit<T, keyof Set<any>>>
: T extends WeakSet<infer V>
? WeakSet<UnwrapRefSimple<V>>
? WeakSet<UnwrapRefSimple<V>> & UnwrapRef<Omit<T, keyof WeakSet<any>>>
: T extends ReadonlyArray<any>
? { [K in keyof T]: UnwrapRefSimple<T[K]> }
: T extends object & { [ShallowReactiveMarker]?: never }

View File

@ -1406,6 +1406,14 @@ describe('SSR hydration', () => {
mountWithHydration(`<div class="foo bar"></div>`, () =>
h('div', { class: 'foo bar' })
)
// SVG classes
mountWithHydration(`<svg class="foo bar"></svg>`, () =>
h('svg', { class: 'foo bar' })
)
// class with different order
mountWithHydration(`<div class="foo bar"></div>`, () =>
h('div', { class: 'bar foo' })
)
expect(`Hydration class mismatch`).not.toHaveBeenWarned()
mountWithHydration(`<div class="foo bar"></div>`, () =>
h('div', { class: 'foo' })

View File

@ -1,6 +1,6 @@
{
"name": "@vue/runtime-core",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/runtime-core",
"main": "index.js",
"module": "dist/runtime-core.esm-bundler.js",

View File

@ -21,7 +21,7 @@ enum DevtoolsHooks {
PERFORMANCE_END = 'perf:end'
}
interface DevtoolsHook {
export interface DevtoolsHook {
enabled?: boolean
emit: (event: string, ...payload: any[]) => void
on: (event: string, handler: Function) => void

View File

@ -55,7 +55,7 @@ export const ErrorTypeStrings: Record<LifecycleHooks | ErrorCodes, string> = {
[ErrorCodes.ASYNC_COMPONENT_LOADER]: 'async component loader',
[ErrorCodes.SCHEDULER]:
'scheduler flush. This is likely a Vue internals bug. ' +
'Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core'
'Please open an issue at https://github.com/vuejs/core .'
}
export type ErrorTypes = LifecycleHooks | ErrorCodes

View File

@ -718,9 +718,11 @@ function propHasMismatch(el: Element, key: string, clientValue: any): boolean {
let actual: any
let expected: any
if (key === 'class') {
actual = el.className
expected = normalizeClass(clientValue)
if (actual !== expected) {
// classes might be in different order, but that doesn't affect cascade
// so we just need to check if the class lists contain the same classes.
actual = toClassSet(el.getAttribute('class') || '')
expected = toClassSet(normalizeClass(clientValue))
if (!isSetEqual(actual, expected)) {
mismatchType = mismatchKey = `class`
}
} else if (key === 'style') {
@ -765,3 +767,19 @@ function propHasMismatch(el: Element, key: string, clientValue: any): boolean {
}
return false
}
function toClassSet(str: string): Set<string> {
return new Set(str.trim().split(/\s+/))
}
function isSetEqual(a: Set<string>, b: Set<string>): boolean {
if (a.size !== b.size) {
return false
}
for (const s of a) {
if (!b.has(s)) {
return false
}
}
return true
}

View File

@ -116,7 +116,9 @@ export { useSSRContext, ssrContextKey } from './helpers/useSsrContext'
export { createRenderer, createHydrationRenderer } from './renderer'
export { queuePostFlushCb } from './scheduler'
export { warn } from './warning'
import { warn as _warn } from './warning'
export const warn = (__DEV__ ? _warn : NOOP) as typeof _warn
/** @internal */
export { assertNumber } from './warning'
export {
@ -146,11 +148,22 @@ import { ErrorTypeStrings as _ErrorTypeStrings } from './errorHandling'
* @internal
*/
export const ErrorTypeStrings = (
__ESM_BUNDLER__ || __DEV__ ? _ErrorTypeStrings : null
__ESM_BUNDLER__ || __NODE_JS__ || __DEV__ ? _ErrorTypeStrings : null
) as typeof _ErrorTypeStrings
// For devtools
export { devtools, setDevtoolsHook } from './devtools'
import {
devtools as _devtools,
setDevtoolsHook as _setDevtoolsHook,
DevtoolsHook
} from './devtools'
export const devtools = (
__DEV__ || __FEATURE_PROD_DEVTOOLS__ ? _devtools : undefined
) as DevtoolsHook
export const setDevtoolsHook = (
__DEV__ || __FEATURE_PROD_DEVTOOLS__ ? _setDevtoolsHook : NOOP
) as typeof _setDevtoolsHook
// Types -------------------------------------------------------------------------
@ -378,6 +391,7 @@ import {
softAssertCompatEnabled
} from './compat/compatConfig'
import { resolveFilter as _resolveFilter } from './helpers/resolveAssets'
import { NOOP } from '@vue/shared'
/**
* @internal only exposed in compat builds

View File

@ -1,7 +1,6 @@
import { ErrorCodes, callWithErrorHandling } from './errorHandling'
import { ErrorCodes, callWithErrorHandling, handleError } from './errorHandling'
import { Awaited, isArray, NOOP } from '@vue/shared'
import { ComponentInternalInstance, getComponentName } from './component'
import { warn } from './warning'
export interface SchedulerJob extends Function {
id?: number
@ -271,14 +270,16 @@ function checkRecursiveUpdates(seen: CountMap, fn: SchedulerJob) {
if (count > RECURSION_LIMIT) {
const instance = fn.ownerInstance
const componentName = instance && getComponentName(instance.type)
warn(
handleError(
`Maximum recursive updates exceeded${
componentName ? ` in component <${componentName}>` : ``
}. ` +
`This means you have a reactive effect that is mutating its own ` +
`dependencies and thus recursively triggering itself. Possible sources ` +
`include component template, render function, updated hook or ` +
`watcher source function.`
`watcher source function.`,
null,
ErrorCodes.APP_ERROR_HANDLER
)
return true
} else {

View File

@ -30,8 +30,6 @@ export function popWarningContext() {
}
export function warn(msg: string, ...args: any[]) {
if (!__DEV__) return
// avoid props formatting or warn handler tracking deps that might be mutated
// during patch, leading to infinite recursion.
pauseTracking()

View File

@ -1,8 +1,8 @@
import { type SpyInstance } from 'vitest'
import { type MockInstance } from 'vitest'
import { render, h } from '@vue/runtime-dom'
describe('customized built-in elements support', () => {
let createElement: SpyInstance
let createElement: MockInstance
afterEach(() => {
createElement.mockRestore()
})

View File

@ -135,4 +135,32 @@ describe('runtime-dom: v-on directive', () => {
handler(event, 'value', true)
expect(fn).toBeCalledWith(event, 'value', true)
})
it('withKeys cache wrapped listener separately for different modifiers', () => {
const el1 = document.createElement('button')
const el2 = document.createElement('button')
const fn = vi.fn()
const handler1 = withKeys(fn, ['a'])
const handler2 = withKeys(fn, ['b'])
expect(handler1 === handler2).toBe(false)
patchEvent(el1, 'onKeyup', null, handler1, null)
patchEvent(el2, 'onKeyup', null, handler2, null)
triggerEvent(el1, 'keyup', e => (e.key = 'a'))
triggerEvent(el2, 'keyup', e => (e.key = 'b'))
expect(fn).toBeCalledTimes(2)
})
it('withModifiers cache wrapped listener separately for different modifiers', () => {
const el1 = document.createElement('button')
const el2 = document.createElement('button')
const fn = vi.fn()
const handler1 = withModifiers(fn, ['ctrl'])
const handler2 = withModifiers(fn, ['shift'])
expect(handler1 === handler2).toBe(false)
patchEvent(el1, 'onClick', null, handler1, null)
patchEvent(el2, 'onClick', null, handler2, null)
triggerEvent(el1, 'click', e => (e.ctrlKey = true))
triggerEvent(el2, 'click', e => (e.shiftKey = true))
expect(fn).toBeCalledTimes(2)
})
})

View File

@ -1,6 +1,6 @@
{
"name": "@vue/runtime-dom",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/runtime-dom",
"main": "index.js",
"module": "dist/runtime-dom.esm-bundler.js",

View File

@ -35,12 +35,14 @@ const modifierGuards: Record<
export const withModifiers = <
T extends (event: Event, ...args: unknown[]) => any
>(
fn: T & { _withMods?: T },
fn: T & { _withMods?: { [key: string]: T } },
modifiers: string[]
) => {
const cache = fn._withMods || (fn._withMods = {})
const cacheKey = modifiers.join('.')
return (
fn._withMods ||
(fn._withMods = ((event, ...args) => {
cache[cacheKey] ||
(cache[cacheKey] = ((event, ...args) => {
for (let i = 0; i < modifiers.length; i++) {
const guard = modifierGuards[modifiers[i]]
if (guard && guard(event, modifiers)) return
@ -66,7 +68,7 @@ const keyNames: Record<string, string | string[]> = {
* @private
*/
export const withKeys = <T extends (event: KeyboardEvent) => any>(
fn: T & { _withKeys?: T },
fn: T & { _withKeys?: { [k: string]: T } },
modifiers: string[]
) => {
let globalKeyCodes: LegacyConfig['keyCodes']
@ -88,9 +90,12 @@ export const withKeys = <T extends (event: KeyboardEvent) => any>(
}
}
const cache: { [k: string]: T } = fn._withKeys || (fn._withKeys = {})
const cacheKey = modifiers.join('.')
return (
fn._withKeys ||
(fn._withKeys = (event => {
cache[cacheKey] ||
(cache[cacheKey] = (event => {
if (!('key' in event)) {
return
}

View File

@ -1,6 +1,6 @@
{
"name": "@vue/server-renderer",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "@vue/server-renderer",
"main": "index.js",
"module": "dist/server-renderer.esm-bundler.js",

View File

@ -13,7 +13,7 @@
"vite": "^5.0.5"
},
"dependencies": {
"@vue/repl": "^3.0.0",
"@vue/repl": "^3.1.0",
"file-saver": "^2.0.5",
"jszip": "^3.10.1",
"vue": "workspace:*"

View File

@ -26,13 +26,17 @@ const setVH = () => {
window.addEventListener('resize', setVH)
setVH()
const useDevMode = ref(true)
const useProdMode = ref(false)
const useSSRMode = ref(false)
let hash = location.hash.slice(1)
if (hash.startsWith('__DEV__')) {
hash = hash.slice(7)
useDevMode.value = true
useProdMode.value = false
}
if (hash.startsWith('__PROD__')) {
hash = hash.slice(8)
useProdMode.value = true
}
if (hash.startsWith('__SSR__')) {
hash = hash.slice(7)
@ -41,7 +45,7 @@ if (hash.startsWith('__SSR__')) {
const store = new ReplStore({
serializedState: hash,
productionMode: !useDevMode.value,
productionMode: useProdMode.value,
defaultVueRuntimeURL: import.meta.env.PROD
? `${location.origin}/vue.runtime.esm-browser.js`
: `${location.origin}/src/vue-dev-proxy`,
@ -56,15 +60,15 @@ const store = new ReplStore({
// enable experimental features
const sfcOptions: SFCOptions = {
script: {
inlineTemplate: !useDevMode.value,
isProd: !useDevMode.value,
inlineTemplate: useProdMode.value,
isProd: useProdMode.value,
propsDestructure: true
},
style: {
isProd: !useDevMode.value
isProd: useProdMode.value
},
template: {
isProd: !useDevMode.value
isProd: useProdMode.value
}
}
@ -73,18 +77,19 @@ watchEffect(() => {
const newHash = store
.serialize()
.replace(/^#/, useSSRMode.value ? `#__SSR__` : `#`)
.replace(/^#/, useDevMode.value ? `#__DEV__` : `#`)
.replace(/^#/, useProdMode.value ? `#__PROD__` : `#`)
history.replaceState({}, '', newHash)
})
function toggleDevMode() {
const dev = (useDevMode.value = !useDevMode.value)
function toggleProdMode() {
const isProd = (useProdMode.value = !useProdMode.value)
sfcOptions.script!.inlineTemplate =
sfcOptions.script!.isProd =
sfcOptions.template!.isProd =
sfcOptions.style!.isProd =
!dev
isProd
store.toggleProduction()
store.setFiles(store.getFiles())
}
function toggleSSR() {
@ -109,10 +114,10 @@ onMounted(() => {
<template>
<Header
:store="store"
:dev="useDevMode"
:prod="useProdMode"
:ssr="useSSRMode"
@toggle-theme="toggleTheme"
@toggle-dev="toggleDevMode"
@toggle-prod="toggleProdMode"
@toggle-ssr="toggleSSR"
@reload-page="reloadPage"
/>

View File

@ -12,13 +12,13 @@ import VersionSelect from './VersionSelect.vue'
const props = defineProps<{
store: ReplStore
dev: boolean
prod: boolean
ssr: boolean
}>()
const emit = defineEmits([
'toggle-theme',
'toggle-ssr',
'toggle-dev',
'toggle-prod',
'reload-page'
])
@ -90,11 +90,11 @@ function toggleDark() {
</VersionSelect>
<button
title="Toggle development production mode"
class="toggle-dev"
:class="{ dev }"
@click="$emit('toggle-dev')"
class="toggle-prod"
:class="{ prod }"
@click="$emit('toggle-prod')"
>
<span>{{ dev ? 'DEV' : 'PROD' }}</span>
<span>{{ prod ? 'PROD' : 'DEV' }}</span>
</button>
<button
title="Toggle server rendering mode"
@ -195,20 +195,20 @@ h1 img {
display: flex;
}
.toggle-dev span,
.toggle-prod span,
.toggle-ssr span {
font-size: 12px;
border-radius: 4px;
padding: 4px 6px;
}
.toggle-dev span {
background: var(--purple);
.toggle-prod span {
background: var(--green);
color: #fff;
}
.toggle-dev.dev span {
background: var(--green);
.toggle-prod.prod span {
background: var(--purple);
}
.toggle-ssr span {

View File

@ -1,6 +1,6 @@
{
"name": "@vue/shared",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "internal utils shared across @vue packages",
"main": "index.js",
"module": "dist/shared.esm-bundler.js",

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compat",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "Vue 3 compatibility build for Vue 2",
"main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js",
@ -38,7 +38,7 @@
},
"homepage": "https://github.com/vuejs/core-vapor/tree/main/packages/vue-compat#readme",
"dependencies": {
"@babel/parser": "^7.23.5",
"@babel/parser": "^7.23.6",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
},

View File

@ -1,6 +1,6 @@
{
"name": "vue",
"version": "3.4.0-beta.3",
"version": "3.4.0-rc.2",
"description": "The progressive JavaScript framework for building modern web UI.",
"main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js",

View File

@ -9,14 +9,14 @@ importers:
.:
devDependencies:
'@babel/parser':
specifier: ^7.23.5
version: 7.23.5
specifier: ^7.23.6
version: 7.23.6
'@babel/types':
specifier: ^7.23.5
version: 7.23.5
specifier: ^7.23.6
version: 7.23.6
'@codspeed/vitest-plugin':
specifier: ^2.3.1
version: 2.3.1(vite@5.0.10)(vitest@1.0.4)
version: 2.3.1(vite@5.0.10)(vitest@1.1.0)
'@rollup/plugin-alias':
specifier: ^5.0.1
version: 5.0.1(rollup@4.1.4)
@ -42,17 +42,17 @@ importers:
specifier: ^1.2.5
version: 1.2.5
'@types/node':
specifier: ^20.10.4
version: 20.10.4
specifier: ^20.10.5
version: 20.10.5
'@types/semver':
specifier: ^7.5.5
version: 7.5.6
'@typescript-eslint/parser':
specifier: ^6.13.2
version: 6.14.0(eslint@8.56.0)(typescript@5.2.2)
specifier: ^6.15.0
version: 6.16.0(eslint@8.56.0)(typescript@5.2.2)
'@vitest/coverage-istanbul':
specifier: ^1.0.4
version: 1.0.4(vitest@1.0.4)
specifier: ^1.1.0
version: 1.1.0(vitest@1.1.0)
'@vue/consolidate':
specifier: 0.17.3
version: 0.17.3
@ -69,7 +69,7 @@ importers:
specifier: ^0.3.0
version: 0.3.0(esbuild@0.19.5)
eslint:
specifier: ^8.55.0
specifier: ^8.56.0
version: 8.56.0
eslint-define-config:
specifier: ^1.24.1
@ -99,7 +99,7 @@ importers:
specifier: ^3.0.3
version: 3.0.3
marked:
specifier: ^11.0.1
specifier: ^11.1.0
version: 11.1.0
minimist:
specifier: ^1.2.8
@ -120,7 +120,7 @@ importers:
specifier: ^3.0.2
version: 3.0.2
puppeteer:
specifier: ~21.6.0
specifier: ~21.6.1
version: 21.6.1(typescript@5.2.2)
rimraf:
specifier: ^5.0.5
@ -156,23 +156,23 @@ importers:
specifier: ^2.6.2
version: 2.6.2
tsx:
specifier: ^4.6.2
version: 4.6.2
specifier: ^4.7.0
version: 4.7.0
typescript:
specifier: ^5.2.2
version: 5.2.2
vite:
specifier: ^5.0.5
version: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
version: 5.0.10(@types/node@20.10.5)(terser@5.22.0)
vitest:
specifier: ^1.0.4
version: 1.0.4(@types/node@20.10.4)(jsdom@23.0.1)(terser@5.22.0)
specifier: ^1.1.0
version: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0)
packages/compiler-core:
dependencies:
'@babel/parser':
specifier: ^7.23.5
version: 7.23.5
specifier: ^7.23.6
version: 7.23.6
'@vue/shared':
specifier: workspace:*
version: link:../shared
@ -187,8 +187,8 @@ importers:
version: 1.0.2
devDependencies:
'@babel/types':
specifier: ^7.23.5
version: 7.23.5
specifier: ^7.23.6
version: 7.23.6
packages/compiler-dom:
dependencies:
@ -202,8 +202,8 @@ importers:
packages/compiler-sfc:
dependencies:
'@babel/parser':
specifier: ^7.23.5
version: 7.23.5
specifier: ^7.23.6
version: 7.23.6
'@vue/compiler-core':
specifier: workspace:*
version: link:../compiler-core
@ -230,8 +230,8 @@ importers:
version: 1.0.2
devDependencies:
'@babel/types':
specifier: ^7.23.5
version: 7.23.5
specifier: ^7.23.6
version: 7.23.6
'@vue/consolidate':
specifier: ^0.17.3
version: 0.17.3
@ -362,8 +362,8 @@ importers:
packages/sfc-playground:
dependencies:
'@vue/repl':
specifier: ^3.0.0
version: 3.0.0
specifier: ^3.1.0
version: 3.1.0
file-saver:
specifier: ^2.0.5
version: 2.0.5
@ -379,7 +379,7 @@ importers:
version: 4.4.0(vite@5.0.10)(vue@packages+vue)
vite:
specifier: ^5.0.5
version: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
version: 5.0.10(@types/node@20.10.5)(terser@5.22.0)
packages/shared: {}
@ -422,8 +422,8 @@ importers:
packages/vue-compat:
dependencies:
'@babel/parser':
specifier: ^7.23.5
version: 7.23.5
specifier: ^7.23.6
version: 7.23.6
estree-walker:
specifier: ^2.0.2
version: 2.0.2
@ -454,13 +454,13 @@ importers:
version: 4.5.0(vite@5.0.2)(vue@packages+vue)
vite:
specifier: ^5.0.2
version: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
version: 5.0.2(@types/node@20.10.5)(terser@5.22.0)
vite-hyper-config:
specifier: ^0.1.1
version: 0.1.1(@types/node@20.10.4)(terser@5.22.0)(vite@5.0.2)
version: 0.1.1(@types/node@20.10.5)(terser@5.22.0)(vite@5.0.2)
vite-node:
specifier: ^0.34.6
version: 0.34.6(@types/node@20.10.4)(terser@5.22.0)
version: 0.34.6(@types/node@20.10.5)(terser@5.22.0)
vite-plugin-inspect:
specifier: ^0.7.42
version: 0.7.42(rollup@4.1.4)(vite@5.0.2)
@ -508,10 +508,10 @@ packages:
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3)
'@babel/helpers': 7.23.2
'@babel/parser': 7.23.5
'@babel/parser': 7.23.6
'@babel/template': 7.22.15
'@babel/traverse': 7.23.3
'@babel/types': 7.23.5
'@babel/types': 7.23.6
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@ -525,7 +525,7 @@ packages:
resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.5
'@babel/types': 7.23.6
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
jsesc: 2.5.2
@ -552,21 +552,21 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
'@babel/types': 7.23.5
'@babel/types': 7.23.6
dev: true
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.5
'@babel/types': 7.23.6
dev: true
/@babel/helper-module-imports@7.22.15:
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.5
'@babel/types': 7.23.6
dev: true
/@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3):
@ -587,14 +587,14 @@ packages:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.5
'@babel/types': 7.23.6
dev: true
/@babel/helper-split-export-declaration@7.22.6:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.5
'@babel/types': 7.23.6
dev: true
/@babel/helper-string-parser@7.23.4:
@ -617,7 +617,7 @@ packages:
dependencies:
'@babel/template': 7.22.15
'@babel/traverse': 7.23.3
'@babel/types': 7.23.5
'@babel/types': 7.23.6
transitivePeerDependencies:
- supports-color
dev: true
@ -632,20 +632,20 @@ packages:
js-tokens: 4.0.0
dev: true
/@babel/parser@7.23.5:
resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==}
/@babel/parser@7.23.6:
resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.23.5
'@babel/types': 7.23.6
/@babel/template@7.22.15:
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.22.13
'@babel/parser': 7.23.5
'@babel/types': 7.23.5
'@babel/parser': 7.23.6
'@babel/types': 7.23.6
dev: true
/@babel/traverse@7.23.3:
@ -658,16 +658,16 @@ packages:
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.5
'@babel/types': 7.23.5
'@babel/parser': 7.23.6
'@babel/types': 7.23.6
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: true
/@babel/types@7.23.5:
resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==}
/@babel/types@7.23.6:
resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.23.4
@ -681,19 +681,28 @@ packages:
node-gyp-build: 4.7.1
dev: true
/@codspeed/vitest-plugin@2.3.1(vite@5.0.10)(vitest@1.0.4):
/@codspeed/vitest-plugin@2.3.1(vite@5.0.10)(vitest@1.1.0):
resolution: {integrity: sha512-/e4G2B/onX/hG/EjUU/NpDxnIryeTDamVRTBeWfgQDoex3g7GDzTwoQktaU5l/Asw3ZjEErQg+oQVToQ6jYZlA==}
peerDependencies:
vite: ^4.2.0 || ^5.0.0
vitest: '>=1.0.0-beta.4 || >=1'
dependencies:
'@codspeed/core': 2.3.1
vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
vitest: 1.0.4(@types/node@20.10.4)(jsdom@23.0.1)(terser@5.22.0)
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0)
vitest: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0)
dev: true
/@esbuild/android-arm64@0.18.20:
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
/@esbuild/aix-ppc64@0.19.10:
resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [aix]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-arm64@0.19.10:
resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@ -710,8 +719,8 @@ packages:
dev: true
optional: true
/@esbuild/android-arm@0.18.20:
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
/@esbuild/android-arm@0.19.10:
resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@ -728,8 +737,8 @@ packages:
dev: true
optional: true
/@esbuild/android-x64@0.18.20:
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
/@esbuild/android-x64@0.19.10:
resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@ -746,8 +755,8 @@ packages:
dev: true
optional: true
/@esbuild/darwin-arm64@0.18.20:
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
/@esbuild/darwin-arm64@0.19.10:
resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@ -764,8 +773,8 @@ packages:
dev: true
optional: true
/@esbuild/darwin-x64@0.18.20:
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
/@esbuild/darwin-x64@0.19.10:
resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@ -782,8 +791,8 @@ packages:
dev: true
optional: true
/@esbuild/freebsd-arm64@0.18.20:
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
/@esbuild/freebsd-arm64@0.19.10:
resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@ -800,8 +809,8 @@ packages:
dev: true
optional: true
/@esbuild/freebsd-x64@0.18.20:
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
/@esbuild/freebsd-x64@0.19.10:
resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@ -818,8 +827,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-arm64@0.18.20:
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
/@esbuild/linux-arm64@0.19.10:
resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@ -836,8 +845,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-arm@0.18.20:
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
/@esbuild/linux-arm@0.19.10:
resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@ -854,8 +863,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-ia32@0.18.20:
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
/@esbuild/linux-ia32@0.19.10:
resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@ -872,8 +881,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-loong64@0.18.20:
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
/@esbuild/linux-loong64@0.19.10:
resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@ -890,8 +899,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-mips64el@0.18.20:
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
/@esbuild/linux-mips64el@0.19.10:
resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@ -908,8 +917,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-ppc64@0.18.20:
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
/@esbuild/linux-ppc64@0.19.10:
resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@ -926,8 +935,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-riscv64@0.18.20:
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
/@esbuild/linux-riscv64@0.19.10:
resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@ -944,8 +953,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-s390x@0.18.20:
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
/@esbuild/linux-s390x@0.19.10:
resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@ -962,8 +971,8 @@ packages:
dev: true
optional: true
/@esbuild/linux-x64@0.18.20:
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
/@esbuild/linux-x64@0.19.10:
resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@ -980,8 +989,8 @@ packages:
dev: true
optional: true
/@esbuild/netbsd-x64@0.18.20:
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
/@esbuild/netbsd-x64@0.19.10:
resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@ -998,8 +1007,8 @@ packages:
dev: true
optional: true
/@esbuild/openbsd-x64@0.18.20:
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
/@esbuild/openbsd-x64@0.19.10:
resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@ -1016,8 +1025,8 @@ packages:
dev: true
optional: true
/@esbuild/sunos-x64@0.18.20:
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
/@esbuild/sunos-x64@0.19.10:
resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@ -1034,8 +1043,8 @@ packages:
dev: true
optional: true
/@esbuild/win32-arm64@0.18.20:
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
/@esbuild/win32-arm64@0.19.10:
resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@ -1052,8 +1061,8 @@ packages:
dev: true
optional: true
/@esbuild/win32-ia32@0.18.20:
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
/@esbuild/win32-ia32@0.19.10:
resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@ -1070,8 +1079,8 @@ packages:
dev: true
optional: true
/@esbuild/win32-x64@0.18.20:
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
/@esbuild/win32-x64@0.19.10:
resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@ -1599,8 +1608,8 @@ packages:
resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
dev: true
/@types/node@20.10.4:
resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==}
/@types/node@20.10.5:
resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==}
dependencies:
undici-types: 5.26.5
dev: true
@ -1621,12 +1630,12 @@ packages:
resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==}
requiresBuild: true
dependencies:
'@types/node': 20.10.4
'@types/node': 20.10.5
dev: true
optional: true
/@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==}
/@typescript-eslint/parser@6.16.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -1635,10 +1644,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 6.14.0
'@typescript-eslint/types': 6.14.0
'@typescript-eslint/typescript-estree': 6.14.0(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.14.0
'@typescript-eslint/scope-manager': 6.16.0
'@typescript-eslint/types': 6.16.0
'@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.16.0
debug: 4.3.4
eslint: 8.56.0
typescript: 5.2.2
@ -1654,12 +1663,12 @@ packages:
'@typescript-eslint/visitor-keys': 5.62.0
dev: true
/@typescript-eslint/scope-manager@6.14.0:
resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==}
/@typescript-eslint/scope-manager@6.16.0:
resolution: {integrity: sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.14.0
'@typescript-eslint/visitor-keys': 6.14.0
'@typescript-eslint/types': 6.16.0
'@typescript-eslint/visitor-keys': 6.16.0
dev: true
/@typescript-eslint/types@5.62.0:
@ -1667,8 +1676,8 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/types@6.14.0:
resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==}
/@typescript-eslint/types@6.16.0:
resolution: {integrity: sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
@ -1693,8 +1702,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/typescript-estree@6.14.0(typescript@5.2.2):
resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==}
/@typescript-eslint/typescript-estree@6.16.0(typescript@5.2.2):
resolution: {integrity: sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@ -1702,11 +1711,12 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 6.14.0
'@typescript-eslint/visitor-keys': 6.14.0
'@typescript-eslint/types': 6.16.0
'@typescript-eslint/visitor-keys': 6.16.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.5.4
ts-api-utils: 1.0.3(typescript@5.2.2)
typescript: 5.2.2
@ -1742,11 +1752,11 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
/@typescript-eslint/visitor-keys@6.14.0:
resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==}
/@typescript-eslint/visitor-keys@6.16.0:
resolution: {integrity: sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.14.0
'@typescript-eslint/types': 6.16.0
eslint-visitor-keys: 3.4.3
dev: true
@ -1761,7 +1771,7 @@ packages:
vite: ^4.0.0
vue: ^3.2.25
dependencies:
vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0)
vue: link:packages/vue
dev: true
@ -1772,12 +1782,12 @@ packages:
vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25
dependencies:
vite: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
vite: 5.0.2(@types/node@20.10.5)(terser@5.22.0)
vue: link:packages/vue
dev: true
/@vitest/coverage-istanbul@1.0.4(vitest@1.0.4):
resolution: {integrity: sha512-6qoSzTR+sanwY/dREqu6OFJupo/mHzCcboh03rLwqH2V2B39505lDr9FpqaLwU1vQgeUKNA+CdHPkpNpusxkDw==}
/@vitest/coverage-istanbul@1.1.0(vitest@1.1.0):
resolution: {integrity: sha512-sjHGQQu7lkJUYSBMOR3f9AyOlK1LBVr0v7LMar/4i167ltabRWlQ2STBDM4P6Wl659NAcHlZ/RXxrAgJPavDMA==}
peerDependencies:
vitest: ^1.0.0
dependencies:
@ -1790,43 +1800,43 @@ packages:
magicast: 0.3.2
picocolors: 1.0.0
test-exclude: 6.0.0
vitest: 1.0.4(@types/node@20.10.4)(jsdom@23.0.1)(terser@5.22.0)
vitest: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0)
transitivePeerDependencies:
- supports-color
dev: true
/@vitest/expect@1.0.4:
resolution: {integrity: sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==}
/@vitest/expect@1.1.0:
resolution: {integrity: sha512-9IE2WWkcJo2BR9eqtY5MIo3TPmS50Pnwpm66A6neb2hvk/QSLfPXBz2qdiwUOQkwyFuuXEUj5380CbwfzW4+/w==}
dependencies:
'@vitest/spy': 1.0.4
'@vitest/utils': 1.0.4
'@vitest/spy': 1.1.0
'@vitest/utils': 1.1.0
chai: 4.3.10
dev: true
/@vitest/runner@1.0.4:
resolution: {integrity: sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==}
/@vitest/runner@1.1.0:
resolution: {integrity: sha512-zdNLJ00pm5z/uhbWF6aeIJCGMSyTyWImy3Fcp9piRGvueERFlQFbUwCpzVce79OLm2UHk9iwaMSOaU9jVHgNVw==}
dependencies:
'@vitest/utils': 1.0.4
'@vitest/utils': 1.1.0
p-limit: 5.0.0
pathe: 1.1.1
dev: true
/@vitest/snapshot@1.0.4:
resolution: {integrity: sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==}
/@vitest/snapshot@1.1.0:
resolution: {integrity: sha512-5O/wyZg09V5qmNmAlUgCBqflvn2ylgsWJRRuPrnHEfDNT6tQpQ8O1isNGgo+VxofISHqz961SG3iVvt3SPK/QQ==}
dependencies:
magic-string: 0.30.5
pathe: 1.1.1
pretty-format: 29.7.0
dev: true
/@vitest/spy@1.0.4:
resolution: {integrity: sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==}
/@vitest/spy@1.1.0:
resolution: {integrity: sha512-sNOVSU/GE+7+P76qYo+VXdXhXffzWZcYIPQfmkiRxaNCSPiLANvQx5Mx6ZURJ/ndtEkUJEpvKLXqAYTKEY+lTg==}
dependencies:
tinyspy: 2.2.0
dev: true
/@vitest/utils@1.0.4:
resolution: {integrity: sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==}
/@vitest/utils@1.1.0:
resolution: {integrity: sha512-z+s510fKmYz4Y41XhNs3vcuFTFhcij2YF7F8VQfMEYAAUfqQh0Zfg7+w9xdgFGhPf3tX3TicAe+8BDITk6ampQ==}
dependencies:
diff-sequences: 29.6.3
loupe: 2.3.7
@ -1838,8 +1848,8 @@ packages:
engines: {node: '>= 0.12.0'}
dev: true
/@vue/repl@3.0.0:
resolution: {integrity: sha512-tGYibiftMo5yEuIKPWVsNuuNDejjJk0JQmvKtTm12KNLFqtGD7fWoGv1qUzcN9EAxwVeDgnT9ljRgqGVgZkyEg==}
/@vue/repl@3.1.0:
resolution: {integrity: sha512-lnR010NTkysg71Z0TVsFCTfiF5ARZbyohqymGpOxOrSuSI4o9RlSvWH6YmJdv9OHm5j69HKLVVUhXlCScMCQrg==}
dev: false
/@zeit/schemas@2.29.0:
@ -2055,7 +2065,7 @@ packages:
resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==}
engines: {node: '>= 10.0.0'}
dependencies:
'@babel/types': 7.23.5
'@babel/types': 7.23.6
dev: true
/balanced-match@1.0.2:
@ -2395,8 +2405,8 @@ packages:
/constantinople@4.0.1:
resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==}
dependencies:
'@babel/parser': 7.23.5
'@babel/types': 7.23.5
'@babel/parser': 7.23.6
'@babel/types': 7.23.6
dev: true
/content-disposition@0.5.2:
@ -2882,34 +2892,35 @@ packages:
import-meta-resolve: 3.0.0
dev: true
/esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
/esbuild@0.19.10:
resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/android-arm': 0.18.20
'@esbuild/android-arm64': 0.18.20
'@esbuild/android-x64': 0.18.20
'@esbuild/darwin-arm64': 0.18.20
'@esbuild/darwin-x64': 0.18.20
'@esbuild/freebsd-arm64': 0.18.20
'@esbuild/freebsd-x64': 0.18.20
'@esbuild/linux-arm': 0.18.20
'@esbuild/linux-arm64': 0.18.20
'@esbuild/linux-ia32': 0.18.20
'@esbuild/linux-loong64': 0.18.20
'@esbuild/linux-mips64el': 0.18.20
'@esbuild/linux-ppc64': 0.18.20
'@esbuild/linux-riscv64': 0.18.20
'@esbuild/linux-s390x': 0.18.20
'@esbuild/linux-x64': 0.18.20
'@esbuild/netbsd-x64': 0.18.20
'@esbuild/openbsd-x64': 0.18.20
'@esbuild/sunos-x64': 0.18.20
'@esbuild/win32-arm64': 0.18.20
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
'@esbuild/aix-ppc64': 0.19.10
'@esbuild/android-arm': 0.19.10
'@esbuild/android-arm64': 0.19.10
'@esbuild/android-x64': 0.19.10
'@esbuild/darwin-arm64': 0.19.10
'@esbuild/darwin-x64': 0.19.10
'@esbuild/freebsd-arm64': 0.19.10
'@esbuild/freebsd-x64': 0.19.10
'@esbuild/linux-arm': 0.19.10
'@esbuild/linux-arm64': 0.19.10
'@esbuild/linux-ia32': 0.19.10
'@esbuild/linux-loong64': 0.19.10
'@esbuild/linux-mips64el': 0.19.10
'@esbuild/linux-ppc64': 0.19.10
'@esbuild/linux-riscv64': 0.19.10
'@esbuild/linux-s390x': 0.19.10
'@esbuild/linux-x64': 0.19.10
'@esbuild/netbsd-x64': 0.19.10
'@esbuild/openbsd-x64': 0.19.10
'@esbuild/sunos-x64': 0.19.10
'@esbuild/win32-arm64': 0.19.10
'@esbuild/win32-ia32': 0.19.10
'@esbuild/win32-x64': 0.19.10
dev: true
/esbuild@0.19.5:
@ -3972,7 +3983,7 @@ packages:
engines: {node: '>=10'}
dependencies:
'@babel/core': 7.23.3
'@babel/parser': 7.23.5
'@babel/parser': 7.23.6
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 7.5.4
@ -4316,8 +4327,8 @@ packages:
/magicast@0.3.2:
resolution: {integrity: sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg==}
dependencies:
'@babel/parser': 7.23.5
'@babel/types': 7.23.5
'@babel/parser': 7.23.6
'@babel/types': 7.23.6
source-map-js: 1.0.2
dev: true
@ -6012,12 +6023,12 @@ packages:
typescript: 5.2.2
dev: true
/tsx@4.6.2:
resolution: {integrity: sha512-QPpBdJo+ZDtqZgAnq86iY/PD2KYCUPSUGIunHdGwyII99GKH+f3z3FZ8XNFLSGQIA4I365ui8wnQpl8OKLqcsg==}
/tsx@4.7.0:
resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==}
engines: {node: '>=18.0.0'}
hasBin: true
dependencies:
esbuild: 0.18.20
esbuild: 0.19.10
get-tsconfig: 4.7.2
optionalDependencies:
fsevents: 2.3.3
@ -6200,7 +6211,7 @@ packages:
engines: {node: '>= 0.8'}
dev: true
/vite-hyper-config@0.1.1(@types/node@20.10.4)(terser@5.22.0)(vite@5.0.2):
/vite-hyper-config@0.1.1(@types/node@20.10.5)(terser@5.22.0)(vite@5.0.2):
resolution: {integrity: sha512-Sc9WuuLImezPUG6JUnBU/L0KHZDHRyvLKEU1fEPCR6gBsC9QTnmnX78doRQpKt6P/rRcawlytbA2xt9Qb/kaVQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
@ -6208,8 +6219,8 @@ packages:
dependencies:
cac: 6.7.14
picocolors: 1.0.0
vite: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
vite-node: 0.34.6(@types/node@20.10.4)(terser@5.22.0)
vite: 5.0.2(@types/node@20.10.5)(terser@5.22.0)
vite-node: 0.34.6(@types/node@20.10.5)(terser@5.22.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -6221,7 +6232,7 @@ packages:
- terser
dev: true
/vite-node@0.34.6(@types/node@20.10.4)(terser@5.22.0):
/vite-node@0.34.6(@types/node@20.10.5)(terser@5.22.0):
resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==}
engines: {node: '>=v14.18.0'}
hasBin: true
@ -6231,7 +6242,7 @@ packages:
mlly: 1.4.2
pathe: 1.1.1
picocolors: 1.0.0
vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -6243,8 +6254,8 @@ packages:
- terser
dev: true
/vite-node@1.0.4(@types/node@20.10.4)(terser@5.22.0):
resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==}
/vite-node@1.1.0(@types/node@20.10.5)(terser@5.22.0):
resolution: {integrity: sha512-jV48DDUxGLEBdHCQvxL1mEh7+naVy+nhUUUaPAZLd3FJgXuxQiewHcfeZebbJ6onDqNGkP4r3MhQ342PRlG81Q==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
dependencies:
@ -6252,7 +6263,7 @@ packages:
debug: 4.3.4
pathe: 1.1.1
picocolors: 1.0.0
vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -6282,13 +6293,13 @@ packages:
open: 9.1.0
picocolors: 1.0.0
sirv: 2.0.3
vite: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
vite: 5.0.2(@types/node@20.10.5)(terser@5.22.0)
transitivePeerDependencies:
- rollup
- supports-color
dev: true
/vite@5.0.10(@types/node@20.10.4)(terser@5.22.0):
/vite@5.0.10(@types/node@20.10.5)(terser@5.22.0):
resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6316,7 +6327,7 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 20.10.4
'@types/node': 20.10.5
esbuild: 0.19.5
postcss: 8.4.32
rollup: 4.4.1
@ -6325,7 +6336,7 @@ packages:
fsevents: 2.3.3
dev: true
/vite@5.0.2(@types/node@20.10.4)(terser@5.22.0):
/vite@5.0.2(@types/node@20.10.5)(terser@5.22.0):
resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6353,7 +6364,7 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 20.10.4
'@types/node': 20.10.5
esbuild: 0.19.5
postcss: 8.4.32
rollup: 4.4.1
@ -6362,8 +6373,8 @@ packages:
fsevents: 2.3.3
dev: true
/vitest@1.0.4(@types/node@20.10.4)(jsdom@23.0.1)(terser@5.22.0):
resolution: {integrity: sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==}
/vitest@1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0):
resolution: {integrity: sha512-oDFiCrw7dd3Jf06HoMtSRARivvyjHJaTxikFxuqJjO76U436PqlVw1uLn7a8OSPrhSfMGVaRakKpA2lePdw79A==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@ -6387,12 +6398,12 @@ packages:
jsdom:
optional: true
dependencies:
'@types/node': 20.10.4
'@vitest/expect': 1.0.4
'@vitest/runner': 1.0.4
'@vitest/snapshot': 1.0.4
'@vitest/spy': 1.0.4
'@vitest/utils': 1.0.4
'@types/node': 20.10.5
'@vitest/expect': 1.1.0
'@vitest/runner': 1.1.0
'@vitest/snapshot': 1.1.0
'@vitest/spy': 1.1.0
'@vitest/utils': 1.1.0
acorn-walk: 8.3.1
cac: 6.7.14
chai: 4.3.10
@ -6407,8 +6418,8 @@ packages:
strip-literal: 1.3.0
tinybench: 2.5.1
tinypool: 0.8.1
vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
vite-node: 1.0.4(@types/node@20.10.4)(terser@5.22.0)
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0)
vite-node: 1.1.0(@types/node@20.10.5)(terser@5.22.0)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less
@ -6524,8 +6535,8 @@ packages:
resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}
engines: {node: '>= 10.0.0'}
dependencies:
'@babel/parser': 7.23.5
'@babel/types': 7.23.5
'@babel/parser': 7.23.6
'@babel/types': 7.23.6
assert-never: 1.2.1
babel-walk: 3.0.0-canary-5
dev: true

View File

@ -1,4 +1,4 @@
import { type SpyInstance } from 'vitest'
import { type MockInstance } from 'vitest'
vi.stubGlobal('MathMLElement', class MathMLElement {})
@ -67,7 +67,7 @@ expect.extend({
}
})
let warn: SpyInstance
let warn: MockInstance
const asserted: Set<string> = new Set()
beforeEach(() => {

View File

@ -0,0 +1,49 @@
// @ts-check
import fs from 'node:fs'
import { execa } from 'execa'
execa('pnpm', ['build', 'vue', '-f', 'global-runtime']).then(() => {
const errors = []
const devBuild = fs.readFileSync(
'packages/vue/dist/vue.runtime.global.js',
'utf-8'
)
if (devBuild.includes('__spreadValues')) {
errors.push(
'dev build contains unexpected esbuild object spread helper.\n' +
'This means { ...obj } syntax is used in runtime code. This should be ' +
'refactoed to use the `extend` helper to avoid the extra code.'
)
}
const prodBuild = fs.readFileSync(
'packages/vue/dist/vue.runtime.global.prod.js',
'utf-8'
)
if (prodBuild.includes('Vue warn')) {
errors.push(
'prod build contains unexpected warning-related code.\n' +
'This means there are calls of warn() that are not guarded by the __DEV__ condition.'
)
}
if (
prodBuild.includes('html,body,base') ||
prodBuild.includes('svg,animate,animateMotion') ||
prodBuild.includes('annotation,annotation-xml,maction')
) {
errors.push(
'prod build contains unexpected domTagConifg lists.\n' +
'This means helpers like isHTMLTag() is used in runtime code paths when it should be compiler-only.'
)
}
if (errors.length) {
throw new Error(
`Found the following treeshaking errors:\n\n- ${errors.join('\n\n- ')}`
)
}
})

View File

@ -25,7 +25,7 @@ export default defineConfig({
plugins: [codspeedPlugin()],
test: {
globals: true,
setupFiles: 'scripts/setupVitest.ts',
setupFiles: 'scripts/setup-vitest.ts',
environmentMatchGlobs: [
['packages/{vue,vue-compat,runtime-dom,runtime-vapor}/**', 'jsdom']
],