Blame view

天文台pc/tianwentai-ui/node_modules/@emotion/babel-plugin/src/utils/object-to-string.js 1.26 KB
bc518174   王天杨   提交两个项目文件
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
  import { serializeStyles } from '@emotion/serialize'
  
  // to anyone looking at this, this isn't intended to simplify every single case
  // it's meant to simplify the most common cases so i don't want to make it especially complex
  // also, this will be unnecessary when prepack is ready
  export function simplifyObject(node, t /*: Object */) {
    let finalString = ''
    for (let i = 0; i < node.properties.length; i++) {
      let property = node.properties[i]
  
      if (
        !t.isObjectProperty(property) ||
        property.computed ||
        (!t.isIdentifier(property.key) && !t.isStringLiteral(property.key)) ||
        (!t.isStringLiteral(property.value) &&
          !t.isNumericLiteral(property.value) &&
          !t.isObjectExpression(property.value))
      ) {
        return node
      }
  
      let key = property.key.name || property.key.value
      if (key === 'styles') {
        return node
      }
      if (t.isObjectExpression(property.value)) {
        let simplifiedChild = simplifyObject(property.value, t)
        if (!t.isStringLiteral(simplifiedChild)) {
          return node
        }
        finalString += `${key}{${simplifiedChild.value}}`
        continue
      }
      let value = property.value.value
  
      finalString += serializeStyles([{ [key]: value }]).styles
    }
    return t.stringLiteral(finalString)
  }