const t = require('@babel/types')
|
|
const {
|
getModelEventFunctionExpr
|
} = require('./util')
|
|
module.exports = function processRef (paths, path, state) {
|
const modelPath = paths.model
|
if (modelPath) {
|
const properties = modelPath.node.value.properties
|
const [callbackProperty] = properties.splice(properties.findIndex(property => {
|
return property.key.name === 'callback'
|
}), 1)
|
const valueProperty = properties.find(
|
property => property.key.name === 'value'
|
)
|
const exprProperty = properties.find(
|
property => property.key.name === 'expression'
|
)
|
|
const prop = exprProperty.value.value.trim()
|
|
const onPath = paths.on
|
|
// on:{'input':__m('msg',$event)}
|
if (!onPath) {
|
path.node.properties.unshift(
|
t.objectProperty(t.identifier('on'), t.objectExpression([
|
t.objectProperty(
|
t.stringLiteral('input'),
|
getModelEventFunctionExpr(
|
callbackProperty.value,
|
prop
|
)
|
)
|
]))
|
)
|
paths.on = path.get('properties').find(
|
propertyPath => propertyPath.node.key.name === 'on'
|
)
|
} else {
|
const existingInput = onPath.node.value.properties.find(
|
property => property.key.value === 'input'
|
)
|
if (existingInput) {
|
if (!t.isArrayExpression(existingInput.value)) {
|
existingInput.value = t.arrayExpression([existingInput.value])
|
}
|
existingInput.value.elements.unshift(getModelEventFunctionExpr(
|
callbackProperty.value,
|
prop
|
))
|
} else {
|
onPath.node.value.properties.push(
|
t.objectProperty(
|
t.stringLiteral('input'),
|
getModelEventFunctionExpr(
|
callbackProperty.value,
|
prop
|
)
|
)
|
)
|
}
|
}
|
|
return [ // attrs:{value:value}
|
t.objectProperty(
|
t.stringLiteral(process.env.UNI_USING_VUE3 ? 'modelValue' : 'value'),
|
valueProperty.value
|
)
|
]
|
}
|
return []
|
}
|