Blame view

天文台pc/tianwentai-ui/node_modules/@emotion/utils/src/index.ts 2.24 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
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
75
  import isBrowser from '#is-browser'
  import { RegisteredCache, EmotionCache, SerializedStyles } from './types'
  
  export function getRegisteredStyles(
    registered: RegisteredCache,
    registeredStyles: string[],
    classNames: string
  ): string {
    let rawClassName = ''
  
    classNames.split(' ').forEach(className => {
      if (registered[className] !== undefined) {
        registeredStyles.push(`${registered[className]};`)
      } else if (className) {
        rawClassName += `${className} `
      }
    })
    return rawClassName
  }
  
  export const registerStyles = (
    cache: EmotionCache,
    serialized: SerializedStyles,
    isStringTag: boolean
  ): void => {
    let className = `${cache.key}-${serialized.name}`
    if (
      // we only need to add the styles to the registered cache if the
      // class name could be used further down
      // the tree but if it's a string tag, we know it won't
      // so we don't have to add it to registered cache.
      // this improves memory usage since we can avoid storing the whole style string
      (isStringTag === false ||
        // we need to always store it if we're in compat mode and
        // in node since emotion-server relies on whether a style is in
        // the registered cache to know whether a style is global or not
        // also, note that this check will be dead code eliminated in the browser
        (isBrowser === false && cache.compat !== undefined)) &&
      cache.registered[className] === undefined
    ) {
      cache.registered[className] = serialized.styles
    }
  }
  
  export const insertStyles = (
    cache: EmotionCache,
    serialized: SerializedStyles,
    isStringTag: boolean
  ) => {
    registerStyles(cache, serialized, isStringTag)
  
    let className = `${cache.key}-${serialized.name}`
  
    if (cache.inserted[serialized.name] === undefined) {
      let stylesForSSR = ''
      let current: SerializedStyles | undefined = serialized
      do {
        let maybeStyles = cache.insert(
          serialized === current ? `.${className}` : '',
          current,
          cache.sheet,
          true
        )
        if (!isBrowser && maybeStyles !== undefined) {
          stylesForSSR += maybeStyles
        }
        current = current.next
      } while (current !== undefined)
      if (!isBrowser && stylesForSSR.length !== 0) {
        return stylesForSSR
      }
    }
  }
  
  export * from './types'