mirror of https://github.com/vuejs/core.git
Merge remote-tracking branch 'upstream/minor'
This commit is contained in:
commit
3d3d08d0f1
28
CHANGELOG.md
28
CHANGELOG.md
|
@ -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.
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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 } }
|
||||
}
|
||||
|
||||
})"
|
||||
`;
|
|
@ -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)
|
||||
})
|
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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)
|
||||
},
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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>\`)
|
||||
}"
|
||||
`)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 = () => {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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 }
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
508
pnpm-lock.yaml
508
pnpm-lock.yaml
|
@ -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'}
|
||||
|
|
Loading…
Reference in New Issue