| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.lazyJoinStacks = exports.joinStacks = exports.isWritableStack = exports.isLazyStack = void 0;
- const newline = /\r?\n/;
- const onoCall = /\bono[ @]/;
- /**
- * Is the property lazily computed?
- */
- function isLazyStack(stackProp) {
- return Boolean(stackProp &&
- stackProp.configurable &&
- typeof stackProp.get === "function");
- }
- exports.isLazyStack = isLazyStack;
- /**
- * Is the stack property writable?
- */
- function isWritableStack(stackProp) {
- return Boolean(
- // If there is no stack property, then it's writable, since assigning it will create it
- !stackProp ||
- stackProp.writable ||
- typeof stackProp.set === "function");
- }
- exports.isWritableStack = isWritableStack;
- /**
- * Appends the original `Error.stack` property to the new Error's stack.
- */
- function joinStacks(newError, originalError) {
- let newStack = popStack(newError.stack);
- let originalStack = originalError ? originalError.stack : undefined;
- if (newStack && originalStack) {
- return newStack + "\n\n" + originalStack;
- }
- else {
- return newStack || originalStack;
- }
- }
- exports.joinStacks = joinStacks;
- /**
- * Calls `joinStacks` lazily, when the `Error.stack` property is accessed.
- */
- function lazyJoinStacks(lazyStack, newError, originalError) {
- if (originalError) {
- Object.defineProperty(newError, "stack", {
- get: () => {
- let newStack = lazyStack.get.apply(newError);
- return joinStacks({ stack: newStack }, originalError);
- },
- enumerable: false,
- configurable: true
- });
- }
- else {
- lazyPopStack(newError, lazyStack);
- }
- }
- exports.lazyJoinStacks = lazyJoinStacks;
- /**
- * Removes Ono from the stack, so that the stack starts at the original error location
- */
- function popStack(stack) {
- if (stack) {
- let lines = stack.split(newline);
- // Find the Ono call(s) in the stack, and remove them
- let onoStart;
- for (let i = 0; i < lines.length; i++) {
- let line = lines[i];
- if (onoCall.test(line)) {
- if (onoStart === undefined) {
- // We found the first Ono call in the stack trace.
- // There may be other subsequent Ono calls as well.
- onoStart = i;
- }
- }
- else if (onoStart !== undefined) {
- // We found the first non-Ono call after one or more Ono calls.
- // So remove the Ono call lines from the stack trace
- lines.splice(onoStart, i - onoStart);
- break;
- }
- }
- if (lines.length > 0) {
- return lines.join("\n");
- }
- }
- // If we get here, then the stack doesn't contain a call to `ono`.
- // This may be due to minification or some optimization of the JS engine.
- // So just return the stack as-is.
- return stack;
- }
- /**
- * Calls `popStack` lazily, when the `Error.stack` property is accessed.
- */
- function lazyPopStack(error, lazyStack) {
- Object.defineProperty(error, "stack", {
- get: () => popStack(lazyStack.get.apply(error)),
- enumerable: false,
- configurable: true
- });
- }
- //# sourceMappingURL=stack.js.map
|