Merge remote-tracking branch 'upstream/main'

This commit is contained in:
三咲智子 Kevin Deng 2024-01-19 16:29:21 +08:00
commit 736db791a4
No known key found for this signature in database
GPG Key ID: 69992F2250DFD93E
35 changed files with 441 additions and 237 deletions

View File

@ -1,3 +1,33 @@
## [3.4.15](https://github.com/vuejs/core/compare/v3.4.14...v3.4.15) (2024-01-18)
### Bug Fixes
* **compiler-sfc:** fix type resolution for symlinked node_modules structure w/ pnpm ([75e866b](https://github.com/vuejs/core/commit/75e866bd4ef368b4e037a4933dbaf188920dc683)), closes [#10121](https://github.com/vuejs/core/issues/10121)
* correct url for production error reference links ([c3087ff](https://github.com/vuejs/core/commit/c3087ff2cce7d96c60a870f8233441311ab4dfb4))
* **hydration:** fix incorect mismatch warning for option with non-string value and inner text ([d16a213](https://github.com/vuejs/core/commit/d16a2138a33b106b9e1499bbb9e1c67790370c97))
* **reactivity:** re-fix [#10114](https://github.com/vuejs/core/issues/10114) ([#10123](https://github.com/vuejs/core/issues/10123)) ([c2b274a](https://github.com/vuejs/core/commit/c2b274a887f61deb7e0185d1bef3b77d31e991cc))
* **runtime-core:** should not warn out-of-render slot fn usage when mounting another app in setup ([#10125](https://github.com/vuejs/core/issues/10125)) ([6fa33e6](https://github.com/vuejs/core/commit/6fa33e67ec42af140a86fbdb86939032c3a1f345)), closes [#10124](https://github.com/vuejs/core/issues/10124)
### Performance Improvements
* **templateRef:** avoid double render when using template ref on v-for ([de4d2e2](https://github.com/vuejs/core/commit/de4d2e2143ea8397cebeb1c7a57a60007b283c9f)), closes [#9908](https://github.com/vuejs/core/issues/9908)
* **v-model:** optimize v-model multiple select w/ large lists ([2ffb956](https://github.com/vuejs/core/commit/2ffb956efe692da059f4895669084c5278871351)), closes [#10014](https://github.com/vuejs/core/issues/10014)
## [3.4.14](https://github.com/vuejs/core/compare/v3.4.13...v3.4.14) (2024-01-15)
### Bug Fixes
* **compiler-sfc:** enable prefixIdentifiers by default when reparsing on consumed AST ([#10105](https://github.com/vuejs/core/issues/10105)) ([48bf8e4](https://github.com/vuejs/core/commit/48bf8e4c708ec620e4852d71c8713394457108ee))
* **deps:** update dependency postcss to ^8.4.33 ([#10110](https://github.com/vuejs/core/issues/10110)) ([a557006](https://github.com/vuejs/core/commit/a557006f8e7f110c6f322de38931dceaab8e9cbb))
* **reactivity:** fix regression for computed with mutation ([#10119](https://github.com/vuejs/core/issues/10119)) ([20f62af](https://github.com/vuejs/core/commit/20f62afaafd422e42b99dde9c16f9a4ebfb9c5f7)), closes [#10114](https://github.com/vuejs/core/issues/10114)
## [3.4.13](https://github.com/vuejs/core/compare/v3.4.12...v3.4.13) (2024-01-13)

View File

@ -1,7 +1,7 @@
{
"private": true,
"version": "0.0.0-vapor",
"packageManager": "pnpm@8.14.0",
"packageManager": "pnpm@8.14.1",
"type": "module",
"scripts": {
"dev": "node scripts/dev.js vue vue-vapor",
@ -70,11 +70,11 @@
"@rollup/plugin-terser": "^0.4.4",
"@types/hash-sum": "^1.0.2",
"@types/minimist": "^1.2.5",
"@types/node": "^20.10.7",
"@types/node": "^20.11.1",
"@types/semver": "^7.5.6",
"@typescript-eslint/eslint-plugin": "^6.17.0",
"@typescript-eslint/parser": "^6.17.0",
"@vitest/coverage-istanbul": "^1.1.3",
"@typescript-eslint/eslint-plugin": "^6.18.1",
"@typescript-eslint/parser": "^6.18.1",
"@vitest/coverage-istanbul": "^1.2.0",
"@vue/consolidate": "0.17.3",
"conventional-changelog-cli": "^4.1.0",
"enquirer": "^2.4.1",
@ -83,7 +83,7 @@
"eslint": "^8.56.0",
"eslint-define-config": "^1.24.1",
"eslint-plugin-import": "npm:eslint-plugin-i@^2.29.1",
"eslint-plugin-jest": "^27.6.1",
"eslint-plugin-jest": "^27.6.3",
"estree-walker": "^2.0.2",
"execa": "^8.0.1",
"jsdom": "^23.2.0",
@ -95,7 +95,7 @@
"minimist": "^1.2.8",
"npm-run-all": "^4.1.5",
"picocolors": "^1.0.0",
"prettier": "^3.1.1",
"prettier": "^3.2.2",
"pretty-bytes": "^6.1.1",
"pug": "^3.0.2",
"puppeteer": "~21.7.0",
@ -113,6 +113,6 @@
"tsx": "^4.7.0",
"typescript": "^5.2.2",
"vite": "^5.0.5",
"vitest": "^1.1.3"
"vitest": "^1.2.0"
}
}

View File

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

View File

@ -30,7 +30,7 @@ export function createCompilerError<T extends number>(
const msg =
__DEV__ || !__BROWSER__
? (messages || errorMessages)[code] + (additionalMessage || ``)
: `https://vuejs.org/errors/#compiler-${code}`
: `https://vuejs.org/error-reference/#compiler-${code}`
const error = new SyntaxError(String(msg)) as InferCompilerError<T>
error.code = code
error.loc = loc

View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compiler-sfc",
"version": "3.4.13",
"version": "3.4.15",
"description": "@vue/compiler-sfc",
"main": "dist/compiler-sfc.cjs.js",
"module": "dist/compiler-sfc.esm-browser.js",
@ -49,7 +49,7 @@
"@vue/shared": "workspace:*",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.5",
"postcss": "^8.4.32",
"postcss": "^8.4.33",
"source-map-js": "^1.0.2"
},
"devDependencies": {

View File

@ -118,6 +118,7 @@ export interface SFCScriptCompileOptions {
fs?: {
fileExists(file: string): boolean
readFile(file: string): string | undefined
realpath?(file: string): string
}
/**
* Transform Vue SFCs into custom elements.

View File

@ -860,6 +860,7 @@ function resolveFS(ctx: TypeResolveContext): FS | undefined {
}
return fs.readFile(file)
},
realpath: fs.realpath,
})
}
@ -1048,7 +1049,7 @@ function resolveWithTS(
if (filename.endsWith('.vue.ts')) {
filename = filename.replace(/\.ts$/, '')
}
return filename
return fs.realpath ? fs.realpath(filename) : filename
}
}

View File

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

View File

@ -1,3 +1,4 @@
import { h, nextTick, nodeOps, render, serializeInner } from '@vue/runtime-test'
import {
type DebuggerEvent,
ITERATE_KEY,
@ -453,14 +454,10 @@ describe('reactivity/computed', () => {
expect(fnSpy).toBeCalledTimes(2)
})
it('...', () => {
const fnSpy = vi.fn()
it('should chained recurse effects clear dirty after trigger', () => {
const v = ref(1)
const c1 = computed(() => v.value)
const c2 = computed(() => {
fnSpy()
return c1.value
})
const c2 = computed(() => c1.value)
c1.effect.allowRecurse = true
c2.effect.allowRecurse = true
@ -470,15 +467,78 @@ describe('reactivity/computed', () => {
expect(c2.effect._dirtyLevel).toBe(DirtyLevels.NotDirty)
})
it('should chained computeds dirtyLevel update with first computed effect', () => {
const v = ref(0)
const c1 = computed(() => {
if (v.value === 0) {
v.value = 1
}
return v.value
})
const c2 = computed(() => c1.value)
const c3 = computed(() => c2.value)
c3.value
expect(c1.effect._dirtyLevel).toBe(DirtyLevels.Dirty)
expect(c2.effect._dirtyLevel).toBe(DirtyLevels.MaybeDirty)
expect(c3.effect._dirtyLevel).toBe(DirtyLevels.MaybeDirty)
})
it('should work when chained(ref+computed)', () => {
const value = ref(0)
const consumer = computed(() => {
value.value++
const v = ref(0)
const c1 = computed(() => {
if (v.value === 0) {
v.value = 1
}
return 'foo'
})
const provider = computed(() => value.value + consumer.value)
expect(provider.value).toBe('0foo')
expect(provider.effect._dirtyLevel).toBe(DirtyLevels.Dirty)
expect(provider.value).toBe('1foo')
const c2 = computed(() => v.value + c1.value)
expect(c2.value).toBe('0foo')
expect(c2.effect._dirtyLevel).toBe(DirtyLevels.Dirty)
expect(c2.value).toBe('1foo')
})
it('should trigger effect even computed already dirty', () => {
const fnSpy = vi.fn()
const v = ref(0)
const c1 = computed(() => {
if (v.value === 0) {
v.value = 1
}
return 'foo'
})
const c2 = computed(() => v.value + c1.value)
effect(() => {
fnSpy()
c2.value
})
expect(fnSpy).toBeCalledTimes(1)
expect(c1.effect._dirtyLevel).toBe(DirtyLevels.Dirty)
expect(c2.effect._dirtyLevel).toBe(DirtyLevels.Dirty)
v.value = 2
expect(fnSpy).toBeCalledTimes(2)
})
it('should be not dirty after deps mutate (mutate deps in computed)', async () => {
const state = reactive<any>({})
const consumer = computed(() => {
if (!('a' in state)) state.a = 1
return state.a
})
const Comp = {
setup: () => {
nextTick().then(() => {
state.a = 2
})
return () => consumer.value
},
}
const root = nodeOps.createElement('div')
render(h(Comp), root)
await nextTick()
await nextTick()
expect(serializeInner(root)).toBe(`2`)
})
})

View File

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

View File

@ -1,4 +1,4 @@
import { type DebuggerOptions, ReactiveEffect } from './effect'
import { type DebuggerOptions, ReactiveEffect, scheduleEffects } from './effect'
import { type Ref, trackRefValue, triggerRefValue } from './ref'
import { NOOP, hasChanged, isFunction } from '@vue/shared'
import { toRaw } from './reactive'
@ -44,6 +44,7 @@ export class ComputedRefImpl<T> {
this.effect = new ReactiveEffect(
() => getter(this._value),
() => triggerRefValue(this, DirtyLevels.MaybeDirty),
() => this.dep && scheduleEffects(this.dep),
)
this.effect.computed = this
this.effect.active = this._cacheable = !isSSR
@ -59,6 +60,9 @@ export class ComputedRefImpl<T> {
}
}
trackRefValue(self)
if (self.effect._dirtyLevel >= DirtyLevels.MaybeDirty) {
triggerRefValue(self, DirtyLevels.MaybeDirty)
}
return self._value
}

View File

@ -291,11 +291,10 @@ export function triggerEffects(
) {
pauseScheduling()
for (const effect of dep.keys()) {
if (dep.get(effect) !== effect._trackId) {
// when recurse effect is running, dep map could have outdated items
continue
}
if (effect._dirtyLevel < dirtyLevel) {
if (
effect._dirtyLevel < dirtyLevel &&
dep.get(effect) === effect._trackId
) {
const lastDirtyLevel = effect._dirtyLevel
effect._dirtyLevel = dirtyLevel
if (lastDirtyLevel === DirtyLevels.NotDirty) {
@ -306,14 +305,21 @@ export function triggerEffects(
effect.trigger()
}
}
}
scheduleEffects(dep)
resetScheduling()
}
export function scheduleEffects(dep: Dep) {
for (const effect of dep.keys()) {
if (
effect.scheduler &&
effect._shouldSchedule &&
(!effect._runnings || effect.allowRecurse)
(!effect._runnings || effect.allowRecurse) &&
dep.get(effect) === effect._trackId
) {
effect._shouldSchedule = false
queueEffectSchedulers.push(effect.scheduler)
}
}
resetScheduling()
}

View File

@ -501,11 +501,12 @@ export type ShallowUnwrapRef<T> = {
type DistrubuteRef<T> = T extends Ref<infer V> ? V : T
export type UnwrapRef<T> = T extends ShallowRef<infer V>
? V
: T extends Ref<infer V>
? UnwrapRefSimple<V>
: UnwrapRefSimple<T>
export type UnwrapRef<T> =
T extends ShallowRef<infer V>
? V
: T extends Ref<infer V>
? UnwrapRefSimple<V>
: UnwrapRefSimple<T>
export type UnwrapRefSimple<T> = T extends
| Function

View File

@ -1,4 +1,5 @@
import {
createApp,
getCurrentInstance,
h,
nextTick,
@ -240,4 +241,32 @@ describe('component: slots', () => {
await nextTick()
expect(spy).toHaveBeenCalledTimes(2)
})
test('should not warn when mounting another app in setup', () => {
const Comp = {
setup(_: any, { slots }: any) {
return () => slots.default?.()
},
}
const mountComp = () => {
createApp({
setup() {
return () => h(Comp, () => 'msg')
},
}).mount(nodeOps.createElement('div'))
}
const App = {
setup() {
mountComp()
return () => null
},
}
createApp(App).mount(nodeOps.createElement('div'))
expect(
'Slot "default" invoked outside of the render function',
).not.toHaveBeenWarned()
})
})

View File

@ -1531,5 +1531,12 @@ describe('SSR hydration', () => {
mountWithHydration(`<button />`, () => h('button', { href: undefined }))
expect(`Hydration attribute mismatch`).not.toHaveBeenWarned()
})
test('should not warn on non-renderable option values', () => {
mountWithHydration(`<select><option>hello</option></select>`, () =>
h('select', [h('option', { value: ['foo'] }, 'hello')]),
)
expect(`Hydration attribute mismatch`).not.toHaveBeenWarned()
})
})
})

View File

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

View File

@ -54,28 +54,30 @@ export type EmitsToProps<T extends EmitsOptions> = T extends string[]
}
: {}
export type ShortEmitsToObject<E> = E extends Record<string, any[]>
? {
[K in keyof E]: (...args: E[K]) => any
}
: E
export type ShortEmitsToObject<E> =
E extends Record<string, any[]>
? {
[K in keyof E]: (...args: E[K]) => any
}
: E
export type EmitFn<
Options = ObjectEmitsOptions,
Event extends keyof Options = keyof Options,
> = Options extends Array<infer V>
? (event: V, ...args: any[]) => void
: {} extends Options // if the emit is empty object (usually the default value for emit) should be converted to function
? (event: string, ...args: any[]) => void
: UnionToIntersection<
{
[key in Event]: Options[key] extends (...args: infer Args) => any
? (event: key, ...args: Args) => void
: Options[key] extends any[]
? (event: key, ...args: Options[key]) => void
: (event: key, ...args: any[]) => void
}[Event]
>
> =
Options extends Array<infer V>
? (event: V, ...args: any[]) => void
: {} extends Options // if the emit is empty object (usually the default value for emit) should be converted to function
? (event: string, ...args: any[]) => void
: UnionToIntersection<
{
[key in Event]: Options[key] extends (...args: infer Args) => any
? (event: key, ...args: Args) => void
: Options[key] extends any[]
? (event: key, ...args: Options[key]) => void
: (event: key, ...args: any[]) => void
}[Event]
>
export function emit(
instance: ComponentInternalInstance,

View File

@ -84,34 +84,36 @@ type IsDefaultMixinComponent<T> = T extends ComponentOptionsMixin
: false
: false
type MixinToOptionTypes<T> = T extends ComponentOptionsBase<
infer P,
infer B,
infer D,
infer C,
infer M,
infer Mixin,
infer Extends,
any,
any,
infer Defaults,
any,
any,
any
>
? OptionTypesType<P & {}, B & {}, D & {}, C & {}, M & {}, Defaults & {}> &
IntersectionMixin<Mixin> &
IntersectionMixin<Extends>
: never
type MixinToOptionTypes<T> =
T extends ComponentOptionsBase<
infer P,
infer B,
infer D,
infer C,
infer M,
infer Mixin,
infer Extends,
any,
any,
infer Defaults,
any,
any,
any
>
? OptionTypesType<P & {}, B & {}, D & {}, C & {}, M & {}, Defaults & {}> &
IntersectionMixin<Mixin> &
IntersectionMixin<Extends>
: never
// ExtractMixin(map type) is used to resolve circularly references
type ExtractMixin<T> = {
Mixin: MixinToOptionTypes<T>
}[T extends ComponentOptionsMixin ? 'Mixin' : never]
export type IntersectionMixin<T> = IsDefaultMixinComponent<T> extends true
? OptionTypesType
: UnionToIntersection<ExtractMixin<T>>
export type IntersectionMixin<T> =
IsDefaultMixinComponent<T> extends true
? OptionTypesType
: UnionToIntersection<ExtractMixin<T>>
export type UnwrapMixinsType<
T,

View File

@ -97,7 +97,11 @@ const normalizeSlot = (
return rawSlot as Slot
}
const normalized = withCtx((...args: any[]) => {
if (__DEV__ && currentInstance) {
if (
__DEV__ &&
currentInstance &&
(!ctx || ctx.root === currentInstance.root)
) {
warn(
`Slot "${key}" invoked outside of the render function: ` +
`this will not track dependencies used in the slot. ` +

View File

@ -116,7 +116,7 @@ export function handleError(
// in production the hook receives only the error code
const errorInfo = __DEV__
? ErrorTypeStrings[type]
: `https://vuejs.org/errors/#runtime-${type}`
: `https://vuejs.org/error-reference/#runtime-${type}`
while (cur) {
const errorCapturedHooks = cur.ec
if (errorCapturedHooks) {

View File

@ -21,8 +21,8 @@ import {
isBooleanAttr,
isKnownHtmlAttr,
isKnownSvgAttr,
isObject,
isOn,
isRenderableAttrValue,
isReservedProp,
isString,
normalizeClass,
@ -764,16 +764,15 @@ function propHasMismatch(
} else {
if (el.hasAttribute(key)) {
actual = el.getAttribute(key)
} else if (key === 'value' && el.tagName === 'TEXTAREA') {
// #10000 textarea.value can't be retrieved by `hasAttribute`
actual = (el as HTMLTextAreaElement).value
} else {
// #10000 some attrs such as textarea.value can't be retrieved by `hasAttribute`
const serverValue = el[key as keyof typeof el]
actual =
isObject(serverValue) || serverValue == null
? ''
: String(serverValue)
actual = false
}
expected =
isObject(clientValue) || clientValue == null ? '' : String(clientValue)
expected = isRenderableAttrValue(clientValue)
? String(clientValue)
: false
}
if (actual !== expected) {
mismatchType = `attribute`

View File

@ -81,9 +81,10 @@ export function setRef(
} else {
const _isString = isString(ref)
const _isRef = isRef(ref)
const isVFor = rawRef.f
if (_isString || _isRef) {
const doSet = () => {
if (rawRef.f) {
if (isVFor) {
const existing = _isString
? hasOwn(setupState, ref)
? setupState[ref]
@ -118,14 +119,15 @@ export function setRef(
warn('Invalid template ref type:', ref, `(${typeof ref})`)
}
}
if (value) {
// #1789: for non-null values, set them after render
// null values means this is unmount and it should not overwrite another
// ref with the same key
// #9908 ref on v-for mutates the same array for both mount and unmount
// and should be done together
if (isUnmount || isVFor) {
doSet()
} else {
// #1789: set new refs in a post job so that they don't get overwritten
// by unmounting ones.
;(doSet as SchedulerJob).id = -1
queuePostRenderEffect(doSet, parentSuspense)
} else {
doSet()
}
} else if (__DEV__) {
warn('Invalid template ref type:', ref, `(${typeof ref})`)

View File

@ -665,7 +665,7 @@ export function cloneVNode<T, U>(
// fast paths only.
patchFlag:
extraProps && vnode.type !== Fragment
? patchFlag === -1 // hoisted node
? patchFlag === PatchFlags.HOISTED // hoisted node
? PatchFlags.FULL_PROPS
: patchFlag | PatchFlags.FULL_PROPS
: patchFlag,

View File

@ -1037,15 +1037,25 @@ describe('vModel', () => {
await nextTick()
expect(data.value).toMatchObject([fooValue, barValue])
// reset
foo.selected = false
bar.selected = false
triggerEvent('change', input)
await nextTick()
expect(data.value).toMatchObject([])
data.value = [fooValue, barValue]
await nextTick()
expect(foo.selected).toEqual(true)
expect(bar.selected).toEqual(true)
// reset
foo.selected = false
bar.selected = false
triggerEvent('change', input)
await nextTick()
expect(data.value).toMatchObject([])
data.value = [{ foo: 1 }, { bar: 1 }]
await nextTick()
// looseEqual

View File

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

View File

@ -3,6 +3,7 @@ import {
type DirectiveHook,
type ObjectDirective,
type VNode,
nextTick,
warn,
} from '@vue/runtime-core'
import { addEventListener } from '../modules/events'
@ -38,7 +39,9 @@ function onCompositionEnd(e: Event) {
const assignKey = Symbol('_assign')
type ModelDirective<T> = ObjectDirective<T & { [assignKey]: AssignerFn }>
type ModelDirective<T> = ObjectDirective<
T & { [assignKey]: AssignerFn; _assigning?: boolean }
>
// We are exporting the v-model runtime directly as vnode hooks so that it can
// be tree-shaken in case v-model is never used.
@ -197,25 +200,37 @@ export const vModelSelect: ModelDirective<HTMLSelectElement> = {
: selectedVal
: selectedVal[0],
)
el._assigning = true
nextTick(() => {
el._assigning = false
})
})
el[assignKey] = getModelAssigner(vnode)
},
// set value in mounted & updated because <select> relies on its children
// <option>s.
mounted(el, { value }) {
setSelected(el, value)
mounted(el, { value, oldValue, modifiers: { number } }) {
setSelected(el, value, oldValue, number)
},
beforeUpdate(el, _binding, vnode) {
el[assignKey] = getModelAssigner(vnode)
},
updated(el, { value }) {
setSelected(el, value)
updated(el, { value, oldValue, modifiers: { number } }) {
if (!el._assigning) {
setSelected(el, value, oldValue, number)
}
},
}
function setSelected(el: HTMLSelectElement, value: any) {
function setSelected(
el: HTMLSelectElement,
value: any,
oldValue: any,
number: boolean,
) {
const isMultiple = el.multiple
if (isMultiple && !isArray(value) && !isSet(value)) {
const isArrayValue = isArray(value)
if (isMultiple && !isArrayValue && !isSet(value)) {
__DEV__ &&
warn(
`<select multiple v-model> expects an Array or Set value for its binding, ` +
@ -223,12 +238,26 @@ function setSelected(el: HTMLSelectElement, value: any) {
)
return
}
// fast path for updates triggered by other changes
if (isArrayValue && looseEqual(value, oldValue)) {
return
}
for (let i = 0, l = el.options.length; i < l; i++) {
const option = el.options[i]
const optionValue = getValue(option)
if (isMultiple) {
if (isArray(value)) {
option.selected = looseIndexOf(value, optionValue) > -1
if (isArrayValue) {
const optionType = typeof optionValue
// fast path for string / number values
if (optionType === 'string' || optionType === 'number') {
option.selected = value.includes(
number ? looseToNumber(optionValue) : optionValue,
)
} else {
option.selected = looseIndexOf(value, optionValue) > -1
}
} else {
option.selected = value.has(optionValue)
}

View File

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

View File

@ -1,4 +1,9 @@
import { escapeHtml, isSVGTag, stringifyStyle } from '@vue/shared'
import {
escapeHtml,
isRenderableAttrValue,
isSVGTag,
stringifyStyle,
} from '@vue/shared'
import {
includeBooleanAttr,
isBooleanAttr,
@ -47,7 +52,7 @@ export function ssrRenderDynamicAttr(
value: unknown,
tag?: string,
): string {
if (!isRenderableValue(value)) {
if (!isRenderableAttrValue(value)) {
return ``
}
const attrKey =
@ -69,20 +74,12 @@ export function ssrRenderDynamicAttr(
// Render a v-bind attr with static key. The key is pre-processed at compile
// time and we only need to check and escape value.
export function ssrRenderAttr(key: string, value: unknown): string {
if (!isRenderableValue(value)) {
if (!isRenderableAttrValue(value)) {
return ``
}
return ` ${key}="${escapeHtml(value)}"`
}
function isRenderableValue(value: unknown): boolean {
if (value == null) {
return false
}
const type = typeof value
return type === 'string' || type === 'number' || type === 'boolean'
}
export function ssrRenderClass(raw: unknown): string {
return escapeHtml(normalizeClass(raw))
}

View File

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

View File

@ -121,3 +121,14 @@ export const isKnownSvgAttr = /*#__PURE__*/ makeMap(
`xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,` +
`xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`,
)
/**
* Shared between server-renderer and runtime-core hydration logic
*/
export function isRenderableAttrValue(value: unknown): boolean {
if (value == null) {
return false
}
const type = typeof value
return type === 'string' || type === 'number' || type === 'boolean'
}

View File

@ -1,6 +1,6 @@
{
"name": "@vue/compat",
"version": "3.4.13",
"version": "3.4.15",
"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.13",
"version": "3.4.15",
"description": "The progressive JavaScript framework for building modern web UI.",
"main": "index.js",
"module": "dist/vue.runtime.esm-bundler.js",

View File

@ -42,19 +42,19 @@ importers:
specifier: ^1.2.5
version: 1.2.5
'@types/node':
specifier: ^20.10.7
version: 20.11.0
specifier: ^20.11.1
version: 20.11.5
'@types/semver':
specifier: ^7.5.6
version: 7.5.6
'@typescript-eslint/eslint-plugin':
specifier: ^6.17.0
version: 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.2.2)
specifier: ^6.18.1
version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/parser':
specifier: ^6.17.0
version: 6.17.0(eslint@8.56.0)(typescript@5.2.2)
specifier: ^6.18.1
version: 6.19.0(eslint@8.56.0)(typescript@5.2.2)
'@vitest/coverage-istanbul':
specifier: ^1.1.3
specifier: ^1.2.0
version: 1.2.0(vitest@1.2.0)
'@vue/consolidate':
specifier: 0.17.3
@ -79,10 +79,10 @@ importers:
version: 1.24.1
eslint-plugin-import:
specifier: npm:eslint-plugin-i@^2.29.1
version: /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)
version: /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)
eslint-plugin-jest:
specifier: ^27.6.1
version: 27.6.1(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.56.0)(typescript@5.2.2)
specifier: ^27.6.3
version: 27.6.3(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.2.2)
estree-walker:
specifier: ^2.0.2
version: 2.0.2
@ -117,8 +117,8 @@ importers:
specifier: ^1.0.0
version: 1.0.0
prettier:
specifier: ^3.1.1
version: 3.1.1
specifier: ^3.2.2
version: 3.2.4
pretty-bytes:
specifier: ^6.1.1
version: 6.1.1
@ -169,10 +169,10 @@ importers:
version: 5.2.2
vite:
specifier: ^5.0.5
version: 5.0.10(@types/node@20.11.0)(terser@5.22.0)
version: 5.0.10(@types/node@20.11.5)(terser@5.22.0)
vitest:
specifier: ^1.1.3
version: 1.2.0(@types/node@20.11.0)(jsdom@23.2.0)(terser@5.22.0)
specifier: ^1.2.0
version: 1.2.0(@types/node@20.11.5)(jsdom@23.2.0)(terser@5.22.0)
packages/compiler-core:
dependencies:
@ -229,8 +229,8 @@ importers:
specifier: ^0.30.5
version: 0.30.5
postcss:
specifier: ^8.4.32
version: 8.4.32
specifier: ^8.4.33
version: 8.4.33
source-map-js:
specifier: ^1.0.2
version: 1.0.2
@ -255,7 +255,7 @@ importers:
version: 9.0.3
postcss-modules:
specifier: ^6.0.0
version: 6.0.0(postcss@8.4.32)
version: 6.0.0(postcss@8.4.33)
postcss-selector-parser:
specifier: ^6.0.15
version: 6.0.15
@ -385,7 +385,7 @@ importers:
version: 4.4.0(vite@5.0.10)(vue@packages+vue)
vite:
specifier: ^5.0.5
version: 5.0.10(@types/node@20.11.0)(terser@5.22.0)
version: 5.0.10(@types/node@20.11.5)(terser@5.22.0)
packages/shared: {}
@ -460,10 +460,10 @@ importers:
version: 4.5.0(vite@5.0.2)(vue@packages+vue)
vite:
specifier: ^5.0.2
version: 5.0.2(@types/node@20.11.0)(terser@5.22.0)
version: 5.0.2(@types/node@20.11.5)(terser@5.22.0)
vite-hyper-config:
specifier: ^0.2.1
version: 0.2.1(@types/node@20.11.0)(terser@5.22.0)(vite@5.0.2)
version: 0.2.1(@types/node@20.11.5)(terser@5.22.0)(vite@5.0.2)
vite-plugin-inspect:
specifier: ^0.7.42
version: 0.7.42(rollup@4.4.1)(vite@5.0.2)
@ -699,8 +699,8 @@ packages:
vitest: '>=1.0.0-beta.4 || >=1'
dependencies:
'@codspeed/core': 2.3.1
vite: 5.0.10(@types/node@20.11.0)(terser@5.22.0)
vitest: 1.2.0(@types/node@20.11.0)(jsdom@23.2.0)(terser@5.22.0)
vite: 5.0.10(@types/node@20.11.5)(terser@5.22.0)
vitest: 1.2.0(@types/node@20.11.5)(jsdom@23.2.0)(terser@5.22.0)
dev: true
/@esbuild/aix-ppc64@0.19.10:
@ -1325,8 +1325,8 @@ packages:
resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==}
dev: true
/@types/node@20.11.0:
resolution: {integrity: sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==}
/@types/node@20.11.5:
resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==}
dependencies:
undici-types: 5.26.5
dev: true
@ -1347,12 +1347,12 @@ packages:
resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==}
requiresBuild: true
dependencies:
'@types/node': 20.11.0
'@types/node': 20.11.5
dev: true
optional: true
/@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==}
/@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@ -1363,11 +1363,11 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.9.1
'@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.17.0
'@typescript-eslint/type-utils': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.17.0
'@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.19.0
'@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.19.0
debug: 4.3.4
eslint: 8.56.0
graphemer: 1.4.0
@ -1380,8 +1380,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser@6.17.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==}
/@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -1390,10 +1390,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 6.17.0
'@typescript-eslint/types': 6.17.0
'@typescript-eslint/typescript-estree': 6.17.0(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.17.0
'@typescript-eslint/scope-manager': 6.19.0
'@typescript-eslint/types': 6.19.0
'@typescript-eslint/typescript-estree': 6.19.0(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.19.0
debug: 4.3.4
eslint: 8.56.0
typescript: 5.2.2
@ -1409,16 +1409,16 @@ packages:
'@typescript-eslint/visitor-keys': 5.62.0
dev: true
/@typescript-eslint/scope-manager@6.17.0:
resolution: {integrity: sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==}
/@typescript-eslint/scope-manager@6.19.0:
resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.17.0
'@typescript-eslint/visitor-keys': 6.17.0
'@typescript-eslint/types': 6.19.0
'@typescript-eslint/visitor-keys': 6.19.0
dev: true
/@typescript-eslint/type-utils@6.17.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==}
/@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -1427,8 +1427,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 6.17.0(typescript@5.2.2)
'@typescript-eslint/utils': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/typescript-estree': 6.19.0(typescript@5.2.2)
'@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2)
debug: 4.3.4
eslint: 8.56.0
ts-api-utils: 1.0.3(typescript@5.2.2)
@ -1442,8 +1442,8 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/@typescript-eslint/types@6.17.0:
resolution: {integrity: sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==}
/@typescript-eslint/types@6.19.0:
resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
@ -1468,8 +1468,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/typescript-estree@6.17.0(typescript@5.2.2):
resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==}
/@typescript-eslint/typescript-estree@6.19.0(typescript@5.2.2):
resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@ -1477,8 +1477,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 6.17.0
'@typescript-eslint/visitor-keys': 6.17.0
'@typescript-eslint/types': 6.19.0
'@typescript-eslint/visitor-keys': 6.19.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@ -1510,8 +1510,8 @@ packages:
- typescript
dev: true
/@typescript-eslint/utils@6.17.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==}
/@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@ -1519,9 +1519,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@types/json-schema': 7.0.14
'@types/semver': 7.5.6
'@typescript-eslint/scope-manager': 6.17.0
'@typescript-eslint/types': 6.17.0
'@typescript-eslint/typescript-estree': 6.17.0(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.19.0
'@typescript-eslint/types': 6.19.0
'@typescript-eslint/typescript-estree': 6.19.0(typescript@5.2.2)
eslint: 8.56.0
semver: 7.5.4
transitivePeerDependencies:
@ -1537,11 +1537,11 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
/@typescript-eslint/visitor-keys@6.17.0:
resolution: {integrity: sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==}
/@typescript-eslint/visitor-keys@6.19.0:
resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
'@typescript-eslint/types': 6.17.0
'@typescript-eslint/types': 6.19.0
eslint-visitor-keys: 3.4.3
dev: true
@ -1556,7 +1556,7 @@ packages:
vite: ^4.0.0
vue: ^3.2.25
dependencies:
vite: 5.0.10(@types/node@20.11.0)(terser@5.22.0)
vite: 5.0.10(@types/node@20.11.5)(terser@5.22.0)
vue: link:packages/vue
dev: true
@ -1567,7 +1567,7 @@ packages:
vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25
dependencies:
vite: 5.0.2(@types/node@20.11.0)(terser@5.22.0)
vite: 5.0.2(@types/node@20.11.5)(terser@5.22.0)
vue: link:packages/vue
dev: true
@ -1585,7 +1585,7 @@ packages:
magicast: 0.3.2
picocolors: 1.0.0
test-exclude: 6.0.0
vitest: 1.2.0(@types/node@20.11.0)(jsdom@23.2.0)(terser@5.22.0)
vitest: 1.2.0(@types/node@20.11.5)(jsdom@23.2.0)(terser@5.22.0)
transitivePeerDependencies:
- supports-color
dev: true
@ -2776,7 +2776,7 @@ packages:
- supports-color
dev: true
/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@ -2797,7 +2797,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 6.17.0(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.2.2)
debug: 3.2.7
eslint: 8.56.0
eslint-import-resolver-node: 0.3.9
@ -2805,7 +2805,7 @@ packages:
- supports-color
dev: true
/eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.17.0)(eslint@8.56.0):
/eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0):
resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==}
engines: {node: '>=12'}
peerDependencies:
@ -2815,7 +2815,7 @@ packages:
doctrine: 3.0.0
eslint: 8.56.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
get-tsconfig: 4.7.2
is-glob: 4.0.3
minimatch: 3.1.2
@ -2827,8 +2827,8 @@ packages:
- supports-color
dev: true
/eslint-plugin-jest@27.6.1(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-WEYkyVXD9NlmFBKvrkmzrC+C9yZoz5pAml2hO19PlS3spJtoiwj4p2u8spd/7zx5IvRsZsCmsoImaAvBB9X93Q==}
/eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.2.2):
resolution: {integrity: sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0
@ -2840,7 +2840,7 @@ packages:
jest:
optional: true
dependencies:
'@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.2.2)
'@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.2.2)
eslint: 8.56.0
transitivePeerDependencies:
@ -3514,13 +3514,13 @@ packages:
safer-buffer: 2.1.2
dev: true
/icss-utils@5.1.0(postcss@8.4.32):
/icss-utils@5.1.0(postcss@8.4.33):
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
postcss: 8.4.32
postcss: 8.4.33
dev: true
/ieee754@1.2.1:
@ -4731,60 +4731,60 @@ packages:
pathe: 1.1.1
dev: true
/postcss-modules-extract-imports@3.0.0(postcss@8.4.32):
/postcss-modules-extract-imports@3.0.0(postcss@8.4.33):
resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
postcss: 8.4.32
postcss: 8.4.33
dev: true
/postcss-modules-local-by-default@4.0.3(postcss@8.4.32):
/postcss-modules-local-by-default@4.0.3(postcss@8.4.33):
resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
icss-utils: 5.1.0(postcss@8.4.32)
postcss: 8.4.32
icss-utils: 5.1.0(postcss@8.4.33)
postcss: 8.4.33
postcss-selector-parser: 6.0.15
postcss-value-parser: 4.2.0
dev: true
/postcss-modules-scope@3.0.0(postcss@8.4.32):
/postcss-modules-scope@3.0.0(postcss@8.4.33):
resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
postcss: 8.4.32
postcss: 8.4.33
postcss-selector-parser: 6.0.15
dev: true
/postcss-modules-values@4.0.0(postcss@8.4.32):
/postcss-modules-values@4.0.0(postcss@8.4.33):
resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
icss-utils: 5.1.0(postcss@8.4.32)
postcss: 8.4.32
icss-utils: 5.1.0(postcss@8.4.33)
postcss: 8.4.33
dev: true
/postcss-modules@6.0.0(postcss@8.4.32):
/postcss-modules@6.0.0(postcss@8.4.33):
resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==}
peerDependencies:
postcss: ^8.0.0
dependencies:
generic-names: 4.0.0
icss-utils: 5.1.0(postcss@8.4.32)
icss-utils: 5.1.0(postcss@8.4.33)
lodash.camelcase: 4.3.0
postcss: 8.4.32
postcss-modules-extract-imports: 3.0.0(postcss@8.4.32)
postcss-modules-local-by-default: 4.0.3(postcss@8.4.32)
postcss-modules-scope: 3.0.0(postcss@8.4.32)
postcss-modules-values: 4.0.0(postcss@8.4.32)
postcss: 8.4.33
postcss-modules-extract-imports: 3.0.0(postcss@8.4.33)
postcss-modules-local-by-default: 4.0.3(postcss@8.4.33)
postcss-modules-scope: 3.0.0(postcss@8.4.33)
postcss-modules-values: 4.0.0(postcss@8.4.33)
string-hash: 1.1.3
dev: true
@ -4807,14 +4807,23 @@ packages:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.0.2
dev: true
/postcss@8.4.33:
resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
source-map-js: 1.0.2
/prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
dev: true
/prettier@3.1.1:
resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==}
/prettier@3.2.4:
resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==}
engines: {node: '>=14'}
hasBin: true
dev: true
@ -6048,7 +6057,7 @@ packages:
engines: {node: '>= 0.8'}
dev: true
/vite-hyper-config@0.2.1(@types/node@20.11.0)(terser@5.22.0)(vite@5.0.2):
/vite-hyper-config@0.2.1(@types/node@20.11.5)(terser@5.22.0)(vite@5.0.2):
resolution: {integrity: sha512-ItRIpzWp0XMh/Sn1H0GCWnQIUcBjnSaZy/EbOpJcRr9H/KTBHUSTCEOigE9K0KTN01Z0GDi/8WgVT9+RPL932A==}
engines: {node: '>=18.0.0'}
peerDependencies:
@ -6056,8 +6065,8 @@ packages:
dependencies:
cac: 6.7.14
picocolors: 1.0.0
vite: 5.0.2(@types/node@20.11.0)(terser@5.22.0)
vite-node: 1.1.1(@types/node@20.11.0)(terser@5.22.0)
vite: 5.0.2(@types/node@20.11.5)(terser@5.22.0)
vite-node: 1.1.1(@types/node@20.11.5)(terser@5.22.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -6069,7 +6078,7 @@ packages:
- terser
dev: true
/vite-node@1.1.1(@types/node@20.11.0)(terser@5.22.0):
/vite-node@1.1.1(@types/node@20.11.5)(terser@5.22.0):
resolution: {integrity: sha512-2bGE5w4jvym5v8llF6Gu1oBrmImoNSs4WmRVcavnG2me6+8UQntTqLiAMFyiAobp+ZXhj5ZFhI7SmLiFr/jrow==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6078,7 +6087,7 @@ packages:
debug: 4.3.4
pathe: 1.1.1
picocolors: 1.0.0
vite: 5.0.10(@types/node@20.11.0)(terser@5.22.0)
vite: 5.0.10(@types/node@20.11.5)(terser@5.22.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -6090,7 +6099,7 @@ packages:
- terser
dev: true
/vite-node@1.2.0(@types/node@20.11.0)(terser@5.22.0):
/vite-node@1.2.0(@types/node@20.11.5)(terser@5.22.0):
resolution: {integrity: sha512-ETnQTHeAbbOxl7/pyBck9oAPZZZo+kYnFt1uQDD+hPReOc+wCjXw4r4jHriBRuVDB5isHmPXxrfc1yJnfBERqg==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6099,7 +6108,7 @@ packages:
debug: 4.3.4
pathe: 1.1.1
picocolors: 1.0.0
vite: 5.0.10(@types/node@20.11.0)(terser@5.22.0)
vite: 5.0.10(@types/node@20.11.5)(terser@5.22.0)
transitivePeerDependencies:
- '@types/node'
- less
@ -6129,13 +6138,13 @@ packages:
open: 9.1.0
picocolors: 1.0.0
sirv: 2.0.3
vite: 5.0.2(@types/node@20.11.0)(terser@5.22.0)
vite: 5.0.2(@types/node@20.11.5)(terser@5.22.0)
transitivePeerDependencies:
- rollup
- supports-color
dev: true
/vite@5.0.10(@types/node@20.11.0)(terser@5.22.0):
/vite@5.0.10(@types/node@20.11.5)(terser@5.22.0):
resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6163,7 +6172,7 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 20.11.0
'@types/node': 20.11.5
esbuild: 0.19.10
postcss: 8.4.32
rollup: 4.4.1
@ -6172,7 +6181,7 @@ packages:
fsevents: 2.3.3
dev: true
/vite@5.0.2(@types/node@20.11.0)(terser@5.22.0):
/vite@5.0.2(@types/node@20.11.5)(terser@5.22.0):
resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6200,16 +6209,16 @@ packages:
terser:
optional: true
dependencies:
'@types/node': 20.11.0
'@types/node': 20.11.5
esbuild: 0.19.10
postcss: 8.4.32
postcss: 8.4.33
rollup: 4.4.1
terser: 5.22.0
optionalDependencies:
fsevents: 2.3.3
dev: true
/vitest@1.2.0(@types/node@20.11.0)(jsdom@23.2.0)(terser@5.22.0):
/vitest@1.2.0(@types/node@20.11.5)(jsdom@23.2.0)(terser@5.22.0):
resolution: {integrity: sha512-Ixs5m7BjqvLHXcibkzKRQUvD/XLw0E3rvqaCMlrm/0LMsA0309ZqYvTlPzkhh81VlEyVZXFlwWnkhb6/UMtcaQ==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@ -6234,7 +6243,7 @@ packages:
jsdom:
optional: true
dependencies:
'@types/node': 20.11.0
'@types/node': 20.11.5
'@vitest/expect': 1.2.0
'@vitest/runner': 1.2.0
'@vitest/snapshot': 1.2.0
@ -6254,8 +6263,8 @@ packages:
strip-literal: 1.3.0
tinybench: 2.5.1
tinypool: 0.8.1
vite: 5.0.10(@types/node@20.11.0)(terser@5.22.0)
vite-node: 1.2.0(@types/node@20.11.0)(terser@5.22.0)
vite: 5.0.10(@types/node@20.11.5)(terser@5.22.0)
vite-node: 1.2.0(@types/node@20.11.5)(terser@5.22.0)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less

View File

@ -14,7 +14,7 @@ import { polyfillNode } from 'esbuild-plugin-polyfill-node'
const require = createRequire(import.meta.url)
const __dirname = dirname(fileURLToPath(import.meta.url))
const args = minimist(process.argv.slice(2))
const targets = args._ || ['vue']
const targets = args._.length ? args._ : ['vue']
const format = args.f || 'global'
const prod = args.p || false
const inlineDeps = args.i || args.inline