diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9017db012ed..c6510d87153 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,17 @@
+## [3.3.2](https://github.com/vuejs/core/compare/v3.3.1...v3.3.2) (2023-05-12)
+
+
+### Bug Fixes
+
+* **compiler-core:** treat floating point numbers as constants ([8dc8cf8](https://github.com/vuejs/core/commit/8dc8cf852bf8057aa5c4b5670f09e8c28a168b73)), closes [#8295](https://github.com/vuejs/core/issues/8295)
+* **compiler-dom:** do not throw in production on side effect tags ([c454b9d](https://github.com/vuejs/core/commit/c454b9d7f431d57abedb7184d1e4059914c4463f)), closes [#8287](https://github.com/vuejs/core/issues/8287) [#8292](https://github.com/vuejs/core/issues/8292)
+* **compiler-sfc:** fix regression on props destructure when transform is not enabled ([f25bd37](https://github.com/vuejs/core/commit/f25bd37c6707fde19d164d90a38de41168941f4b)), closes [#8289](https://github.com/vuejs/core/issues/8289)
+* **compiler-sfc:** handle prop keys that need escaping ([#7803](https://github.com/vuejs/core/issues/7803)) ([690ef29](https://github.com/vuejs/core/commit/690ef296357c7fc09f66ba9408df548e117f686f)), closes [#8291](https://github.com/vuejs/core/issues/8291)
+* **compiler-sfc:** properly parse d.ts files when resolving types ([aa1e77d](https://github.com/vuejs/core/commit/aa1e77d532b951ea5d3a5e26214a8b0c9c02fb6f)), closes [#8285](https://github.com/vuejs/core/issues/8285)
+* **compiler-sfc:** raise specific warning for failed extends and allow ignoring extends ([8235072](https://github.com/vuejs/core/commit/82350721a408e1f552c613c05971439d6c218d87)), closes [#8286](https://github.com/vuejs/core/issues/8286)
+
+
+
## [3.3.1](https://github.com/vuejs/core/compare/v3.3.0...v3.3.1) (2023-05-11)
@@ -7,7 +21,7 @@
-# [3.3.0](https://github.com/vuejs/core/compare/v3.3.0-beta.5...v3.3.0) (2023-05-11)
+# [3.3.0 Rurouni Kenshin](https://github.com/vuejs/core/compare/v3.3.0-beta.5...v3.3.0) (2023-05-11)
- For a detailed walkthrough of the new features in 3.3, please read the [release blog post](https://blog.vuejs.org/posts/vue-3-3).
@@ -355,3011 +369,16 @@
* **build:** ensure BaseTransition functions can be tree-shaken ([3a6f5eb](https://github.com/vuejs/core/commit/3a6f5eb0f7d60dc87d17a69c66e88ae5688b11a5))
+## Previous Changelogs
+### 3.2.x (2021-07-16 - 2023-02-02)
-## [3.2.47](https://github.com/vuejs/core/compare/v3.2.46...v3.2.47) (2023-02-02)
-
-
-### Bug Fixes
-
-* **build:** enforce __esModule interop for cjs builds ([4b70366](https://github.com/vuejs/core/commit/4b7036653e5dfd7be95e6efe8c79621b52dcccb7))
-
-
-
-## [3.2.46](https://github.com/vuejs/core/compare/v3.2.45...v3.2.46) (2023-02-02)
-
-
-### Bug Fixes
-
-* **build:** ensure cjs re-exports can be properly detected when imported from esm ([fb6ff3e](https://github.com/vuejs/core/commit/fb6ff3e99689022d963ea7257b03f73ff514c0c4))
-* **build:** ensure type exports is first ([957722c](https://github.com/vuejs/core/commit/957722c4185ea87aabc711f6f8997e528dd3ba1b))
-* **build:** fix cjs re-exports check for compat build ([ce064a1](https://github.com/vuejs/core/commit/ce064a172b3b5bcb096b4984fe0c1a54177ac9c0))
-* **compat:** fix custom transition classes in compat mode ([#7435](https://github.com/vuejs/core/issues/7435)) ([efe2efd](https://github.com/vuejs/core/commit/efe2efd210f500311e5b603345cb0d353886bd7a)), closes [#6253](https://github.com/vuejs/core/issues/6253)
-* **compiler-core:** typeof should be allowed in browser expression validation ([#7037](https://github.com/vuejs/core/issues/7037)) ([3783866](https://github.com/vuejs/core/commit/378386694be6dd43da71f1fa08ee9c5705c13f86))
-* **compiler-sfc:** allow declaring variables after defineProps ([#7461](https://github.com/vuejs/core/issues/7461)) ([686c829](https://github.com/vuejs/core/commit/686c829fec9137cdfe6e51af34f2af01a575f7c6))
-* **compiler-sfc:** always generate runtime prop type for Function ([#7112](https://github.com/vuejs/core/issues/7112)) ([584eae6](https://github.com/vuejs/core/commit/584eae60d1abe80d15b317ec80b7556712df8e5a)), closes [#7111](https://github.com/vuejs/core/issues/7111)
-* **compiler-sfc:** support resolving type declaration from normal script ([#5831](https://github.com/vuejs/core/issues/5831)) ([30399d4](https://github.com/vuejs/core/commit/30399d46b15f890056e7a5d076cd588b3806cc15)), closes [#5830](https://github.com/vuejs/core/issues/5830)
-* **compiler:** add `hgroup` to supported `HTML_TAGS` ([#6321](https://github.com/vuejs/core/issues/6321)) ([7443174](https://github.com/vuejs/core/commit/7443174e2aa9244bc08c63b4d6c78acc6ff89767)), closes [#6313](https://github.com/vuejs/core/issues/6313)
-* **custom-elements:** use strict number casting ([7d0c63f](https://github.com/vuejs/core/commit/7d0c63ff4361e59e820441a24bf4fb2a93335a1e)), closes [#4946](https://github.com/vuejs/core/issues/4946) [#2598](https://github.com/vuejs/core/issues/2598) [#2604](https://github.com/vuejs/core/issues/2604)
-* **customElement:** customElement can emit event ([#7296](https://github.com/vuejs/core/issues/7296)) ([c6e5bda](https://github.com/vuejs/core/commit/c6e5bda27d13554675d68dbe33b07f3474467aa6))
-* **reactivity-transform:** fix $$ escape edge cases ([e06d3b6](https://github.com/vuejs/core/commit/e06d3b614ea518e9cdf83fca9200fc816eb4e5a1)), closes [#6312](https://github.com/vuejs/core/issues/6312) [#6944](https://github.com/vuejs/core/issues/6944)
-* **reactivity-transform:** prohibit const assignment at compile time ([#6993](https://github.com/vuejs/core/issues/6993)) ([3427052](https://github.com/vuejs/core/commit/3427052229db3448252d938292a40e960a0f4b9c)), closes [#6992](https://github.com/vuejs/core/issues/6992)
-* **reactivity:** `triggerRef` working with `toRef` from reactive ([#7507](https://github.com/vuejs/core/issues/7507)) ([e64c9ae](https://github.com/vuejs/core/commit/e64c9ae957aa2606b55e8652bbde30a6ada59fb0))
-* **reactivity:** ensure watch(Effect) can run independent of unmounted instance if created in a detatched effectScope (fix [#7319](https://github.com/vuejs/core/issues/7319)) ([#7330](https://github.com/vuejs/core/issues/7330)) ([cd7c887](https://github.com/vuejs/core/commit/cd7c887b755810aedf83f3d458cb956d5b147f6f))
-* **reactivity:** track hasOwnProperty ([588bd44](https://github.com/vuejs/core/commit/588bd44f036b79d7dee5d23661aa7244f70e6beb)), closes [#2619](https://github.com/vuejs/core/issues/2619) [#2621](https://github.com/vuejs/core/issues/2621)
-* **runtime-core:** ensure prop type validation warning shows custom class names ([#7198](https://github.com/vuejs/core/issues/7198)) ([620327d](https://github.com/vuejs/core/commit/620327d527593c6263a21500baddbae1ebc30db8))
-* **runtime-core:** fix keep-alive cache prune logic on vnodes with same type but different keys ([#7510](https://github.com/vuejs/core/issues/7510)) ([1fde49c](https://github.com/vuejs/core/commit/1fde49c0f57cc50fedf91366a274c9759d1d9a39)), closes [#7355](https://github.com/vuejs/core/issues/7355)
-* **runtime-core:** set scope id before props ([#6948](https://github.com/vuejs/core/issues/6948)) ([da2ced1](https://github.com/vuejs/core/commit/da2ced15339b6fdb7a1459fa359bb79346a82bc2)), closes [#6923](https://github.com/vuejs/core/issues/6923)
-* **runtime-dom:** style update error when component use shorthand properties ([#7425](https://github.com/vuejs/core/issues/7425)) ([b7cfa6f](https://github.com/vuejs/core/commit/b7cfa6f53952daced312862fbb3a88c86e42a77e))
-* **shared:** `feDistanceLight` changed to `feDistantLight` ([#7540](https://github.com/vuejs/core/issues/7540)) ([bef85e7](https://github.com/vuejs/core/commit/bef85e7975084b05af00b60ecd171c83f251c6d5))
-* **shared:** toNumber should only coerce strings ([b55846f](https://github.com/vuejs/core/commit/b55846f05c4a3b163be2ed70ce64014feec29fac))
-* **types/effectScope:** re-expose `active` as readonly property ([#6187](https://github.com/vuejs/core/issues/6187)) ([59ffe5e](https://github.com/vuejs/core/commit/59ffe5ee1f1618be119875313970c72050b37b03)), closes [#6186](https://github.com/vuejs/core/issues/6186)
-* **types:** accept sync `serverPrefetch()` ([#7000](https://github.com/vuejs/core/issues/7000)) ([5f1883e](https://github.com/vuejs/core/commit/5f1883ec53547d0847e1270f5a8fb0c46396fb07))
-* **types:** add or update referrerpolicy ([#7199](https://github.com/vuejs/core/issues/7199)) ([1fa3d95](https://github.com/vuejs/core/commit/1fa3d9573051f549e6d381a5e88ec8d5d855e4c9))
-* **types:** allow assigning wider SetupContext type ([#2818](https://github.com/vuejs/core/issues/2818)) ([eb2a832](https://github.com/vuejs/core/commit/eb2a83283caa9de0a45881d860a3cbd9d0bdd279)), closes [#2362](https://github.com/vuejs/core/issues/2362)
-* **types:** optional boolean props should have boolean type in return type of defineProps ([#7619](https://github.com/vuejs/core/issues/7619)) ([a0a010d](https://github.com/vuejs/core/commit/a0a010ddc9ba8ef3e883454c73997bf6fb40b385)), closes [#7116](https://github.com/vuejs/core/issues/7116) [#5847](https://github.com/vuejs/core/issues/5847) [#7487](https://github.com/vuejs/core/issues/7487)
-* **v-model:** ensure v-model listener casing is consistent with manual v-on listener ([#7067](https://github.com/vuejs/core/issues/7067)) ([87c72ae](https://github.com/vuejs/core/commit/87c72ae49a315a5464dd0c6b00f07163d1cb39e9)), closes [#7066](https://github.com/vuejs/core/issues/7066)
-
-
-
-## [3.2.45](https://github.com/vuejs/core/compare/v3.2.44...v3.2.45) (2022-11-11)
-
-
-### Bug Fixes
-
-* **compiler/v-model:** catch incorrect v-model usage on prop bindings ([001184e](https://github.com/vuejs/core/commit/001184e6bbbc85c4698f460b1f810beca3aed262)), closes [#5584](https://github.com/vuejs/core/issues/5584)
-* **custom-elements:** also dispatch hyphenated version of emitted events ([#5378](https://github.com/vuejs/core/issues/5378)) ([0b39e46](https://github.com/vuejs/core/commit/0b39e46192c6258d5bf9d3b6992b84edb0b641d3)), closes [#5373](https://github.com/vuejs/core/issues/5373)
-* **custom-elements:** custom element should re-instantiate when inserted again ([#6966](https://github.com/vuejs/core/issues/6966)) ([67890da](https://github.com/vuejs/core/commit/67890daad1a8474c5178565f32a4efa427db911a)), closes [#6934](https://github.com/vuejs/core/issues/6934)
-* **custom-elements:** define declared properties in constructor ([#5328](https://github.com/vuejs/core/issues/5328)) ([55382ae](https://github.com/vuejs/core/commit/55382aed58aa3d937f442ad9445b3fff83a07de1))
-* **custom-elements:** ensure custom elements can inherit provides from ancestors ([#5098](https://github.com/vuejs/core/issues/5098)) ([192dcb6](https://github.com/vuejs/core/commit/192dcb648c0630ac20d2009eed512e142a72654a)), closes [#5096](https://github.com/vuejs/core/issues/5096)
-* **custom-elements:** fix event emitting for async custom elements ([#5601](https://github.com/vuejs/core/issues/5601)) ([665f2ae](https://github.com/vuejs/core/commit/665f2ae121ec31d65cf22bd577f12fb1d9ffa4a2)), closes [#5599](https://github.com/vuejs/core/issues/5599)
-* **custom-elements:** fix number type props casting check ([89f37ce](https://github.com/vuejs/core/commit/89f37ceb62363c77697d177675790a9ab81ba34f)), closes [#5793](https://github.com/vuejs/core/issues/5793) [#5794](https://github.com/vuejs/core/issues/5794)
-* **custom-elements:** properties set pre-upgrade should not show up in $attrs ([afe8899](https://github.com/vuejs/core/commit/afe889999cbcaa11020c46c30b591a5ee6c3d4cf))
-* **custom-elements:** respect slot props in custom element mode ([ffef822](https://github.com/vuejs/core/commit/ffef8228694b39638f07c0fe5bc30d826262b672))
-* **custom-elements:** should not reflect non-decalred properties set before upgrade ([5e50909](https://github.com/vuejs/core/commit/5e509091000779acbfae4c85cc1cc3973b1b2e64))
-* **hmr/keep-alive:** fix error in reload component ([#7049](https://github.com/vuejs/core/issues/7049)) ([a54bff2](https://github.com/vuejs/core/commit/a54bff2c9c8e1d908b4a0f3826ac715c9a35e68c)), closes [#7042](https://github.com/vuejs/core/issues/7042)
-* **runtime-core:** fix move/removal of static fragments containing text nodes ([#6858](https://github.com/vuejs/core/issues/6858)) ([4049ffc](https://github.com/vuejs/core/commit/4049ffcf29dc12dca71f682edf0b422a5c502e23)), closes [#6852](https://github.com/vuejs/core/issues/6852)
-* **sfc:** also generate getter for import bindings during dev ([0594400](https://github.com/vuejs/core/commit/0594400980d3bdc394e92db63fc939a6609f7a94))
-* **sfc:** ensure ``
+ )
+ expect(content).toMatch(`const { foo } = __props`)
+ assertCode(content)
+ })
+
describe('errors', () => {
test('w/ both type and non-type args', () => {
expect(() => {
diff --git a/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts b/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts
index b8912092afd..a2941872fd2 100644
--- a/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts
+++ b/packages/compiler-sfc/__tests__/compileScript/definePropsDestructure.spec.ts
@@ -106,6 +106,28 @@ describe('sfc reactive props destructure', () => {
})`)
assertCode(content)
})
+ test('default values w/ runtime declaration & key is string', () => {
+ const { content, bindings } = compile(`
+
+ `)
+ expect(bindings).toStrictEqual({
+ __propsAliases: {
+ fooBar: 'foo:bar'
+ },
+ foo: BindingTypes.PROPS,
+ 'foo:bar': BindingTypes.PROPS,
+ fooBar: BindingTypes.PROPS_ALIASED
+ })
+
+ expect(content).toMatch(`
+ props: _mergeDefaults(['foo', 'foo:bar'], {
+ foo: 1,
+ "foo:bar": 'foo-bar'
+}),`)
+ assertCode(content)
+ })
test('default values w/ type declaration', () => {
const { content } = compile(`
@@ -123,6 +145,37 @@ describe('sfc reactive props destructure', () => {
assertCode(content)
})
+ test('default values w/ type declaration & key is string', () => {
+ const { content, bindings } = compile(`
+
+ `)
+ expect(bindings).toStrictEqual({
+ __propsAliases: {
+ fooBar: 'foo:bar'
+ },
+ foo: BindingTypes.PROPS,
+ bar: BindingTypes.PROPS,
+ 'foo:bar': BindingTypes.PROPS,
+ fooBar: BindingTypes.PROPS_ALIASED,
+ 'onUpdate:modelValue': BindingTypes.PROPS
+ })
+ expect(content).toMatch(`
+ props: {
+ foo: { type: Number, required: true, default: 1 },
+ bar: { type: Number, required: true, default: 2 },
+ "foo:bar": { type: String, required: true, default: 'foo-bar' },
+ "onUpdate:modelValue": { type: Function, required: true }
+ },`)
+ assertCode(content)
+ })
+
test('default values w/ type declaration, prod mode', () => {
const { content } = compile(
`
diff --git a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts
index 4b36880bf1b..dd47ae269c6 100644
--- a/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts
+++ b/packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts
@@ -458,7 +458,10 @@ describe('resolveType', () => {
test('relative ts', () => {
const files = {
'/foo.ts': 'export type P = { foo: number }',
- '/bar.d.ts': 'type X = { bar: string }; export { X as Y }'
+ '/bar.d.ts':
+ 'type X = { bar: string }; export { X as Y };' +
+ // verify that we can parse syntax that is only valid in d.ts
+ 'export const baz: boolean'
}
const { props, deps } = resolve(
`
@@ -752,6 +755,35 @@ describe('resolveType', () => {
`)
).not.toThrow()
})
+
+ test('error against failed extends', () => {
+ expect(() =>
+ resolve(`
+ import type Base from 'unknown'
+ interface Props extends Base {}
+ defineProps()
+ `)
+ ).toThrow(`@vue-ignore`)
+ })
+
+ test('allow ignoring failed extends', () => {
+ let res: any
+
+ expect(
+ () =>
+ (res = resolve(`
+ import type Base from 'unknown'
+ interface Props extends /*@vue-ignore*/ Base {
+ foo: string
+ }
+ defineProps()
+ `))
+ ).not.toThrow(`@vue-ignore`)
+
+ expect(res.props).toStrictEqual({
+ foo: ['String']
+ })
+ })
})
})
diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json
index c0691d3c997..a4abee48890 100644
--- a/packages/compiler-sfc/package.json
+++ b/packages/compiler-sfc/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/compiler-sfc",
- "version": "3.3.1",
+ "version": "3.3.2",
"description": "@vue/compiler-sfc",
"main": "dist/compiler-sfc.cjs.js",
"module": "dist/compiler-sfc.esm-browser.js",
@@ -33,11 +33,11 @@
"homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-sfc#readme",
"dependencies": {
"@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.1",
- "@vue/compiler-dom": "3.3.1",
- "@vue/compiler-ssr": "3.3.1",
- "@vue/reactivity-transform": "3.3.1",
- "@vue/shared": "3.3.1",
+ "@vue/compiler-core": "3.3.2",
+ "@vue/compiler-dom": "3.3.2",
+ "@vue/compiler-ssr": "3.3.2",
+ "@vue/reactivity-transform": "3.3.2",
+ "@vue/shared": "3.3.2",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.0",
"postcss": "^8.1.10",
diff --git a/packages/compiler-sfc/src/script/context.ts b/packages/compiler-sfc/src/script/context.ts
index d2c5dabd194..9a3d2eccd3c 100644
--- a/packages/compiler-sfc/src/script/context.ts
+++ b/packages/compiler-sfc/src/script/context.ts
@@ -145,7 +145,8 @@ export class ScriptCompileContext {
export function resolveParserPlugins(
lang: string,
- userPlugins?: ParserPlugin[]
+ userPlugins?: ParserPlugin[],
+ dts = false
) {
const plugins: ParserPlugin[] = []
if (lang === 'jsx' || lang === 'tsx') {
@@ -156,7 +157,7 @@ export function resolveParserPlugins(
userPlugins = userPlugins.filter(p => p !== 'jsx')
}
if (lang === 'ts' || lang === 'tsx') {
- plugins.push('typescript')
+ plugins.push(['typescript', { dts }])
if (!plugins.includes('decorators')) {
plugins.push('decorators-legacy')
}
diff --git a/packages/compiler-sfc/src/script/defineProps.ts b/packages/compiler-sfc/src/script/defineProps.ts
index dde415c21a1..be99c6122ec 100644
--- a/packages/compiler-sfc/src/script/defineProps.ts
+++ b/packages/compiler-sfc/src/script/defineProps.ts
@@ -16,7 +16,8 @@ import {
isLiteralNode,
isCallOf,
unwrapTSNode,
- toRuntimeTypeString
+ toRuntimeTypeString,
+ getEscapedKey
} from './utils'
import { genModelProps } from './defineModel'
import { getObjectOrArrayExpressionKeys } from './analyzeScriptBindings'
@@ -133,10 +134,11 @@ export function genRuntimeProps(ctx: ScriptCompileContext): string | undefined {
const defaults: string[] = []
for (const key in ctx.propsDestructuredBindings) {
const d = genDestructuredDefaultValue(ctx, key)
+ const finalKey = getEscapedKey(key)
if (d)
defaults.push(
- `${key}: ${d.valueString}${
- d.needSkipFactory ? `, __skip_${key}: true` : ``
+ `${finalKey}: ${d.valueString}${
+ d.needSkipFactory ? `, __skip_${finalKey}: true` : ``
}`
)
}
@@ -248,8 +250,9 @@ function genRuntimePropFromType(
}
}
+ const finalKey = getEscapedKey(key)
if (!ctx.options.isProd) {
- return `${key}: { ${concatStrings([
+ return `${finalKey}: { ${concatStrings([
`type: ${toRuntimeTypeString(type)}`,
`required: ${required}`,
skipCheck && 'skipCheck: true',
@@ -265,13 +268,13 @@ function genRuntimePropFromType(
// #4783 for boolean, should keep the type
// #7111 for function, if default value exists or it's not static, should keep it
// in production
- return `${key}: { ${concatStrings([
+ return `${finalKey}: { ${concatStrings([
`type: ${toRuntimeTypeString(type)}`,
defaultString
])} }`
} else {
// production: checks are useless
- return `${key}: ${defaultString ? `{ ${defaultString} }` : `{}`}`
+ return `${finalKey}: ${defaultString ? `{ ${defaultString} }` : `{}`}`
}
}
@@ -325,7 +328,7 @@ function genDestructuredDefaultValue(
// If the default value is a function or is an identifier referencing
// external value, skip factory wrap. This is needed when using
// destructure w/ runtime declaration since we cannot safely infer
- // whether tje expected runtime prop type is `Function`.
+ // whether the expected runtime prop type is `Function`.
const needSkipFactory =
!inferredType &&
(isFunctionType(unwrapped) || unwrapped.type === 'Identifier')
diff --git a/packages/compiler-sfc/src/script/definePropsDestructure.ts b/packages/compiler-sfc/src/script/definePropsDestructure.ts
index 87a58d9fabf..1584913855a 100644
--- a/packages/compiler-sfc/src/script/definePropsDestructure.ts
+++ b/packages/compiler-sfc/src/script/definePropsDestructure.ts
@@ -28,6 +28,7 @@ export function processPropsDestructure(
declId: ObjectPattern
) {
if (!ctx.options.propsDestructure && !ctx.options.reactivityTransform) {
+ ctx.propsIdentifier = ctx.getString(declId)
return
}
diff --git a/packages/compiler-sfc/src/script/resolveType.ts b/packages/compiler-sfc/src/script/resolveType.ts
index 550b6c23767..e79d21f8419 100644
--- a/packages/compiler-sfc/src/script/resolveType.ts
+++ b/packages/compiler-sfc/src/script/resolveType.ts
@@ -322,11 +322,29 @@ function resolveInterfaceMembers(
const base = typeElementsToMap(ctx, node.body.body, node._ownerScope)
if (node.extends) {
for (const ext of node.extends) {
- const { props } = resolveTypeElements(ctx, ext, scope)
- for (const key in props) {
- if (!hasOwn(base.props, key)) {
- base.props[key] = props[key]
+ if (
+ ext.leadingComments &&
+ ext.leadingComments.some(c => c.value.includes('@vue-ignore'))
+ ) {
+ continue
+ }
+ try {
+ const { props } = resolveTypeElements(ctx, ext, scope)
+ for (const key in props) {
+ if (!hasOwn(base.props, key)) {
+ base.props[key] = props[key]
+ }
}
+ } catch (e) {
+ ctx.error(
+ `Failed to resolve extends base type.\nIf this previously worked in 3.2, ` +
+ `you can instruct the compiler to ignore this extend by adding ` +
+ `/* @vue-ignore */ before it, for example:\n\n` +
+ `interface Props extends /* @vue-ignore */ Base {}\n\n` +
+ `Note: both in 3.2 or with the ignore, the properties in the base ` +
+ `type are treated as fallthrough attrs at runtime.`,
+ ext
+ )
}
}
}
@@ -933,7 +951,11 @@ function parseFile(
const ext = extname(filename)
if (ext === '.ts' || ext === '.tsx') {
return babelParse(content, {
- plugins: resolveParserPlugins(ext.slice(1), parserPlugins),
+ plugins: resolveParserPlugins(
+ ext.slice(1),
+ parserPlugins,
+ filename.endsWith('.d.ts')
+ ),
sourceType: 'module'
}).program.body
} else if (ext === '.vue') {
diff --git a/packages/compiler-sfc/src/script/utils.ts b/packages/compiler-sfc/src/script/utils.ts
index 53362fcdca8..42c4718e3a8 100644
--- a/packages/compiler-sfc/src/script/utils.ts
+++ b/packages/compiler-sfc/src/script/utils.ts
@@ -108,3 +108,13 @@ export function normalizePath(p: string) {
}
export const joinPaths = (path.posix || path).join
+
+/**
+ * key may contain symbols
+ * e.g. onUpdate:modelValue -> "onUpdate:modelValue"
+ */
+export const escapeSymbolsRE = /[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g
+
+export function getEscapedKey(key: string) {
+ return escapeSymbolsRE.test(key) ? JSON.stringify(key) : key
+}
diff --git a/packages/compiler-sfc/src/style/cssVars.ts b/packages/compiler-sfc/src/style/cssVars.ts
index f232d09695d..c86dbf2a5b9 100644
--- a/packages/compiler-sfc/src/style/cssVars.ts
+++ b/packages/compiler-sfc/src/style/cssVars.ts
@@ -8,6 +8,7 @@ import {
BindingMetadata
} from '@vue/compiler-dom'
import { SFCDescriptor } from '../parse'
+import { escapeSymbolsRE } from '../script/utils'
import { PluginCreator } from 'postcss'
import hash from 'hash-sum'
@@ -31,10 +32,7 @@ function genVarName(id: string, raw: string, isProd: boolean): string {
return hash(id + raw)
} else {
// escape ASCII Punctuation & Symbols
- return `${id}-${raw.replace(
- /[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g,
- s => `\\${s}`
- )}`
+ return `${id}-${raw.replace(escapeSymbolsRE, s => `\\${s}`)}`
}
}
diff --git a/packages/compiler-ssr/package.json b/packages/compiler-ssr/package.json
index 51cfcaa2b1d..bde31b442f6 100644
--- a/packages/compiler-ssr/package.json
+++ b/packages/compiler-ssr/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/compiler-ssr",
- "version": "3.3.1",
+ "version": "3.3.2",
"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/core/tree/main/packages/compiler-ssr#readme",
"dependencies": {
- "@vue/shared": "3.3.1",
- "@vue/compiler-dom": "3.3.1"
+ "@vue/shared": "3.3.2",
+ "@vue/compiler-dom": "3.3.2"
}
}
diff --git a/packages/dts-test/package.json b/packages/dts-test/package.json
index ef37fe4ddb8..9932440ae2a 100644
--- a/packages/dts-test/package.json
+++ b/packages/dts-test/package.json
@@ -4,5 +4,5 @@
"dependencies": {
"vue": "workspace:*"
},
- "version": "3.3.1"
+ "version": "3.3.2"
}
diff --git a/packages/reactivity-transform/package.json b/packages/reactivity-transform/package.json
index d23213979d2..c340609dca2 100644
--- a/packages/reactivity-transform/package.json
+++ b/packages/reactivity-transform/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/reactivity-transform",
- "version": "3.3.1",
+ "version": "3.3.2",
"description": "@vue/reactivity-transform",
"main": "dist/reactivity-transform.cjs.js",
"files": [
@@ -29,8 +29,8 @@
"homepage": "https://github.com/vuejs/core/tree/dev/packages/reactivity-transform#readme",
"dependencies": {
"@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.1",
- "@vue/shared": "3.3.1",
+ "@vue/compiler-core": "3.3.2",
+ "@vue/shared": "3.3.2",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.0"
},
diff --git a/packages/reactivity/package.json b/packages/reactivity/package.json
index 64af38a8440..dd3ff99035f 100644
--- a/packages/reactivity/package.json
+++ b/packages/reactivity/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/reactivity",
- "version": "3.3.1",
+ "version": "3.3.2",
"description": "@vue/reactivity",
"main": "index.js",
"module": "dist/reactivity.esm-bundler.js",
@@ -36,6 +36,6 @@
},
"homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme",
"dependencies": {
- "@vue/shared": "3.3.1"
+ "@vue/shared": "3.3.2"
}
}
diff --git a/packages/runtime-core/package.json b/packages/runtime-core/package.json
index aca82a8da5d..44264c57189 100644
--- a/packages/runtime-core/package.json
+++ b/packages/runtime-core/package.json
@@ -1,6 +1,6 @@
{
"name": "@vue/runtime-core",
- "version": "3.3.1",
+ "version": "3.3.2",
"description": "@vue/runtime-core",
"main": "index.js",
"module": "dist/runtime-core.esm-bundler.js",
@@ -32,7 +32,7 @@
},
"homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme",
"dependencies": {
- "@vue/shared": "3.3.1",
- "@vue/reactivity": "3.3.1"
+ "@vue/shared": "3.3.2",
+ "@vue/reactivity": "3.3.2"
}
}
diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts
index 554115240b3..3ad330a1c27 100644
--- a/packages/runtime-core/src/apiSetupHelpers.ts
+++ b/packages/runtime-core/src/apiSetupHelpers.ts
@@ -176,7 +176,7 @@ export function defineExpose<
/**
* Vue `