Blame view

node_modules/postcss-message-helpers/index.js 1.74 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
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
78
79
80
81
  /**
   * Constants
   */
  var SPLITTER = "\n    at "
  
  /**
   * PostCSS helpers
   */
  module.exports = {
    sourceString: sourceString,
    message: formatMessage,
    try: tryCatch
  }
  
  /**
   * Returns GNU style source
   *
   * @param {Object} source
   */
  function sourceString(source) {
    var message = "<css input>"
    if (source) {
      if (source.input && source.input.file) {
        message = source.input.file
      }
      if (source.start) {
        message += ":" + source.start.line + ":" + source.start.column
      }
    }
  
    return message
  }
  
  /**
   * Returns a GNU style message
   *
   * @param  {String} message
   * @param  {Object} source a PostCSS source object
   * @return {String}
   */
  function formatMessage(message, source) {
    return sourceString(source) + ": " + message
  }
  
  /**
   * Do something and throw an error with enhanced exception (from given source)
   *
   * @param {Function} fn     [description]
   * @param {[type]}   source [description]
   */
  function tryCatch(fn, source) {
    try {
      return fn()
    }
    catch (err) {
      err.originalMessage = err.message
      err.message = formatMessage(err.message, source)
  
      // if source seems interesting, enhance error
      if (typeof source === "object") {
        // add a stack item if something interesting available
        if ((source.input && source.input.file) || source.start) {
          var stack = err.stack.split(SPLITTER)
          var firstStackItem = stack.shift()
          stack.unshift(sourceString(source))
          stack.unshift(firstStackItem)
          err.stack = stack.join(SPLITTER)
        }
  
        if (source.input && source.input.file) {
          err.fileName = source.input.file
        }
        if (source.start) {
          err.lineNumber = source.start.line
          err.columnNumber = source.start.column
        }
      }
  
      throw err
    }
  }