From 8a882ce0a10bfa5482d6b8a9b68fd49cff4f6937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Wed, 9 Nov 2022 11:12:54 +0800 Subject: [PATCH] fix(compiler-sfc): handle method shorthand syntax in withDefaults (#6972) fix #6971 --- .../__snapshots__/compileScript.spec.ts.snap | 6 ++++-- .../compiler-sfc/__tests__/compileScript.spec.ts | 16 ++++++++++++++-- packages/compiler-sfc/src/compileScript.ts | 4 +++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap index 55659cb93d3..d553fb04b3b 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap @@ -1744,12 +1744,14 @@ export default /*#__PURE__*/_defineComponent({ bar: { type: Number, required: false }, baz: { type: Boolean, required: true }, qux: { type: Function, required: false, default() { return 1 } }, - quux: { type: Function, required: false, default() { } } + quux: { type: Function, required: false, default() { } }, + quuxx: { type: Promise, required: false, async default() { return await Promise.resolve('hi') } }, + fred: { type: String, required: false, get default() { return 'fred' } } }, setup(__props: any, { expose }) { expose(); -const props = __props as { foo: string, bar?: number, baz: boolean, qux(): number, quux(): void }; +const props = __props as { foo: string, bar?: number, baz: boolean, qux(): number, quux(): void, quuxx: Promise, fred: string }; diff --git a/packages/compiler-sfc/__tests__/compileScript.spec.ts b/packages/compiler-sfc/__tests__/compileScript.spec.ts index c3ba6067648..bf562defd24 100644 --- a/packages/compiler-sfc/__tests__/compileScript.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript.spec.ts @@ -1041,10 +1041,14 @@ const emit = defineEmits(['a', 'b']) baz: boolean; qux?(): number; quux?(): void + quuxx?: Promise; + fred?: string }>(), { foo: 'hi', qux() { return 1 }, - ['quux']() { } + ['quux']() { }, + async quuxx() { return await Promise.resolve('hi') }, + get fred() { return 'fred' } }) `) @@ -1061,7 +1065,13 @@ const emit = defineEmits(['a', 'b']) `quux: { type: Function, required: false, default() { } }` ) expect(content).toMatch( - `{ foo: string, bar?: number, baz: boolean, qux(): number, quux(): void }` + `quuxx: { type: Promise, required: false, async default() { return await Promise.resolve('hi') } }` + ) + expect(content).toMatch( + `fred: { type: String, required: false, get default() { return 'fred' } }` + ) + expect(content).toMatch( + `{ foo: string, bar?: number, baz: boolean, qux(): number, quux(): void, quuxx: Promise, fred: string }` ) expect(content).toMatch(`const props = __props`) expect(bindings).toStrictEqual({ @@ -1070,6 +1080,8 @@ const emit = defineEmits(['a', 'b']) baz: BindingTypes.PROPS, qux: BindingTypes.PROPS, quux: BindingTypes.PROPS, + quuxx: BindingTypes.PROPS, + fred: BindingTypes.PROPS, props: BindingTypes.SETUP_CONST }) }) diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index d55cb795c77..e944b764725 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -805,7 +805,9 @@ export function compileScript( prop.value.end! )}` } else { - defaultString = `default() ${scriptSetupSource.slice( + defaultString = `${prop.async ? 'async ' : ''}${ + prop.kind !== 'method' ? `${prop.kind} ` : '' + }default() ${scriptSetupSource.slice( prop.body.start!, prop.body.end! )}`