dbgGetCallerFile.js

/**
 * Get the nth call file name from callstack
 * @param {integer} depth - the nth depth, 0 means the file call this function, usually depth 1 is most expected result
 * @returns {string} filename
 */
function dbgGetCallerFile(depth = 1) {
    const originalFunc = Error.prepareStackTrace;

    let callerfile;
    try {
        const err = new Error();
        let currentfile;
        let currentDepth = 0;

        Error.prepareStackTrace = function (err, stack) {
            return stack;
        };

        currentfile = err.stack.shift().getFileName();

        while (err.stack.length) {
            callerfile = err.stack.shift().getFileName();

            if (currentfile !== callerfile) {
                currentDepth++;
                currentfile = callerfile;
                if (currentDepth > depth) break;
            }
        }
        // eslint-disable-next-line no-empty
    } finally {
    }

    Error.prepareStackTrace = originalFunc;

    return callerfile;
}

export default dbgGetCallerFile;