99 lines
3.1 KiB
Plaintext
99 lines
3.1 KiB
Plaintext
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.beginHiddenCallStack = beginHiddenCallStack;
|
||
|
exports.endHiddenCallStack = endHiddenCallStack;
|
||
|
exports.expectedError = expectedError;
|
||
|
exports.injectVirtualStackFrame = injectVirtualStackFrame;
|
||
|
var _Object$getOwnPropert;
|
||
|
const ErrorToString = Function.call.bind(Error.prototype.toString);
|
||
|
const SUPPORTED = !!Error.captureStackTrace && ((_Object$getOwnPropert = Object.getOwnPropertyDescriptor(Error, "stackTraceLimit")) == null ? void 0 : _Object$getOwnPropert.writable) === true;
|
||
|
const START_HIDING = "startHiding - secret - don't use this - v1";
|
||
|
const STOP_HIDING = "stopHiding - secret - don't use this - v1";
|
||
|
const expectedErrors = new WeakSet();
|
||
|
const virtualFrames = new WeakMap();
|
||
|
function CallSite(filename) {
|
||
|
return Object.create({
|
||
|
isNative: () => false,
|
||
|
isConstructor: () => false,
|
||
|
isToplevel: () => true,
|
||
|
getFileName: () => filename,
|
||
|
getLineNumber: () => undefined,
|
||
|
getColumnNumber: () => undefined,
|
||
|
getFunctionName: () => undefined,
|
||
|
getMethodName: () => undefined,
|
||
|
getTypeName: () => undefined,
|
||
|
toString: () => filename
|
||
|
});
|
||
|
}
|
||
|
function injectVirtualStackFrame(error, filename) {
|
||
|
if (!SUPPORTED) return;
|
||
|
let frames = virtualFrames.get(error);
|
||
|
if (!frames) virtualFrames.set(error, frames = []);
|
||
|
frames.push(CallSite(filename));
|
||
|
return error;
|
||
|
}
|
||
|
function expectedError(error) {
|
||
|
if (!SUPPORTED) return;
|
||
|
expectedErrors.add(error);
|
||
|
return error;
|
||
|
}
|
||
|
function beginHiddenCallStack(fn) {
|
||
|
if (!SUPPORTED) return fn;
|
||
|
return Object.defineProperty(function (...args) {
|
||
|
setupPrepareStackTrace();
|
||
|
return fn(...args);
|
||
|
}, "name", {
|
||
|
value: STOP_HIDING
|
||
|
});
|
||
|
}
|
||
|
function endHiddenCallStack(fn) {
|
||
|
if (!SUPPORTED) return fn;
|
||
|
return Object.defineProperty(function (...args) {
|
||
|
return fn(...args);
|
||
|
}, "name", {
|
||
|
value: START_HIDING
|
||
|
});
|
||
|
}
|
||
|
function setupPrepareStackTrace() {
|
||
|
setupPrepareStackTrace = () => {};
|
||
|
const {
|
||
|
prepareStackTrace = defaultPrepareStackTrace
|
||
|
} = Error;
|
||
|
const MIN_STACK_TRACE_LIMIT = 50;
|
||
|
Error.stackTraceLimit && (Error.stackTraceLimit = Math.max(Error.stackTraceLimit, MIN_STACK_TRACE_LIMIT));
|
||
|
Error.prepareStackTrace = function stackTraceRewriter(err, trace) {
|
||
|
let newTrace = [];
|
||
|
const isExpected = expectedErrors.has(err);
|
||
|
let status = isExpected ? "hiding" : "unknown";
|
||
|
for (let i = 0; i < trace.length; i++) {
|
||
|
const name = trace[i].getFunctionName();
|
||
|
if (name === START_HIDING) {
|
||
|
status = "hiding";
|
||
|
} else if (name === STOP_HIDING) {
|
||
|
if (status === "hiding") {
|
||
|
status = "showing";
|
||
|
if (virtualFrames.has(err)) {
|
||
|
newTrace.unshift(...virtualFrames.get(err));
|
||
|
}
|
||
|
} else if (status === "unknown") {
|
||
|
newTrace = trace;
|
||
|
break;
|
||
|
}
|
||
|
} else if (status !== "hiding") {
|
||
|
newTrace.push(trace[i]);
|
||
|
}
|
||
|
}
|
||
|
return prepareStackTrace(err, newTrace);
|
||
|
};
|
||
|
}
|
||
|
function defaultPrepareStackTrace(err, trace) {
|
||
|
if (trace.length === 0) return ErrorToString(err);
|
||
|
return `${ErrorToString(err)}\n at ${trace.join("\n at ")}`;
|
||
|
}
|
||
|
0 && 0;
|
||
|
|
||
|
//# sourceMappingURL=rewrite-stack-trace.js.map
|