index.js (1421B)
1 /*! 2 * depd 3 * Copyright(c) 2014-2015 Douglas Christopher Wilson 4 * MIT Licensed 5 */ 6 7 'use strict' 8 9 /** 10 * Module dependencies. 11 * @private 12 */ 13 14 var EventEmitter = require('events').EventEmitter 15 16 /** 17 * Module exports. 18 * @public 19 */ 20 21 lazyProperty(module.exports, 'callSiteToString', function callSiteToString () { 22 var limit = Error.stackTraceLimit 23 var obj = {} 24 var prep = Error.prepareStackTrace 25 26 function prepareObjectStackTrace (obj, stack) { 27 return stack 28 } 29 30 Error.prepareStackTrace = prepareObjectStackTrace 31 Error.stackTraceLimit = 2 32 33 // capture the stack 34 Error.captureStackTrace(obj) 35 36 // slice the stack 37 var stack = obj.stack.slice() 38 39 Error.prepareStackTrace = prep 40 Error.stackTraceLimit = limit 41 42 return stack[0].toString ? toString : require('./callsite-tostring') 43 }) 44 45 lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () { 46 return EventEmitter.listenerCount || require('./event-listener-count') 47 }) 48 49 /** 50 * Define a lazy property. 51 */ 52 53 function lazyProperty (obj, prop, getter) { 54 function get () { 55 var val = getter() 56 57 Object.defineProperty(obj, prop, { 58 configurable: true, 59 enumerable: true, 60 value: val 61 }) 62 63 return val 64 } 65 66 Object.defineProperty(obj, prop, { 67 configurable: true, 68 enumerable: true, 69 get: get 70 }) 71 } 72 73 /** 74 * Call toString() on the obj 75 */ 76 77 function toString (obj) { 78 return obj.toString() 79 }