Merge remote-tracking branch 'upstream/main'

This commit is contained in:
三咲智子 Kevin Deng 2024-01-04 16:25:58 +08:00
commit e971b0699b
No known key found for this signature in database
GPG Key ID: 69992F2250DFD93E
34 changed files with 601 additions and 203 deletions

View File

@ -19,6 +19,7 @@ module.exports = {
plugins: ['jest', 'import', '@typescript-eslint'], plugins: ['jest', 'import', '@typescript-eslint'],
rules: { rules: {
'no-debugger': 'error', 'no-debugger': 'error',
'no-console': ['error', { allow: ['warn', 'error', 'info'] }],
// most of the codebase are expected to be env agnostic // most of the codebase are expected to be env agnostic
'no-restricted-globals': ['error', ...DOMGlobals, ...NodeGlobals], 'no-restricted-globals': ['error', ...DOMGlobals, ...NodeGlobals],
@ -58,6 +59,7 @@ module.exports = {
{ {
files: ['**/__tests__/**', 'packages/dts-test/**'], files: ['**/__tests__/**', 'packages/dts-test/**'],
rules: { rules: {
'no-console': 'off',
'no-restricted-globals': 'off', 'no-restricted-globals': 'off',
'no-restricted-syntax': 'off', 'no-restricted-syntax': 'off',
'jest/no-disabled-tests': 'error', 'jest/no-disabled-tests': 'error',
@ -92,6 +94,7 @@ module.exports = {
rules: { rules: {
'no-restricted-globals': ['error', ...NodeGlobals], 'no-restricted-globals': ['error', ...NodeGlobals],
'no-restricted-syntax': ['error', banConstEnum], 'no-restricted-syntax': ['error', banConstEnum],
'no-console': 'off',
}, },
}, },
// JavaScript files // JavaScript files
@ -113,6 +116,7 @@ module.exports = {
rules: { rules: {
'no-restricted-globals': 'off', 'no-restricted-globals': 'off',
'no-restricted-syntax': ['error', banConstEnum], 'no-restricted-syntax': ['error', banConstEnum],
'no-console': 'off',
}, },
}, },
// Import nodejs modules in compiler-sfc // Import nodejs modules in compiler-sfc

View File

@ -1,3 +1,32 @@
## [3.4.4](https://github.com/vuejs/core/compare/v3.4.3...v3.4.4) (2024-01-03)
### Bug Fixes
* **compiler-sfc:** fix scss source map regression ([71d3121](https://github.com/vuejs/core/commit/71d3121b72c449351e718ee1539bdfa35b68bb32)), closes [#9970](https://github.com/vuejs/core/issues/9970) [#9969](https://github.com/vuejs/core/issues/9969)
* **compiler-sfc:** use compilerOptions when re-parsing consumed AST ([d94d8d4](https://github.com/vuejs/core/commit/d94d8d4bffd1daf171a655b292745ffc3e63052d))
* **defineModel:** support kebab-case/camelCase mismatches ([#9950](https://github.com/vuejs/core/issues/9950)) ([10ccb9b](https://github.com/vuejs/core/commit/10ccb9bfa0f5f3016207fc32b9611bab98e6f090))
* **runtime-core:** correctly assign suspenseId to avoid conflicts with the default id ([#9966](https://github.com/vuejs/core/issues/9966)) ([0648804](https://github.com/vuejs/core/commit/06488047c184dae3070d0008379716690edceb46)), closes [#9944](https://github.com/vuejs/core/issues/9944)
* **ssr:** avoid rendering transition-group slot content as a fragment ([#9961](https://github.com/vuejs/core/issues/9961)) ([0160264](https://github.com/vuejs/core/commit/0160264d677478ee928e8e851f39a9e94f97e337)), closes [#9933](https://github.com/vuejs/core/issues/9933)
* **watch:** remove instance unmounted short circuit in getter of `watchEffect` ([#9948](https://github.com/vuejs/core/issues/9948)) ([f300a40](https://github.com/vuejs/core/commit/f300a4001ec40cadef2520267eb5841ab48cf005))
* **watch:** revert watch behavior when watching shallow reactive objects ([a9f781a](https://github.com/vuejs/core/commit/a9f781a92cbc7de7b25c9e3d5b1295ca99eb6d86)), closes [#9965](https://github.com/vuejs/core/issues/9965)
### Performance Improvements
* **watch:** avoid double traverse for reactive source ([24d77c2](https://github.com/vuejs/core/commit/24d77c25ce5d5356adb5367beef1d23e6e340b35))
## [3.4.3](https://github.com/vuejs/core/compare/v3.4.2...v3.4.3) (2023-12-30)
### Bug Fixes
* **compiler-sfc:** respect sfc parse options in cache key ([b8d58ec](https://github.com/vuejs/core/commit/b8d58ec4f42cbeb9443bf06138add46158db9af0))
## [3.4.2](https://github.com/vuejs/core/compare/v3.4.1...v3.4.2) (2023-12-30) ## [3.4.2](https://github.com/vuejs/core/compare/v3.4.1...v3.4.2) (2023-12-30)

View File

@ -1,7 +1,7 @@
{ {
"private": true, "private": true,
"version": "0.0.0-vapor", "version": "0.0.0-vapor",
"packageManager": "pnpm@8.12.1", "packageManager": "pnpm@8.14.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "node scripts/dev.js vue vue-vapor", "dev": "node scripts/dev.js vue vue-vapor",
@ -71,11 +71,11 @@
"@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-terser": "^0.4.4",
"@types/hash-sum": "^1.0.2", "@types/hash-sum": "^1.0.2",
"@types/minimist": "^1.2.5", "@types/minimist": "^1.2.5",
"@types/node": "^20.10.5", "@types/node": "^20.10.6",
"@types/semver": "^7.5.5", "@types/semver": "^7.5.6",
"@typescript-eslint/eslint-plugin": "^6.16.0", "@typescript-eslint/eslint-plugin": "^6.17.0",
"@typescript-eslint/parser": "^6.15.0", "@typescript-eslint/parser": "^6.17.0",
"@vitest/coverage-istanbul": "^1.1.0", "@vitest/coverage-istanbul": "^1.1.1",
"@vue/consolidate": "0.17.3", "@vue/consolidate": "0.17.3",
"conventional-changelog-cli": "^4.1.0", "conventional-changelog-cli": "^4.1.0",
"enquirer": "^2.4.1", "enquirer": "^2.4.1",
@ -84,7 +84,7 @@
"eslint": "^8.56.0", "eslint": "^8.56.0",
"eslint-define-config": "^1.24.1", "eslint-define-config": "^1.24.1",
"eslint-plugin-import": "npm:eslint-plugin-i@^2.29.1", "eslint-plugin-import": "npm:eslint-plugin-i@^2.29.1",
"eslint-plugin-jest": "^27.6.0", "eslint-plugin-jest": "^27.6.1",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"execa": "^8.0.1", "execa": "^8.0.1",
"jsdom": "^23.0.1", "jsdom": "^23.0.1",
@ -92,7 +92,7 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"magic-string": "^0.30.5", "magic-string": "^0.30.5",
"markdown-table": "^3.0.3", "markdown-table": "^3.0.3",
"marked": "^11.1.0", "marked": "^11.1.1",
"minimist": "^1.2.8", "minimist": "^1.2.8",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
@ -114,6 +114,6 @@
"tsx": "^4.7.0", "tsx": "^4.7.0",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"vite": "^5.0.5", "vite": "^5.0.5",
"vitest": "^1.1.0" "vitest": "^1.1.1"
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/compiler-core", "name": "@vue/compiler-core",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/compiler-core", "description": "@vue/compiler-core",
"main": "index.js", "main": "index.js",
"module": "dist/compiler-core.esm-bundler.js", "module": "dist/compiler-core.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/compiler-core.d.ts",
"node": {
"production": "./dist/compiler-core.cjs.prod.js",
"development": "./dist/compiler-core.cjs.js",
"default": "./index.js"
},
"import": "./dist/compiler-core.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"buildOptions": { "buildOptions": {
"name": "VueCompilerCore", "name": "VueCompilerCore",
"compat": true, "compat": true,

View File

@ -146,6 +146,19 @@ export function isInDestructureAssignment(
return false return false
} }
export function isInNewExpression(parentStack: Node[]): boolean {
let i = parentStack.length
while (i--) {
const p = parentStack[i]
if (p.type === 'NewExpression') {
return true
} else if (p.type !== 'MemberExpression') {
break
}
}
return false
}
export function walkFunctionParams( export function walkFunctionParams(
node: Function, node: Function,
onIdent: (id: Identifier) => void, onIdent: (id: Identifier) => void,

View File

@ -19,6 +19,7 @@ import {
} from '../ast' } from '../ast'
import { import {
isInDestructureAssignment, isInDestructureAssignment,
isInNewExpression,
isStaticProperty, isStaticProperty,
isStaticPropertyKey, isStaticPropertyKey,
walkIdentifiers, walkIdentifiers,
@ -131,6 +132,11 @@ export function processExpression(
// ({ x } = y) // ({ x } = y)
const isDestructureAssignment = const isDestructureAssignment =
parent && isInDestructureAssignment(parent, parentStack) parent && isInDestructureAssignment(parent, parentStack)
const isNewExpression = parent && isInNewExpression(parentStack)
const wrapWithUnref = (raw: string) => {
const wrapped = `${context.helperString(UNREF)}(${raw})`
return isNewExpression ? `(${wrapped})` : wrapped
}
if ( if (
isConst(type) || isConst(type) ||
@ -147,7 +153,7 @@ export function processExpression(
// that assumes the value to be a ref for more efficiency // that assumes the value to be a ref for more efficiency
return isAssignmentLVal || isUpdateArg || isDestructureAssignment return isAssignmentLVal || isUpdateArg || isDestructureAssignment
? `${raw}.value` ? `${raw}.value`
: `${context.helperString(UNREF)}(${raw})` : wrapWithUnref(raw)
} else if (type === BindingTypes.SETUP_LET) { } else if (type === BindingTypes.SETUP_LET) {
if (isAssignmentLVal) { if (isAssignmentLVal) {
// let binding. // let binding.
@ -190,7 +196,7 @@ export function processExpression(
// for now // for now
return raw return raw
} else { } else {
return `${context.helperString(UNREF)}(${raw})` return wrapWithUnref(raw)
} }
} else if (type === BindingTypes.PROPS) { } else if (type === BindingTypes.PROPS) {
// use __props which is generated by compileScript so in ts mode // use __props which is generated by compileScript so in ts mode

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/compiler-dom", "name": "@vue/compiler-dom",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/compiler-dom", "description": "@vue/compiler-dom",
"main": "index.js", "main": "index.js",
"module": "dist/compiler-dom.esm-bundler.js", "module": "dist/compiler-dom.esm-bundler.js",
@ -11,6 +11,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/compiler-dom.d.ts",
"node": {
"production": "./dist/compiler-dom.cjs.prod.js",
"development": "./dist/compiler-dom.cjs.js",
"default": "./index.js"
},
"import": "./dist/compiler-dom.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"sideEffects": false, "sideEffects": false,
"buildOptions": { "buildOptions": {
"name": "VueCompilerDOM", "name": "VueCompilerDOM",

View File

@ -1028,6 +1028,26 @@ return (_ctx, _cache) => {
}" }"
`; `;
exports[`SFC compile <script setup> > inlineTemplate mode > unref + new expression 1`] = `
"import { unref as _unref, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue"
import Foo from './foo'
export default {
setup(__props) {
return (_ctx, _cache) => {
return (_openBlock(), _createElementBlock(_Fragment, null, [
_createElementVNode("div", null, _toDisplayString(new (_unref(Foo))()), 1 /* TEXT */),
_createElementVNode("div", null, _toDisplayString(new (_unref(Foo)).Bar()), 1 /* TEXT */)
], 64 /* STABLE_FRAGMENT */))
}
}
}"
`;
exports[`SFC compile <script setup> > inlineTemplate mode > v-model codegen 1`] = ` exports[`SFC compile <script setup> > inlineTemplate mode > v-model codegen 1`] = `
"import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, unref as _unref, isRef as _isRef, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue" "import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, unref as _unref, isRef as _isRef, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue"

View File

@ -650,6 +650,24 @@ describe('SFC compile <script setup>', () => {
), ),
).not.toThrowError() ).not.toThrowError()
}) })
test('unref + new expression', () => {
const { content } = compile(
`
<script setup>
import Foo from './foo'
</script>
<template>
<div>{{ new Foo() }}</div>
<div>{{ new Foo.Bar() }}</div>
</template>
`,
{ inlineTemplate: true },
)
expect(content).toMatch(`new (_unref(Foo))()`)
expect(content).toMatch(`new (_unref(Foo)).Bar()`)
assertCode(content)
})
}) })
describe('with TypeScript', () => { describe('with TypeScript', () => {

View File

@ -427,6 +427,31 @@ test('prefixing edge case for reused AST', () => {
expect(code).not.toMatch(`_ctx.t`) expect(code).not.toMatch(`_ctx.t`)
}) })
test('prefixing edge case for reused AST ssr mode', () => {
const src = `
<script setup lang="ts">
import { Foo } from './foo'
</script>
<template>
<Bar>
<template #option="{ foo }"></template>
</Bar>
</template>
`
const { descriptor } = parse(src)
// compileScript triggers importUsageCheck
compileScript(descriptor, { id: 'xxx' })
expect(() =>
compileTemplate({
id: 'xxx',
filename: 'test.vue',
ast: descriptor.template!.ast,
source: descriptor.template!.content,
ssr: true,
}),
).not.toThrowError()
})
interface Pos { interface Pos {
line: number line: number
column: number column: number

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/compiler-sfc", "name": "@vue/compiler-sfc",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/compiler-sfc", "description": "@vue/compiler-sfc",
"main": "dist/compiler-sfc.cjs.js", "main": "dist/compiler-sfc.cjs.js",
"module": "dist/compiler-sfc.esm-browser.js", "module": "dist/compiler-sfc.esm-browser.js",
@ -8,6 +8,15 @@
"files": [ "files": [
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/compiler-sfc.d.ts",
"node": "./dist/compiler-sfc.cjs.js",
"import": "./dist/compiler-sfc.esm-browser.js",
"require": "./dist/compiler-sfc.cjs.js"
},
"./*": "./*"
},
"buildOptions": { "buildOptions": {
"name": "VueCompilerSFC", "name": "VueCompilerSFC",
"formats": [ "formats": [
@ -50,8 +59,8 @@
"merge-source-map": "^1.1.0", "merge-source-map": "^1.1.0",
"minimatch": "^9.0.3", "minimatch": "^9.0.3",
"postcss-modules": "^6.0.0", "postcss-modules": "^6.0.0",
"postcss-selector-parser": "^6.0.13", "postcss-selector-parser": "^6.0.15",
"pug": "^3.0.2", "pug": "^3.0.2",
"sass": "^1.69.5" "sass": "^1.69.7"
} }
} }

View File

@ -219,6 +219,7 @@ function doCompileTemplate({
// We need to parse a fresh one. Can't just use `source` here since we need // We need to parse a fresh one. Can't just use `source` here since we need
// the AST location info to be relative to the entire SFC. // the AST location info to be relative to the entire SFC.
const newAST = (ssr ? CompilerDOM : compiler).parse(inAST.source, { const newAST = (ssr ? CompilerDOM : compiler).parse(inAST.source, {
...compilerOptions,
parseMode: 'sfc', parseMode: 'sfc',
onError: e => errors.push(e), onError: e => errors.push(e),
}) })

View File

@ -38,12 +38,7 @@ const scss: StylePreprocessor = (source, map, options, load = require) => {
if (map) { if (map) {
return { return {
code: result.css.toString(), code: result.css.toString(),
map: merge( map: merge(map, JSON.parse(result.map.toString())),
map,
result.map.toJSON
? result.map.toJSON()
: JSON.parse(result.map.toString()),
),
errors: [], errors: [],
dependencies, dependencies,
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/compiler-ssr", "name": "@vue/compiler-ssr",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/compiler-ssr", "description": "@vue/compiler-ssr",
"main": "dist/compiler-ssr.cjs.js", "main": "dist/compiler-ssr.cjs.js",
"types": "dist/compiler-ssr.d.ts", "types": "dist/compiler-ssr.d.ts",

View File

@ -55,7 +55,7 @@ import {
ssrProcessTransitionGroup, ssrProcessTransitionGroup,
ssrTransformTransitionGroup, ssrTransformTransitionGroup,
} from './ssrTransformTransitionGroup' } from './ssrTransformTransitionGroup'
import { extend, isArray, isObject, isSymbol } from '@vue/shared' import { extend, isArray, isObject, isPlainObject, isSymbol } from '@vue/shared'
import { buildSSRProps } from './ssrTransformElement' import { buildSSRProps } from './ssrTransformElement'
import { import {
ssrProcessTransition, ssrProcessTransition,
@ -371,10 +371,10 @@ function subTransform(
function clone(v: any): any { function clone(v: any): any {
if (isArray(v)) { if (isArray(v)) {
return v.map(clone) return v.map(clone)
} else if (isObject(v)) { } else if (isPlainObject(v)) {
const res: any = {} const res: any = {}
for (const key in v) { for (const key in v) {
res[key] = clone(v[key]) res[key] = clone(v[key as keyof typeof v])
} }
return res return res
} else { } else {

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/reactivity", "name": "@vue/reactivity",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/reactivity", "description": "@vue/reactivity",
"main": "index.js", "main": "index.js",
"module": "dist/reactivity.esm-bundler.js", "module": "dist/reactivity.esm-bundler.js",
@ -11,6 +11,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/reactivity.d.ts",
"node": {
"production": "./dist/reactivity.cjs.prod.js",
"development": "./dist/reactivity.cjs.js",
"default": "./index.js"
},
"import": "./dist/reactivity.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"sideEffects": false, "sideEffects": false,
"repository": { "repository": {
"type": "git", "type": "git",

View File

@ -314,6 +314,84 @@ describe('SFC <script setup> helpers', () => {
expect(serializeInner(root)).toBe('bar') expect(serializeInner(root)).toBe('bar')
}) })
test('kebab-case v-model (should not be local)', async () => {
let foo: any
const compRender = vi.fn()
const Comp = defineComponent({
props: ['fooBar'],
emits: ['update:fooBar'],
setup(props) {
foo = useModel(props, 'fooBar')
return () => {
compRender()
return foo.value
}
},
})
const updateFooBar = vi.fn()
const root = nodeOps.createElement('div')
// v-model:foo-bar compiles to foo-bar and onUpdate:fooBar
render(
h(Comp, { 'foo-bar': 'initial', 'onUpdate:fooBar': updateFooBar }),
root,
)
expect(compRender).toBeCalledTimes(1)
expect(serializeInner(root)).toBe('initial')
expect(foo.value).toBe('initial')
foo.value = 'bar'
// should not be using local mode, so nothing should actually change
expect(foo.value).toBe('initial')
await nextTick()
expect(compRender).toBeCalledTimes(1)
expect(updateFooBar).toBeCalledTimes(1)
expect(updateFooBar).toHaveBeenCalledWith('bar')
expect(foo.value).toBe('initial')
expect(serializeInner(root)).toBe('initial')
})
test('kebab-case update listener (should not be local)', async () => {
let foo: any
const compRender = vi.fn()
const Comp = defineComponent({
props: ['fooBar'],
emits: ['update:fooBar'],
setup(props) {
foo = useModel(props, 'fooBar')
return () => {
compRender()
return foo.value
}
},
})
const updateFooBar = vi.fn()
const root = nodeOps.createElement('div')
// The template compiler won't create hyphenated listeners, but it could have been passed manually
render(
h(Comp, { 'foo-bar': 'initial', 'onUpdate:foo-bar': updateFooBar }),
root,
)
expect(compRender).toBeCalledTimes(1)
expect(serializeInner(root)).toBe('initial')
expect(foo.value).toBe('initial')
foo.value = 'bar'
// should not be using local mode, so nothing should actually change
expect(foo.value).toBe('initial')
await nextTick()
expect(compRender).toBeCalledTimes(1)
expect(updateFooBar).toBeCalledTimes(1)
expect(updateFooBar).toHaveBeenCalledWith('bar')
expect(foo.value).toBe('initial')
expect(serializeInner(root)).toBe('initial')
})
test('default value', async () => { test('default value', async () => {
let count: any let count: any
const inc = () => { const inc = () => {

View File

@ -187,7 +187,7 @@ describe('api: watch', () => {
}) })
// #9916 // #9916
it('directly watching shallow reactive array', async () => { it('watching shallow reactive array with deep: false', async () => {
class foo { class foo {
prop1: ShallowRef<string> = shallowRef('') prop1: ShallowRef<string> = shallowRef('')
prop2: string = '' prop2: string = ''
@ -198,7 +198,7 @@ describe('api: watch', () => {
const collection = shallowReactive([obj1, obj2]) const collection = shallowReactive([obj1, obj2])
const cb = vi.fn() const cb = vi.fn()
watch(collection, cb) watch(collection, cb, { deep: false })
collection[0].prop1.value = 'foo' collection[0].prop1.value = 'foo'
await nextTick() await nextTick()
@ -211,6 +211,24 @@ describe('api: watch', () => {
expect(cb).toBeCalledTimes(1) expect(cb).toBeCalledTimes(1)
}) })
it('should still respect deep: true on shallowReactive source', async () => {
const obj = reactive({ a: 1 })
const arr = shallowReactive([obj])
let dummy
watch(
arr,
() => {
dummy = arr[0].a
},
{ deep: true },
)
obj.a++
await nextTick()
expect(dummy).toBe(2)
})
it('watching multiple sources', async () => { it('watching multiple sources', async () => {
const state = reactive({ count: 1 }) const state = reactive({ count: 1 })
const count = ref(1) const count = ref(1)
@ -1425,4 +1443,35 @@ describe('api: watch', () => {
expect(spy1).toHaveBeenCalledTimes(1) expect(spy1).toHaveBeenCalledTimes(1)
expect(spy2).toHaveBeenCalledTimes(1) expect(spy2).toHaveBeenCalledTimes(1)
}) })
test("effect should be removed from scope's effects after it is stopped", () => {
const num = ref(0)
let unwatch: () => void
let instance: ComponentInternalInstance
const Comp = {
setup() {
instance = getCurrentInstance()!
unwatch = watch(num, () => {
console.log(num.value)
})
return () => null
},
}
const root = nodeOps.createElement('div')
createApp(Comp).mount(root)
expect(instance!.scope.effects.length).toBe(2)
unwatch!()
expect(instance!.scope.effects.length).toBe(1)
const scope = effectScope()
scope.run(() => {
unwatch = watch(num, () => {
console.log(num.value)
})
})
expect(scope.effects.length).toBe(1)
unwatch!()
expect(scope.effects.length).toBe(0)
})
}) })

View File

@ -24,12 +24,14 @@ import {
} from '@vue/runtime-test' } from '@vue/runtime-test'
import { createApp, defineComponent } from 'vue' import { createApp, defineComponent } from 'vue'
import type { RawSlots } from 'packages/runtime-core/src/componentSlots' import type { RawSlots } from 'packages/runtime-core/src/componentSlots'
import { resetSuspenseId } from '../../src/components/Suspense'
describe('Suspense', () => { describe('Suspense', () => {
const deps: Promise<any>[] = [] const deps: Promise<any>[] = []
beforeEach(() => { beforeEach(() => {
deps.length = 0 deps.length = 0
resetSuspenseId()
}) })
// a simple async factory for testing purposes only. // a simple async factory for testing purposes only.

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/runtime-core", "name": "@vue/runtime-core",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/runtime-core", "description": "@vue/runtime-core",
"main": "index.js", "main": "index.js",
"module": "dist/runtime-core.esm-bundler.js", "module": "dist/runtime-core.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/runtime-core.d.ts",
"node": {
"production": "./dist/runtime-core.cjs.prod.js",
"development": "./dist/runtime-core.cjs.js",
"default": "./index.js"
},
"import": "./dist/runtime-core.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"buildOptions": { "buildOptions": {
"name": "VueRuntimeCore", "name": "VueRuntimeCore",
"formats": [ "formats": [

View File

@ -6,6 +6,7 @@ import {
camelize, camelize,
extend, extend,
hasChanged, hasChanged,
hyphenate,
isArray, isArray,
isFunction, isFunction,
isPromise, isPromise,
@ -382,6 +383,7 @@ export function useModel(
} }
const camelizedName = camelize(name) const camelizedName = camelize(name)
const hyphenatedName = hyphenate(name)
const res = customRef((track, trigger) => { const res = customRef((track, trigger) => {
let localValue: any let localValue: any
@ -403,9 +405,12 @@ export function useModel(
!( !(
rawProps && rawProps &&
// check if parent has passed v-model // check if parent has passed v-model
(name in rawProps || camelizedName in rawProps) && (name in rawProps ||
camelizedName in rawProps ||
hyphenatedName in rawProps) &&
(`onUpdate:${name}` in rawProps || (`onUpdate:${name}` in rawProps ||
`onUpdate:${camelizedName}` in rawProps) `onUpdate:${camelizedName}` in rawProps ||
`onUpdate:${hyphenatedName}` in rawProps)
) && ) &&
hasChanged(value, localValue) hasChanged(value, localValue)
) { ) {

View File

@ -190,6 +190,14 @@ function doWatch(
} }
} }
// TODO remove in 3.5
if (__DEV__ && deep !== void 0 && typeof deep === 'number') {
warn(
`watch() "deep" option with number value will be used as watch depth in future versions. ` +
`Please use a boolean instead to avoid potential breakage.`,
)
}
if (__DEV__ && !cb) { if (__DEV__ && !cb) {
if (immediate !== undefined) { if (immediate !== undefined) {
warn( warn(
@ -220,9 +228,13 @@ function doWatch(
) )
} }
const instance = const instance = currentInstance
getCurrentScope() === currentInstance?.scope ? currentInstance : null const reactiveGetter = (source: object) =>
// const instance = currentInstance deep === true
? source // traverse will happen in wrapped getter below
: // for deep: false, only traverse root-level properties
traverse(source, deep === false ? 1 : undefined)
let getter: () => any let getter: () => any
let forceTrigger = false let forceTrigger = false
let isMultiSource = false let isMultiSource = false
@ -231,10 +243,7 @@ function doWatch(
getter = () => source.value getter = () => source.value
forceTrigger = isShallow(source) forceTrigger = isShallow(source)
} else if (isReactive(source)) { } else if (isReactive(source)) {
getter = getter = () => reactiveGetter(source)
isShallow(source) || deep === false
? () => traverse(source, 1)
: () => traverse(source)
forceTrigger = true forceTrigger = true
} else if (isArray(source)) { } else if (isArray(source)) {
isMultiSource = true isMultiSource = true
@ -244,7 +253,7 @@ function doWatch(
if (isRef(s)) { if (isRef(s)) {
return s.value return s.value
} else if (isReactive(s)) { } else if (isReactive(s)) {
return traverse(s, isShallow(s) || deep === false ? 1 : undefined) return reactiveGetter(s)
} else if (isFunction(s)) { } else if (isFunction(s)) {
return callWithErrorHandling(s, instance, ErrorCodes.WATCH_GETTER) return callWithErrorHandling(s, instance, ErrorCodes.WATCH_GETTER)
} else { } else {
@ -259,9 +268,6 @@ function doWatch(
} else { } else {
// no cb -> simple effect // no cb -> simple effect
getter = () => { getter = () => {
if (instance && instance.isUnmounted) {
return
}
if (cleanup) { if (cleanup) {
cleanup() cleanup()
} }
@ -389,10 +395,11 @@ function doWatch(
const effect = new ReactiveEffect(getter, NOOP, scheduler) const effect = new ReactiveEffect(getter, NOOP, scheduler)
const scope = getCurrentScope()
const unwatch = () => { const unwatch = () => {
effect.stop() effect.stop()
if (instance && instance.scope) { if (scope) {
remove(instance.scope.effects!, effect) remove(scope.effects, effect)
} }
} }

View File

@ -50,6 +50,11 @@ export const isSuspense = (type: any): boolean => type.__isSuspense
// incrementing unique id for every pending branch // incrementing unique id for every pending branch
let suspenseId = 0 let suspenseId = 0
/**
* For testing only
*/
export const resetSuspenseId = () => (suspenseId = 0)
// Suspense exposes a component-like API, and is treated like a component // Suspense exposes a component-like API, and is treated like a component
// in the compiler, but internally it's a special built-in type that hooks // in the compiler, but internally it's a special built-in type that hooks
// directly into the renderer. // directly into the renderer.
@ -439,6 +444,7 @@ function createSuspenseBoundary(
if (__DEV__ && !__TEST__ && !hasWarned) { if (__DEV__ && !__TEST__ && !hasWarned) {
hasWarned = true hasWarned = true
// @ts-expect-error `console.info` cannot be null error // @ts-expect-error `console.info` cannot be null error
// eslint-disable-next-line no-console
console[console.info ? 'info' : 'log']( console[console.info ? 'info' : 'log'](
`<Suspense> is an experimental feature and its API will likely change.`, `<Suspense> is an experimental feature and its API will likely change.`,
) )
@ -476,7 +482,7 @@ function createSuspenseBoundary(
hiddenContainer, hiddenContainer,
anchor, anchor,
deps: 0, deps: 0,
pendingId: 0, pendingId: suspenseId++,
timeout: typeof timeout === 'number' ? timeout : -1, timeout: typeof timeout === 'number' ? timeout : -1,
activeBranch: null, activeBranch: null,
pendingBranch: null, pendingBranch: null,

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/runtime-dom", "name": "@vue/runtime-dom",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/runtime-dom", "description": "@vue/runtime-dom",
"main": "index.js", "main": "index.js",
"module": "dist/runtime-dom.esm-bundler.js", "module": "dist/runtime-dom.esm-bundler.js",
@ -10,6 +10,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/runtime-dom.d.ts",
"node": {
"production": "./dist/runtime-dom.cjs.prod.js",
"development": "./dist/runtime-dom.cjs.js",
"default": "./index.js"
},
"import": "./dist/runtime-dom.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"sideEffects": false, "sideEffects": false,
"buildOptions": { "buildOptions": {
"name": "VueRuntimeDOM", "name": "VueRuntimeDOM",

View File

@ -137,4 +137,20 @@ describe('ssr: slot', () => {
), ),
).toBe(`<div>foo</div>`) ).toBe(`<div>foo</div>`)
}) })
// #9933
test('transition-group slot', async () => {
expect(
await renderToString(
createApp({
components: {
one: {
template: `<TransitionGroup tag="div"><slot/></TransitionGroup>`,
},
},
template: `<one><p v-for="i in 2">{{i}}</p></one>`,
}),
),
).toBe(`<div><p>1</p><p>2</p></div>`)
})
}) })

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/server-renderer", "name": "@vue/server-renderer",
"version": "3.4.2", "version": "3.4.4",
"description": "@vue/server-renderer", "description": "@vue/server-renderer",
"main": "index.js", "main": "index.js",
"module": "dist/server-renderer.esm-bundler.js", "module": "dist/server-renderer.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/server-renderer.d.ts",
"node": {
"production": "./dist/server-renderer.cjs.prod.js",
"development": "./dist/server-renderer.cjs.js",
"default": "./index.js"
},
"import": "./dist/server-renderer.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"buildOptions": { "buildOptions": {
"name": "VueServerRenderer", "name": "VueServerRenderer",
"formats": [ "formats": [

View File

@ -82,7 +82,23 @@ export function ssrRenderSlotInner(
fallbackRenderFn() fallbackRenderFn()
} }
} else { } else {
for (let i = 0; i < slotBuffer.length; i++) { // #9933
// Although we handle Transition/TransitionGroup in the transform stage
// without rendering it as a fragment, the content passed into the slot
// may still be a fragment.
// Therefore, here we need to avoid rendering it as a fragment again.
let start = 0
let end = slotBuffer.length
if (
transition &&
slotBuffer[0] === '<!--[-->' &&
slotBuffer[end - 1] === '<!--]-->'
) {
start++
end--
}
for (let i = start; i < end; i++) {
push(slotBuffer[i]) push(slotBuffer[i])
} }
} }

View File

@ -206,6 +206,7 @@ export function pipeToWebWritable(
}, },
destroy(err) { destroy(err) {
// TODO better error handling? // TODO better error handling?
// eslint-disable-next-line no-console
console.log(err) console.log(err)
writer.close() writer.close()
}, },

View File

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

View File

@ -69,6 +69,9 @@ const sfcOptions: SFCOptions = {
}, },
template: { template: {
isProd: useProdMode.value, isProd: useProdMode.value,
compilerOptions: {
isCustomElement: (tag: string) => tag === 'mjx-container',
},
}, },
} }
@ -134,6 +137,12 @@ onMounted(() => {
:autoResize="true" :autoResize="true"
:sfcOptions="sfcOptions" :sfcOptions="sfcOptions"
:clearConsole="false" :clearConsole="false"
:preview-options="{
customCode: {
importCode: `import { initCustomFormatter } from 'vue'`,
useCode: `initCustomFormatter()`,
},
}"
/> />
</template> </template>

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/shared", "name": "@vue/shared",
"version": "3.4.2", "version": "3.4.4",
"description": "internal utils shared across @vue packages", "description": "internal utils shared across @vue packages",
"main": "index.js", "main": "index.js",
"module": "dist/shared.esm-bundler.js", "module": "dist/shared.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/shared.d.ts",
"node": {
"production": "./dist/shared.cjs.prod.js",
"development": "./dist/shared.cjs.js",
"default": "./index.js"
},
"import": "./dist/shared.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"sideEffects": false, "sideEffects": false,
"buildOptions": { "buildOptions": {
"formats": [ "formats": [

View File

@ -1,6 +1,6 @@
{ {
"name": "@vue/compat", "name": "@vue/compat",
"version": "3.4.2", "version": "3.4.4",
"description": "Vue 3 compatibility build for Vue 2", "description": "Vue 3 compatibility build for Vue 2",
"main": "index.js", "main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js", "module": "dist/vue.runtime.esm-bundler.js",
@ -10,6 +10,19 @@
"index.js", "index.js",
"dist" "dist"
], ],
"exports": {
".": {
"types": "./dist/vue.d.ts",
"node": {
"production": "./dist/vue.cjs.prod.js",
"development": "./dist/vue.cjs.js",
"default": "./index.js"
},
"import": "./dist/vue.esm-bundler.js",
"require": "./index.js"
},
"./*": "./*"
},
"buildOptions": { "buildOptions": {
"name": "Vue", "name": "Vue",
"filename": "vue", "filename": "vue",

View File

@ -1,6 +1,6 @@
{ {
"name": "vue", "name": "vue",
"version": "3.4.2", "version": "3.4.4",
"description": "The progressive JavaScript framework for building modern web UI.", "description": "The progressive JavaScript framework for building modern web UI.",
"main": "index.js", "main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js", "module": "dist/vue.runtime.esm-bundler.js",
@ -20,7 +20,11 @@
".": { ".": {
"import": { "import": {
"types": "./dist/vue.d.mts", "types": "./dist/vue.d.mts",
"node": "./index.mjs", "node": {
"production": "./dist/vue.cjs.prod.js",
"development": "./dist/vue.cjs.js",
"default": "./index.mjs"
},
"default": "./dist/vue.runtime.esm-bundler.js" "default": "./dist/vue.runtime.esm-bundler.js"
}, },
"require": { "require": {

View File

@ -16,7 +16,7 @@ importers:
version: 7.23.6 version: 7.23.6
'@codspeed/vitest-plugin': '@codspeed/vitest-plugin':
specifier: ^2.3.1 specifier: ^2.3.1
version: 2.3.1(vite@5.0.10)(vitest@1.1.0) version: 2.3.1(vite@5.0.10)(vitest@1.1.1)
'@rollup/plugin-alias': '@rollup/plugin-alias':
specifier: ^5.0.1 specifier: ^5.0.1
version: 5.0.1(rollup@4.4.1) version: 5.0.1(rollup@4.4.1)
@ -42,20 +42,20 @@ importers:
specifier: ^1.2.5 specifier: ^1.2.5
version: 1.2.5 version: 1.2.5
'@types/node': '@types/node':
specifier: ^20.10.5 specifier: ^20.10.6
version: 20.10.5 version: 20.10.6
'@types/semver': '@types/semver':
specifier: ^7.5.5 specifier: ^7.5.6
version: 7.5.6 version: 7.5.6
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^6.16.0 specifier: ^6.17.0
version: 6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2) version: 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^6.15.0 specifier: ^6.17.0
version: 6.16.0(eslint@8.56.0)(typescript@5.2.2) version: 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@vitest/coverage-istanbul': '@vitest/coverage-istanbul':
specifier: ^1.1.0 specifier: ^1.1.1
version: 1.1.0(vitest@1.1.0) version: 1.1.1(vitest@1.1.1)
'@vue/consolidate': '@vue/consolidate':
specifier: 0.17.3 specifier: 0.17.3
version: 0.17.3 version: 0.17.3
@ -79,10 +79,10 @@ importers:
version: 1.24.1 version: 1.24.1
eslint-plugin-import: eslint-plugin-import:
specifier: npm:eslint-plugin-i@^2.29.1 specifier: npm:eslint-plugin-i@^2.29.1
version: /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.16.0)(eslint@8.56.0) version: /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)
eslint-plugin-jest: eslint-plugin-jest:
specifier: ^27.6.0 specifier: ^27.6.1
version: 27.6.0(@typescript-eslint/eslint-plugin@6.16.0)(eslint@8.56.0)(typescript@5.2.2) version: 27.6.1(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.56.0)(typescript@5.2.2)
estree-walker: estree-walker:
specifier: ^2.0.2 specifier: ^2.0.2
version: 2.0.2 version: 2.0.2
@ -105,8 +105,8 @@ importers:
specifier: ^3.0.3 specifier: ^3.0.3
version: 3.0.3 version: 3.0.3
marked: marked:
specifier: ^11.1.0 specifier: ^11.1.1
version: 11.1.0 version: 11.1.1
minimist: minimist:
specifier: ^1.2.8 specifier: ^1.2.8
version: 1.2.8 version: 1.2.8
@ -169,10 +169,10 @@ importers:
version: 5.2.2 version: 5.2.2
vite: vite:
specifier: ^5.0.5 specifier: ^5.0.5
version: 5.0.10(@types/node@20.10.5)(terser@5.22.0) version: 5.0.10(@types/node@20.10.6)(terser@5.22.0)
vitest: vitest:
specifier: ^1.1.0 specifier: ^1.1.1
version: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0) version: 1.1.1(@types/node@20.10.6)(jsdom@23.0.1)(terser@5.22.0)
packages/compiler-core: packages/compiler-core:
dependencies: dependencies:
@ -257,14 +257,14 @@ importers:
specifier: ^6.0.0 specifier: ^6.0.0
version: 6.0.0(postcss@8.4.32) version: 6.0.0(postcss@8.4.32)
postcss-selector-parser: postcss-selector-parser:
specifier: ^6.0.13 specifier: ^6.0.15
version: 6.0.13 version: 6.0.15
pug: pug:
specifier: ^3.0.2 specifier: ^3.0.2
version: 3.0.2 version: 3.0.2
sass: sass:
specifier: ^1.69.5 specifier: ^1.69.7
version: 1.69.5 version: 1.69.7
packages/compiler-ssr: packages/compiler-ssr:
dependencies: dependencies:
@ -368,8 +368,8 @@ importers:
packages/sfc-playground: packages/sfc-playground:
dependencies: dependencies:
'@vue/repl': '@vue/repl':
specifier: ^3.1.0 specifier: ^3.1.1
version: 3.1.0 version: 3.2.0
file-saver: file-saver:
specifier: ^2.0.5 specifier: ^2.0.5
version: 2.0.5 version: 2.0.5
@ -385,7 +385,7 @@ importers:
version: 4.4.0(vite@5.0.10)(vue@packages+vue) version: 4.4.0(vite@5.0.10)(vue@packages+vue)
vite: vite:
specifier: ^5.0.5 specifier: ^5.0.5
version: 5.0.10(@types/node@20.10.5)(terser@5.22.0) version: 5.0.10(@types/node@20.10.6)(terser@5.22.0)
packages/shared: {} packages/shared: {}
@ -460,13 +460,13 @@ importers:
version: 4.5.0(vite@5.0.2)(vue@packages+vue) version: 4.5.0(vite@5.0.2)(vue@packages+vue)
vite: vite:
specifier: ^5.0.2 specifier: ^5.0.2
version: 5.0.2(@types/node@20.10.5)(terser@5.22.0) version: 5.0.2(@types/node@20.10.6)(terser@5.22.0)
vite-hyper-config: vite-hyper-config:
specifier: ^0.1.1 specifier: ^0.1.1
version: 0.1.1(@types/node@20.10.5)(terser@5.22.0)(vite@5.0.2) version: 0.1.1(@types/node@20.10.6)(terser@5.22.0)(vite@5.0.2)
vite-node: vite-node:
specifier: ^0.34.6 specifier: ^0.34.6
version: 0.34.6(@types/node@20.10.5)(terser@5.22.0) version: 0.34.6(@types/node@20.10.6)(terser@5.22.0)
vite-plugin-inspect: vite-plugin-inspect:
specifier: ^0.7.42 specifier: ^0.7.42
version: 0.7.42(rollup@4.4.1)(vite@5.0.2) version: 0.7.42(rollup@4.4.1)(vite@5.0.2)
@ -490,15 +490,6 @@ packages:
resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==}
dev: true dev: true
/@babel/code-frame@7.22.13:
resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
engines: {node: '>=6.9.0'}
requiresBuild: true
dependencies:
'@babel/highlight': 7.22.20
chalk: 2.4.2
dev: true
/@babel/code-frame@7.23.5: /@babel/code-frame@7.23.5:
resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
@ -518,7 +509,7 @@ packages:
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@ampproject/remapping': 2.2.1 '@ampproject/remapping': 2.2.1
'@babel/code-frame': 7.22.13 '@babel/code-frame': 7.23.5
'@babel/generator': 7.23.3 '@babel/generator': 7.23.3
'@babel/helper-compilation-targets': 7.22.15 '@babel/helper-compilation-targets': 7.22.15
'@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3)
@ -637,16 +628,6 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@babel/highlight@7.22.20:
resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
engines: {node: '>=6.9.0'}
requiresBuild: true
dependencies:
'@babel/helper-validator-identifier': 7.22.20
chalk: 2.4.2
js-tokens: 4.0.0
dev: true
/@babel/highlight@7.23.4: /@babel/highlight@7.23.4:
resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
@ -668,7 +649,7 @@ packages:
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/code-frame': 7.22.13 '@babel/code-frame': 7.23.5
'@babel/parser': 7.23.6 '@babel/parser': 7.23.6
'@babel/types': 7.23.6 '@babel/types': 7.23.6
dev: true dev: true
@ -677,7 +658,7 @@ packages:
resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==} resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/code-frame': 7.22.13 '@babel/code-frame': 7.23.5
'@babel/generator': 7.23.3 '@babel/generator': 7.23.3
'@babel/helper-environment-visitor': 7.22.20 '@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0 '@babel/helper-function-name': 7.23.0
@ -706,15 +687,15 @@ packages:
node-gyp-build: 4.7.1 node-gyp-build: 4.7.1
dev: true dev: true
/@codspeed/vitest-plugin@2.3.1(vite@5.0.10)(vitest@1.1.0): /@codspeed/vitest-plugin@2.3.1(vite@5.0.10)(vitest@1.1.1):
resolution: {integrity: sha512-/e4G2B/onX/hG/EjUU/NpDxnIryeTDamVRTBeWfgQDoex3g7GDzTwoQktaU5l/Asw3ZjEErQg+oQVToQ6jYZlA==} resolution: {integrity: sha512-/e4G2B/onX/hG/EjUU/NpDxnIryeTDamVRTBeWfgQDoex3g7GDzTwoQktaU5l/Asw3ZjEErQg+oQVToQ6jYZlA==}
peerDependencies: peerDependencies:
vite: ^4.2.0 || ^5.0.0 vite: ^4.2.0 || ^5.0.0
vitest: '>=1.0.0-beta.4 || >=1' vitest: '>=1.0.0-beta.4 || >=1'
dependencies: dependencies:
'@codspeed/core': 2.3.1 '@codspeed/core': 2.3.1
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.10(@types/node@20.10.6)(terser@5.22.0)
vitest: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0) vitest: 1.1.1(@types/node@20.10.6)(jsdom@23.0.1)(terser@5.22.0)
dev: true dev: true
/@esbuild/aix-ppc64@0.19.10: /@esbuild/aix-ppc64@0.19.10:
@ -1339,8 +1320,8 @@ packages:
resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
dev: true dev: true
/@types/node@20.10.5: /@types/node@20.10.6:
resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==}
dependencies: dependencies:
undici-types: 5.26.5 undici-types: 5.26.5
dev: true dev: true
@ -1361,12 +1342,12 @@ packages:
resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==} resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==}
requiresBuild: true requiresBuild: true
dependencies: dependencies:
'@types/node': 20.10.5 '@types/node': 20.10.6
dev: true dev: true
optional: true optional: true
/@typescript-eslint/eslint-plugin@6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2): /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ==} resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@ -1377,11 +1358,11 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.9.1 '@eslint-community/regexpp': 4.9.1
'@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.16.0 '@typescript-eslint/scope-manager': 6.17.0
'@typescript-eslint/type-utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) '@typescript-eslint/type-utils': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.16.0 '@typescript-eslint/visitor-keys': 6.17.0
debug: 4.3.4 debug: 4.3.4
eslint: 8.56.0 eslint: 8.56.0
graphemer: 1.4.0 graphemer: 1.4.0
@ -1394,8 +1375,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser@6.16.0(eslint@8.56.0)(typescript@5.2.2): /@typescript-eslint/parser@6.17.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==} resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
@ -1404,10 +1385,10 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/scope-manager': 6.16.0 '@typescript-eslint/scope-manager': 6.17.0
'@typescript-eslint/types': 6.16.0 '@typescript-eslint/types': 6.17.0
'@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.16.0 '@typescript-eslint/visitor-keys': 6.17.0
debug: 4.3.4 debug: 4.3.4
eslint: 8.56.0 eslint: 8.56.0
typescript: 5.2.2 typescript: 5.2.2
@ -1423,16 +1404,16 @@ packages:
'@typescript-eslint/visitor-keys': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0
dev: true dev: true
/@typescript-eslint/scope-manager@6.16.0: /@typescript-eslint/scope-manager@6.17.0:
resolution: {integrity: sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw==} resolution: {integrity: sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
dependencies: dependencies:
'@typescript-eslint/types': 6.16.0 '@typescript-eslint/types': 6.17.0
'@typescript-eslint/visitor-keys': 6.16.0 '@typescript-eslint/visitor-keys': 6.17.0
dev: true dev: true
/@typescript-eslint/type-utils@6.16.0(eslint@8.56.0)(typescript@5.2.2): /@typescript-eslint/type-utils@6.17.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-ThmrEOcARmOnoyQfYkHw/DX2SEYBalVECmoldVuH6qagKROp/jMnfXpAU/pAIWub9c4YTxga+XwgAkoA0pxfmg==} resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
@ -1441,8 +1422,8 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.2.2)
'@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) '@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
debug: 4.3.4 debug: 4.3.4
eslint: 8.56.0 eslint: 8.56.0
ts-api-utils: 1.0.3(typescript@5.2.2) ts-api-utils: 1.0.3(typescript@5.2.2)
@ -1456,8 +1437,8 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/@typescript-eslint/types@6.16.0: /@typescript-eslint/types@6.17.0:
resolution: {integrity: sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ==} resolution: {integrity: sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
dev: true dev: true
@ -1482,8 +1463,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/typescript-estree@6.16.0(typescript@5.2.2): /@typescript-eslint/typescript-estree@6.17.0(typescript@5.2.2):
resolution: {integrity: sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA==} resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
typescript: '*' typescript: '*'
@ -1491,8 +1472,8 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/types': 6.16.0 '@typescript-eslint/types': 6.17.0
'@typescript-eslint/visitor-keys': 6.16.0 '@typescript-eslint/visitor-keys': 6.17.0
debug: 4.3.4 debug: 4.3.4
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
@ -1524,8 +1505,8 @@ packages:
- typescript - typescript
dev: true dev: true
/@typescript-eslint/utils@6.16.0(eslint@8.56.0)(typescript@5.2.2): /@typescript-eslint/utils@6.17.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A==} resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
@ -1533,9 +1514,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@types/json-schema': 7.0.14 '@types/json-schema': 7.0.14
'@types/semver': 7.5.6 '@types/semver': 7.5.6
'@typescript-eslint/scope-manager': 6.16.0 '@typescript-eslint/scope-manager': 6.17.0
'@typescript-eslint/types': 6.16.0 '@typescript-eslint/types': 6.17.0
'@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.2.2)
eslint: 8.56.0 eslint: 8.56.0
semver: 7.5.4 semver: 7.5.4
transitivePeerDependencies: transitivePeerDependencies:
@ -1551,11 +1532,11 @@ packages:
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
dev: true dev: true
/@typescript-eslint/visitor-keys@6.16.0: /@typescript-eslint/visitor-keys@6.17.0:
resolution: {integrity: sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A==} resolution: {integrity: sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
dependencies: dependencies:
'@typescript-eslint/types': 6.16.0 '@typescript-eslint/types': 6.17.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
dev: true dev: true
@ -1570,7 +1551,7 @@ packages:
vite: ^4.0.0 vite: ^4.0.0
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.10(@types/node@20.10.6)(terser@5.22.0)
vue: link:packages/vue vue: link:packages/vue
dev: true dev: true
@ -1581,12 +1562,12 @@ packages:
vite: ^4.0.0 || ^5.0.0 vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25 vue: ^3.2.25
dependencies: dependencies:
vite: 5.0.2(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.2(@types/node@20.10.6)(terser@5.22.0)
vue: link:packages/vue vue: link:packages/vue
dev: true dev: true
/@vitest/coverage-istanbul@1.1.0(vitest@1.1.0): /@vitest/coverage-istanbul@1.1.1(vitest@1.1.1):
resolution: {integrity: sha512-sjHGQQu7lkJUYSBMOR3f9AyOlK1LBVr0v7LMar/4i167ltabRWlQ2STBDM4P6Wl659NAcHlZ/RXxrAgJPavDMA==} resolution: {integrity: sha512-Ikq6k2/KJ3MqEnGJCZBctcgxW1JRPzyVetVz1AYqLxrHNiG/epGFPZ74kIc3AK0HGaf0RsqZkc8riCTmxfH/dQ==}
peerDependencies: peerDependencies:
vitest: ^1.0.0 vitest: ^1.0.0
dependencies: dependencies:
@ -1599,43 +1580,43 @@ packages:
magicast: 0.3.2 magicast: 0.3.2
picocolors: 1.0.0 picocolors: 1.0.0
test-exclude: 6.0.0 test-exclude: 6.0.0
vitest: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0) vitest: 1.1.1(@types/node@20.10.6)(jsdom@23.0.1)(terser@5.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@vitest/expect@1.1.0: /@vitest/expect@1.1.1:
resolution: {integrity: sha512-9IE2WWkcJo2BR9eqtY5MIo3TPmS50Pnwpm66A6neb2hvk/QSLfPXBz2qdiwUOQkwyFuuXEUj5380CbwfzW4+/w==} resolution: {integrity: sha512-Qpw01C2Hyb3085jBkOJLQ7HRX0Ncnh2qV4p+xWmmhcIUlMykUF69zsnZ1vPmAjZpomw9+5tWEGOQ0GTfR8U+kA==}
dependencies: dependencies:
'@vitest/spy': 1.1.0 '@vitest/spy': 1.1.1
'@vitest/utils': 1.1.0 '@vitest/utils': 1.1.1
chai: 4.3.10 chai: 4.3.10
dev: true dev: true
/@vitest/runner@1.1.0: /@vitest/runner@1.1.1:
resolution: {integrity: sha512-zdNLJ00pm5z/uhbWF6aeIJCGMSyTyWImy3Fcp9piRGvueERFlQFbUwCpzVce79OLm2UHk9iwaMSOaU9jVHgNVw==} resolution: {integrity: sha512-8HokyJo1SnSi3uPFKfWm/Oq1qDwLC4QDcVsqpXIXwsRPAg3gIDh8EbZ1ri8cmQkBxdOu62aOF9B4xcqJhvt4xQ==}
dependencies: dependencies:
'@vitest/utils': 1.1.0 '@vitest/utils': 1.1.1
p-limit: 5.0.0 p-limit: 5.0.0
pathe: 1.1.1 pathe: 1.1.1
dev: true dev: true
/@vitest/snapshot@1.1.0: /@vitest/snapshot@1.1.1:
resolution: {integrity: sha512-5O/wyZg09V5qmNmAlUgCBqflvn2ylgsWJRRuPrnHEfDNT6tQpQ8O1isNGgo+VxofISHqz961SG3iVvt3SPK/QQ==} resolution: {integrity: sha512-WnMHjv4VdHLbFGgCdVVvyRkRPnOKN75JJg+LLTdr6ah7YnL75W+7CTIMdzPEPzaDxA8r5yvSVlc1d8lH3yE28w==}
dependencies: dependencies:
magic-string: 0.30.5 magic-string: 0.30.5
pathe: 1.1.1 pathe: 1.1.1
pretty-format: 29.7.0 pretty-format: 29.7.0
dev: true dev: true
/@vitest/spy@1.1.0: /@vitest/spy@1.1.1:
resolution: {integrity: sha512-sNOVSU/GE+7+P76qYo+VXdXhXffzWZcYIPQfmkiRxaNCSPiLANvQx5Mx6ZURJ/ndtEkUJEpvKLXqAYTKEY+lTg==} resolution: {integrity: sha512-hDU2KkOTfFp4WFFPWwHFauddwcKuGQ7gF6Un/ZZkCogoAiTMN7/7YKvUDbywPZZ754iCQGjdUmXN3t4k0jm1IQ==}
dependencies: dependencies:
tinyspy: 2.2.0 tinyspy: 2.2.0
dev: true dev: true
/@vitest/utils@1.1.0: /@vitest/utils@1.1.1:
resolution: {integrity: sha512-z+s510fKmYz4Y41XhNs3vcuFTFhcij2YF7F8VQfMEYAAUfqQh0Zfg7+w9xdgFGhPf3tX3TicAe+8BDITk6ampQ==} resolution: {integrity: sha512-E9LedH093vST/JuBSyHLFMpxJKW3dLhe/flUSPFedoyj4wKiFX7Jm8gYLtOIiin59dgrssfmFv0BJ1u8P/LC/A==}
dependencies: dependencies:
diff-sequences: 29.6.3 diff-sequences: 29.6.3
loupe: 2.3.7 loupe: 2.3.7
@ -1647,8 +1628,8 @@ packages:
engines: {node: '>= 0.12.0'} engines: {node: '>= 0.12.0'}
dev: true dev: true
/@vue/repl@3.1.0: /@vue/repl@3.2.0:
resolution: {integrity: sha512-lnR010NTkysg71Z0TVsFCTfiF5ARZbyohqymGpOxOrSuSI4o9RlSvWH6YmJdv9OHm5j69HKLVVUhXlCScMCQrg==} resolution: {integrity: sha512-heKXXwAm4p3wYqVsYqW5i9bAkiGqwbZygfBx8stZ48QqTvaTGiGY3qASJwvhc5FrZDPGoGcFRjab6XDImKxPvA==}
dev: false dev: false
/@zeit/schemas@2.29.0: /@zeit/schemas@2.29.0:
@ -2775,7 +2756,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
@ -2796,7 +2777,7 @@ packages:
eslint-import-resolver-webpack: eslint-import-resolver-webpack:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
debug: 3.2.7 debug: 3.2.7
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
@ -2804,7 +2785,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.16.0)(eslint@8.56.0): /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.17.0)(eslint@8.56.0):
resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==} resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
peerDependencies: peerDependencies:
@ -2814,7 +2795,7 @@ packages:
doctrine: 3.0.0 doctrine: 3.0.0
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
get-tsconfig: 4.7.2 get-tsconfig: 4.7.2
is-glob: 4.0.3 is-glob: 4.0.3
minimatch: 3.1.2 minimatch: 3.1.2
@ -2826,8 +2807,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.16.0)(eslint@8.56.0)(typescript@5.2.2): /eslint-plugin-jest@27.6.1(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} resolution: {integrity: sha512-WEYkyVXD9NlmFBKvrkmzrC+C9yZoz5pAml2hO19PlS3spJtoiwj4p2u8spd/7zx5IvRsZsCmsoImaAvBB9X93Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies: peerDependencies:
'@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0
@ -2839,7 +2820,7 @@ packages:
jest: jest:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2) '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.2.2) '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.2.2)
eslint: 8.56.0 eslint: 8.56.0
transitivePeerDependencies: transitivePeerDependencies:
@ -4198,8 +4179,8 @@ packages:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: true dev: true
/marked@11.1.0: /marked@11.1.1:
resolution: {integrity: sha512-fvKJWAPEafVj1dwGwcPI5mBB/0pvViL6NlCbNDG1HOIRwwAU/jeMoFxfbRLuirO1wRH7m4yPvBqD/O1wyWvayw==} resolution: {integrity: sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg==}
engines: {node: '>= 18'} engines: {node: '>= 18'}
hasBin: true hasBin: true
dev: true dev: true
@ -4741,7 +4722,7 @@ packages:
dependencies: dependencies:
icss-utils: 5.1.0(postcss@8.4.32) icss-utils: 5.1.0(postcss@8.4.32)
postcss: 8.4.32 postcss: 8.4.32
postcss-selector-parser: 6.0.13 postcss-selector-parser: 6.0.15
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
dev: true dev: true
@ -4752,7 +4733,7 @@ packages:
postcss: ^8.1.0 postcss: ^8.1.0
dependencies: dependencies:
postcss: 8.4.32 postcss: 8.4.32
postcss-selector-parser: 6.0.13 postcss-selector-parser: 6.0.15
dev: true dev: true
/postcss-modules-values@4.0.0(postcss@8.4.32): /postcss-modules-values@4.0.0(postcss@8.4.32):
@ -4781,8 +4762,8 @@ packages:
string-hash: 1.1.3 string-hash: 1.1.3
dev: true dev: true
/postcss-selector-parser@6.0.13: /postcss-selector-parser@6.0.15:
resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==}
engines: {node: '>=4'} engines: {node: '>=4'}
dependencies: dependencies:
cssesc: 3.0.0 cssesc: 3.0.0
@ -5283,8 +5264,8 @@ packages:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
dev: true dev: true
/sass@1.69.5: /sass@1.69.7:
resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} resolution: {integrity: sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
hasBin: true hasBin: true
dependencies: dependencies:
@ -6041,7 +6022,7 @@ packages:
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
dev: true dev: true
/vite-hyper-config@0.1.1(@types/node@20.10.5)(terser@5.22.0)(vite@5.0.2): /vite-hyper-config@0.1.1(@types/node@20.10.6)(terser@5.22.0)(vite@5.0.2):
resolution: {integrity: sha512-Sc9WuuLImezPUG6JUnBU/L0KHZDHRyvLKEU1fEPCR6gBsC9QTnmnX78doRQpKt6P/rRcawlytbA2xt9Qb/kaVQ==} resolution: {integrity: sha512-Sc9WuuLImezPUG6JUnBU/L0KHZDHRyvLKEU1fEPCR6gBsC9QTnmnX78doRQpKt6P/rRcawlytbA2xt9Qb/kaVQ==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
peerDependencies: peerDependencies:
@ -6049,8 +6030,8 @@ packages:
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
picocolors: 1.0.0 picocolors: 1.0.0
vite: 5.0.2(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.2(@types/node@20.10.6)(terser@5.22.0)
vite-node: 0.34.6(@types/node@20.10.5)(terser@5.22.0) vite-node: 0.34.6(@types/node@20.10.6)(terser@5.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -6062,7 +6043,7 @@ packages:
- terser - terser
dev: true dev: true
/vite-node@0.34.6(@types/node@20.10.5)(terser@5.22.0): /vite-node@0.34.6(@types/node@20.10.6)(terser@5.22.0):
resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==}
engines: {node: '>=v14.18.0'} engines: {node: '>=v14.18.0'}
hasBin: true hasBin: true
@ -6072,7 +6053,7 @@ packages:
mlly: 1.4.2 mlly: 1.4.2
pathe: 1.1.1 pathe: 1.1.1
picocolors: 1.0.0 picocolors: 1.0.0
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.10(@types/node@20.10.6)(terser@5.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -6084,8 +6065,8 @@ packages:
- terser - terser
dev: true dev: true
/vite-node@1.1.0(@types/node@20.10.5)(terser@5.22.0): /vite-node@1.1.1(@types/node@20.10.6)(terser@5.22.0):
resolution: {integrity: sha512-jV48DDUxGLEBdHCQvxL1mEh7+naVy+nhUUUaPAZLd3FJgXuxQiewHcfeZebbJ6onDqNGkP4r3MhQ342PRlG81Q==} resolution: {integrity: sha512-2bGE5w4jvym5v8llF6Gu1oBrmImoNSs4WmRVcavnG2me6+8UQntTqLiAMFyiAobp+ZXhj5ZFhI7SmLiFr/jrow==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true hasBin: true
dependencies: dependencies:
@ -6093,7 +6074,7 @@ packages:
debug: 4.3.4 debug: 4.3.4
pathe: 1.1.1 pathe: 1.1.1
picocolors: 1.0.0 picocolors: 1.0.0
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.10(@types/node@20.10.6)(terser@5.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -6123,13 +6104,13 @@ packages:
open: 9.1.0 open: 9.1.0
picocolors: 1.0.0 picocolors: 1.0.0
sirv: 2.0.3 sirv: 2.0.3
vite: 5.0.2(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.2(@types/node@20.10.6)(terser@5.22.0)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
dev: true dev: true
/vite@5.0.10(@types/node@20.10.5)(terser@5.22.0): /vite@5.0.10(@types/node@20.10.6)(terser@5.22.0):
resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true hasBin: true
@ -6157,7 +6138,7 @@ packages:
terser: terser:
optional: true optional: true
dependencies: dependencies:
'@types/node': 20.10.5 '@types/node': 20.10.6
esbuild: 0.19.10 esbuild: 0.19.10
postcss: 8.4.32 postcss: 8.4.32
rollup: 4.4.1 rollup: 4.4.1
@ -6166,7 +6147,7 @@ packages:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true
/vite@5.0.2(@types/node@20.10.5)(terser@5.22.0): /vite@5.0.2(@types/node@20.10.6)(terser@5.22.0):
resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==} resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true hasBin: true
@ -6194,7 +6175,7 @@ packages:
terser: terser:
optional: true optional: true
dependencies: dependencies:
'@types/node': 20.10.5 '@types/node': 20.10.6
esbuild: 0.19.10 esbuild: 0.19.10
postcss: 8.4.32 postcss: 8.4.32
rollup: 4.4.1 rollup: 4.4.1
@ -6203,8 +6184,8 @@ packages:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true
/vitest@1.1.0(@types/node@20.10.5)(jsdom@23.0.1)(terser@5.22.0): /vitest@1.1.1(@types/node@20.10.6)(jsdom@23.0.1)(terser@5.22.0):
resolution: {integrity: sha512-oDFiCrw7dd3Jf06HoMtSRARivvyjHJaTxikFxuqJjO76U436PqlVw1uLn7a8OSPrhSfMGVaRakKpA2lePdw79A==} resolution: {integrity: sha512-Ry2qs4UOu/KjpXVfOCfQkTnwSXYGrqTbBZxw6reIYEFjSy1QUARRg5pxiI5BEXy+kBVntxUYNMlq4Co+2vD3fQ==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -6228,12 +6209,12 @@ packages:
jsdom: jsdom:
optional: true optional: true
dependencies: dependencies:
'@types/node': 20.10.5 '@types/node': 20.10.6
'@vitest/expect': 1.1.0 '@vitest/expect': 1.1.1
'@vitest/runner': 1.1.0 '@vitest/runner': 1.1.1
'@vitest/snapshot': 1.1.0 '@vitest/snapshot': 1.1.1
'@vitest/spy': 1.1.0 '@vitest/spy': 1.1.1
'@vitest/utils': 1.1.0 '@vitest/utils': 1.1.1
acorn-walk: 8.3.1 acorn-walk: 8.3.1
cac: 6.7.14 cac: 6.7.14
chai: 4.3.10 chai: 4.3.10
@ -6248,8 +6229,8 @@ packages:
strip-literal: 1.3.0 strip-literal: 1.3.0
tinybench: 2.5.1 tinybench: 2.5.1
tinypool: 0.8.1 tinypool: 0.8.1
vite: 5.0.10(@types/node@20.10.5)(terser@5.22.0) vite: 5.0.10(@types/node@20.10.6)(terser@5.22.0)
vite-node: 1.1.0(@types/node@20.10.5)(terser@5.22.0) vite-node: 1.1.1(@types/node@20.10.6)(terser@5.22.0)
why-is-node-running: 2.2.2 why-is-node-running: 2.2.2
transitivePeerDependencies: transitivePeerDependencies:
- less - less