const t = require('@babel/types')
|
const babelTraverse = require('@babel/traverse').default
|
|
const {
|
INTERNAL_SET_MODEL
|
} = require('../../../constants')
|
|
module.exports = {
|
getModelEventFunctionExpr (funcExpr, propPath, modifiers = []) {
|
let targetExpr
|
let keyExpr
|
babelTraverse(funcExpr, {
|
noScope: true,
|
CallExpression (path) {
|
if (path.node.callee.name === '$set') {
|
targetExpr = path.node.arguments[0]
|
keyExpr = path.node.arguments[1]
|
}
|
}
|
})
|
|
if (!targetExpr || !keyExpr) {
|
targetExpr = t.stringLiteral('')
|
keyExpr = t.stringLiteral(propPath)
|
}
|
|
return t.functionExpression(
|
null,
|
[t.identifier('$event')],
|
t.blockStatement(
|
[
|
t.returnStatement(
|
t.callExpression(
|
t.identifier(INTERNAL_SET_MODEL),
|
[
|
targetExpr,
|
keyExpr,
|
t.identifier('$event'),
|
t.arrayExpression(modifiers)
|
]
|
)
|
)
|
]
|
)
|
)
|
}
|
}
|