保誠-保戶業務員媒合平台
Tomas
2022-05-19 957a1f10a06fdbb76f1a0ba94fe44126c613fee3
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
76
77
const postcss = require('postcss')
const postcssrc = require('postcss-load-config')
const ctx = { parser: true, map: 'inline' }
const { plugins } = postcssrc.sync(ctx)
const logger = require('../logger')
const getVueJestConfig = require('../get-vue-jest-config')
const ensureRequire = require('../ensure-require')
 
let prevCheckIsAsync = null
function hasAsyncPlugin () {
  if (prevCheckIsAsync !== null) {
    return prevCheckIsAsync
  }
  const result = postcss(plugins)
    .process('', {
      from: undefined
    })
 
  if (result.processing) {
    prevCheckIsAsync = true
    return prevCheckIsAsync
  }
  for (const plugin of result.processor.plugins) {
    const promise = result.run(plugin)
    if (typeof promise === 'object' && typeof promise.then === 'function') {
      prevCheckIsAsync = true
      break
    }
  }
  if (prevCheckIsAsync === null) {
    prevCheckIsAsync = false
  }
 
  return prevCheckIsAsync
}
 
function catchError (error, filePath, jestConfig) {
  if (!getVueJestConfig(jestConfig).hideStyleWarn) {
    logger.warn(`There was an error rendering the POSTCSS in ${filePath}. `)
    logger.warn(`Error while compiling styles: ${error}`)
  }
}
 
module.exports = (content, filePath, jestConfig) => {
  ensureRequire('postcss', ['postcss'])
 
  let css = null
 
  const res = postcss(plugins)
    .process(content, {
      from: undefined
    })
 
  if (hasAsyncPlugin()) {
    res
      .then(result => {
        css = result.css || ''
      })
      .catch((e) => {
        css = ''
        catchError(e, filePath, jestConfig)
      })
 
    while (css === null) { //eslint-disable-line
      require('deasync').sleep(100)
    }
 
    return css
  }
 
  try {
    return res.css
  } catch (e) {
    catchError(e, filePath, jestConfig)
    return ''
  }
}