www/long-stack-traces/lib/long-stack-traces.js
function wrapRegistrationFunction(object, property, callbackArg) {
        if (typeof object[property] !== "function") {
            console.error("(long-stack-traces) Object", object, "does not contain function", property);
            return;
        }
        if (!has.call(object, property)) {
            console.warn("(long-stack-traces) Object", object, "does not directly contain function", property);
        }

        // TODO: better source position detection
        var sourcePosition = (object.constructor.name || Object.prototype.toString.call(object)) + "." + property;

        // capture the original registration function
        var fn = object[property];
        // overwrite it with a wrapped registration function that modifies the supplied callback argument
        object[property] = function() {
            // replace the callback argument with a wrapped version that captured the current stack trace
            arguments[callbackArg] = makeWrappedCallback(arguments[callbackArg], sourcePosition);
            // call the original registration function with the modified arguments
            return fn.apply(this, arguments);
        }

        // check that the registration function was indeed overwritten
        if (object[property] === fn)
            console.warn("(long-stack-traces) Couldn't replace ", property, "on", object);
    }
function wrapRegistrationFunction(object, property, callbackArg) {
        if (typeof object[property] !== "function") {
            console.error("(long-stack-traces) Object", object, "does not contain function", property);
            return;
        }
        if (!has.call(object, property)) {
            console.warn("(long-stack-traces) Object", object, "does not directly contain function", property);
        }

        // TODO: better source position detection
        var sourcePosition = (object.constructor.name || Object.prototype.toString.call(object)) + "." + property;

        // capture the original registration function
        var fn = object[property];
        // overwrite it with a wrapped registration function that modifies the supplied callback argument
        object[property] = function() {
            // replace the callback argument with a wrapped version that captured the current stack trace
            arguments[callbackArg] = makeWrappedCallback(arguments[callbackArg], sourcePosition);
            // call the original registration function with the modified arguments
            return fn.apply(this, arguments);
        }

        // check that the registration function was indeed overwritten
        if (object[property] === fn)
            console.warn("(long-stack-traces) Couldn't replace ", property, "on", object);
    }
function wrapRegistrationFunction ( object , property , callbackArg ) { if ( typeof object [ property ] !== "function" ) { console . error ( "(long-stack-traces) Object" , object , "does not contain function" , property ) ; return ; } if ( ! has . call ( object , property ) ) { console . warn ( "(long-stack-traces) Object" , object , "does not directly contain function" , property ) ; } // TODO: better source position detection var sourcePosition = ( object . constructor . name || Object . prototype . toString . call ( object ) ) + "." + property ; // capture the original registration function var fn = object [ property ] ; // overwrite it with a wrapped registration function that modifies the supplied callback argument object [ property ] = function ( ) { // replace the callback argument with a wrapped version that captured the current stack trace arguments [ callbackArg ] = makeWrappedCallback ( arguments [ callbackArg ] , sourcePosition ) ; // call the original registration function with the modified arguments return fn . apply ( this , arguments ) ; } // check that the registration function was indeed overwritten if ( object [ property ] === fn ) console . warn ( "(long-stack-traces) Couldn't replace " , property , "on" , object ) ; }
Takes an object, a property name for the callback function to wrap, and an argument position and overwrites the function with a wrapper that captures the stack at the time of callback registration
Takes an object a property name for the callback function to wrap and an argument position and overwrites the function with a wrapper that captures the stack at the time of callback registration