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'],
rules: {
'no-debugger': 'error',
'no-console': ['error', { allow: ['warn', 'error', 'info'] }],
// most of the codebase are expected to be env agnostic
'no-restricted-globals': ['error', ...DOMGlobals, ...NodeGlobals],
@ -58,6 +59,7 @@ module.exports = {
{
files: ['**/__tests__/**', 'packages/dts-test/**'],
rules: {
'no-console': 'off',
'no-restricted-globals': 'off',
'no-restricted-syntax': 'off',
'jest/no-disabled-tests': 'error',
@ -92,6 +94,7 @@ module.exports = {
rules: {
'no-restricted-globals': ['error', ...NodeGlobals],
'no-restricted-syntax': ['error', banConstEnum],
'no-console': 'off',
},
},
// JavaScript files
@ -113,6 +116,7 @@ module.exports = {
rules: {
'no-restricted-globals': 'off',
'no-restricted-syntax': ['error', banConstEnum],
'no-console': 'off',
},
},
// 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)

View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-core",
"version": "3.4.2",
"version": "3.4.4",
"description": "@vue/compiler-core",
"main": "index.js",
"module": "dist/compiler-core.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js",
"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": {
"name": "VueCompilerCore",
"compat": true,

View File

@ -146,6 +146,19 @@ export function isInDestructureAssignment(
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(
node: Function,
onIdent: (id: Identifier) => void,

View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-dom",
"version": "3.4.2",
"version": "3.4.4",
"description": "@vue/compiler-dom",
"main": "index.js",
"module": "dist/compiler-dom.esm-bundler.js",
@ -11,6 +11,19 @@
"index.js",
"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,
"buildOptions": {
"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`] = `
"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()
})
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', () => {

View File

@ -427,6 +427,31 @@ test('prefixing edge case for reused AST', () => {
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 {
line: number
column: number

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-sfc",
"version": "3.4.2",
"version": "3.4.4",
"description": "@vue/compiler-sfc",
"main": "dist/compiler-sfc.cjs.js",
"module": "dist/compiler-sfc.esm-browser.js",
@ -8,6 +8,15 @@
"files": [
"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": {
"name": "VueCompilerSFC",
"formats": [
@ -50,8 +59,8 @@
"merge-source-map": "^1.1.0",
"minimatch": "^9.0.3",
"postcss-modules": "^6.0.0",
"postcss-selector-parser": "^6.0.13",
"postcss-selector-parser": "^6.0.15",
"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
// the AST location info to be relative to the entire SFC.
const newAST = (ssr ? CompilerDOM : compiler).parse(inAST.source, {
...compilerOptions,
parseMode: 'sfc',
onError: e => errors.push(e),
})

View File

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

View File

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

View File

@ -55,7 +55,7 @@ import {
ssrProcessTransitionGroup,
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 {
ssrProcessTransition,
@ -371,10 +371,10 @@ function subTransform(
function clone(v: any): any {
if (isArray(v)) {
return v.map(clone)
} else if (isObject(v)) {
} else if (isPlainObject(v)) {
const res: any = {}
for (const key in v) {
res[key] = clone(v[key])
res[key] = clone(v[key as keyof typeof v])
}
return res
} else {

View File

@ -1,6 +1,6 @@
{
"name": "@vue/reactivity",
"version": "3.4.2",
"version": "3.4.4",
"description": "@vue/reactivity",
"main": "index.js",
"module": "dist/reactivity.esm-bundler.js",
@ -11,6 +11,19 @@
"index.js",
"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,
"repository": {
"type": "git",

View File

@ -314,6 +314,84 @@ describe('SFC <script setup> helpers', () => {
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 () => {
let count: any
const inc = () => {

View File

@ -187,7 +187,7 @@ describe('api: watch', () => {
})
// #9916
it('directly watching shallow reactive array', async () => {
it('watching shallow reactive array with deep: false', async () => {
class foo {
prop1: ShallowRef<string> = shallowRef('')
prop2: string = ''
@ -198,7 +198,7 @@ describe('api: watch', () => {
const collection = shallowReactive([obj1, obj2])
const cb = vi.fn()
watch(collection, cb)
watch(collection, cb, { deep: false })
collection[0].prop1.value = 'foo'
await nextTick()
@ -211,6 +211,24 @@ describe('api: watch', () => {
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 () => {
const state = reactive({ count: 1 })
const count = ref(1)
@ -1425,4 +1443,35 @@ describe('api: watch', () => {
expect(spy1).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'
import { createApp, defineComponent } from 'vue'
import type { RawSlots } from 'packages/runtime-core/src/componentSlots'
import { resetSuspenseId } from '../../src/components/Suspense'
describe('Suspense', () => {
const deps: Promise<any>[] = []
beforeEach(() => {
deps.length = 0
resetSuspenseId()
})
// a simple async factory for testing purposes only.

View File

@ -1,6 +1,6 @@
{
"name": "@vue/runtime-core",
"version": "3.4.2",
"version": "3.4.4",
"description": "@vue/runtime-core",
"main": "index.js",
"module": "dist/runtime-core.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js",
"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": {
"name": "VueRuntimeCore",
"formats": [

View File

@ -6,6 +6,7 @@ import {
camelize,
extend,
hasChanged,
hyphenate,
isArray,
isFunction,
isPromise,
@ -382,6 +383,7 @@ export function useModel(
}
const camelizedName = camelize(name)
const hyphenatedName = hyphenate(name)
const res = customRef((track, trigger) => {
let localValue: any
@ -403,9 +405,12 @@ export function useModel(
!(
rawProps &&
// 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:${camelizedName}` in rawProps)
`onUpdate:${camelizedName}` in rawProps ||
`onUpdate:${hyphenatedName}` in rawProps)
) &&
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 (immediate !== undefined) {
warn(
@ -220,9 +228,13 @@ function doWatch(
)
}
const instance =
getCurrentScope() === currentInstance?.scope ? currentInstance : null
// const instance = currentInstance
const instance = currentInstance
const reactiveGetter = (source: object) =>
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 forceTrigger = false
let isMultiSource = false
@ -231,10 +243,7 @@ function doWatch(
getter = () => source.value
forceTrigger = isShallow(source)
} else if (isReactive(source)) {
getter =
isShallow(source) || deep === false
? () => traverse(source, 1)
: () => traverse(source)
getter = () => reactiveGetter(source)
forceTrigger = true
} else if (isArray(source)) {
isMultiSource = true
@ -244,7 +253,7 @@ function doWatch(
if (isRef(s)) {
return s.value
} else if (isReactive(s)) {
return traverse(s, isShallow(s) || deep === false ? 1 : undefined)
return reactiveGetter(s)
} else if (isFunction(s)) {
return callWithErrorHandling(s, instance, ErrorCodes.WATCH_GETTER)
} else {
@ -259,9 +268,6 @@ function doWatch(
} else {
// no cb -> simple effect
getter = () => {
if (instance && instance.isUnmounted) {
return
}
if (cleanup) {
cleanup()
}
@ -389,10 +395,11 @@ function doWatch(
const effect = new ReactiveEffect(getter, NOOP, scheduler)
const scope = getCurrentScope()
const unwatch = () => {
effect.stop()
if (instance && instance.scope) {
remove(instance.scope.effects!, effect)
if (scope) {
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
let suspenseId = 0
/**
* For testing only
*/
export const resetSuspenseId = () => (suspenseId = 0)
// 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
// directly into the renderer.
@ -439,6 +444,7 @@ function createSuspenseBoundary(
if (__DEV__ && !__TEST__ && !hasWarned) {
hasWarned = true
// @ts-expect-error `console.info` cannot be null error
// eslint-disable-next-line no-console
console[console.info ? 'info' : 'log'](
`<Suspense> is an experimental feature and its API will likely change.`,
)
@ -476,7 +482,7 @@ function createSuspenseBoundary(
hiddenContainer,
anchor,
deps: 0,
pendingId: 0,
pendingId: suspenseId++,
timeout: typeof timeout === 'number' ? timeout : -1,
activeBranch: null,
pendingBranch: null,

View File

@ -1,6 +1,6 @@
{
"name": "@vue/runtime-dom",
"version": "3.4.2",
"version": "3.4.4",
"description": "@vue/runtime-dom",
"main": "index.js",
"module": "dist/runtime-dom.esm-bundler.js",
@ -10,6 +10,19 @@
"index.js",
"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,
"buildOptions": {
"name": "VueRuntimeDOM",

View File

@ -137,4 +137,20 @@ describe('ssr: slot', () => {
),
).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",
"version": "3.4.2",
"version": "3.4.4",
"description": "@vue/server-renderer",
"main": "index.js",
"module": "dist/server-renderer.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js",
"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": {
"name": "VueServerRenderer",
"formats": [

View File

@ -82,7 +82,23 @@ export function ssrRenderSlotInner(
fallbackRenderFn()
}
} 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])
}
}

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@vue/shared",
"version": "3.4.2",
"version": "3.4.4",
"description": "internal utils shared across @vue packages",
"main": "index.js",
"module": "dist/shared.esm-bundler.js",
@ -9,6 +9,19 @@
"index.js",
"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,
"buildOptions": {
"formats": [

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compat",
"version": "3.4.2",
"version": "3.4.4",
"description": "Vue 3 compatibility build for Vue 2",
"main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js",
@ -10,6 +10,19 @@
"index.js",
"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": {
"name": "Vue",
"filename": "vue",

View File

@ -1,6 +1,6 @@
{
"name": "vue",
"version": "3.4.2",
"version": "3.4.4",
"description": "The progressive JavaScript framework for building modern web UI.",
"main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js",
@ -20,7 +20,11 @@
".": {
"import": {
"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"
},
"require": {

View File

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