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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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 []
}