Skip to content

Commit 82d6bcb

Browse files
committed
fix: throw an error if v-model is used with a string
1 parent 232fdd2 commit 82d6bcb

File tree

1 file changed

+15
-12
lines changed
  • packages/babel-sugar-v-model/src

1 file changed

+15
-12
lines changed

Diff for: packages/babel-sugar-v-model/src/index.js

+15-12
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ export default function(babel) {
2424
Program(path) {
2525
path.traverse({
2626
JSXAttribute(path) {
27-
const { isVModel, modifiers, valuePath } = parseVModel(t, path)
27+
const parsed = parseVModel(t, path)
28+
if (!parsed) {
29+
return
30+
}
31+
32+
const { isVModel, modifiers, valuePath } = parsed
2833

2934
if (isVModel) {
3035
const parent = path.parentPath
@@ -46,23 +51,21 @@ export default function(babel) {
4651
* @returns Object<{ isVModel: boolean, modifiers: Set<string>, valuePath: Path<Expression>}>
4752
*/
4853
const parseVModel = (t, path) => {
49-
let isVModel = false
54+
if (
55+
(t.isJSXNamespacedName(path.get('name')) && !equalCamel(path.get('name.namespace.name').node, 'v-model')) ||
56+
!equalCamel(path.get('name.name').node, 'v-model')
57+
) {
58+
return null
59+
}
5060
let modifiers = null
5161
if (!t.isJSXExpressionContainer(path.get('value'))) {
52-
return { isVModel: false }
53-
} else if (t.isJSXIdentifier(path.get('name')) && equalCamel(path.get('name.name').node, 'v-model')) {
54-
isVModel = true
62+
throw new Error('You have to use JSX Expression inside your v-model')
63+
} else if (t.isJSXIdentifier(path.get('name'))) {
5564
modifiers = new Set()
56-
} else if (
57-
t.isJSXNamespacedName(path.get('name')) &&
58-
t.isJSXIdentifier(path.get('name.namespace')) &&
59-
equalCamel(path.get('name.namespace.name').node, 'v-model')
60-
) {
61-
isVModel = true
65+
} else {
6266
modifiers = new Set(path.get('name.name.name').node.split('-'))
6367
}
6468
return {
65-
isVModel,
6669
modifiers: modifiers,
6770
valuePath: isVModel ? path.get('value.expression') : null,
6871
}

0 commit comments

Comments
 (0)