function cachedError(xs) { if (originCache.has(xs)) return originCache.get(xs) const x = Error.stackTraceLimit Error.stackTraceLimit = 4 originCache.set(xs, new Error().stack) Error.stackTraceLimit = x return originCache.get(xs) }
metatests.test('Check called filename/filepath custom stack', test => { const limit = Error.stackTraceLimit; Error.stackTraceLimit = 1; const stack = new Error().stack; Error.stackTraceLimit = limit; test.strictSame(common.callerFilepath(0, stack), ''); test.strictSame(common.callerFilename(0, stack), ''); test.end(); });
function registerStackTraceLimit(limit: number = MAX_STACK_LENGTH) { if (stackTraceRegistered) { return; } try { restoreStackTraceValue = Error.stackTraceLimit; Error.stackTraceLimit = limit; stackTraceRegistered = true; } catch (e) { // Not all browsers support this so we don't care if it errors } }
function captureStackTrace(skipFrames = 0, limitFrames = 10) { let e = new Error(); // save off what the current (perhaps app-specified) traceTraceLimit is so we can // capture limitFrames frames. let stackTraceLimit = Error.stackTraceLimit; Error.stackTraceLimit = stackTraceLimit < limitFrames ? limitFrames : stackTraceLimit; Error.captureStackTrace(e); // reinstate previous limit. Error.stackTraceLimit = stackTraceLimit; let frames = e.stack.split("\n"); // the +1 here to get rid of the `Error\n` line at the top of the stacktrace. return frames.slice(1 + skipFrames).join("\n"); }
const captureMaxStack = () => { const oldLimit = Error.stackTraceLimit; Error.stackTraceLimit = Infinity; const stack = new Error().stack; Error.stackTraceLimit = oldLimit; return stack; }
var oldStackTraceLimit = Error.stackTraceLimit; if (typeof stackTraceLimit === "number") Error.stackTraceLimit = stackTraceLimit;
}; if (typeof Error.stackTraceLimit === "number" && typeof Error.captureStackTrace === "function") { Error.stackTraceLimit = Error.stackTraceLimit + 6; stackFramePattern = v8stackFramePattern; formatStack = v8stackFormatter; }; return function(receiver, ignoreUntil) { Error.stackTraceLimit = Error.stackTraceLimit + 6; captureStackTrace(receiver, ignoreUntil); Error.stackTraceLimit = Error.stackTraceLimit - 6; }; formatStack = v8stackFormatter; return function captureStackTrace(o) { Error.stackTraceLimit = Error.stackTraceLimit + 6; try { throw new Error(); } catch(e) { o.stack = e.stack; } Error.stackTraceLimit = Error.stackTraceLimit - 6; };
var saveLimit = Error.stackTraceLimit; var savePrepare = Error.prepareStackTrace; Error.stackTraceLimit = 3;
function registerStackTraceLimit(limit: number = MAX_STACK_LENGTH) { if (stackTraceRegistered) { return; } try { restoreStackTraceValue = Error.stackTraceLimit; Error.stackTraceLimit = limit; stackTraceRegistered = true; } catch (e) { // Not all browsers support this so we don't care if it errors } }
var saveLimit = Error.stackTraceLimit; var savePrepare = Error.prepareStackTrace; Error.stackTraceLimit = 3;