保誠-保戶業務員媒合平台
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
'use strict'
 
const ErrorStackParser = require('error-stack-parser')
const RequestShortener = require('webpack/lib/RequestShortener')
 
// TODO: allow the location to be customized in options
const requestShortener = new RequestShortener(process.cwd())
 
/*
 This logic is mostly duplicated from webpack/lib/Stats.js#toJson()
 See: https://github.com/webpack/webpack/blob/2f618e733aab4755deb42e9d8e859609005607c0/lib/Stats.js#L89
*/
 
function extractError (e) {
  return {
    message: e.message,
    file: getFile(e),
    origin: getOrigin(e),
    name: e.name,
    severity: 0,
    webpackError: e,
    originalStack: getOriginalErrorStack(e)
  }
}
 
function getOriginalErrorStack (e) {
  while (e.error != null) {
    e = e.error
  }
  if (e.stack) {
    return ErrorStackParser.parse(e)
  }
  return []
}
 
function getFile (e) {
  if (e.file) {
    return e.file
  } else if (e.module && e.module.readableIdentifier && typeof e.module.readableIdentifier === 'function') {
    return e.module.readableIdentifier(requestShortener)
  }
}
 
function getOrigin (e) {
  let origin = ''
  if (e.dependencies && e.origin) {
    origin += '\n @ ' + e.origin.readableIdentifier(requestShortener)
    e.dependencies.forEach(function (dep) {
      if (!dep.loc) return
      if (typeof dep.loc === 'string') return
      if (!dep.loc.start) return
      if (!dep.loc.end) return
      origin += ' ' + dep.loc.start.line + ':' + dep.loc.start.column + '-' +
        (dep.loc.start.line !== dep.loc.end.line ? dep.loc.end.line + ':' : '') + dep.loc.end.column
    })
    var current = e.origin
    while (current.issuer && typeof current.issuer.readableIdentifier === 'function') {
      current = current.issuer
      origin += '\n @ ' + current.readableIdentifier(requestShortener)
    }
  }
  return origin
}
 
module.exports = extractError