const t = require('@babel/types') const { getModelEventFunctionExpr } = require('./util') module.exports = function processDir (paths, path, state) { const directivesPath = paths.directives if (directivesPath) { /** * directives: [{ * name: "model", * rawName: "v-model", * value: (aaa.cart_amount), * expression: "aaa.cart_amount" *}], */ const modelObjectExpr = directivesPath.node.value.elements.find( objectExpression => { return objectExpression.properties.find(property => { return property.key.name === 'name' && property.value.value === 'model' }) } ) if (modelObjectExpr) { const exprProperty = modelObjectExpr.properties.find(property => { return property.key.name === 'expression' }) const modifiersProperty = modelObjectExpr.properties.find(property => { return property.key.name === 'modifiers' }) if (exprProperty) { const onPath = paths.on const existingInput = onPath.node.value.properties.find( property => property.key.value === 'input' ) if (existingInput) { let existingInputFuncExpr // remove old model input event if (!t.isArrayExpression(existingInput.value)) { existingInputFuncExpr = existingInput.value existingInput.value = t.arrayExpression([]) } else { existingInputFuncExpr = existingInput.value.elements.shift() } if (existingInputFuncExpr) { const modifiers = [] if (modifiersProperty) { const properties = modifiersProperty.value.properties if (properties.find(property => property.key.value === 'number')) { modifiers.push(t.stringLiteral('number')) } if (properties.find(property => property.key.value === 'trim')) { modifiers.push(t.stringLiteral('trim')) } } existingInput.value.elements.unshift( getModelEventFunctionExpr( existingInputFuncExpr, exprProperty.value.value.trim(), modifiers ) ) } } } } } return [] }