1960c17ee4aa0b0d7f0d75b645b585e178b48b1233ca91813f9f252eb16e28696246d951b801e3d4822382d65f646186f4d9ddd50a6e8c1c197d9428f2709d 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.beginHiddenCallStack = beginHiddenCallStack;
  6. exports.endHiddenCallStack = endHiddenCallStack;
  7. exports.expectedError = expectedError;
  8. exports.injectVirtualStackFrame = injectVirtualStackFrame;
  9. var _Object$getOwnPropert;
  10. const ErrorToString = Function.call.bind(Error.prototype.toString);
  11. const SUPPORTED = !!Error.captureStackTrace && ((_Object$getOwnPropert = Object.getOwnPropertyDescriptor(Error, "stackTraceLimit")) == null ? void 0 : _Object$getOwnPropert.writable) === true;
  12. const START_HIDING = "startHiding - secret - don't use this - v1";
  13. const STOP_HIDING = "stopHiding - secret - don't use this - v1";
  14. const expectedErrors = new WeakSet();
  15. const virtualFrames = new WeakMap();
  16. function CallSite(filename) {
  17. return Object.create({
  18. isNative: () => false,
  19. isConstructor: () => false,
  20. isToplevel: () => true,
  21. getFileName: () => filename,
  22. getLineNumber: () => undefined,
  23. getColumnNumber: () => undefined,
  24. getFunctionName: () => undefined,
  25. getMethodName: () => undefined,
  26. getTypeName: () => undefined,
  27. toString: () => filename
  28. });
  29. }
  30. function injectVirtualStackFrame(error, filename) {
  31. if (!SUPPORTED) return;
  32. let frames = virtualFrames.get(error);
  33. if (!frames) virtualFrames.set(error, frames = []);
  34. frames.push(CallSite(filename));
  35. return error;
  36. }
  37. function expectedError(error) {
  38. if (!SUPPORTED) return;
  39. expectedErrors.add(error);
  40. return error;
  41. }
  42. function beginHiddenCallStack(fn) {
  43. if (!SUPPORTED) return fn;
  44. return Object.defineProperty(function (...args) {
  45. setupPrepareStackTrace();
  46. return fn(...args);
  47. }, "name", {
  48. value: STOP_HIDING
  49. });
  50. }
  51. function endHiddenCallStack(fn) {
  52. if (!SUPPORTED) return fn;
  53. return Object.defineProperty(function (...args) {
  54. return fn(...args);
  55. }, "name", {
  56. value: START_HIDING
  57. });
  58. }
  59. function setupPrepareStackTrace() {
  60. setupPrepareStackTrace = () => {};
  61. const {
  62. prepareStackTrace = defaultPrepareStackTrace
  63. } = Error;
  64. const MIN_STACK_TRACE_LIMIT = 50;
  65. Error.stackTraceLimit && (Error.stackTraceLimit = Math.max(Error.stackTraceLimit, MIN_STACK_TRACE_LIMIT));
  66. Error.prepareStackTrace = function stackTraceRewriter(err, trace) {
  67. let newTrace = [];
  68. const isExpected = expectedErrors.has(err);
  69. let status = isExpected ? "hiding" : "unknown";
  70. for (let i = 0; i < trace.length; i++) {
  71. const name = trace[i].getFunctionName();
  72. if (name === START_HIDING) {
  73. status = "hiding";
  74. } else if (name === STOP_HIDING) {
  75. if (status === "hiding") {
  76. status = "showing";
  77. if (virtualFrames.has(err)) {
  78. newTrace.unshift(...virtualFrames.get(err));
  79. }
  80. } else if (status === "unknown") {
  81. newTrace = trace;
  82. break;
  83. }
  84. } else if (status !== "hiding") {
  85. newTrace.push(trace[i]);
  86. }
  87. }
  88. return prepareStackTrace(err, newTrace);
  89. };
  90. }
  91. function defaultPrepareStackTrace(err, trace) {
  92. if (trace.length === 0) return ErrorToString(err);
  93. return `${ErrorToString(err)}\n at ${trace.join("\n at ")}`;
  94. }
  95. 0 && 0;
  96. //# sourceMappingURL=rewrite-stack-trace.js.map