80 lines
1.4 KiB
JavaScript
80 lines
1.4 KiB
JavaScript
/*!
|
|
* depd
|
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
|
* MIT Licensed
|
|
*/
|
|
|
|
'use strict'
|
|
|
|
/**
|
|
* Module dependencies.
|
|
* @private
|
|
*/
|
|
|
|
var EventEmitter = require('events').EventEmitter
|
|
|
|
/**
|
|
* Module exports.
|
|
* @public
|
|
*/
|
|
|
|
lazyProperty(module.exports, 'callSiteToString', function callSiteToString () {
|
|
var limit = Error.stackTraceLimit
|
|
var obj = {}
|
|
var prep = Error.prepareStackTrace
|
|
|
|
function prepareObjectStackTrace (obj, stack) {
|
|
return stack
|
|
}
|
|
|
|
Error.prepareStackTrace = prepareObjectStackTrace
|
|
Error.stackTraceLimit = 2
|
|
|
|
// capture the stack
|
|
Error.captureStackTrace(obj)
|
|
|
|
// slice the stack
|
|
var stack = obj.stack.slice()
|
|
|
|
Error.prepareStackTrace = prep
|
|
Error.stackTraceLimit = limit
|
|
|
|
return stack[0].toString ? toString : require('./callsite-tostring')
|
|
})
|
|
|
|
lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () {
|
|
return EventEmitter.listenerCount || require('./event-listener-count')
|
|
})
|
|
|
|
/**
|
|
* Define a lazy property.
|
|
*/
|
|
|
|
function lazyProperty (obj, prop, getter) {
|
|
function get () {
|
|
var val = getter()
|
|
|
|
Object.defineProperty(obj, prop, {
|
|
configurable: true,
|
|
enumerable: true,
|
|
value: val
|
|
})
|
|
|
|
return val
|
|
}
|
|
|
|
Object.defineProperty(obj, prop, {
|
|
configurable: true,
|
|
enumerable: true,
|
|
get: get
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Call toString() on the obj
|
|
*/
|
|
|
|
function toString (obj) {
|
|
return obj.toString()
|
|
}
|