From 1355ee27a65d466bfe8f3a7ba99aa2213e25bc50 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Wed, 19 May 2021 18:19:28 +0200 Subject: [PATCH 0001/3366] fix(devtools): send update to component owning the slot https://github.com/vuejs/vue-devtools/issues/1404 --- packages/runtime-core/src/componentRenderContext.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/runtime-core/src/componentRenderContext.ts b/packages/runtime-core/src/componentRenderContext.ts index 78557484586..18dcd6f2f88 100644 --- a/packages/runtime-core/src/componentRenderContext.ts +++ b/packages/runtime-core/src/componentRenderContext.ts @@ -1,4 +1,5 @@ import { ComponentInternalInstance } from './component' +import { devtoolsComponentUpdated } from './devtools' import { isRenderingCompiledSlot } from './helpers/renderSlot' import { closeBlock, openBlock } from './vnode' @@ -78,6 +79,11 @@ export function withCtx( if (!isRenderingCompiledSlot) { closeBlock() } + + if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) { + devtoolsComponentUpdated(ctx) + } + return res } // mark this as a compiled slot function. From f7c54caeb1dac69a26b79c98409e9633a7fe4bd3 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Wed, 19 May 2021 20:48:35 +0200 Subject: [PATCH 0002/3366] feat(devtools): performance events --- packages/runtime-core/src/devtools.ts | 26 +++++++++++++++++++++++++- packages/runtime-core/src/profiling.ts | 9 +++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/src/devtools.ts b/packages/runtime-core/src/devtools.ts index a2df299c26f..5f617f83c12 100644 --- a/packages/runtime-core/src/devtools.ts +++ b/packages/runtime-core/src/devtools.ts @@ -15,7 +15,9 @@ const enum DevtoolsHooks { COMPONENT_UPDATED = 'component:updated', COMPONENT_ADDED = 'component:added', COMPONENT_REMOVED = 'component:removed', - COMPONENT_EMIT = 'component:emit' + COMPONENT_EMIT = 'component:emit', + PERFORMANCE_START = 'perf:start', + PERFORMANCE_END = 'perf:end' } interface DevtoolsHook { @@ -73,6 +75,28 @@ function createDevtoolsComponentHook(hook: DevtoolsHooks) { } } +export const devtoolsPerfStart = /*#__PURE__*/ createDevtoolsPerformanceHook( + DevtoolsHooks.PERFORMANCE_START +) + +export const devtoolsPerfEnd = /*#__PURE__*/ createDevtoolsPerformanceHook( + DevtoolsHooks.PERFORMANCE_END +) + +function createDevtoolsPerformanceHook(hook: DevtoolsHooks) { + return (component: ComponentInternalInstance, type: string, time: number) => { + if (!devtools) return + devtools.emit( + hook, + component.appContext.app, + component.uid, + component, + type, + time + ) + } +} + export function devtoolsComponentEmit( component: ComponentInternalInstance, event: string, diff --git a/packages/runtime-core/src/profiling.ts b/packages/runtime-core/src/profiling.ts index 04954d52866..8125c2f6993 100644 --- a/packages/runtime-core/src/profiling.ts +++ b/packages/runtime-core/src/profiling.ts @@ -1,4 +1,5 @@ import { ComponentInternalInstance, formatComponentName } from './component' +import { devtoolsPerfEnd, devtoolsPerfStart } from './devtools' let supported: boolean let perf: any @@ -10,6 +11,10 @@ export function startMeasure( if (instance.appContext.config.performance && isSupported()) { perf.mark(`vue-${type}-${instance.uid}`) } + + if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) { + devtoolsPerfStart(instance, type, supported ? perf.now() : Date.now()) + } } export function endMeasure(instance: ComponentInternalInstance, type: string) { @@ -25,6 +30,10 @@ export function endMeasure(instance: ComponentInternalInstance, type: string) { perf.clearMarks(startTag) perf.clearMarks(endTag) } + + if (__DEV__ || __FEATURE_PROD_DEVTOOLS__) { + devtoolsPerfEnd(instance, type, supported ? perf.now() : Date.now()) + } } function isSupported() { From 01e8ba8f873afe3857a23fb68b44fdc057e31781 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 25 May 2021 00:13:37 +0800 Subject: [PATCH 0003/3366] fix(compiler-sfc): support tsx in setup script (#3825) close #3808 --- packages/compiler-sfc/src/compileScript.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 5bb8a2461a9..10912838e53 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -101,7 +101,11 @@ export function compileScript( sfc.template && sfc.template.attrs['inherit-attrs'] === 'false' const scriptLang = script && script.lang const scriptSetupLang = scriptSetup && scriptSetup.lang - const isTS = scriptLang === 'ts' || scriptSetupLang === 'ts' + const isTS = + scriptLang === 'ts' || + scriptLang === 'tsx' || + scriptSetupLang === 'ts' || + scriptSetupLang === 'tsx' const plugins: ParserPlugin[] = [...babelParserDefaultPlugins, 'jsx'] if (options.babelParserPlugins) plugins.push(...options.babelParserPlugins) if (isTS) plugins.push('typescript', 'decorators-legacy') @@ -110,7 +114,7 @@ export function compileScript( if (!script) { throw new Error(`[@vue/compiler-sfc] SFC contains no `) expect(content).toMatch( `const n = _ref(1), { a: __a, b: __c, d: __d = 1, e: __f = 2, ...__g } = useFoo()` ) + expect(content).toMatch(`const { foo: __foo } = useSomthing(() => 1)`) expect(content).toMatch(`\nconst a = _ref(__a);`) expect(content).not.toMatch(`\nconst b = _ref(__b);`) expect(content).toMatch(`\nconst c = _ref(__c);`) @@ -789,17 +791,19 @@ const emit = defineEmit(['a', 'b']) expect(content).not.toMatch(`\nconst e = _ref(__e);`) expect(content).toMatch(`\nconst f = _ref(__f);`) expect(content).toMatch(`\nconst g = _ref(__g);`) + expect(content).toMatch(`\nconst foo = _ref(__foo);`) expect(content).toMatch( - `console.log(n.value, a.value, c.value, d.value, f.value, g.value)` + `console.log(n.value, a.value, c.value, d.value, f.value, g.value, foo.value)` ) - expect(content).toMatch(`return { n, a, c, d, f, g }`) + expect(content).toMatch(`return { n, a, c, d, f, g, foo }`) expect(bindings).toStrictEqual({ n: BindingTypes.SETUP_REF, a: BindingTypes.SETUP_REF, c: BindingTypes.SETUP_REF, d: BindingTypes.SETUP_REF, f: BindingTypes.SETUP_REF, - g: BindingTypes.SETUP_REF + g: BindingTypes.SETUP_REF, + foo: BindingTypes.SETUP_REF }) assertCode(content) }) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 10912838e53..c29125e0e1c 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -352,7 +352,7 @@ export function compileScript( break } } - for (let i = left.end!; i > 0; i++) { + for (let i = right.end!; i > 0; i++) { const char = source[i + startOffset] if (char === ')') { s.remove(i + startOffset, i + startOffset + 1) From aa96a0e88ac14ea1ccd939ea3058331227dd04b3 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 28 May 2021 16:58:54 -0400 Subject: [PATCH 0033/3366] release: v3.1.0-beta.6 --- CHANGELOG.md | 19 +++++++++++++++++++ package.json | 2 +- packages/compiler-core/package.json | 4 ++-- packages/compiler-dom/package.json | 6 +++--- packages/compiler-sfc/package.json | 12 ++++++------ packages/compiler-ssr/package.json | 6 +++--- packages/reactivity/package.json | 4 ++-- packages/runtime-core/package.json | 6 +++--- packages/runtime-dom/package.json | 6 +++--- packages/runtime-test/package.json | 6 +++--- packages/server-renderer/package.json | 8 ++++---- packages/sfc-playground/package.json | 2 +- packages/shared/package.json | 2 +- packages/size-check/package.json | 2 +- packages/template-explorer/package.json | 2 +- packages/vue-compat/package.json | 4 ++-- packages/vue/package.json | 8 ++++---- 17 files changed, 59 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c064dbe3be..a8e8b8b8d66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +# [3.1.0-beta.6](https://github.com/vuejs/vue-next/compare/v3.1.0-beta.5...v3.1.0-beta.6) (2021-05-28) + + +### Bug Fixes + +* **compiler-core:** improve the isMemberExpression function ([#3675](https://github.com/vuejs/vue-next/issues/3675)) ([9b2e894](https://github.com/vuejs/vue-next/commit/9b2e8940176b3b75fa052b3c3e9eeaabc46a95e6)) +* **compiler-dom:** fix in-browser attribute value decoding w/ html tags ([6690372](https://github.com/vuejs/vue-next/commit/669037277b03bb8e67f517faf2811a8668ea86d6)), closes [#3001](https://github.com/vuejs/vue-next/issues/3001) +* **compiler-sfc:** correctly remove parens used for wrapping ([#3582](https://github.com/vuejs/vue-next/issues/3582)) ([6bfb50a](https://github.com/vuejs/vue-next/commit/6bfb50aff98038a1f854ce24733f545eec2ee796)), closes [#3581](https://github.com/vuejs/vue-next/issues/3581) +* **reactivity:** ensure computed always expose value ([03a7a73](https://github.com/vuejs/vue-next/commit/03a7a73148a9e210a7889c7a2ecf925338735c70)), closes [#3099](https://github.com/vuejs/vue-next/issues/3099) [#910](https://github.com/vuejs/vue-next/issues/910) +* **runtime-core:** fix cases of reused children arrays in render functions ([#3670](https://github.com/vuejs/vue-next/issues/3670)) ([a641eb2](https://github.com/vuejs/vue-next/commit/a641eb201fe51620d50884b988f6fefc3e21a20b)), closes [#3666](https://github.com/vuejs/vue-next/issues/3666) +* **runtime-core:** fix resolving inheritAttrs from mixins ([#3742](https://github.com/vuejs/vue-next/issues/3742)) ([d6607c9](https://github.com/vuejs/vue-next/commit/d6607c9864376fbe17899f3d35fc7b097670a1b1)), closes [#3741](https://github.com/vuejs/vue-next/issues/3741) +* **runtime-core:** should disable tracking inside directive lifecycle hooks ([#3699](https://github.com/vuejs/vue-next/issues/3699)) ([ff50e8d](https://github.com/vuejs/vue-next/commit/ff50e8d78c033252c4ce7ffddb8069b3ddae5936)) +* **runtime-core:** stricter compat root mount check ([32e2133](https://github.com/vuejs/vue-next/commit/32e21333dd1197a978cf42802729b2133bda5a0b)) +* **runtime-dom:** should remove attribute when binding `null` to `value` ([#3564](https://github.com/vuejs/vue-next/issues/3564)) ([e3f5dcb](https://github.com/vuejs/vue-next/commit/e3f5dcb99bf42fed48d995438e459203dc3f6ed0)) +* **suspense:** fix suspense patching in optimized mode ([9f24195](https://github.com/vuejs/vue-next/commit/9f24195d2ce24184ccdc5020793dd9423f0d3148)), closes [#3828](https://github.com/vuejs/vue-next/issues/3828) +* **transition:** fix higher order transition components with merged listeners ([071986a](https://github.com/vuejs/vue-next/commit/071986a2c6459fd99b91a48793a9ab6d6618b52d)), closes [#3227](https://github.com/vuejs/vue-next/issues/3227) + + + # [3.1.0-beta.5](https://github.com/vuejs/vue-next/compare/v3.1.0-beta.4...v3.1.0-beta.5) (2021-05-26) diff --git a/package.json b/package.json index cad2d152ea4..5d82073325c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "workspaces": [ "packages/*" ], diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 19e4cf49757..6c0c9cbc08a 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-core#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5", + "@vue/shared": "3.1.0-beta.6", "@babel/parser": "^7.12.0", "@babel/types": "^7.12.0", "estree-walker": "^2.0.1", diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index 76f2250e960..2e38ff78c1c 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", @@ -37,7 +37,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-dom#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5", - "@vue/compiler-core": "3.1.0-beta.5" + "@vue/shared": "3.1.0-beta.6", + "@vue/compiler-core": "3.1.0-beta.6" } } diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 39306f72ed4..63df0d9ddaf 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "types": "dist/compiler-sfc.d.ts", @@ -31,15 +31,15 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-sfc#readme", "peerDependencies": { - "vue": "3.1.0-beta.5" + "vue": "3.1.0-beta.6" }, "dependencies": { "@babel/parser": "^7.13.9", "@babel/types": "^7.13.0", - "@vue/compiler-core": "3.1.0-beta.5", - "@vue/compiler-dom": "3.1.0-beta.5", - "@vue/compiler-ssr": "3.1.0-beta.5", - "@vue/shared": "3.1.0-beta.5", + "@vue/compiler-core": "3.1.0-beta.6", + "@vue/compiler-dom": "3.1.0-beta.6", + "@vue/compiler-ssr": "3.1.0-beta.6", + "@vue/shared": "3.1.0-beta.6", "consolidate": "^0.16.0", "estree-walker": "^2.0.1", "hash-sum": "^2.0.0", diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index bc1d922155b..f8e04468e46 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-ssr#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5", - "@vue/compiler-dom": "3.1.0-beta.5" + "@vue/shared": "3.1.0-beta.6", + "@vue/compiler-dom": "3.1.0-beta.6" } } diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index 60d3cb4d567..ec1395d4b8a 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", @@ -36,6 +36,6 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/reactivity#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5" + "@vue/shared": "3.1.0-beta.6" } } diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index 15981fdb9e5..185390cab9b 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-core#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5", - "@vue/reactivity": "3.1.0-beta.5" + "@vue/shared": "3.1.0-beta.6", + "@vue/reactivity": "3.1.0-beta.6" } } diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index fd4527636e8..1549fdd3ce9 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", @@ -35,8 +35,8 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-dom#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5", - "@vue/runtime-core": "3.1.0-beta.5", + "@vue/shared": "3.1.0-beta.6", + "@vue/runtime-core": "3.1.0-beta.6", "csstype": "^2.6.8" } } diff --git a/packages/runtime-test/package.json b/packages/runtime-test/package.json index 801ab6cdc6f..8426e83d88a 100644 --- a/packages/runtime-test/package.json +++ b/packages/runtime-test/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-test", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/runtime-test", "private": true, "main": "index.js", @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-test#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5", - "@vue/runtime-core": "3.1.0-beta.5" + "@vue/shared": "3.1.0-beta.6", + "@vue/runtime-core": "3.1.0-beta.6" } } diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index fe7512a65df..6fb9e58d16d 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "@vue/server-renderer", "main": "index.js", "types": "dist/server-renderer.d.ts", @@ -28,10 +28,10 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/server-renderer#readme", "peerDependencies": { - "vue": "3.1.0-beta.5" + "vue": "3.1.0-beta.6" }, "dependencies": { - "@vue/shared": "3.1.0-beta.5", - "@vue/compiler-ssr": "3.1.0-beta.5" + "@vue/shared": "3.1.0-beta.6", + "@vue/compiler-ssr": "3.1.0-beta.6" } } diff --git a/packages/sfc-playground/package.json b/packages/sfc-playground/package.json index ce771afaf42..cd267cfeab2 100644 --- a/packages/sfc-playground/package.json +++ b/packages/sfc-playground/package.json @@ -1,6 +1,6 @@ { "name": "@vue/sfc-playground", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "private": true, "scripts": { "dev": "vite", diff --git a/packages/shared/package.json b/packages/shared/package.json index d42cd3a832d..fd38f6156bd 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/size-check/package.json b/packages/size-check/package.json index 5e80c77e333..2b52ed36257 100644 --- a/packages/size-check/package.json +++ b/packages/size-check/package.json @@ -1,6 +1,6 @@ { "name": "@vue/size-check", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "private": true, "buildOptions": { "name": "Vue", diff --git a/packages/template-explorer/package.json b/packages/template-explorer/package.json index bf2114b3af1..3c57417d552 100644 --- a/packages/template-explorer/package.json +++ b/packages/template-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/template-explorer", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "private": true, "buildOptions": { "formats": [ diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index 6e9ccdf32a7..5034598a9e0 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "Vue 3 compatibility build for Vue 2", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -38,6 +38,6 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/vue-compat#readme", "peerDependencies": { - "vue": "3.1.0-beta.5" + "vue": "3.1.0-beta.6" } } diff --git a/packages/vue/package.json b/packages/vue/package.json index 69584a9bf22..ef0c1f24e6a 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.1.0-beta.5", + "version": "3.1.0-beta.6", "description": "The progressive JavaScript framework for buiding modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -37,9 +37,9 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/vue#readme", "dependencies": { - "@vue/shared": "3.1.0-beta.5", - "@vue/compiler-dom": "3.1.0-beta.5", - "@vue/runtime-dom": "3.1.0-beta.5" + "@vue/shared": "3.1.0-beta.6", + "@vue/compiler-dom": "3.1.0-beta.6", + "@vue/runtime-dom": "3.1.0-beta.6" }, "devDependencies": { "lodash": "^4.17.15", From 2c7bd428011e027efa8f66487d2269c8dd79a2b0 Mon Sep 17 00:00:00 2001 From: edison Date: Sat, 29 May 2021 05:58:46 +0800 Subject: [PATCH 0034/3366] fix(compiler-sfc): fix template expression assignment codegen for script setup let refs (#3626) fix #3625 --- .../compiler-core/src/transforms/transformExpression.ts | 4 ++-- .../__tests__/__snapshots__/compileScript.spec.ts.snap | 7 +++++++ packages/compiler-sfc/__tests__/compileScript.spec.ts | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/compiler-core/src/transforms/transformExpression.ts b/packages/compiler-core/src/transforms/transformExpression.ts index 4ebfbbe7613..71e4b76cb18 100644 --- a/packages/compiler-core/src/transforms/transformExpression.ts +++ b/packages/compiler-core/src/transforms/transformExpression.ts @@ -143,14 +143,14 @@ export function processExpression( // let is a local non-ref value, and we need to replicate the // right hand side value. // x = y --> isRef(x) ? x.value = y : x = y - const rVal = (parent as AssignmentExpression).right + const { right: rVal, operator } = parent as AssignmentExpression const rExp = rawExp.slice(rVal.start! - 1, rVal.end! - 1) const rExpString = stringifyExpression( processExpression(createSimpleExpression(rExp, false), context) ) return `${context.helperString(IS_REF)}(${raw})${ context.isTS ? ` //@ts-ignore\n` : `` - } ? ${raw}.value = ${rExpString} : ${raw}` + } ? ${raw}.value ${operator} ${rExpString} : ${raw}` } else if (isUpdateArg) { // make id replace parent in the code range so the raw update operator // is removed diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap index 9887d8943d2..cb8e5ed2805 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap @@ -361,6 +361,7 @@ export default { const count = ref(0) const maybe = foo() let lett = 1 + let v = ref(1) return (_ctx, _cache) => { return (_openBlock(), _createBlock(_Fragment, null, [ @@ -372,6 +373,12 @@ return (_ctx, _cache) => { }), _createVNode(\\"div\\", { onClick: _cache[3] || (_cache[3] = $event => (_isRef(lett) ? lett.value = count.value : lett = count.value)) + }), + _createVNode(\\"div\\", { + onClick: _cache[4] || (_cache[4] = $event => (_isRef(v) ? v.value += 1 : v += 1)) + }), + _createVNode(\\"div\\", { + onClick: _cache[5] || (_cache[5] = $event => (_isRef(v) ? v.value -= 1 : v -= 1)) }) ], 64 /* STABLE_FRAGMENT */)) } diff --git a/packages/compiler-sfc/__tests__/compileScript.spec.ts b/packages/compiler-sfc/__tests__/compileScript.spec.ts index de578dd90fd..54832fcb7d7 100644 --- a/packages/compiler-sfc/__tests__/compileScript.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript.spec.ts @@ -300,11 +300,14 @@ const myEmit = defineEmit(['foo', 'bar']) const count = ref(0) const maybe = foo() let lett = 1 + let v = ref(1) `, { inlineTemplate: true } @@ -317,6 +320,8 @@ const myEmit = defineEmit(['foo', 'bar']) expect(content).toMatch( `_isRef(lett) ? lett.value = count.value : lett = count.value` ) + expect(content).toMatch(`_isRef(v) ? v.value += 1 : v += 1`) + expect(content).toMatch(`_isRef(v) ? v.value -= 1 : v -= 1`) assertCode(content) }) From 8b94464a3b9759a7a98c23efeafc7a9359c9807d Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 28 May 2021 18:40:35 -0400 Subject: [PATCH 0035/3366] fix(compiler-sfc): fix style injection when using normal script + setup fix #3688 --- .../__snapshots__/cssVars.spec.ts.snap | 23 ++++++++++++++++++ .../compiler-sfc/__tests__/cssVars.spec.ts | 24 +++++++++++++++++++ packages/compiler-sfc/src/cssVars.ts | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap index a2926e8fee1..99f963804b5 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap @@ -109,3 +109,26 @@ return { color, size, ref } }" `; + +exports[`CSS vars injection w/ normal \n` + + `` + ) + expect(content).toMatch(`_useCssVars(_ctx => ({ + "${mockId}-size": (_ctx.size) +})`) + expect(content).toMatch(`import { useCssVars as _useCssVars } from 'vue'`) + assertCode(content) + }) + test('w/ + `) + assertCode(content) + expect(bindings).toStrictEqual({ + myEmit: BindingTypes.SETUP_CONST + }) + // should remove defineOptions import and call + expect(content).not.toMatch('defineEmits') // should generate correct setup signature expect(content).toMatch(`setup(__props, { emit: myEmit }) {`) // should include context options in default export @@ -145,9 +166,9 @@ const myEmit = defineEmit(['foo', 'bar']) test('should allow defineProps/Emit at the start of imports', () => { assertCode( compile(``).content ) @@ -450,9 +471,9 @@ const myEmit = defineEmit(['foo', 'bar']) test('defineProps/Emit w/ runtime options', () => { const { content } = compile(` `) assertCode(content) @@ -549,11 +570,11 @@ const emit = defineEmit(['a', 'b']) }) }) - test('defineEmit w/ type', () => { + test('defineEmits w/ type', () => { const { content } = compile(` `) assertCode(content) @@ -561,24 +582,24 @@ const emit = defineEmit(['a', 'b']) expect(content).toMatch(`emits: ["foo", "bar"] as unknown as undefined`) }) - test('defineEmit w/ type (union)', () => { + test('defineEmits w/ type (union)', () => { const type = `((e: 'foo' | 'bar') => void) | ((e: 'baz', id: number) => void)` expect(() => compile(` `) ).toThrow() }) - test('defineEmit w/ type (type literal w/ call signatures)', () => { + test('defineEmits w/ type (type literal w/ call signatures)', () => { const type = `{(e: 'foo' | 'bar'): void; (e: 'baz', id: number): void;}` const { content } = compile(` `) assertCode(content) @@ -906,8 +927,8 @@ const emit = defineEmit(['a', 'b']) expect(() => { compile(``) }).toThrow(`cannot accept both type and non-type arguments`) }) @@ -927,9 +948,9 @@ const emit = defineEmit(['a', 'b']) expect(() => compile(``) ).toThrow(`cannot reference locally declared variables`) }) @@ -947,9 +968,9 @@ const emit = defineEmit(['a', 'b']) expect(() => compile(``) @@ -959,14 +980,14 @@ const emit = defineEmit(['a', 'b']) test('should allow defineProps/Emit() referencing scope var', () => { assertCode( compile(``).content @@ -976,14 +997,14 @@ const emit = defineEmit(['a', 'b']) test('should allow defineProps/Emit() referencing imported binding', () => { assertCode( compile(``).content diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index c29125e0e1c..5789d67392d 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -36,6 +36,7 @@ import { rewriteDefault } from './rewriteDefault' const DEFINE_PROPS = 'defineProps' const DEFINE_EMIT = 'defineEmit' +const DEFINE_EMITS = 'defineEmits' export interface SFCScriptCompileOptions { /** @@ -286,10 +287,10 @@ export function compileScript( return false } - function processDefineEmit(node: Node): boolean { - if (isCallOf(node, DEFINE_EMIT)) { + function processDefineEmits(node: Node): boolean { + if (isCallOf(node, DEFINE_EMIT) || isCallOf(node, DEFINE_EMITS)) { if (hasDefineEmitCall) { - error(`duplicate ${DEFINE_EMIT}() call`, node) + error(`duplicate ${DEFINE_EMITS}() call`, node) } hasDefineEmitCall = true emitRuntimeDecl = node.arguments[0] @@ -309,7 +310,7 @@ export function compileScript( emitTypeDecl = typeArg } else { error( - `type argument passed to ${DEFINE_EMIT}() must be a function type ` + + `type argument passed to ${DEFINE_EMITS}() must be a function type ` + `or a literal type with call signatures.`, typeArg ) @@ -627,7 +628,9 @@ export function compileScript( const existing = userImports[local] if ( source === 'vue' && - (imported === DEFINE_PROPS || imported === DEFINE_EMIT) + (imported === DEFINE_PROPS || + imported === DEFINE_EMIT || + imported === DEFINE_EMITS) ) { removeSpecifier(i) } else if (existing) { @@ -651,11 +654,11 @@ export function compileScript( } } - // process `defineProps` and `defineEmit` calls + // process `defineProps` and `defineEmit(s)` calls if ( node.type === 'ExpressionStatement' && (processDefineProps(node.expression) || - processDefineEmit(node.expression)) + processDefineEmits(node.expression)) ) { s.remove(node.start! + startOffset, node.end! + startOffset) } @@ -669,14 +672,14 @@ export function compileScript( decl.id.end! ) } - const isDefineEmit = processDefineEmit(decl.init) - if (isDefineEmit) { + const isDefineEmits = processDefineEmits(decl.init) + if (isDefineEmits) { emitIdentifier = scriptSetup.content.slice( decl.id.start!, decl.id.end! ) } - if (isDefineProps || isDefineEmit) + if (isDefineProps || isDefineEmits) if (node.declarations.length === 1) { s.remove(node.start! + startOffset, node.end! + startOffset) } else { @@ -1040,7 +1043,9 @@ function walkDeclaration( for (const { id, init } of node.declarations) { const isDefineCall = !!( isConst && - (isCallOf(init, DEFINE_PROPS) || isCallOf(init, DEFINE_EMIT)) + (isCallOf(init, DEFINE_PROPS) || + isCallOf(init, DEFINE_EMIT) || + isCallOf(init, DEFINE_EMITS)) ) if (id.type === 'Identifier') { let bindingType diff --git a/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts b/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts index 3c0e228bec4..12a8c67bb57 100644 --- a/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts +++ b/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts @@ -5,15 +5,15 @@ import { render, SetupContext } from '@vue/runtime-test' -import { defineEmit, defineProps, useContext } from '../src/apiSetupHelpers' +import { defineEmits, defineProps, useContext } from '../src/apiSetupHelpers' describe('SFC - - `) - assertCode(content) - - const { content: content2 } = compile(` - - - `) - assertCode(content2) - }) - describe(' + + `)).not.toThrow() + }) }) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index bf4cec6719e..6d4733f0b85 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -1,5 +1,10 @@ import MagicString from 'magic-string' -import { BindingMetadata, BindingTypes, UNREF } from '@vue/compiler-core' +import { + BindingMetadata, + BindingTypes, + locStub, + UNREF +} from '@vue/compiler-core' import { ScriptSetupTextRanges, SFCDescriptor, @@ -126,7 +131,7 @@ export function compileScript( type: 'script', content: '', attrs: {}, - loc: null as any + loc: locStub } } From 00bb76b69ce26b266434e454b26068ceb27c81b2 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 2 Jul 2021 08:27:52 -0400 Subject: [PATCH 0143/3366] test: fix test ts target --- jest.config.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/jest.config.js b/jest.config.js index f9b4cfc0a6c..3c61fdcdbd3 100644 --- a/jest.config.js +++ b/jest.config.js @@ -13,7 +13,12 @@ module.exports = { __FEATURE_OPTIONS_API__: true, __FEATURE_SUSPENSE__: true, __FEATURE_PROD_DEVTOOLS__: false, - __COMPAT__: true + __COMPAT__: true, + 'ts-jest': { + tsconfig: { + target: 'esnext' + } + } }, coverageDirectory: 'coverage', coverageReporters: ['html', 'lcov', 'text'], From 348c3b01e56383ffa70b180d1376fdf4ac12e274 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 2 Jul 2021 08:37:50 -0400 Subject: [PATCH 0144/3366] release: v3.1.4 --- CHANGELOG.md | 14 ++++++++++++++ package.json | 2 +- packages/compiler-core/package.json | 4 ++-- packages/compiler-dom/package.json | 6 +++--- packages/compiler-sfc/package.json | 12 ++++++------ packages/compiler-ssr/package.json | 6 +++--- packages/reactivity/package.json | 4 ++-- packages/runtime-core/package.json | 6 +++--- packages/runtime-dom/package.json | 6 +++--- packages/runtime-test/package.json | 6 +++--- packages/server-renderer/package.json | 8 ++++---- packages/sfc-playground/package.json | 2 +- packages/shared/package.json | 2 +- packages/size-check/package.json | 2 +- packages/template-explorer/package.json | 2 +- packages/vue-compat/package.json | 4 ++-- packages/vue/package.json | 8 ++++---- 17 files changed, 54 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfd4ec06e1d..04f9d583da5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## [3.1.4](https://github.com/vuejs/vue-next/compare/v3.1.3...v3.1.4) (2021-07-02) + + +### Bug Fixes + +* **build:** avoid using async/await syntax ([438754a](https://github.com/vuejs/vue-next/commit/438754a0d1428d10e27d1a290beb4b81da5fdaeb)) +* **build:** fix generated code containing unprocessed class field syntax ([2788154](https://github.com/vuejs/vue-next/commit/2788154f7707928f1dd3e4d9bd144f758a8c0478)), closes [#4052](https://github.com/vuejs/vue-next/issues/4052) [vuejs/vue-cli#6562](https://github.com/vuejs/vue-cli/issues/6562) +* **codegen:** ensure valid types in genreated code when using global directives ([a44d528](https://github.com/vuejs/vue-next/commit/a44d528af1227c05dedf610b6ec45504d8e58276)), closes [#4054](https://github.com/vuejs/vue-next/issues/4054) +* **compiler-sfc:** fix parse-only mode when there is no script setup block ([253ca27](https://github.com/vuejs/vue-next/commit/253ca2729d808fc051215876aa4af986e4caa43c)) +* **runtime-core:** add useAttrs and useSlots export ([#4053](https://github.com/vuejs/vue-next/issues/4053)) ([735ada1](https://github.com/vuejs/vue-next/commit/735ada1507623b8d36e80b30a4f67a8af4a45c99)) +* **runtime-core:** fix instance accessed via $parent chain when using expose() ([#4048](https://github.com/vuejs/vue-next/issues/4048)) ([12cf9f4](https://github.com/vuejs/vue-next/commit/12cf9f4ea148a59fd9002ecf9ea9d365829ce37c)) + + + ## [3.1.3](https://github.com/vuejs/vue-next/compare/v3.1.2...v3.1.3) (2021-07-01) diff --git a/package.json b/package.json index 459df9c7567..35f8bd45da4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "3.1.3", + "version": "3.1.4", "workspaces": [ "packages/*" ], diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index 9d802cf64fa..c79750c2b00 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-core", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/compiler-core", "main": "index.js", "module": "dist/compiler-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-core#readme", "dependencies": { - "@vue/shared": "3.1.3", + "@vue/shared": "3.1.4", "@babel/parser": "^7.12.0", "@babel/types": "^7.12.0", "estree-walker": "^2.0.1", diff --git a/packages/compiler-dom/package.json b/packages/compiler-dom/package.json index 277e0eda3d0..25830aa6faa 100644 --- a/packages/compiler-dom/package.json +++ b/packages/compiler-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-dom", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/compiler-dom", "main": "index.js", "module": "dist/compiler-dom.esm-bundler.js", @@ -37,7 +37,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-dom#readme", "dependencies": { - "@vue/shared": "3.1.3", - "@vue/compiler-core": "3.1.3" + "@vue/shared": "3.1.4", + "@vue/compiler-core": "3.1.4" } } diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index 0b7afb2986e..790a0087826 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-sfc", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/compiler-sfc", "main": "dist/compiler-sfc.cjs.js", "types": "dist/compiler-sfc.d.ts", @@ -31,16 +31,16 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-sfc#readme", "peerDependencies": { - "vue": "3.1.3" + "vue": "3.1.4" }, "dependencies": { "@babel/parser": "^7.13.9", "@babel/types": "^7.13.0", "@types/estree": "^0.0.48", - "@vue/compiler-core": "3.1.3", - "@vue/compiler-dom": "3.1.3", - "@vue/compiler-ssr": "3.1.3", - "@vue/shared": "3.1.3", + "@vue/compiler-core": "3.1.4", + "@vue/compiler-dom": "3.1.4", + "@vue/compiler-ssr": "3.1.4", + "@vue/shared": "3.1.4", "consolidate": "^0.16.0", "estree-walker": "^2.0.1", "hash-sum": "^2.0.0", diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json index 4a3bb03eec6..1547b41d141 100644 --- a/packages/compiler-ssr/package.json +++ b/packages/compiler-ssr/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compiler-ssr", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/compiler-ssr", "main": "dist/compiler-ssr.cjs.js", "types": "dist/compiler-ssr.d.ts", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-ssr#readme", "dependencies": { - "@vue/shared": "3.1.3", - "@vue/compiler-dom": "3.1.3" + "@vue/shared": "3.1.4", + "@vue/compiler-dom": "3.1.4" } } diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json index a7f063a25e7..b99f965c5fe 100644 --- a/packages/reactivity/package.json +++ b/packages/reactivity/package.json @@ -1,6 +1,6 @@ { "name": "@vue/reactivity", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/reactivity", "main": "index.js", "module": "dist/reactivity.esm-bundler.js", @@ -36,6 +36,6 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/reactivity#readme", "dependencies": { - "@vue/shared": "3.1.3" + "@vue/shared": "3.1.4" } } diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json index c740a6f7356..72efdd64c90 100644 --- a/packages/runtime-core/package.json +++ b/packages/runtime-core/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-core", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/runtime-core", "main": "index.js", "module": "dist/runtime-core.esm-bundler.js", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-core#readme", "dependencies": { - "@vue/shared": "3.1.3", - "@vue/reactivity": "3.1.3" + "@vue/shared": "3.1.4", + "@vue/reactivity": "3.1.4" } } diff --git a/packages/runtime-dom/package.json b/packages/runtime-dom/package.json index e1958d4e0ad..cf681a1f647 100644 --- a/packages/runtime-dom/package.json +++ b/packages/runtime-dom/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-dom", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/runtime-dom", "main": "index.js", "module": "dist/runtime-dom.esm-bundler.js", @@ -35,8 +35,8 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-dom#readme", "dependencies": { - "@vue/shared": "3.1.3", - "@vue/runtime-core": "3.1.3", + "@vue/shared": "3.1.4", + "@vue/runtime-core": "3.1.4", "csstype": "^2.6.8" } } diff --git a/packages/runtime-test/package.json b/packages/runtime-test/package.json index 28ccf3f5b97..53ee1e8b501 100644 --- a/packages/runtime-test/package.json +++ b/packages/runtime-test/package.json @@ -1,6 +1,6 @@ { "name": "@vue/runtime-test", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/runtime-test", "private": true, "main": "index.js", @@ -25,7 +25,7 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/runtime-test#readme", "dependencies": { - "@vue/shared": "3.1.3", - "@vue/runtime-core": "3.1.3" + "@vue/shared": "3.1.4", + "@vue/runtime-core": "3.1.4" } } diff --git a/packages/server-renderer/package.json b/packages/server-renderer/package.json index 02663608085..97e8fc9ecb8 100644 --- a/packages/server-renderer/package.json +++ b/packages/server-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/server-renderer", - "version": "3.1.3", + "version": "3.1.4", "description": "@vue/server-renderer", "main": "index.js", "types": "dist/server-renderer.d.ts", @@ -28,10 +28,10 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/server-renderer#readme", "peerDependencies": { - "vue": "3.1.3" + "vue": "3.1.4" }, "dependencies": { - "@vue/shared": "3.1.3", - "@vue/compiler-ssr": "3.1.3" + "@vue/shared": "3.1.4", + "@vue/compiler-ssr": "3.1.4" } } diff --git a/packages/sfc-playground/package.json b/packages/sfc-playground/package.json index 1c8d516a05d..0976d7e14ca 100644 --- a/packages/sfc-playground/package.json +++ b/packages/sfc-playground/package.json @@ -1,6 +1,6 @@ { "name": "@vue/sfc-playground", - "version": "3.1.3", + "version": "3.1.4", "private": true, "scripts": { "dev": "vite", diff --git a/packages/shared/package.json b/packages/shared/package.json index 7e734d5b126..66ab96d73f8 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@vue/shared", - "version": "3.1.3", + "version": "3.1.4", "description": "internal utils shared across @vue packages", "main": "index.js", "module": "dist/shared.esm-bundler.js", diff --git a/packages/size-check/package.json b/packages/size-check/package.json index 4d5f2b8aed8..2469d0deed9 100644 --- a/packages/size-check/package.json +++ b/packages/size-check/package.json @@ -1,6 +1,6 @@ { "name": "@vue/size-check", - "version": "3.1.3", + "version": "3.1.4", "private": true, "buildOptions": { "name": "Vue", diff --git a/packages/template-explorer/package.json b/packages/template-explorer/package.json index 7af07add34e..dc285ac0bae 100644 --- a/packages/template-explorer/package.json +++ b/packages/template-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@vue/template-explorer", - "version": "3.1.3", + "version": "3.1.4", "private": true, "buildOptions": { "formats": [ diff --git a/packages/vue-compat/package.json b/packages/vue-compat/package.json index c8b6e2426a9..b17b6adbfc8 100644 --- a/packages/vue-compat/package.json +++ b/packages/vue-compat/package.json @@ -1,6 +1,6 @@ { "name": "@vue/compat", - "version": "3.1.3", + "version": "3.1.4", "description": "Vue 3 compatibility build for Vue 2", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -38,6 +38,6 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/vue-compat#readme", "peerDependencies": { - "vue": "3.1.3" + "vue": "3.1.4" } } diff --git a/packages/vue/package.json b/packages/vue/package.json index 8388f1af795..c44e3c22709 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "vue", - "version": "3.1.3", + "version": "3.1.4", "description": "The progressive JavaScript framework for buiding modern web UI.", "main": "index.js", "module": "dist/vue.runtime.esm-bundler.js", @@ -37,9 +37,9 @@ }, "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/vue#readme", "dependencies": { - "@vue/shared": "3.1.3", - "@vue/compiler-dom": "3.1.3", - "@vue/runtime-dom": "3.1.3" + "@vue/shared": "3.1.4", + "@vue/compiler-dom": "3.1.4", + "@vue/runtime-dom": "3.1.4" }, "devDependencies": { "lodash": "^4.17.15", From f3e15f633edfa2d4f116bf52fd5dee02655567e3 Mon Sep 17 00:00:00 2001 From: Austin Keener Date: Sun, 4 Jul 2021 18:32:44 -0400 Subject: [PATCH 0145/3366] fix(compat): fix props check for v-model compat warning (#4056) --- packages/runtime-core/src/compat/compatConfig.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/runtime-core/src/compat/compatConfig.ts b/packages/runtime-core/src/compat/compatConfig.ts index a6ab9854bbe..05ecc3e72ea 100644 --- a/packages/runtime-core/src/compat/compatConfig.ts +++ b/packages/runtime-core/src/compat/compatConfig.ts @@ -398,9 +398,10 @@ export const deprecationData: Record = { DeprecationTypes.COMPONENT_V_MODEL }: false }\`.` if ( - comp.props && isArray(comp.props) + comp.props && + (isArray(comp.props) ? comp.props.includes('modelValue') - : hasOwn(comp.props, 'modelValue') + : hasOwn(comp.props, 'modelValue')) ) { return ( `Component delcares "modelValue" prop, which is Vue 3 usage, but ` + From 09f84e98c9051591e710fba0a150c29a5117920e Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 5 Jul 2021 14:41:09 -0400 Subject: [PATCH 0146/3366] chore: bump vite --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index aa732ef063a..6db8290c682 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5625,7 +5625,7 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.1.10, postcss@^8.3.4: +postcss@^8.1.10, postcss@^8.3.5: version "8.3.5" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709" integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA== @@ -7388,13 +7388,13 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vite@^2.1.5: - version "2.3.8" - resolved "https://registry.yarnpkg.com/vite/-/vite-2.3.8.tgz#42e3e03953859fd410e4e6ab3d1cca0aab2adc3c" - integrity sha512-QiEx+iqNnJntSgSF2fWRQvRey9pORIrtNJzNyBJXwc+BdzWs83FQolX84cTBo393cfhObrtWa6180dAa4NLDiQ== +vite@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.4.0.tgz#a591e4f2c996ae9a044093f629b418069629ca16" + integrity sha512-FR+1hCyGt8i+ijMe9z4tIfUQ7BQThxGevp3IlmdXDBSJEPjbeDznbuJa/QVzXw2Mpxh7KCmveVI082h8nzcCNw== dependencies: esbuild "^0.12.8" - postcss "^8.3.4" + postcss "^8.3.5" resolve "^1.20.0" rollup "^2.38.5" optionalDependencies: From 6fad2093a46898636af34ddc148616473a234617 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 5 Jul 2021 14:41:53 -0400 Subject: [PATCH 0147/3366] fix(compiler-sfc): should not rewrite ref sugar identifiers in types fix #4062 --- .../compileScriptRefSugar.spec.ts.snap | 228 ++++++++++++++++++ ...Sugar.ts => compileScriptRefSugar.spec.ts} | 16 ++ packages/compiler-sfc/src/compileScript.ts | 3 + packages/sfc-playground/package.json | 2 +- 4 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 packages/compiler-sfc/__tests__/__snapshots__/compileScriptRefSugar.spec.ts.snap rename packages/compiler-sfc/__tests__/{compileScriptRefSugar.ts => compileScriptRefSugar.spec.ts} (95%) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScriptRefSugar.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScriptRefSugar.spec.ts.snap new file mode 100644 index 00000000000..17b1c8edd34 --- /dev/null +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScriptRefSugar.spec.ts.snap @@ -0,0 +1,228 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[``, + { + refSugar: true + } + ) + assertCode(content) + expect(content).not.toMatch('.value') + }) + describe('errors', () => { test('ref: non-assignment expressions', () => { expect(() => diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 6d4733f0b85..94d351ab03c 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -1708,6 +1708,9 @@ export function walkIdentifiers( ;(walk as any)(root, { enter(node: Node & { scopeIds?: Set }, parent: Node | undefined) { parent && parentStack.push(parent) + if (node.type.startsWith('TS')) { + return this.skip() + } if (node.type === 'Identifier') { if ( !knownIds[node.name] && diff --git a/packages/sfc-playground/package.json b/packages/sfc-playground/package.json index 0976d7e14ca..4104f7ce52a 100644 --- a/packages/sfc-playground/package.json +++ b/packages/sfc-playground/package.json @@ -18,7 +18,7 @@ "@types/codemirror": "^0.0.108", "@vitejs/plugin-vue": "^1.2.0", "codemirror": "^5.60.0", - "vite": "^2.1.5" + "vite": "^2.4.0" }, "dependencies": { "file-saver": "^2.0.5", From d12206db8efac33401399b7f38e7894b24b3a0f4 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 6 Jul 2021 11:39:27 -0400 Subject: [PATCH 0148/3366] test: add test case for proper effect teardown w/ withAsyncContext --- .../__tests__/apiSetupHelpers.spec.ts | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts b/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts index cf698d7b877..5244a9a87b8 100644 --- a/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts +++ b/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts @@ -9,7 +9,9 @@ import { render, serializeInner, SetupContext, - Suspense + Suspense, + computed, + ComputedRef } from '@vue/runtime-test' import { defineEmits, @@ -253,5 +255,35 @@ describe('SFC `, { refSugar: true }) + if (shouldAsync) { + expect(content).toMatch(`let __temp, __restore`) + } expect(content).toMatch(`${shouldAsync ? `async ` : ``}setup(`) if (typeof expected === 'string') { expect(content).toMatch(expected) @@ -856,28 +859,35 @@ const emit = defineEmits(['a', 'b']) } test('expression statement', () => { - assertAwaitDetection(`await foo`, `await _withAsyncContext(foo)`) + assertAwaitDetection( + `await foo`, + `;(([__temp,__restore]=_withAsyncContext(()=>(foo))),__temp=await __temp,__restore())` + ) }) test('variable', () => { assertAwaitDetection( `const a = 1 + (await foo)`, - `1 + (await _withAsyncContext(foo))` + `1 + ((([__temp,__restore]=_withAsyncContext(()=>(foo))),__temp=await __temp,__restore(),__temp))` ) }) test('ref', () => { assertAwaitDetection( `ref: a = 1 + (await foo)`, - `1 + (await _withAsyncContext(foo))` + `1 + ((([__temp,__restore]=_withAsyncContext(()=>(foo))),__temp=await __temp,__restore(),__temp))` ) }) test('nested statements', () => { assertAwaitDetection(`if (ok) { await foo } else { await bar }`, code => { return ( - code.includes(`await _withAsyncContext(foo)`) && - code.includes(`await _withAsyncContext(bar)`) + code.includes( + `;(([__temp,__restore]=_withAsyncContext(()=>(foo))),__temp=await __temp,__restore())` + ) && + code.includes( + `;(([__temp,__restore]=_withAsyncContext(()=>(bar))),__temp=await __temp,__restore())` + ) ) }) }) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 94d351ab03c..e5a792d77c3 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -32,7 +32,8 @@ import { LabeledStatement, CallExpression, RestElement, - TSInterfaceBody + TSInterfaceBody, + AwaitExpression } from '@babel/types' import { walk } from 'estree-walker' import { RawSourceMap } from 'source-map' @@ -487,6 +488,25 @@ export function compileScript( }) } + /** + * await foo() + * --> + * (([__temp, __restore] = withAsyncContext(() => foo())),__temp=await __temp,__restore(),__temp) + */ + function processAwait(node: AwaitExpression, isStatement: boolean) { + s.overwrite( + node.start! + startOffset, + node.argument.start! + startOffset, + `${isStatement ? `;` : ``}(([__temp,__restore]=${helper( + `withAsyncContext` + )}(()=>(` + ) + s.appendLeft( + node.end! + startOffset, + `))),__temp=await __temp,__restore()${isStatement ? `` : `,__temp`})` + ) + } + function processRefExpression(exp: Expression, statement: LabeledStatement) { if (exp.type === 'AssignmentExpression') { const { left, right } = exp @@ -949,17 +969,13 @@ export function compileScript( node.type.endsWith('Statement') ) { ;(walk as any)(node, { - enter(node: Node) { - if (isFunction(node)) { + enter(child: Node, parent: Node) { + if (isFunction(child)) { this.skip() } - if (node.type === 'AwaitExpression') { + if (child.type === 'AwaitExpression') { hasAwait = true - s.prependRight( - node.argument.start! + startOffset, - helper(`withAsyncContext`) + `(` - ) - s.appendLeft(node.argument.end! + startOffset, `)`) + processAwait(child, parent.type === 'ExpressionStatement') } } }) @@ -1151,6 +1167,11 @@ export function compileScript( if (propsIdentifier) { s.prependRight(startOffset, `\nconst ${propsIdentifier} = __props`) } + // inject temp variables for async context preservation + if (hasAwait) { + const any = isTS ? `:any` : `` + s.prependRight(startOffset, `\nlet __temp${any}, __restore${any}\n`) + } const destructureElements = hasDefineExposeCall || !options.inlineTemplate ? [`expose`] : [] diff --git a/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts b/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts index 5244a9a87b8..3dc22e67ce5 100644 --- a/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts +++ b/packages/runtime-core/__tests__/apiSetupHelpers.spec.ts @@ -119,12 +119,20 @@ describe('SFC \n` + + `` + ) + // color should only be injected once, even if it is twice in style + expect(content).toMatch(`_useCssVars(_ctx => ({ + "${mockId}-color": (color) +})`) + assertCode(content) + }) }) }) diff --git a/packages/compiler-sfc/src/cssVars.ts b/packages/compiler-sfc/src/cssVars.ts index 021724fd190..884742f2978 100644 --- a/packages/compiler-sfc/src/cssVars.ts +++ b/packages/compiler-sfc/src/cssVars.ts @@ -37,7 +37,10 @@ export function parseCssVars(sfc: SFCDescriptor): string[] { sfc.styles.forEach(style => { let match while ((match = cssVarRE.exec(style.content))) { - vars.push(match[1] || match[2] || match[3]) + const variable = match[1] || match[2] || match[3] + if (!vars.includes(variable)) { + vars.push(variable) + } } }) return vars From 299f7c08c74abf21a4113a59732bf67b9f540cbe Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 15 Jul 2021 16:57:30 -0400 Subject: [PATCH 0168/3366] chore: fix snapshot from merge --- .../compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap index 44eb668d491..0c6a96a091a 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/cssVars.spec.ts.snap @@ -70,8 +70,8 @@ exports[`CSS vars injection codegen w/ - - - `, - { - inlineTemplate: true - } - ) - expect(content).toMatch(`return (_ctx, _cache`) - expect(content).not.toMatch(`_withId(`) - assertCode(content) - }) }) describe('with TypeScript', () => { diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 6016ae9f464..6d1b37e6682 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -148,15 +148,6 @@ export function compileScript( ) } - // TODO remove on 3.2 - if (sfc.template && sfc.template.attrs['inherit-attrs'] === 'false') { - warnOnce( - `Experimental support for