Blame view

node_modules/depd/lib/compat/callsite-tostring.js 2.17 KB
f7563de62   Palak Handa   first commit
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  /*!
   * depd
   * Copyright(c) 2014 Douglas Christopher Wilson
   * MIT Licensed
   */
  
  'use strict'
  
  /**
   * Module exports.
   */
  
  module.exports = callSiteToString
  
  /**
   * Format a CallSite file location to a string.
   */
  
  function callSiteFileLocation(callSite) {
    var fileName
    var fileLocation = ''
  
    if (callSite.isNative()) {
      fileLocation = 'native'
    } else if (callSite.isEval()) {
      fileName = callSite.getScriptNameOrSourceURL()
      if (!fileName) {
        fileLocation = callSite.getEvalOrigin()
      }
    } else {
      fileName = callSite.getFileName()
    }
  
    if (fileName) {
      fileLocation += fileName
  
      var lineNumber = callSite.getLineNumber()
      if (lineNumber != null) {
        fileLocation += ':' + lineNumber
  
        var columnNumber = callSite.getColumnNumber()
        if (columnNumber) {
          fileLocation += ':' + columnNumber
        }
      }
    }
  
    return fileLocation || 'unknown source'
  }
  
  /**
   * Format a CallSite to a string.
   */
  
  function callSiteToString(callSite) {
    var addSuffix = true
    var fileLocation = callSiteFileLocation(callSite)
    var functionName = callSite.getFunctionName()
    var isConstructor = callSite.isConstructor()
    var isMethodCall = !(callSite.isToplevel() || isConstructor)
    var line = ''
  
    if (isMethodCall) {
      var methodName = callSite.getMethodName()
      var typeName = getConstructorName(callSite)
  
      if (functionName) {
        if (typeName && functionName.indexOf(typeName) !== 0) {
          line += typeName + '.'
        }
  
        line += functionName
  
        if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) {
          line += ' [as ' + methodName + ']'
        }
      } else {
        line += typeName + '.' + (methodName || '<anonymous>')
      }
    } else if (isConstructor) {
      line += 'new ' + (functionName || '<anonymous>')
    } else if (functionName) {
      line += functionName
    } else {
      addSuffix = false
      line += fileLocation
    }
  
    if (addSuffix) {
      line += ' (' + fileLocation + ')'
    }
  
    return line
  }
  
  /**
   * Get constructor name of reviver.
   */
  
  function getConstructorName(obj) {
    var receiver = obj.receiver
    return (receiver.constructor && receiver.constructor.name) || null
  }