From df81da8be97c8a1366563c7e3e01076ef02eb8f7 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: Fri, 20 Oct 2023 17:36:36 +0800 Subject: [PATCH] fix(compiler-sfc): model name conflict (#8798) --- .../__snapshots__/defineModel.spec.ts.snap | 6 ++++-- .../__tests__/compileScript/defineModel.spec.ts | 11 ++++++++--- packages/compiler-sfc/src/script/context.ts | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineModel.spec.ts.snap b/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineModel.spec.ts.snap index fdfd3710efc..297ee62724c 100644 --- a/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineModel.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/compileScript/__snapshots__/defineModel.spec.ts.snap @@ -7,15 +7,17 @@ export default { props: { \\"modelValue\\": { required: true }, \\"count\\": {}, + \\"toString\\": { type: Function }, }, - emits: [\\"update:modelValue\\", \\"update:count\\"], + emits: [\\"update:modelValue\\", \\"update:count\\", \\"update:toString\\"], setup(__props, { expose: __expose }) { __expose(); const modelValue = _useModel(__props, \\"modelValue\\") const c = _useModel(__props, \\"count\\") + const toString = _useModel(__props, \\"toString\\") -return { modelValue, c } +return { modelValue, c, toString } } }" diff --git a/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts b/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts index 61a9adcbe0d..10fab947c13 100644 --- a/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts @@ -8,6 +8,7 @@ describe('defineModel()', () => { `, { defineModel: true } @@ -16,18 +17,22 @@ describe('defineModel()', () => { expect(content).toMatch('props: {') expect(content).toMatch('"modelValue": { required: true },') expect(content).toMatch('"count": {},') - expect(content).toMatch('emits: ["update:modelValue", "update:count"],') + expect(content).toMatch('"toString": { type: Function },') + expect(content).toMatch( + 'emits: ["update:modelValue", "update:count", "update:toString"],' + ) expect(content).toMatch( `const modelValue = _useModel(__props, "modelValue")` ) expect(content).toMatch(`const c = _useModel(__props, "count")`) - expect(content).toMatch(`return { modelValue, c }`) + expect(content).toMatch(`return { modelValue, c, toString }`) expect(content).not.toMatch('defineModel') expect(bindings).toStrictEqual({ modelValue: BindingTypes.SETUP_REF, count: BindingTypes.PROPS, - c: BindingTypes.SETUP_REF + c: BindingTypes.SETUP_REF, + toString: BindingTypes.SETUP_REF }) }) diff --git a/packages/compiler-sfc/src/script/context.ts b/packages/compiler-sfc/src/script/context.ts index 5fe09d28a42..692eab3ab9e 100644 --- a/packages/compiler-sfc/src/script/context.ts +++ b/packages/compiler-sfc/src/script/context.ts @@ -53,7 +53,7 @@ export class ScriptCompileContext { emitDecl: Node | undefined // defineModel - modelDecls: Record = {} + modelDecls: Record = Object.create(null) // defineOptions optionsRuntimeDecl: Node | undefined