mh-two-thousand-and-two
2024-04-12 3d2ec2fd0578d3ba0a414b0cc4e4a2ae60878596
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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)
              ]
            )
          )
        ]
      )
    )
  }
}