Skip to content

Commit 789c993

Browse files
authored
Merge branch 'main' into chore-1
2 parents a5550ee + d0b513e commit 789c993

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+535
-340
lines changed

.github/workflows/size-report.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ jobs:
6666
if_no_artifact_found: warn
6767

6868
- name: Prepare report
69-
run: pnpm tsx scripts/size-report.ts > size-report.md
69+
run: node scripts/size-report.js > size-report.md
7070

7171
- name: Read Size Report
7272
id: size-report

CHANGELOG.md

+18
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
## [3.5.4](https://github.com/vuejs/core/compare/v3.5.3...v3.5.4) (2024-09-10)
2+
3+
4+
### Bug Fixes
5+
6+
* **compiler-sfc:** correct scoped injection for nesting selector ([#11854](https://github.com/vuejs/core/issues/11854)) ([b1de75e](https://github.com/vuejs/core/commit/b1de75ed04626b6423085dfde91fb0cb481a25e8)), closes [#10567](https://github.com/vuejs/core/issues/10567)
7+
* **reactivity:** fix markRaw error on already marked object ([#11864](https://github.com/vuejs/core/issues/11864)) ([67d6596](https://github.com/vuejs/core/commit/67d6596d40b1807b9cd8eb0d9282932ea77be3c0)), closes [#11862](https://github.com/vuejs/core/issues/11862)
8+
* Revert "fix: Revert "fix(reactivity): self-referencing computed should refresh"" ([e596378](https://github.com/vuejs/core/commit/e596378e0be728dad7d60938449f3fa557ca2ec9))
9+
* **runtime-core:** handle shallow reactive arrays in renderList correctly ([#11870](https://github.com/vuejs/core/issues/11870)) ([ced59ab](https://github.com/vuejs/core/commit/ced59ab8f2f2e89c13119bab3a0c25a1a1f1c3d6)), closes [#11869](https://github.com/vuejs/core/issues/11869)
10+
* **types:** correctly infer `TypeEmits` with both tuple and function syntax ([#11840](https://github.com/vuejs/core/issues/11840)) ([dad6738](https://github.com/vuejs/core/commit/dad673809929c084dcb8e42640eb7daa675d4ea4)), closes [#11836](https://github.com/vuejs/core/issues/11836)
11+
12+
13+
### Performance Improvements
14+
15+
* **reactivity:** trigger deps directly instead of storing in an array first ([#11695](https://github.com/vuejs/core/issues/11695)) ([f80d447](https://github.com/vuejs/core/commit/f80d447c17662556e9e3f99f6d199967f4c8cf3d))
16+
17+
18+
119
## [3.5.3](https://github.com/vuejs/core/compare/v3.5.2...v3.5.3) (2024-09-06)
220

321

package.json

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"private": true,
3-
"version": "3.5.3",
4-
"packageManager": "pnpm@9.9.0",
3+
"version": "3.5.4",
4+
"packageManager": "pnpm@9.10.0",
55
"type": "module",
66
"scripts": {
77
"dev": "node scripts/dev.js",
88
"build": "node scripts/build.js",
9-
"build-dts": "tsc -p tsconfig.build-browser.json && tsc -p tsconfig.build-node.json && rollup -c rollup.dts.config.js",
9+
"build-dts": "tsc -p tsconfig.build.json --noCheck && rollup -c rollup.dts.config.js",
1010
"clean": "rimraf --glob packages/*/dist temp .eslintcache",
11-
"size": "run-s \"size-*\" && tsx scripts/usage-size.ts",
11+
"size": "run-s \"size-*\" && node scripts/usage-size.js",
1212
"size-global": "node scripts/build.js vue runtime-dom -f global -p --size",
1313
"size-esm-runtime": "node scripts/build.js vue -f esm-bundler-runtime",
1414
"size-esm": "node scripts/build.js runtime-dom runtime-core reactivity shared -f esm-bundler",
@@ -66,9 +66,9 @@
6666
"@rollup/plugin-json": "^6.1.0",
6767
"@rollup/plugin-node-resolve": "^15.2.3",
6868
"@rollup/plugin-replace": "5.0.4",
69-
"@swc/core": "^1.7.23",
69+
"@swc/core": "^1.7.24",
7070
"@types/hash-sum": "^1.0.2",
71-
"@types/node": "^20.16.3",
71+
"@types/node": "^20.16.5",
7272
"@types/semver": "^7.5.8",
7373
"@types/serve-handler": "^6.1.4",
7474
"@vitest/coverage-v8": "^2.0.5",
@@ -104,8 +104,7 @@
104104
"simple-git-hooks": "^2.11.1",
105105
"todomvc-app-css": "^2.4.3",
106106
"tslib": "^2.7.0",
107-
"tsx": "^4.19.0",
108-
"typescript": "~5.5.4",
107+
"typescript": "~5.6.2",
109108
"typescript-eslint": "^8.4.0",
110109
"vite": "catalog:",
111110
"vitest": "^2.0.5"

packages-private/sfc-playground/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"vite": "catalog:"
1414
},
1515
"dependencies": {
16-
"@vue/repl": "^4.3.1",
16+
"@vue/repl": "^4.4.0",
1717
"file-saver": "^2.0.5",
1818
"jszip": "^3.10.1",
1919
"vue": "workspace:*"

packages-private/sfc-playground/src/App.vue

+14
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ setVH()
1414
1515
const useSSRMode = ref(false)
1616
17+
const AUTO_SAVE_STORAGE_KEY = 'vue-sfc-playground-auto-save'
18+
const initAutoSave: boolean = JSON.parse(
19+
localStorage.getItem(AUTO_SAVE_STORAGE_KEY) ?? 'true',
20+
)
21+
const autoSave = ref(initAutoSave)
22+
1723
const { productionMode, vueVersion, importMap } = useVueImportMap({
1824
runtimeDev: import.meta.env.PROD
1925
? `${location.origin}/vue.runtime.esm-browser.js`
@@ -89,6 +95,11 @@ function toggleSSR() {
8995
useSSRMode.value = !useSSRMode.value
9096
}
9197
98+
function toggleAutoSave() {
99+
autoSave.value = !autoSave.value
100+
localStorage.setItem(AUTO_SAVE_STORAGE_KEY, String(autoSave.value))
101+
}
102+
92103
function reloadPage() {
93104
replRef.value?.reload()
94105
}
@@ -111,9 +122,11 @@ onMounted(() => {
111122
:store="store"
112123
:prod="productionMode"
113124
:ssr="useSSRMode"
125+
:autoSave="autoSave"
114126
@toggle-theme="toggleTheme"
115127
@toggle-prod="toggleProdMode"
116128
@toggle-ssr="toggleSSR"
129+
@toggle-autosave="toggleAutoSave"
117130
@reload-page="reloadPage"
118131
/>
119132
<Repl
@@ -123,6 +136,7 @@ onMounted(() => {
123136
@keydown.ctrl.s.prevent
124137
@keydown.meta.s.prevent
125138
:ssr="useSSRMode"
139+
:autoSave="autoSave"
126140
:store="store"
127141
:showCompileOutput="true"
128142
:autoResize="true"

packages-private/sfc-playground/src/Header.vue

+16-3
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ const props = defineProps<{
1414
store: ReplStore
1515
prod: boolean
1616
ssr: boolean
17+
autoSave: boolean
1718
}>()
1819
const emit = defineEmits([
1920
'toggle-theme',
2021
'toggle-ssr',
2122
'toggle-prod',
23+
'toggle-autosave',
2224
'reload-page',
2325
])
2426
@@ -107,6 +109,14 @@ function toggleDark() {
107109
>
108110
<span>{{ ssr ? 'SSR ON' : 'SSR OFF' }}</span>
109111
</button>
112+
<button
113+
title="Toggle editor auto save mode"
114+
class="toggle-autosave"
115+
:class="{ enabled: autoSave }"
116+
@click="$emit('toggle-autosave')"
117+
>
118+
<span>{{ autoSave ? 'AutoSave ON' : 'AutoSave OFF' }}</span>
119+
</button>
110120
<button title="Toggle dark mode" class="toggle-dark" @click="toggleDark">
111121
<Sun class="light" />
112122
<Moon class="dark" />
@@ -199,7 +209,8 @@ h1 img {
199209
}
200210
201211
.toggle-prod span,
202-
.toggle-ssr span {
212+
.toggle-ssr span,
213+
.toggle-autosave span {
203214
font-size: 12px;
204215
border-radius: 4px;
205216
padding: 4px 6px;
@@ -214,11 +225,13 @@ h1 img {
214225
background: var(--purple);
215226
}
216227
217-
.toggle-ssr span {
228+
.toggle-ssr span,
229+
.toggle-autosave span {
218230
background-color: var(--btn-bg);
219231
}
220232
221-
.toggle-ssr.enabled span {
233+
.toggle-ssr.enabled span,
234+
.toggle-autosave.enabled span {
222235
color: #fff;
223236
background-color: var(--green);
224237
}

packages-private/sfc-playground/src/download/template/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@
1212
},
1313
"devDependencies": {
1414
"@vitejs/plugin-vue": "^5.1.3",
15-
"vite": "^5.4.2"
15+
"vite": "^5.4.3"
1616
}
1717
}

packages-private/tsconfig.json

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "../tsconfig.json",
3+
"compilerOptions": {
4+
"isolatedDeclarations": false
5+
},
6+
"include": ["."]
7+
}

packages/compiler-core/__tests__/testUtils.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {
33
ElementTypes,
44
Namespaces,
55
NodeTypes,
6+
type Property,
7+
type SimpleExpressionNode,
68
type VNodeCall,
79
locStub,
810
} from '../src'
@@ -22,7 +24,10 @@ const bracketsRE = /^\[|\]$/g
2224
// e.g.
2325
// - createObjectMatcher({ 'foo': '[bar]' }) matches { foo: bar }
2426
// - createObjectMatcher({ '[foo]': 'bar' }) matches { [foo]: "bar" }
25-
export function createObjectMatcher(obj: Record<string, any>) {
27+
export function createObjectMatcher(obj: Record<string, any>): {
28+
type: NodeTypes
29+
properties: Partial<Property>[]
30+
} {
2631
return {
2732
type: NodeTypes.JS_OBJECT_EXPRESSION,
2833
properties: Object.keys(obj).map(key => ({
@@ -31,7 +36,7 @@ export function createObjectMatcher(obj: Record<string, any>) {
3136
type: NodeTypes.SIMPLE_EXPRESSION,
3237
content: key.replace(bracketsRE, ''),
3338
isStatic: !leadingBracketRE.test(key),
34-
},
39+
} as SimpleExpressionNode,
3540
value: isString(obj[key])
3641
? {
3742
type: NodeTypes.SIMPLE_EXPRESSION,
@@ -78,7 +83,7 @@ type Flags = PatchFlags | ShapeFlags
7883
export function genFlagText(
7984
flag: Flags | Flags[],
8085
names: { [k: number]: string } = PatchFlagNames,
81-
) {
86+
): string {
8287
if (isArray(flag)) {
8388
let f = 0
8489
flag.forEach(ff => {

packages/compiler-core/__tests__/transforms/vFor.spec.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
type ForNode,
1414
type InterpolationNode,
1515
NodeTypes,
16+
type RootNode,
1617
type SimpleExpressionNode,
1718
} from '../../src/ast'
1819
import { ErrorCodes } from '../../src/errors'
@@ -24,7 +25,10 @@ import { createObjectMatcher } from '../testUtils'
2425
export function parseWithForTransform(
2526
template: string,
2627
options: CompilerOptions = {},
27-
) {
28+
): {
29+
root: RootNode
30+
node: ForNode & { codegenNode: ForCodegenNode }
31+
} {
2832
const ast = parse(template, options)
2933
transform(ast, {
3034
nodeTransforms: [

packages/compiler-core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue/compiler-core",
3-
"version": "3.5.3",
3+
"version": "3.5.4",
44
"description": "@vue/compiler-core",
55
"main": "index.js",
66
"module": "dist/compiler-core.esm-bundler.js",

packages/compiler-dom/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue/compiler-dom",
3-
"version": "3.5.3",
3+
"version": "3.5.4",
44
"description": "@vue/compiler-dom",
55
"main": "index.js",
66
"module": "dist/compiler-dom.esm-bundler.js",

packages/compiler-sfc/__tests__/compileStyle.spec.ts

+13
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ describe('SFC scoped CSS', () => {
4141
)
4242
})
4343

44+
test('nesting selector', () => {
45+
expect(compileScoped(`h1 { color: red; .foo { color: red; } }`)).toMatch(
46+
`h1 {\n&[data-v-test] { color: red;\n}\n.foo[data-v-test] { color: red;`,
47+
)
48+
})
49+
4450
test('multiple selectors', () => {
4551
expect(compileScoped(`h1 .foo, .bar, .baz { color: red; }`)).toMatch(
4652
`h1 .foo[data-v-test], .bar[data-v-test], .baz[data-v-test] { color: red;`,
@@ -95,6 +101,13 @@ describe('SFC scoped CSS', () => {
95101
":where(.foo[data-v-test] .bar) { color: red;
96102
}"
97103
`)
104+
expect(compileScoped(`:deep(.foo) { color: red; .bar { color: red; } }`))
105+
.toMatchInlineSnapshot(`
106+
"[data-v-test] .foo { color: red;
107+
.bar { color: red;
108+
}
109+
}"
110+
`)
98111
})
99112

100113
test('::v-slotted', () => {

packages/compiler-sfc/__tests__/utils.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
type SFCParseOptions,
3+
type SFCScriptBlock,
34
type SFCScriptCompileOptions,
45
compileScript,
56
parse,
@@ -12,7 +13,7 @@ export function compileSFCScript(
1213
src: string,
1314
options?: Partial<SFCScriptCompileOptions>,
1415
parseOptions?: SFCParseOptions,
15-
) {
16+
): SFCScriptBlock {
1617
const { descriptor, errors } = parse(src, parseOptions)
1718
if (errors.length) {
1819
console.warn(errors[0])
@@ -23,7 +24,7 @@ export function compileSFCScript(
2324
})
2425
}
2526

26-
export function assertCode(code: string) {
27+
export function assertCode(code: string): void {
2728
// parse the generated code to make sure it is valid
2829
try {
2930
babelParse(code, {

packages/compiler-sfc/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue/compiler-sfc",
3-
"version": "3.5.3",
3+
"version": "3.5.4",
44
"description": "@vue/compiler-sfc",
55
"main": "dist/compiler-sfc.cjs.js",
66
"module": "dist/compiler-sfc.esm-browser.js",
@@ -62,6 +62,6 @@
6262
"postcss-modules": "^6.0.0",
6363
"postcss-selector-parser": "^6.1.2",
6464
"pug": "^3.0.3",
65-
"sass": "^1.77.8"
65+
"sass": "^1.78.0"
6666
}
6767
}

0 commit comments

Comments
 (0)