'f'
mh-two-thousand-and-two
2024-04-12 26f2711ef9461961fb953e2b497bd314ef95e345
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
const path = require('path')
const t = require('@babel/types')
const babelTraverse = require('@babel/traverse').default
const {
  parseComponents
} = require('./util')
 
const uniI18n = require('@dcloudio/uni-cli-i18n')
 
module.exports = function (ast, state = {}) {
  const imports = []
  let nodePath = false
  try {
    babelTraverse(ast, {
      CallExpression (path) {
        const callee = path.node.callee
        if (!callee.object || !callee.property) {
          return
        }
        const objectName = callee.object.name
        const propertyName = callee.property.name
        if (
          propertyName === 'component' &&
          (objectName === 'Vue' || objectName === 'app')
        ) {
          const args = path.node.arguments
          const nameNode = args[0]
          const valueNode = args[1]
          nodePath = path
          if (!t.isStringLiteral(nameNode)) {
            throw new Error(
              uniI18n.__('mpLoader.firstParameterNeedStaticString', {
                0: objectName + '.component()'
              })
            )
          }
          if (!t.isIdentifier(valueNode)) {
            throw new Error(
              uniI18n.__('mpLoader.requireTwoParameter', {
                0: objectName + '.component()'
              })
            )
          }
          imports.push({
            name: nameNode.value,
            value: valueNode.name
          })
        }
      }
    })
    if (imports.length) {
      state.components = parseComponents(imports, nodePath)
    } else {
      state.components = []
    }
  } catch (e) {
    if (state.filename) {
      console.error('at ' + require('@dcloudio/uni-cli-shared').normalizePath(path.relative(process.env.UNI_INPUT_DIR, state.filename)) + ':1')
    }
    throw e
  }
  return {
    ast,
    state
  }
}