Fix license issues
[sdnc/oam.git] / dgbuilder / dgeflows / node_modules / morgan / node_modules / depd / lib / compat / callsite-tostring.js
1 /*!
2  * depd
3  * Copyright(c) 2014 Douglas Christopher Wilson
4  * MIT Licensed
5  */
6
7 /**
8  * Module exports.
9  */
10
11 module.exports = callSiteToString
12
13 /**
14  * Format a CallSite file location to a string.
15  */
16
17 function callSiteFileLocation(callSite) {
18   var fileName
19   var fileLocation = ''
20
21   if (callSite.isNative()) {
22     fileLocation = 'native'
23   } else if (callSite.isEval()) {
24     fileName = callSite.getScriptNameOrSourceURL()
25     if (!fileName) {
26       fileLocation = callSite.getEvalOrigin()
27     }
28   } else {
29     fileName = callSite.getFileName()
30   }
31
32   if (fileName) {
33     fileLocation += fileName
34
35     var lineNumber = callSite.getLineNumber()
36     if (lineNumber != null) {
37       fileLocation += ':' + lineNumber
38
39       var columnNumber = callSite.getColumnNumber()
40       if (columnNumber) {
41         fileLocation += ':' + columnNumber
42       }
43     }
44   }
45
46   return fileLocation || 'unknown source'
47 }
48
49 /**
50  * Format a CallSite to a string.
51  */
52
53 function callSiteToString(callSite) {
54   var addSuffix = true
55   var fileLocation = callSiteFileLocation(callSite)
56   var functionName = callSite.getFunctionName()
57   var isConstructor = callSite.isConstructor()
58   var isMethodCall = !(callSite.isToplevel() || isConstructor)
59   var line = ''
60
61   if (isMethodCall) {
62     var methodName = callSite.getMethodName()
63     var typeName = getConstructorName(callSite)
64
65     if (functionName) {
66       if (typeName && functionName.indexOf(typeName) !== 0) {
67         line += typeName + '.'
68       }
69
70       line += functionName
71
72       if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) {
73         line += ' [as ' + methodName + ']'
74       }
75     } else {
76       line += typeName + '.' + (methodName || '<anonymous>')
77     }
78   } else if (isConstructor) {
79     line += 'new ' + (functionName || '<anonymous>')
80   } else if (functionName) {
81     line += functionName
82   } else {
83     addSuffix = false
84     line += fileLocation
85   }
86
87   if (addSuffix) {
88     line += ' (' + fileLocation + ')'
89   }
90
91   return line
92 }
93
94 /**
95  * Get constructor name of reviver.
96  */
97
98 function getConstructorName(obj) {
99   var receiver = obj.receiver
100   return (receiver.constructor && receiver.constructor.name) || null
101 }