Skip to content

Commit 00734af

Browse files
authored
fix(compiler-sfc): add error handling for defineModel() without variable assignment (#13352)
close #13280
1 parent 89edc6c commit 00734af

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,7 +1007,7 @@ describe('SFC compile <script setup>', () => {
10071007
expect(() =>
10081008
compile(`<script setup>
10091009
let bar = 1
1010-
defineModel({
1010+
const model = defineModel({
10111011
default: () => bar
10121012
})
10131013
</script>`),
@@ -1017,7 +1017,7 @@ describe('SFC compile <script setup>', () => {
10171017
expect(() =>
10181018
compile(`<script setup>
10191019
const bar = 1
1020-
defineModel({
1020+
const model = defineModel({
10211021
default: () => bar
10221022
})
10231023
</script>`),
@@ -1027,7 +1027,7 @@ describe('SFC compile <script setup>', () => {
10271027
expect(() =>
10281028
compile(`<script setup>
10291029
let bar = 1
1030-
defineModel({
1030+
const model = defineModel({
10311031
get: () => bar,
10321032
set: () => bar
10331033
})

packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,4 +269,16 @@ describe('defineModel()', () => {
269269
modelValue: BindingTypes.SETUP_REF,
270270
})
271271
})
272+
273+
test('error when defineModel is not assigned to a variable', () => {
274+
expect(() =>
275+
compile(`
276+
<script setup>
277+
defineModel()
278+
</script>
279+
`),
280+
).toThrow(
281+
'defineModel() must be assigned to a variable. For example: const model = defineModel()',
282+
)
283+
})
272284
})

packages/compiler-sfc/src/script/defineModel.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ export function processDefineModel(
2222
return false
2323
}
2424

25+
if (!declId) {
26+
ctx.error(
27+
'defineModel() must be assigned to a variable. For example: const model = defineModel()',
28+
node,
29+
)
30+
}
31+
2532
ctx.hasDefineModelCall = true
2633

2734
const type =

0 commit comments

Comments
 (0)