Merge remote-tracking branch 'upstream/minor'

This commit is contained in:
三咲智子 Kevin Deng 2023-12-31 18:51:34 +08:00
commit 3d3d08d0f1
No known key found for this signature in database
GPG Key ID: 69992F2250DFD93E
27 changed files with 844 additions and 873 deletions

View File

@ -1,3 +1,31 @@
## [3.4.2](https://github.com/vuejs/core/compare/v3.4.1...v3.4.2) (2023-12-30)
### Bug Fixes
* **compiler-sfc:** fix dev regression for dot / namespace component usage ([dce99c1](https://github.com/vuejs/core/commit/dce99c12df981ca45a4d848c37ba8b16496025f0)), closes [#9947](https://github.com/vuejs/core/issues/9947)
* **runtime-core:** support deep: false when watch reactive ([#9928](https://github.com/vuejs/core/issues/9928)) ([4f703d1](https://github.com/vuejs/core/commit/4f703d120d76d711084346f73ea295c73e6ef6b6)), closes [#9916](https://github.com/vuejs/core/issues/9916)
* **ssr:** fix hydration error for slot outlet inside transition-group ([#9937](https://github.com/vuejs/core/issues/9937)) ([6cb00ed](https://github.com/vuejs/core/commit/6cb00ed0f9b64428ec18fada0f68467d6a813fde)), closes [#9933](https://github.com/vuejs/core/issues/9933)
## [3.4.1](https://github.com/vuejs/core/compare/v3.4.0...v3.4.1) (2023-12-30)
### Bug Fixes
* **compat:** correct enum value for COMPILER_FILTERS feature ([#9875](https://github.com/vuejs/core/issues/9875)) ([77d33e2](https://github.com/vuejs/core/commit/77d33e263cf19983caf4e5c53a0eb0bee374843c))
* **defineModel:** always default modifiers to empty object ([9bc3c7e](https://github.com/vuejs/core/commit/9bc3c7e29cf15f5ca96703542d10cfd786a3fc55)), closes [#9945](https://github.com/vuejs/core/issues/9945)
* **defineModel:** support local mutation when only prop but no listener is passed ([97ce041](https://github.com/vuejs/core/commit/97ce041910b6ca4bef10f939493d6b5a06ea5b07))
* **types:** fix defineModel watch type error ([#9942](https://github.com/vuejs/core/issues/9942)) ([4af8583](https://github.com/vuejs/core/commit/4af85835f7e593a7dffa7dc7e99f14877eb70fd1)), closes [#9939](https://github.com/vuejs/core/issues/9939)
### Features
* **compiler-sfc:** support passing template parsing options when parsing sfc ([6fab855](https://github.com/vuejs/core/commit/6fab8551e4aeef4610987640de8b435b1ae321bb)) (necessary to fix https://github.com/vitejs/vite-plugin-vue/issues/322)
# [3.4.0 Slam Dunk](https://github.com/vuejs/core/compare/v3.4.0-rc.3...v3.4.0) (2023-12-29)
> Read [this blog post](https://blog.vuejs.org/posts/vue-3-4) for an overview of the release highlights.

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-core",
"version": "3.4.0",
"version": "3.4.2",
"description": "@vue/compiler-core",
"main": "index.js",
"module": "dist/compiler-core.esm-bundler.js",

View File

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

View File

@ -639,190 +639,6 @@ return { foo, bar, baz, y, z }
}"
`;
exports[`SFC compile <script setup> > dev mode import usage check > TS annotations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz, Qux, Fred } from './x'
const a = 1
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
function b() {}
return { a, b, get Baz() { return Baz } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > attribute expressions 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { bar, baz } from './x'
const cond = true
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { cond, get bar() { return bar }, get baz() { return baz } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > components 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBar, FooBaz, FooQux, foo } from './x'
const fooBar: FooBar = 1
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { fooBar, get FooBaz() { return FooBaz }, get FooQux() { return FooQux }, get foo() { return foo } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > directive 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { vMyDir } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get vMyDir() { return vMyDir } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > dynamic arguments 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBar, foo, bar, unused, baz } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get FooBar() { return FooBar }, get foo() { return foo }, get bar() { return bar }, get baz() { return baz } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > js template string interpolations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { VAR, VAR2, VAR3 } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get VAR() { return VAR }, get VAR3() { return VAR3 } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > last tag 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBaz, Last } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get FooBaz() { return FooBaz }, get Last() { return Last } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > property access (whitespace) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > property access 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > spread operator 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > template ref 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { foo, bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }
}
})"
`;
exports[`SFC compile <script setup> > dev mode import usage check > vue interpolations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { x, y, z, x$y } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get x() { return x }, get z() { return z }, get x$y() { return x$y } }
}
})"
`;
exports[`SFC compile <script setup> > errors > should allow defineProps/Emit() referencing imported binding 1`] = `
"import { bar } from './bar'

View File

@ -339,227 +339,6 @@ describe('SFC compile <script setup>', () => {
})
})
// in dev mode, declared bindings are returned as an object from setup()
// when using TS, users may import types which should not be returned as
// values, so we need to check import usage in the template to determine
// what to be returned.
describe('dev mode import usage check', () => {
test('components', () => {
const { content } = compile(`
<script setup lang="ts">
import { FooBar, FooBaz, FooQux, foo } from './x'
const fooBar: FooBar = 1
</script>
<template>
<FooBaz></FooBaz>
<foo-qux/>
<foo/>
FooBar
</template>
`)
// FooBar: should not be matched by plain text or incorrect case
// FooBaz: used as PascalCase component
// FooQux: used as kebab-case component
// foo: lowercase component
expect(content).toMatch(
`return { fooBar, get FooBaz() { return FooBaz }, ` +
`get FooQux() { return FooQux }, get foo() { return foo } }`,
)
assertCode(content)
})
test('directive', () => {
const { content } = compile(`
<script setup lang="ts">
import { vMyDir } from './x'
</script>
<template>
<div v-my-dir></div>
</template>
`)
expect(content).toMatch(`return { get vMyDir() { return vMyDir } }`)
assertCode(content)
})
test('dynamic arguments', () => {
const { content } = compile(`
<script setup lang="ts">
import { FooBar, foo, bar, unused, baz } from './x'
</script>
<template>
<FooBar #[foo.slotName] />
<FooBar #unused />
<div :[bar.attrName]="15"></div>
<div unused="unused"></div>
<div #[\`item:\${baz.key}\`]="{ value }"></div>
</template>
`)
expect(content).toMatch(
`return { get FooBar() { return FooBar }, get foo() { return foo }, ` +
`get bar() { return bar }, get baz() { return baz } }`,
)
assertCode(content)
})
// https://github.com/vuejs/core/issues/4599
test('attribute expressions', () => {
const { content } = compile(`
<script setup lang="ts">
import { bar, baz } from './x'
const cond = true
</script>
<template>
<div :class="[cond ? '' : bar(), 'default']" :style="baz"></div>
</template>
`)
expect(content).toMatch(
`return { cond, get bar() { return bar }, get baz() { return baz } }`,
)
assertCode(content)
})
test('vue interpolations', () => {
const { content } = compile(`
<script setup lang="ts">
import { x, y, z, x$y } from './x'
</script>
<template>
<div :id="z + 'y'">{{ x }} {{ yy }} {{ x$y }}</div>
</template>
`)
// x: used in interpolation
// y: should not be matched by {{ yy }} or 'y' in binding exps
// x$y: #4274 should escape special chars when creating Regex
expect(content).toMatch(
`return { get x() { return x }, get z() { return z }, get x$y() { return x$y } }`,
)
assertCode(content)
})
// #4340 interpolations in template strings
test('js template string interpolations', () => {
const { content } = compile(`
<script setup lang="ts">
import { VAR, VAR2, VAR3 } from './x'
</script>
<template>
{{ \`\${VAR}VAR2\${VAR3}\` }}
</template>
`)
// VAR2 should not be matched
expect(content).toMatch(
`return { get VAR() { return VAR }, get VAR3() { return VAR3 } }`,
)
assertCode(content)
})
// edge case: last tag in template
test('last tag', () => {
const { content } = compile(`
<script setup lang="ts">
import { FooBaz, Last } from './x'
</script>
<template>
<FooBaz></FooBaz>
<Last/>
</template>
`)
expect(content).toMatch(
`return { get FooBaz() { return FooBaz }, get Last() { return Last } }`,
)
assertCode(content)
})
test('TS annotations', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz, Qux, Fred } from './x'
const a = 1
function b() {}
</script>
<template>
{{ a as Foo }}
{{ b<Bar>() }}
{{ Baz }}
<Comp v-slot="{ data }: Qux">{{ data }}</Comp>
<div v-for="{ z = x as Qux } in list as Fred"/>
</template>
`)
expect(content).toMatch(`return { a, b, get Baz() { return Baz } }`)
assertCode(content)
})
// vuejs/vue#12591
test('v-on inline statement', () => {
// should not error
compile(`
<script setup lang="ts">
import { foo } from './foo'
</script>
<template>
<div @click="$emit('update:a');"></div>
</template>
`)
})
test('template ref', () => {
const { content } = compile(`
<script setup lang="ts">
import { foo, bar, Baz } from './foo'
</script>
<template>
<div ref="foo"></div>
<div ref=""></div>
<Baz ref="bar" />
</template>
`)
expect(content).toMatch(
'return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }',
)
assertCode(content)
})
// https://github.com/nuxt/nuxt/issues/22416
test('property access', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz } from './foo'
</script>
<template>
<div>{{ Foo.Bar.Baz }}</div>
</template>
`)
expect(content).toMatch('return { get Foo() { return Foo } }')
assertCode(content)
})
test('spread operator', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz } from './foo'
</script>
<template>
<div v-bind="{ ...Foo.Bar.Baz }"></div>
</template>
`)
expect(content).toMatch('return { get Foo() { return Foo } }')
assertCode(content)
})
test('property access (whitespace)', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz } from './foo'
</script>
<template>
<div>{{ Foo . Bar . Baz }}</div>
</template>
`)
expect(content).toMatch('return { get Foo() { return Foo } }')
assertCode(content)
})
})
describe('inlineTemplate mode', () => {
test('should work', () => {
const { content } = compile(

View File

@ -0,0 +1,215 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`TS annotations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz, Qux, Fred } from './x'
const a = 1
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
function b() {}
return { a, b, get Baz() { return Baz } }
}
})"
`;
exports[`attribute expressions 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { bar, baz } from './x'
const cond = true
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { cond, get bar() { return bar }, get baz() { return baz } }
}
})"
`;
exports[`components 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBar, FooBaz, FooQux, foo } from './x'
const fooBar: FooBar = 1
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { fooBar, get FooBaz() { return FooBaz }, get FooQux() { return FooQux }, get foo() { return foo } }
}
})"
`;
exports[`directive 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { vMyDir } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get vMyDir() { return vMyDir } }
}
})"
`;
exports[`dynamic arguments 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBar, foo, bar, unused, baz } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get FooBar() { return FooBar }, get foo() { return foo }, get bar() { return bar }, get baz() { return baz } }
}
})"
`;
exports[`import namespace 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import * as Foo from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`js template string interpolations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { VAR, VAR2, VAR3 } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get VAR() { return VAR }, get VAR3() { return VAR3 } }
}
})"
`;
exports[`last tag 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { FooBaz, Last } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get FooBaz() { return FooBaz }, get Last() { return Last } }
}
})"
`;
exports[`namespace / dot component usage 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import * as Foo from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`property access (whitespace) 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`property access 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`spread operator 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { Foo, Bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get Foo() { return Foo } }
}
})"
`;
exports[`template ref 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { foo, bar, Baz } from './foo'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }
}
})"
`;
exports[`vue interpolations 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
import { x, y, z, x$y } from './x'
export default /*#__PURE__*/_defineComponent({
setup(__props, { expose: __expose }) {
__expose();
return { get x() { return x }, get z() { return z }, get x$y() { return x$y } }
}
})"
`;

View File

@ -0,0 +1,235 @@
import { assertCode, compileSFCScript as compile } from '../utils'
// in dev mode, declared bindings are returned as an object from setup()
// when using TS, users may import types which should not be returned as
// values, so we need to check import usage in the template to determine
// what to be returned.
test('components', () => {
const { content } = compile(`
<script setup lang="ts">
import { FooBar, FooBaz, FooQux, foo } from './x'
const fooBar: FooBar = 1
</script>
<template>
<FooBaz></FooBaz>
<foo-qux/>
<foo/>
FooBar
</template>
`)
// FooBar: should not be matched by plain text or incorrect case
// FooBaz: used as PascalCase component
// FooQux: used as kebab-case component
// foo: lowercase component
expect(content).toMatch(
`return { fooBar, get FooBaz() { return FooBaz }, ` +
`get FooQux() { return FooQux }, get foo() { return foo } }`,
)
assertCode(content)
})
test('directive', () => {
const { content } = compile(`
<script setup lang="ts">
import { vMyDir } from './x'
</script>
<template>
<div v-my-dir></div>
</template>
`)
expect(content).toMatch(`return { get vMyDir() { return vMyDir } }`)
assertCode(content)
})
test('dynamic arguments', () => {
const { content } = compile(`
<script setup lang="ts">
import { FooBar, foo, bar, unused, baz } from './x'
</script>
<template>
<FooBar #[foo.slotName] />
<FooBar #unused />
<div :[bar.attrName]="15"></div>
<div unused="unused"></div>
<div #[\`item:\${baz.key}\`]="{ value }"></div>
</template>
`)
expect(content).toMatch(
`return { get FooBar() { return FooBar }, get foo() { return foo }, ` +
`get bar() { return bar }, get baz() { return baz } }`,
)
assertCode(content)
})
// https://github.com/vuejs/core/issues/4599
test('attribute expressions', () => {
const { content } = compile(`
<script setup lang="ts">
import { bar, baz } from './x'
const cond = true
</script>
<template>
<div :class="[cond ? '' : bar(), 'default']" :style="baz"></div>
</template>
`)
expect(content).toMatch(
`return { cond, get bar() { return bar }, get baz() { return baz } }`,
)
assertCode(content)
})
test('vue interpolations', () => {
const { content } = compile(`
<script setup lang="ts">
import { x, y, z, x$y } from './x'
</script>
<template>
<div :id="z + 'y'">{{ x }} {{ yy }} {{ x$y }}</div>
</template>
`)
// x: used in interpolation
// y: should not be matched by {{ yy }} or 'y' in binding exps
// x$y: #4274 should escape special chars when creating Regex
expect(content).toMatch(
`return { get x() { return x }, get z() { return z }, get x$y() { return x$y } }`,
)
assertCode(content)
})
// #4340 interpolations in template strings
test('js template string interpolations', () => {
const { content } = compile(`
<script setup lang="ts">
import { VAR, VAR2, VAR3 } from './x'
</script>
<template>
{{ \`\${VAR}VAR2\${VAR3}\` }}
</template>
`)
// VAR2 should not be matched
expect(content).toMatch(
`return { get VAR() { return VAR }, get VAR3() { return VAR3 } }`,
)
assertCode(content)
})
// edge case: last tag in template
test('last tag', () => {
const { content } = compile(`
<script setup lang="ts">
import { FooBaz, Last } from './x'
</script>
<template>
<FooBaz></FooBaz>
<Last/>
</template>
`)
expect(content).toMatch(
`return { get FooBaz() { return FooBaz }, get Last() { return Last } }`,
)
assertCode(content)
})
test('TS annotations', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz, Qux, Fred } from './x'
const a = 1
function b() {}
</script>
<template>
{{ a as Foo }}
{{ b<Bar>() }}
{{ Baz }}
<Comp v-slot="{ data }: Qux">{{ data }}</Comp>
<div v-for="{ z = x as Qux } in list as Fred"/>
</template>
`)
expect(content).toMatch(`return { a, b, get Baz() { return Baz } }`)
assertCode(content)
})
// vuejs/vue#12591
test('v-on inline statement', () => {
// should not error
compile(`
<script setup lang="ts">
import { foo } from './foo'
</script>
<template>
<div @click="$emit('update:a');"></div>
</template>
`)
})
test('template ref', () => {
const { content } = compile(`
<script setup lang="ts">
import { foo, bar, Baz } from './foo'
</script>
<template>
<div ref="foo"></div>
<div ref=""></div>
<Baz ref="bar" />
</template>
`)
expect(content).toMatch(
'return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }',
)
assertCode(content)
})
// https://github.com/nuxt/nuxt/issues/22416
test('property access', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz } from './foo'
</script>
<template>
<div>{{ Foo.Bar.Baz }}</div>
</template>
`)
expect(content).toMatch('return { get Foo() { return Foo } }')
assertCode(content)
})
test('spread operator', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz } from './foo'
</script>
<template>
<div v-bind="{ ...Foo.Bar.Baz }"></div>
</template>
`)
expect(content).toMatch('return { get Foo() { return Foo } }')
assertCode(content)
})
test('property access (whitespace)', () => {
const { content } = compile(`
<script setup lang="ts">
import { Foo, Bar, Baz } from './foo'
</script>
<template>
<div>{{ Foo . Bar . Baz }}</div>
</template>
`)
expect(content).toMatch('return { get Foo() { return Foo } }')
assertCode(content)
})
// #9974
test('namespace / dot component usage', () => {
const { content } = compile(`
<script setup lang="ts">
import * as Foo from './foo'
</script>
<template>
<Foo.Bar />
</template>
`)
expect(content).toMatch('return { get Foo() { return Foo } }')
assertCode(content)
})

View File

@ -1,5 +1,10 @@
import { parse } from '../src'
import { baseCompile, createRoot } from '@vue/compiler-core'
import {
ElementTypes,
NodeTypes,
baseCompile,
createRoot,
} from '@vue/compiler-core'
import { SourceMapConsumer } from 'source-map-js'
describe('compiler:sfc', () => {
@ -350,6 +355,32 @@ h1 { color: red }
expect(descriptor.customBlocks[0].content).toBe(` <-& `)
})
test('should accept parser options', () => {
const { errors, descriptor } = parse(`<template><hello/></template>`, {
templateParseOptions: {
isCustomElement: t => t === 'hello',
},
})
expect(errors.length).toBe(0)
expect(descriptor.template!.ast!.children[0]).toMatchObject({
type: NodeTypes.ELEMENT,
tag: 'hello',
tagType: ElementTypes.ELEMENT,
})
// test cache invalidation on different options
const { descriptor: d2 } = parse(`<template><hello/></template>`, {
templateParseOptions: {
isCustomElement: t => t !== 'hello',
},
})
expect(d2.template!.ast!.children[0]).toMatchObject({
type: NodeTypes.ELEMENT,
tag: 'hello',
tagType: ElementTypes.COMPONENT,
})
})
describe('warnings', () => {
function assertWarning(errors: Error[], msg: string) {
expect(errors.some(e => e.message.match(msg))).toBe(true)

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-sfc",
"version": "3.4.0",
"version": "3.4.2",
"description": "@vue/compiler-sfc",
"main": "dist/compiler-sfc.cjs.js",
"module": "dist/compiler-sfc.esm-browser.js",

View File

@ -3,6 +3,7 @@ import {
type CompilerError,
type ElementNode,
NodeTypes,
type ParserOptions,
type RootNode,
type SourceLocation,
createRoot,
@ -24,6 +25,11 @@ export interface SFCParseOptions {
pad?: boolean | 'line' | 'space'
ignoreEmpty?: boolean
compiler?: TemplateCompiler
templateParseOptions?: ParserOptions
/**
* TODO remove in 3.5
* @deprecated use `templateParseOptions: { prefixIdentifiers: false }` instead
*/
parseExpressions?: boolean
}
@ -97,24 +103,39 @@ export interface SFCParseResult {
export const parseCache = createCache<SFCParseResult>()
function genCacheKey(source: string, options: SFCParseOptions): string {
return (
source +
JSON.stringify(
{
...options,
compiler: { parse: options.compiler?.parse },
},
(_, val) => (typeof val === 'function' ? val.toString() : val),
)
)
}
export function parse(
source: string,
{
options: SFCParseOptions = {},
): SFCParseResult {
const sourceKey = genCacheKey(source, options)
const cache = parseCache.get(sourceKey)
if (cache) {
return cache
}
const {
sourceMap = true,
filename = DEFAULT_FILENAME,
sourceRoot = '',
pad = false,
ignoreEmpty = true,
compiler = CompilerDOM,
templateParseOptions = {},
parseExpressions = true,
}: SFCParseOptions = {},
): SFCParseResult {
const sourceKey =
source + sourceMap + filename + sourceRoot + pad + compiler.parse
const cache = parseCache.get(sourceKey)
if (cache) {
return cache
}
} = options
const descriptor: SFCDescriptor = {
filename,
@ -133,6 +154,7 @@ export function parse(
const ast = compiler.parse(source, {
parseMode: 'sfc',
prefixIdentifiers: parseExpressions,
...templateParseOptions,
onError: e => {
errors.push(e)
},

View File

@ -16,12 +16,12 @@ import { camelize, capitalize, isBuiltInDirective } from '@vue/shared'
* when not using inline mode.
*/
export function isImportUsed(local: string, sfc: SFCDescriptor): boolean {
return resolveTemplateUsageCheckString(sfc).has(local)
return resolveTemplateUsedIdentifiers(sfc).has(local)
}
const templateUsageCheckCache = createCache<Set<string>>()
function resolveTemplateUsageCheckString(sfc: SFCDescriptor) {
function resolveTemplateUsedIdentifiers(sfc: SFCDescriptor): Set<string> {
const { content, ast } = sfc.template!
const cached = templateUsageCheckCache.get(content)
if (cached) {
@ -35,12 +35,14 @@ function resolveTemplateUsageCheckString(sfc: SFCDescriptor) {
function walk(node: TemplateChildNode) {
switch (node.type) {
case NodeTypes.ELEMENT:
let tag = node.tag
if (tag.includes('.')) tag = tag.split('.')[0].trim()
if (
!parserOptions.isNativeTag!(node.tag) &&
!parserOptions.isBuiltInComponent!(node.tag)
!parserOptions.isNativeTag!(tag) &&
!parserOptions.isBuiltInComponent!(tag)
) {
ids.add(camelize(node.tag))
ids.add(capitalize(camelize(node.tag)))
ids.add(camelize(tag))
ids.add(capitalize(camelize(tag)))
}
for (let i = 0; i < node.props.length; i++) {
const prop = node.props[i]

View File

@ -127,4 +127,20 @@ describe('ssr: <slot>', () => {
}"
`)
})
test('inside transition-group', () => {
const { code } = compile(
`<TransitionGroup tag="div"><slot/></TransitionGroup>`,
)
expect(code).toMatch(ssrHelpers[SSR_RENDER_SLOT_INNER])
expect(code).toMatchInlineSnapshot(`
"const { ssrRenderSlotInner: _ssrRenderSlotInner, ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
return function ssrRender(_ctx, _push, _parent, _attrs) {
_push(\`<div\${_ssrRenderAttrs(_attrs)}>\`)
_ssrRenderSlotInner(_ctx.$slots, "default", {}, null, _push, _parent, null, true)
_push(\`</div>\`)
}"
`)
})
})

View File

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

View File

@ -4,6 +4,7 @@ import {
NodeTypes,
type SlotOutletNode,
TRANSITION,
TRANSITION_GROUP,
createCallExpression,
createFunctionExpression,
isSlotOutlet,
@ -37,16 +38,19 @@ export const ssrTransformSlotOutlet: NodeTransform = (node, context) => {
let method = SSR_RENDER_SLOT
// #3989
// #3989, #9933
// check if this is a single slot inside a transition wrapper - since
// transition will unwrap the slot fragment into a single vnode at runtime,
// transition/transition-group will unwrap the slot fragment into vnode(s) at runtime,
// we need to avoid rendering the slot as a fragment.
const parent = context.parent
let componentType
if (
parent &&
parent.type === NodeTypes.ELEMENT &&
parent.tagType === ElementTypes.COMPONENT &&
resolveComponentType(parent, context, true) === TRANSITION &&
((componentType = resolveComponentType(parent, context, true)) ===
TRANSITION ||
componentType === TRANSITION_GROUP) &&
parent.children.filter(c => c.type === NodeTypes.ELEMENT).length === 1
) {
method = SSR_RENDER_SLOT_INNER

View File

@ -1,4 +1,11 @@
import { computed, defineComponent, ref, shallowRef, watch } from 'vue'
import {
computed,
defineComponent,
defineModel,
ref,
shallowRef,
watch,
} from 'vue'
import { expectType } from './utils'
const source = ref('foo')
@ -106,3 +113,31 @@ defineComponent({
expectType<Steps>(value)
})
}
{
// defineModel
const bool = defineModel({ default: false })
watch(bool, value => {
expectType<boolean>(value)
})
const bool1 = defineModel<boolean>()
watch(bool1, value => {
expectType<boolean | undefined>(value)
})
const msg = defineModel<string>({ required: true })
watch(msg, value => {
expectType<string>(value)
})
const arr = defineModel<string[]>({ required: true })
watch(arr, value => {
expectType<string[]>(value)
})
const obj = defineModel<{ foo: string }>({ required: true })
watch(obj, value => {
expectType<{ foo: string }>(value)
})
}

View File

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

View File

@ -279,6 +279,41 @@ describe('SFC <script setup> helpers', () => {
expect(serializeInner(root)).toBe('bar')
})
test('without parent listener (local mutation)', async () => {
let foo: any
const update = () => {
foo.value = 'bar'
}
const compRender = vi.fn()
const Comp = defineComponent({
props: ['foo'],
emits: ['update:foo'],
setup(props) {
foo = useModel(props, 'foo')
return () => {
compRender()
return foo.value
}
},
})
const root = nodeOps.createElement('div')
// provide initial value
render(h(Comp, { foo: 'initial' }), root)
expect(compRender).toBeCalledTimes(1)
expect(serializeInner(root)).toBe('initial')
expect(foo.value).toBe('initial')
update()
// when parent didn't provide value, local mutation is enabled
expect(foo.value).toBe('bar')
await nextTick()
expect(compRender).toBeCalledTimes(2)
expect(serializeInner(root)).toBe('bar')
})
test('default value', async () => {
let count: any
const inc = () => {

View File

@ -25,9 +25,11 @@ import {
type DebuggerEvent,
ITERATE_KEY,
type Ref,
type ShallowRef,
TrackOpTypes,
TriggerOpTypes,
effectScope,
shallowReactive,
shallowRef,
toRef,
triggerRef,
@ -156,6 +158,59 @@ describe('api: watch', () => {
expect(dummy).toBe(1)
})
it('directly watching reactive object with explicit deep: false', async () => {
const src = reactive({
state: {
count: 0,
},
})
let dummy
watch(
src,
({ state }) => {
dummy = state?.count
},
{
deep: false,
},
)
// nested should not trigger
src.state.count++
await nextTick()
expect(dummy).toBe(undefined)
// root level should trigger
src.state = { count: 1 }
await nextTick()
expect(dummy).toBe(1)
})
// #9916
it('directly watching shallow reactive array', async () => {
class foo {
prop1: ShallowRef<string> = shallowRef('')
prop2: string = ''
}
const obj1 = new foo()
const obj2 = new foo()
const collection = shallowReactive([obj1, obj2])
const cb = vi.fn()
watch(collection, cb)
collection[0].prop1.value = 'foo'
await nextTick()
// should not trigger
expect(cb).toBeCalledTimes(0)
collection.push(new foo())
await nextTick()
// should trigger on array self mutation
expect(cb).toBeCalledTimes(1)
})
it('watching multiple sources', async () => {
const state = reactive({ count: 1 })
const count = ref(1)

View File

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

View File

@ -3,6 +3,7 @@ import {
type LooseRequired,
type Prettify,
type UnionToIntersection,
camelize,
extend,
hasChanged,
isArray,
@ -380,6 +381,8 @@ export function useModel(
return ref() as any
}
const camelizedName = camelize(name)
const res = customRef((track, trigger) => {
let localValue: any
watchSyncEffect(() => {
@ -396,7 +399,16 @@ export function useModel(
},
set(value) {
const rawProps = i.vnode!.props
if (!(rawProps && name in rawProps) && hasChanged(value, localValue)) {
if (
!(
rawProps &&
// check if parent has passed v-model
(name in rawProps || camelizedName in rawProps) &&
(`onUpdate:${name}` in rawProps ||
`onUpdate:${camelizedName}` in rawProps)
) &&
hasChanged(value, localValue)
) {
localValue = value
trigger()
}
@ -414,7 +426,7 @@ export function useModel(
return {
next() {
if (i < 2) {
return { value: i++ ? props[modifierKey] : res, done: false }
return { value: i++ ? props[modifierKey] || {} : res, done: false }
} else {
return { done: true }
}

View File

@ -42,7 +42,7 @@ import { warn } from './warning'
import { DeprecationTypes } from './compat/compatConfig'
import { checkCompatEnabled, isCompatEnabled } from './compat/compatConfig'
import type { ObjectWatchOptionItem } from './componentOptions'
import { useSSRContext } from '@vue/runtime-core'
import { useSSRContext } from './helpers/useSsrContext'
export type WatchEffect = (onCleanup: OnCleanup) => void
@ -115,6 +115,13 @@ const INITIAL_WATCHER_VALUE = {}
type MultiWatchSources = (WatchSource<unknown> | object)[]
// overload: single source + cb
export function watch<T, Immediate extends Readonly<boolean> = false>(
source: WatchSource<T>,
cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,
options?: WatchOptions<Immediate>,
): WatchStopHandle
// overload: array of multiple sources + cb
export function watch<
T extends MultiWatchSources,
@ -137,13 +144,6 @@ export function watch<
options?: WatchOptions<Immediate>,
): WatchStopHandle
// overload: single source + cb
export function watch<T, Immediate extends Readonly<boolean> = false>(
source: WatchSource<T>,
cb: WatchCallback<T, Immediate extends true ? T | undefined : T>,
options?: WatchOptions<Immediate>,
): WatchStopHandle
// overload: watching reactive object w/ cb
export function watch<
T extends object,
@ -231,8 +231,11 @@ function doWatch(
getter = () => source.value
forceTrigger = isShallow(source)
} else if (isReactive(source)) {
getter = () => source
deep = true
getter =
isShallow(source) || deep === false
? () => traverse(source, 1)
: () => traverse(source)
forceTrigger = true
} else if (isArray(source)) {
isMultiSource = true
forceTrigger = source.some(s => isReactive(s) || isShallow(s))
@ -241,7 +244,7 @@ function doWatch(
if (isRef(s)) {
return s.value
} else if (isReactive(s)) {
return traverse(s)
return traverse(s, isShallow(s) || deep === false ? 1 : undefined)
} else if (isFunction(s)) {
return callWithErrorHandling(s, instance, ErrorCodes.WATCH_GETTER)
} else {
@ -460,28 +463,41 @@ export function createPathGetter(ctx: any, path: string) {
}
}
export function traverse(value: unknown, seen?: Set<unknown>) {
export function traverse(
value: unknown,
depth?: number,
currentDepth = 0,
seen?: Set<unknown>,
) {
if (!isObject(value) || (value as any)[ReactiveFlags.SKIP]) {
return value
}
if (depth && depth > 0) {
if (currentDepth >= depth) {
return value
}
currentDepth++
}
seen = seen || new Set()
if (seen.has(value)) {
return value
}
seen.add(value)
if (isRef(value)) {
traverse(value.value, seen)
traverse(value.value, depth, currentDepth, seen)
} else if (isArray(value)) {
for (let i = 0; i < value.length; i++) {
traverse(value[i], seen)
traverse(value[i], depth, currentDepth, seen)
}
} else if (isSet(value) || isMap(value)) {
value.forEach((v: any) => {
traverse(v, seen)
traverse(v, depth, currentDepth, seen)
})
} else if (isPlainObject(value)) {
for (const key in value) {
traverse(value[key], seen)
traverse(value[key], depth, currentDepth, seen)
}
}
return value

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compat",
"version": "3.4.0",
"version": "3.4.2",
"description": "Vue 3 compatibility build for Vue 2",
"main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js",

View File

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

View File

@ -19,22 +19,22 @@ importers:
version: 2.3.1(vite@5.0.10)(vitest@1.1.0)
'@rollup/plugin-alias':
specifier: ^5.0.1
version: 5.0.1(rollup@4.1.4)
version: 5.0.1(rollup@4.4.1)
'@rollup/plugin-commonjs':
specifier: ^25.0.7
version: 25.0.7(rollup@4.1.4)
version: 25.0.7(rollup@4.4.1)
'@rollup/plugin-json':
specifier: ^6.0.1
version: 6.0.1(rollup@4.1.4)
version: 6.0.1(rollup@4.4.1)
'@rollup/plugin-node-resolve':
specifier: ^15.2.3
version: 15.2.3(rollup@4.1.4)
version: 15.2.3(rollup@4.4.1)
'@rollup/plugin-replace':
specifier: ^5.0.4
version: 5.0.4(rollup@4.1.4)
version: 5.0.4(rollup@4.4.1)
'@rollup/plugin-terser':
specifier: ^0.4.4
version: 0.4.4(rollup@4.1.4)
version: 0.4.4(rollup@4.4.1)
'@types/hash-sum':
specifier: ^1.0.2
version: 1.0.2
@ -67,10 +67,10 @@ importers:
version: 2.4.1
esbuild:
specifier: ^0.19.5
version: 0.19.5
version: 0.19.10
esbuild-plugin-polyfill-node:
specifier: ^0.3.0
version: 0.3.0(esbuild@0.19.5)
version: 0.3.0(esbuild@0.19.10)
eslint:
specifier: ^8.56.0
version: 8.56.0
@ -133,16 +133,16 @@ importers:
version: 5.0.5
rollup:
specifier: ^4.1.4
version: 4.1.4
version: 4.4.1
rollup-plugin-dts:
specifier: ^6.1.0
version: 6.1.0(rollup@4.1.4)(typescript@5.2.2)
version: 6.1.0(rollup@4.4.1)(typescript@5.2.2)
rollup-plugin-esbuild:
specifier: ^6.1.0
version: 6.1.0(esbuild@0.19.5)(rollup@4.1.4)
version: 6.1.0(esbuild@0.19.10)(rollup@4.4.1)
rollup-plugin-polyfill-node:
specifier: ^0.12.0
version: 0.12.0(rollup@4.1.4)
version: 0.12.0(rollup@4.4.1)
semver:
specifier: ^7.5.4
version: 7.5.4
@ -469,7 +469,7 @@ importers:
version: 0.34.6(@types/node@20.10.5)(terser@5.22.0)
vite-plugin-inspect:
specifier: ^0.7.42
version: 0.7.42(rollup@4.1.4)(vite@5.0.2)
version: 0.7.42(rollup@4.4.1)(vite@5.0.2)
packages:
@ -499,6 +499,15 @@ packages:
chalk: 2.4.2
dev: true
/@babel/code-frame@7.23.5:
resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
engines: {node: '>=6.9.0'}
requiresBuild: true
dependencies:
'@babel/highlight': 7.23.4
chalk: 2.4.2
dev: true
/@babel/compat-data@7.23.2:
resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==}
engines: {node: '>=6.9.0'}
@ -638,6 +647,16 @@ packages:
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'}
requiresBuild: true
dependencies:
'@babel/helper-validator-identifier': 7.22.20
chalk: 2.4.2
js-tokens: 4.0.0
dev: true
/@babel/parser@7.23.6:
resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
engines: {node: '>=6.0.0'}
@ -716,15 +735,6 @@ packages:
dev: true
optional: true
/@esbuild/android-arm64@0.19.5:
resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-arm@0.19.10:
resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==}
engines: {node: '>=12'}
@ -734,15 +744,6 @@ packages:
dev: true
optional: true
/@esbuild/android-arm@0.19.5:
resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/android-x64@0.19.10:
resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==}
engines: {node: '>=12'}
@ -752,15 +753,6 @@ packages:
dev: true
optional: true
/@esbuild/android-x64@0.19.5:
resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-arm64@0.19.10:
resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==}
engines: {node: '>=12'}
@ -770,15 +762,6 @@ packages:
dev: true
optional: true
/@esbuild/darwin-arm64@0.19.5:
resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/darwin-x64@0.19.10:
resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==}
engines: {node: '>=12'}
@ -788,15 +771,6 @@ packages:
dev: true
optional: true
/@esbuild/darwin-x64@0.19.5:
resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-arm64@0.19.10:
resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==}
engines: {node: '>=12'}
@ -806,15 +780,6 @@ packages:
dev: true
optional: true
/@esbuild/freebsd-arm64@0.19.5:
resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/freebsd-x64@0.19.10:
resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==}
engines: {node: '>=12'}
@ -824,15 +789,6 @@ packages:
dev: true
optional: true
/@esbuild/freebsd-x64@0.19.5:
resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm64@0.19.10:
resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==}
engines: {node: '>=12'}
@ -842,15 +798,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-arm64@0.19.5:
resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-arm@0.19.10:
resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==}
engines: {node: '>=12'}
@ -860,15 +807,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-arm@0.19.5:
resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ia32@0.19.10:
resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==}
engines: {node: '>=12'}
@ -878,15 +816,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-ia32@0.19.5:
resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-loong64@0.19.10:
resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==}
engines: {node: '>=12'}
@ -896,15 +825,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-loong64@0.19.5:
resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-mips64el@0.19.10:
resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==}
engines: {node: '>=12'}
@ -914,15 +834,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-mips64el@0.19.5:
resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-ppc64@0.19.10:
resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==}
engines: {node: '>=12'}
@ -932,15 +843,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-ppc64@0.19.5:
resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-riscv64@0.19.10:
resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==}
engines: {node: '>=12'}
@ -950,15 +852,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-riscv64@0.19.5:
resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-s390x@0.19.10:
resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==}
engines: {node: '>=12'}
@ -968,15 +861,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-s390x@0.19.5:
resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/linux-x64@0.19.10:
resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==}
engines: {node: '>=12'}
@ -986,15 +870,6 @@ packages:
dev: true
optional: true
/@esbuild/linux-x64@0.19.5:
resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@esbuild/netbsd-x64@0.19.10:
resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==}
engines: {node: '>=12'}
@ -1004,15 +879,6 @@ packages:
dev: true
optional: true
/@esbuild/netbsd-x64@0.19.5:
resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/openbsd-x64@0.19.10:
resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==}
engines: {node: '>=12'}
@ -1022,15 +888,6 @@ packages:
dev: true
optional: true
/@esbuild/openbsd-x64@0.19.5:
resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/@esbuild/sunos-x64@0.19.10:
resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==}
engines: {node: '>=12'}
@ -1040,15 +897,6 @@ packages:
dev: true
optional: true
/@esbuild/sunos-x64@0.19.5:
resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-arm64@0.19.10:
resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==}
engines: {node: '>=12'}
@ -1058,15 +906,6 @@ packages:
dev: true
optional: true
/@esbuild/win32-arm64@0.19.5:
resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-ia32@0.19.10:
resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==}
engines: {node: '>=12'}
@ -1076,15 +915,6 @@ packages:
dev: true
optional: true
/@esbuild/win32-ia32@0.19.5:
resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@esbuild/win32-x64@0.19.10:
resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==}
engines: {node: '>=12'}
@ -1094,15 +924,6 @@ packages:
dev: true
optional: true
/@esbuild/win32-x64@0.19.5:
resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@ -1277,7 +1098,7 @@ packages:
- supports-color
dev: true
/@rollup/plugin-alias@5.0.1(rollup@4.1.4):
/@rollup/plugin-alias@5.0.1(rollup@4.4.1):
resolution: {integrity: sha512-JObvbWdOHoMy9W7SU0lvGhDtWq9PllP5mjpAy+TUslZG/WzOId9u80Hsqq1vCUn9pFJ0cxpdcnAv+QzU2zFH3Q==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1286,11 +1107,11 @@ packages:
rollup:
optional: true
dependencies:
rollup: 4.1.4
rollup: 4.4.1
slash: 4.0.0
dev: true
/@rollup/plugin-commonjs@25.0.7(rollup@4.1.4):
/@rollup/plugin-commonjs@25.0.7(rollup@4.4.1):
resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1299,16 +1120,16 @@ packages:
rollup:
optional: true
dependencies:
'@rollup/pluginutils': 5.0.5(rollup@4.1.4)
'@rollup/pluginutils': 5.0.5(rollup@4.4.1)
commondir: 1.0.1
estree-walker: 2.0.2
glob: 8.1.0
is-reference: 1.2.1
magic-string: 0.30.5
rollup: 4.1.4
rollup: 4.4.1
dev: true
/@rollup/plugin-inject@5.0.5(rollup@4.1.4):
/@rollup/plugin-inject@5.0.5(rollup@4.4.1):
resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1317,13 +1138,13 @@ packages:
rollup:
optional: true
dependencies:
'@rollup/pluginutils': 5.0.5(rollup@4.1.4)
'@rollup/pluginutils': 5.0.5(rollup@4.4.1)
estree-walker: 2.0.2
magic-string: 0.30.5
rollup: 4.1.4
rollup: 4.4.1
dev: true
/@rollup/plugin-json@6.0.1(rollup@4.1.4):
/@rollup/plugin-json@6.0.1(rollup@4.4.1):
resolution: {integrity: sha512-RgVfl5hWMkxN1h/uZj8FVESvPuBJ/uf6ly6GTj0GONnkfoBN5KC0MSz+PN2OLDgYXMhtG0mWpTrkiOjoxAIevw==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1332,11 +1153,11 @@ packages:
rollup:
optional: true
dependencies:
'@rollup/pluginutils': 5.0.5(rollup@4.1.4)
rollup: 4.1.4
'@rollup/pluginutils': 5.0.5(rollup@4.4.1)
rollup: 4.4.1
dev: true
/@rollup/plugin-node-resolve@15.2.3(rollup@4.1.4):
/@rollup/plugin-node-resolve@15.2.3(rollup@4.4.1):
resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1345,16 +1166,16 @@ packages:
rollup:
optional: true
dependencies:
'@rollup/pluginutils': 5.0.5(rollup@4.1.4)
'@rollup/pluginutils': 5.0.5(rollup@4.4.1)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-builtin-module: 3.2.1
is-module: 1.0.0
resolve: 1.22.8
rollup: 4.1.4
rollup: 4.4.1
dev: true
/@rollup/plugin-replace@5.0.4(rollup@4.1.4):
/@rollup/plugin-replace@5.0.4(rollup@4.4.1):
resolution: {integrity: sha512-E2hmRnlh09K8HGT0rOnnri9OTh+BILGr7NVJGB30S4E3cLRn3J0xjdiyOZ74adPs4NiAMgrjUMGAZNJDBgsdmQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1363,12 +1184,12 @@ packages:
rollup:
optional: true
dependencies:
'@rollup/pluginutils': 5.0.5(rollup@4.1.4)
'@rollup/pluginutils': 5.0.5(rollup@4.4.1)
magic-string: 0.30.5
rollup: 4.1.4
rollup: 4.4.1
dev: true
/@rollup/plugin-terser@0.4.4(rollup@4.1.4):
/@rollup/plugin-terser@0.4.4(rollup@4.4.1):
resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1377,13 +1198,13 @@ packages:
rollup:
optional: true
dependencies:
rollup: 4.1.4
rollup: 4.4.1
serialize-javascript: 6.0.1
smob: 1.4.1
terser: 5.22.0
dev: true
/@rollup/pluginutils@5.0.5(rollup@4.1.4):
/@rollup/pluginutils@5.0.5(rollup@4.4.1):
resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==}
engines: {node: '>=14.0.0'}
peerDependencies:
@ -1395,17 +1216,9 @@ packages:
'@types/estree': 1.0.3
estree-walker: 2.0.2
picomatch: 2.3.1
rollup: 4.1.4
rollup: 4.4.1
dev: true
/@rollup/rollup-android-arm-eabi@4.1.4:
resolution: {integrity: sha512-WlzkuFvpKl6CLFdc3V6ESPt7gq5Vrimd2Yv9IzKXdOpgbH4cdDSS1JLiACX8toygihtH5OlxyQzhXOph7Ovlpw==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-android-arm-eabi@4.4.1:
resolution: {integrity: sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ==}
cpu: [arm]
@ -1414,14 +1227,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-android-arm64@4.1.4:
resolution: {integrity: sha512-D1e+ABe56T9Pq2fD+R3ybe1ylCDzu3tY4Qm2Mj24R9wXNCq35+JbFbOpc2yrroO2/tGhTobmEl2Bm5xfE/n8RA==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-android-arm64@4.4.1:
resolution: {integrity: sha512-sRSkGTvGsARwWd7TzC8LKRf8FiPn7257vd/edzmvG4RIr9x68KBN0/Ek48CkuUJ5Pj/Dp9vKWv6PEupjKWjTYA==}
cpu: [arm64]
@ -1430,14 +1235,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-darwin-arm64@4.1.4:
resolution: {integrity: sha512-7vTYrgEiOrjxnjsgdPB+4i7EMxbVp7XXtS+50GJYj695xYTTEMn3HZVEvgtwjOUkAP/Q4HDejm4fIAjLeAfhtg==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-arm64@4.4.1:
resolution: {integrity: sha512-nz0AiGrrXyaWpsmBXUGOBiRDU0wyfSXbFuF98pPvIO8O6auQsPG6riWsfQqmCCC5FNd8zKQ4JhgugRNAkBJ8mQ==}
cpu: [arm64]
@ -1446,14 +1243,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-darwin-x64@4.1.4:
resolution: {integrity: sha512-eGJVZScKSLZkYjhTAESCtbyTBq9SXeW9+TX36ki5gVhDqJtnQ5k0f9F44jNK5RhAMgIj0Ht9+n6HAgH0gUUyWQ==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-x64@4.4.1:
resolution: {integrity: sha512-Ogqvf4/Ve/faMaiPRvzsJEqajbqs00LO+8vtrPBVvLgdw4wBg6ZDXdkDAZO+4MLnrc8mhGV6VJAzYScZdPLtJg==}
cpu: [x64]
@ -1462,14 +1251,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.1.4:
resolution: {integrity: sha512-HnigYSEg2hOdX1meROecbk++z1nVJDpEofw9V2oWKqOWzTJlJf1UXVbDE6Hg30CapJxZu5ga4fdAQc/gODDkKg==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.4.1:
resolution: {integrity: sha512-9zc2tqlr6HfO+hx9+wktUlWTRdje7Ub15iJqKcqg5uJZ+iKqmd2CMxlgPpXi7+bU7bjfDIuvCvnGk7wewFEhCg==}
cpu: [arm]
@ -1478,14 +1259,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.1.4:
resolution: {integrity: sha512-TzJ+N2EoTLWkaClV2CUhBlj6ljXofaYzF/R9HXqQ3JCMnCHQZmQnbnZllw7yTDp0OG5whP4gIPozR4QiX+00MQ==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.4.1:
resolution: {integrity: sha512-phLb1fN3rq2o1j1v+nKxXUTSJnAhzhU0hLrl7Qzb0fLpwkGMHDem+o6d+ZI8+/BlTXfMU4kVWGvy6g9k/B8L6Q==}
cpu: [arm64]
@ -1494,14 +1267,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.1.4:
resolution: {integrity: sha512-aVPmNMdp6Dlo2tWkAduAD/5TL/NT5uor290YvjvFvCv0Q3L7tVdlD8MOGDL+oRSw5XKXKAsDzHhUOPUNPRHVTQ==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.4.1:
resolution: {integrity: sha512-M2sDtw4tf57VPSjbTAN/lz1doWUqO2CbQuX3L9K6GWIR5uw9j+ROKCvvUNBY8WUbMxwaoc8mH9HmmBKsLht7+w==}
cpu: [arm64]
@ -1510,14 +1275,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.1.4:
resolution: {integrity: sha512-77Fb79ayiDad0grvVsz4/OB55wJRyw9Ao+GdOBA9XywtHpuq5iRbVyHToGxWquYWlEf6WHFQQnFEttsAzboyKg==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.4.1:
resolution: {integrity: sha512-mHIlRLX+hx+30cD6c4BaBOsSqdnCE4ok7/KDvjHYAHoSuveoMMxIisZFvcLhUnyZcPBXDGZTuBoalcuh43UfQQ==}
cpu: [x64]
@ -1526,14 +1283,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-linux-x64-musl@4.1.4:
resolution: {integrity: sha512-/t6C6niEQTqmQTVTD9TDwUzxG91Mlk69/v0qodIPUnjjB3wR4UA3klg+orR2SU3Ux2Cgf2pWPL9utK80/1ek8g==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-musl@4.4.1:
resolution: {integrity: sha512-tB+RZuDi3zxFx7vDrjTNGVLu2KNyzYv+UY8jz7e4TMEoAj7iEt8Qk6xVu6mo3pgjnsHj6jnq3uuRsHp97DLwOA==}
cpu: [x64]
@ -1542,14 +1291,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.1.4:
resolution: {integrity: sha512-ZY5BHHrOPkMbCuGWFNpJH0t18D2LU6GMYKGaqaWTQ3CQOL57Fem4zE941/Ek5pIsVt70HyDXssVEFQXlITI5Gg==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.4.1:
resolution: {integrity: sha512-Hdn39PzOQowK/HZzYpCuZdJC91PE6EaGbTe2VCA9oq2u18evkisQfws0Smh9QQGNNRa/T7MOuGNQoLeXhhE3PQ==}
cpu: [arm64]
@ -1558,14 +1299,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.1.4:
resolution: {integrity: sha512-XG2mcRfFrJvYyYaQmvCIvgfkaGinfXrpkBuIbJrTl9SaIQ8HumheWTIwkNz2mktCKwZfXHQNpO7RgXLIGQ7HXA==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.4.1:
resolution: {integrity: sha512-tLpKb1Elm9fM8c5w3nl4N1eLTP4bCqTYw9tqUBxX8/hsxqHO3dxc2qPbZ9PNkdK4tg4iLEYn0pOUnVByRd2CbA==}
cpu: [ia32]
@ -1574,14 +1307,6 @@ packages:
dev: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.1.4:
resolution: {integrity: sha512-ANFqWYPwkhIqPmXw8vm0GpBEHiPpqcm99jiiAp71DbCSqLDhrtr019C5vhD0Bw4My+LmMvciZq6IsWHqQpl2ZQ==}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.4.1:
resolution: {integrity: sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w==}
cpu: [x64]
@ -2967,13 +2692,13 @@ packages:
is-symbol: 1.0.4
dev: true
/esbuild-plugin-polyfill-node@0.3.0(esbuild@0.19.5):
/esbuild-plugin-polyfill-node@0.3.0(esbuild@0.19.10):
resolution: {integrity: sha512-SHG6CKUfWfYyYXGpW143NEZtcVVn8S/WHcEOxk62LuDXnY4Zpmc+WmxJKN6GMTgTClXJXhEM5KQlxKY6YjbucQ==}
peerDependencies:
esbuild: '*'
dependencies:
'@jspm/core': 2.0.1
esbuild: 0.19.5
esbuild: 0.19.10
import-meta-resolve: 3.0.0
dev: true
@ -3008,36 +2733,6 @@ packages:
'@esbuild/win32-x64': 0.19.10
dev: true
/esbuild@0.19.5:
resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/android-arm': 0.19.5
'@esbuild/android-arm64': 0.19.5
'@esbuild/android-x64': 0.19.5
'@esbuild/darwin-arm64': 0.19.5
'@esbuild/darwin-x64': 0.19.5
'@esbuild/freebsd-arm64': 0.19.5
'@esbuild/freebsd-x64': 0.19.5
'@esbuild/linux-arm': 0.19.5
'@esbuild/linux-arm64': 0.19.5
'@esbuild/linux-ia32': 0.19.5
'@esbuild/linux-loong64': 0.19.5
'@esbuild/linux-mips64el': 0.19.5
'@esbuild/linux-ppc64': 0.19.5
'@esbuild/linux-riscv64': 0.19.5
'@esbuild/linux-s390x': 0.19.5
'@esbuild/linux-x64': 0.19.5
'@esbuild/netbsd-x64': 0.19.5
'@esbuild/openbsd-x64': 0.19.5
'@esbuild/sunos-x64': 0.19.5
'@esbuild/win32-arm64': 0.19.5
'@esbuild/win32-ia32': 0.19.5
'@esbuild/win32-x64': 0.19.5
dev: true
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
@ -3741,6 +3436,13 @@ packages:
resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
dev: true
/hasown@2.0.0:
resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
dev: true
/hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
dev: true
@ -3930,6 +3632,12 @@ packages:
has: 1.0.4
dev: true
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
hasown: 2.0.0
dev: true
/is-date-object@1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
engines: {node: '>= 0.4'}
@ -4219,7 +3927,7 @@ packages:
whatwg-encoding: 3.1.1
whatwg-mimetype: 4.0.0
whatwg-url: 14.0.0
ws: 8.14.2
ws: 8.15.1
xml-name-validator: 5.0.0
transitivePeerDependencies:
- bufferutil
@ -4688,7 +4396,7 @@ packages:
engines: {node: ^16.14.0 || >=18.0.0}
dependencies:
hosted-git-info: 7.0.1
is-core-module: 2.13.0
is-core-module: 2.13.1
semver: 7.5.4
validate-npm-package-license: 3.0.4
dev: true
@ -4886,7 +4594,7 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
dependencies:
'@babel/code-frame': 7.22.13
'@babel/code-frame': 7.23.5
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@ -4896,7 +4604,7 @@ packages:
resolution: {integrity: sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==}
engines: {node: '>=16'}
dependencies:
'@babel/code-frame': 7.22.13
'@babel/code-frame': 7.23.5
error-ex: 1.3.2
json-parse-even-better-errors: 3.0.0
lines-and-columns: 2.0.3
@ -5259,11 +4967,6 @@ packages:
resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==}
dev: true
/punycode@2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
engines: {node: '>=6'}
dev: true
/punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
@ -5437,7 +5140,7 @@ packages:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
dependencies:
is-core-module: 2.13.0
is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
@ -5474,7 +5177,7 @@ packages:
glob: 10.3.10
dev: true
/rollup-plugin-dts@6.1.0(rollup@4.1.4)(typescript@5.2.2):
/rollup-plugin-dts@6.1.0(rollup@4.4.1)(typescript@5.2.2):
resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==}
engines: {node: '>=16'}
peerDependencies:
@ -5482,56 +5185,36 @@ packages:
typescript: ^4.5 || ^5.0
dependencies:
magic-string: 0.30.5
rollup: 4.1.4
rollup: 4.4.1
typescript: 5.2.2
optionalDependencies:
'@babel/code-frame': 7.22.13
'@babel/code-frame': 7.23.5
dev: true
/rollup-plugin-esbuild@6.1.0(esbuild@0.19.5)(rollup@4.1.4):
/rollup-plugin-esbuild@6.1.0(esbuild@0.19.10)(rollup@4.4.1):
resolution: {integrity: sha512-HPpXU65V8bSpW8eSYPahtUJaJHmbxJGybuf/M8B3bz/6i11YaYHlNNJIQ38gSEV0FyohQOgVxJ2YMEEZtEmwvA==}
engines: {node: '>=14.18.0'}
peerDependencies:
esbuild: '>=0.18.0'
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
dependencies:
'@rollup/pluginutils': 5.0.5(rollup@4.1.4)
'@rollup/pluginutils': 5.0.5(rollup@4.4.1)
debug: 4.3.4
es-module-lexer: 1.3.1
esbuild: 0.19.5
esbuild: 0.19.10
get-tsconfig: 4.7.2
rollup: 4.1.4
rollup: 4.4.1
transitivePeerDependencies:
- supports-color
dev: true
/rollup-plugin-polyfill-node@0.12.0(rollup@4.1.4):
/rollup-plugin-polyfill-node@0.12.0(rollup@4.4.1):
resolution: {integrity: sha512-PWEVfDxLEKt8JX1nZ0NkUAgXpkZMTb85rO/Ru9AQ69wYW8VUCfDgP4CGRXXWYni5wDF0vIeR1UoF3Jmw/Lt3Ug==}
peerDependencies:
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0
dependencies:
'@rollup/plugin-inject': 5.0.5(rollup@4.1.4)
rollup: 4.1.4
dev: true
/rollup@4.1.4:
resolution: {integrity: sha512-U8Yk1lQRKqCkDBip/pMYT+IKaN7b7UesK3fLSTuHBoBJacCE+oBqo/dfG/gkUdQNNB2OBmRP98cn2C2bkYZkyw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.1.4
'@rollup/rollup-android-arm64': 4.1.4
'@rollup/rollup-darwin-arm64': 4.1.4
'@rollup/rollup-darwin-x64': 4.1.4
'@rollup/rollup-linux-arm-gnueabihf': 4.1.4
'@rollup/rollup-linux-arm64-gnu': 4.1.4
'@rollup/rollup-linux-arm64-musl': 4.1.4
'@rollup/rollup-linux-x64-gnu': 4.1.4
'@rollup/rollup-linux-x64-musl': 4.1.4
'@rollup/rollup-win32-arm64-msvc': 4.1.4
'@rollup/rollup-win32-ia32-msvc': 4.1.4
'@rollup/rollup-win32-x64-msvc': 4.1.4
fsevents: 2.3.3
'@rollup/plugin-inject': 5.0.5(rollup@4.4.1)
rollup: 4.4.1
dev: true
/rollup@4.4.1:
@ -6127,7 +5810,7 @@ packages:
engines: {node: '>=6'}
dependencies:
psl: 1.9.0
punycode: 2.3.0
punycode: 2.3.1
universalify: 0.2.0
url-parse: 1.5.10
dev: true
@ -6329,7 +6012,7 @@ packages:
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
punycode: 2.3.0
punycode: 2.3.1
dev: true
/url-parse@1.5.10:
@ -6422,7 +6105,7 @@ packages:
- terser
dev: true
/vite-plugin-inspect@0.7.42(rollup@4.1.4)(vite@5.0.2):
/vite-plugin-inspect@0.7.42(rollup@4.4.1)(vite@5.0.2):
resolution: {integrity: sha512-JCyX86wr3siQc+p9Kd0t8VkFHAJag0RaQVIpdFGSv5FEaePEVB6+V/RGtz2dQkkGSXQzRWrPs4cU3dRKg32bXw==}
engines: {node: '>=14'}
peerDependencies:
@ -6433,7 +6116,7 @@ packages:
optional: true
dependencies:
'@antfu/utils': 0.7.6
'@rollup/pluginutils': 5.0.5(rollup@4.1.4)
'@rollup/pluginutils': 5.0.5(rollup@4.4.1)
debug: 4.3.4
error-stack-parser-es: 0.1.1
fs-extra: 11.1.1
@ -6475,7 +6158,7 @@ packages:
optional: true
dependencies:
'@types/node': 20.10.5
esbuild: 0.19.5
esbuild: 0.19.10
postcss: 8.4.32
rollup: 4.4.1
terser: 5.22.0
@ -6512,7 +6195,7 @@ packages:
optional: true
dependencies:
'@types/node': 20.10.5
esbuild: 0.19.5
esbuild: 0.19.10
postcss: 8.4.32
rollup: 4.4.1
terser: 5.22.0
@ -6723,19 +6406,6 @@ packages:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
/ws@8.14.2:
resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: '>=5.0.2'
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
dev: true
/ws@8.15.1:
resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==}
engines: {node: '>=10.0.0'}