You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
409 lines
26 KiB
409 lines
26 KiB
2 years ago
|
import { d as ansiStyles, e as eastAsianWidth } from './chunk-utils-timers.52534f96.js';
|
||
|
import { b as resolve } from './chunk-utils-env.b861e3a0.js';
|
||
|
import { j as notNullish } from './chunk-mock-date.a1c85759.js';
|
||
|
|
||
|
/* eslint-disable yoda */
|
||
|
|
||
|
function isFullwidthCodePoint(codePoint) {
|
||
|
if (!Number.isInteger(codePoint)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Code points are derived from:
|
||
|
// https://unicode.org/Public/UNIDATA/EastAsianWidth.txt
|
||
|
return codePoint >= 0x1100 && (
|
||
|
codePoint <= 0x115F || // Hangul Jamo
|
||
|
codePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET
|
||
|
codePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET
|
||
|
// CJK Radicals Supplement .. Enclosed CJK Letters and Months
|
||
|
(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||
|
||
|
// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A
|
||
|
(0x3250 <= codePoint && codePoint <= 0x4DBF) ||
|
||
|
// CJK Unified Ideographs .. Yi Radicals
|
||
|
(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||
|
||
|
// Hangul Jamo Extended-A
|
||
|
(0xA960 <= codePoint && codePoint <= 0xA97C) ||
|
||
|
// Hangul Syllables
|
||
|
(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||
|
||
|
// CJK Compatibility Ideographs
|
||
|
(0xF900 <= codePoint && codePoint <= 0xFAFF) ||
|
||
|
// Vertical Forms
|
||
|
(0xFE10 <= codePoint && codePoint <= 0xFE19) ||
|
||
|
// CJK Compatibility Forms .. Small Form Variants
|
||
|
(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||
|
||
|
// Halfwidth and Fullwidth Forms
|
||
|
(0xFF01 <= codePoint && codePoint <= 0xFF60) ||
|
||
|
(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||
|
||
|
// Kana Supplement
|
||
|
(0x1B000 <= codePoint && codePoint <= 0x1B001) ||
|
||
|
// Enclosed Ideographic Supplement
|
||
|
(0x1F200 <= codePoint && codePoint <= 0x1F251) ||
|
||
|
// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane
|
||
|
(0x20000 <= codePoint && codePoint <= 0x3FFFD)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const astralRegex = /^[\uD800-\uDBFF][\uDC00-\uDFFF]$/;
|
||
|
|
||
|
const ESCAPES = [
|
||
|
'\u001B',
|
||
|
'\u009B'
|
||
|
];
|
||
|
|
||
|
const wrapAnsi = code => `${ESCAPES[0]}[${code}m`;
|
||
|
|
||
|
const checkAnsi = (ansiCodes, isEscapes, endAnsiCode) => {
|
||
|
let output = [];
|
||
|
ansiCodes = [...ansiCodes];
|
||
|
|
||
|
for (let ansiCode of ansiCodes) {
|
||
|
const ansiCodeOrigin = ansiCode;
|
||
|
if (ansiCode.includes(';')) {
|
||
|
ansiCode = ansiCode.split(';')[0][0] + '0';
|
||
|
}
|
||
|
|
||
|
const item = ansiStyles.codes.get(Number.parseInt(ansiCode, 10));
|
||
|
if (item) {
|
||
|
const indexEscape = ansiCodes.indexOf(item.toString());
|
||
|
if (indexEscape === -1) {
|
||
|
output.push(wrapAnsi(isEscapes ? item : ansiCodeOrigin));
|
||
|
} else {
|
||
|
ansiCodes.splice(indexEscape, 1);
|
||
|
}
|
||
|
} else if (isEscapes) {
|
||
|
output.push(wrapAnsi(0));
|
||
|
break;
|
||
|
} else {
|
||
|
output.push(wrapAnsi(ansiCodeOrigin));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (isEscapes) {
|
||
|
output = output.filter((element, index) => output.indexOf(element) === index);
|
||
|
|
||
|
if (endAnsiCode !== undefined) {
|
||
|
const fistEscapeCode = wrapAnsi(ansiStyles.codes.get(Number.parseInt(endAnsiCode, 10)));
|
||
|
// TODO: Remove the use of `.reduce` here.
|
||
|
// eslint-disable-next-line unicorn/no-array-reduce
|
||
|
output = output.reduce((current, next) => next === fistEscapeCode ? [next, ...current] : [...current, next], []);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return output.join('');
|
||
|
};
|
||
|
|
||
|
function sliceAnsi(string, begin, end) {
|
||
|
const characters = [...string];
|
||
|
const ansiCodes = [];
|
||
|
|
||
|
let stringEnd = typeof end === 'number' ? end : characters.length;
|
||
|
let isInsideEscape = false;
|
||
|
let ansiCode;
|
||
|
let visible = 0;
|
||
|
let output = '';
|
||
|
|
||
|
for (const [index, character] of characters.entries()) {
|
||
|
let leftEscape = false;
|
||
|
|
||
|
if (ESCAPES.includes(character)) {
|
||
|
const code = /\d[^m]*/.exec(string.slice(index, index + 18));
|
||
|
ansiCode = code && code.length > 0 ? code[0] : undefined;
|
||
|
|
||
|
if (visible < stringEnd) {
|
||
|
isInsideEscape = true;
|
||
|
|
||
|
if (ansiCode !== undefined) {
|
||
|
ansiCodes.push(ansiCode);
|
||
|
}
|
||
|
}
|
||
|
} else if (isInsideEscape && character === 'm') {
|
||
|
isInsideEscape = false;
|
||
|
leftEscape = true;
|
||
|
}
|
||
|
|
||
|
if (!isInsideEscape && !leftEscape) {
|
||
|
visible++;
|
||
|
}
|
||
|
|
||
|
if (!astralRegex.test(character) && isFullwidthCodePoint(character.codePointAt())) {
|
||
|
visible++;
|
||
|
|
||
|
if (typeof end !== 'number') {
|
||
|
stringEnd++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (visible > begin && visible <= stringEnd) {
|
||
|
output += character;
|
||
|
} else if (visible === begin && !isInsideEscape && ansiCode !== undefined) {
|
||
|
output = checkAnsi(ansiCodes);
|
||
|
} else if (visible >= stringEnd) {
|
||
|
output += checkAnsi(ansiCodes, true, ansiCode);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
function ansiRegex({onlyFirst = false} = {}) {
|
||
|
const pattern = [
|
||
|
'[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
|
||
|
'(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
|
||
|
].join('|');
|
||
|
|
||
|
return new RegExp(pattern, onlyFirst ? undefined : 'g');
|
||
|
}
|
||
|
|
||
|
function stripAnsi(string) {
|
||
|
if (typeof string !== 'string') {
|
||
|
throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
|
||
|
}
|
||
|
|
||
|
return string.replace(ansiRegex(), '');
|
||
|
}
|
||
|
|
||
|
var emojiRegex = function () {
|
||
|
// https://mths.be/emoji
|
||
|
return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\
|
||
|
};
|
||
|
|
||
|
function stringWidth(string, options = {}) {
|
||
|
if (typeof string !== 'string' || string.length === 0) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
options = {
|
||
|
ambiguousIsNarrow: true,
|
||
|
...options
|
||
|
};
|
||
|
|
||
|
string = stripAnsi(string);
|
||
|
|
||
|
if (string.length === 0) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
string = string.replace(emojiRegex(), ' ');
|
||
|
|
||
|
const ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;
|
||
|
let width = 0;
|
||
|
|
||
|
for (const character of string) {
|
||
|
const codePoint = character.codePointAt(0);
|
||
|
|
||
|
// Ignore control characters
|
||
|
if (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// Ignore combining characters
|
||
|
if (codePoint >= 0x300 && codePoint <= 0x36F) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
const code = eastAsianWidth.eastAsianWidth(character);
|
||
|
switch (code) {
|
||
|
case 'F':
|
||
|
case 'W':
|
||
|
width += 2;
|
||
|
break;
|
||
|
case 'A':
|
||
|
width += ambiguousCharacterWidth;
|
||
|
break;
|
||
|
default:
|
||
|
width += 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return width;
|
||
|
}
|
||
|
|
||
|
function getIndexOfNearestSpace(string, wantedIndex, shouldSearchRight) {
|
||
|
if (string.charAt(wantedIndex) === ' ') {
|
||
|
return wantedIndex;
|
||
|
}
|
||
|
|
||
|
for (let index = 1; index <= 3; index++) {
|
||
|
if (shouldSearchRight) {
|
||
|
if (string.charAt(wantedIndex + index) === ' ') {
|
||
|
return wantedIndex + index;
|
||
|
}
|
||
|
} else if (string.charAt(wantedIndex - index) === ' ') {
|
||
|
return wantedIndex - index;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return wantedIndex;
|
||
|
}
|
||
|
|
||
|
function cliTruncate(text, columns, options) {
|
||
|
options = {
|
||
|
position: 'end',
|
||
|
preferTruncationOnSpace: false,
|
||
|
truncationCharacter: '…',
|
||
|
...options,
|
||
|
};
|
||
|
|
||
|
const {position, space, preferTruncationOnSpace} = options;
|
||
|
let {truncationCharacter} = options;
|
||
|
|
||
|
if (typeof text !== 'string') {
|
||
|
throw new TypeError(`Expected \`input\` to be a string, got ${typeof text}`);
|
||
|
}
|
||
|
|
||
|
if (typeof columns !== 'number') {
|
||
|
throw new TypeError(`Expected \`columns\` to be a number, got ${typeof columns}`);
|
||
|
}
|
||
|
|
||
|
if (columns < 1) {
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
if (columns === 1) {
|
||
|
return truncationCharacter;
|
||
|
}
|
||
|
|
||
|
const length = stringWidth(text);
|
||
|
|
||
|
if (length <= columns) {
|
||
|
return text;
|
||
|
}
|
||
|
|
||
|
if (position === 'start') {
|
||
|
if (preferTruncationOnSpace) {
|
||
|
const nearestSpace = getIndexOfNearestSpace(text, length - columns + 1, true);
|
||
|
return truncationCharacter + sliceAnsi(text, nearestSpace, length).trim();
|
||
|
}
|
||
|
|
||
|
if (space === true) {
|
||
|
truncationCharacter += ' ';
|
||
|
}
|
||
|
|
||
|
return truncationCharacter + sliceAnsi(text, length - columns + stringWidth(truncationCharacter), length);
|
||
|
}
|
||
|
|
||
|
if (position === 'middle') {
|
||
|
if (space === true) {
|
||
|
truncationCharacter = ` ${truncationCharacter} `;
|
||
|
}
|
||
|
|
||
|
const half = Math.floor(columns / 2);
|
||
|
|
||
|
if (preferTruncationOnSpace) {
|
||
|
const spaceNearFirstBreakPoint = getIndexOfNearestSpace(text, half);
|
||
|
const spaceNearSecondBreakPoint = getIndexOfNearestSpace(text, length - (columns - half) + 1, true);
|
||
|
return sliceAnsi(text, 0, spaceNearFirstBreakPoint) + truncationCharacter + sliceAnsi(text, spaceNearSecondBreakPoint, length).trim();
|
||
|
}
|
||
|
|
||
|
return (
|
||
|
sliceAnsi(text, 0, half)
|
||
|
+ truncationCharacter
|
||
|
+ sliceAnsi(text, length - (columns - half) + stringWidth(truncationCharacter), length)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if (position === 'end') {
|
||
|
if (preferTruncationOnSpace) {
|
||
|
const nearestSpace = getIndexOfNearestSpace(text, columns - 1);
|
||
|
return sliceAnsi(text, 0, nearestSpace) + truncationCharacter;
|
||
|
}
|
||
|
|
||
|
if (space === true) {
|
||
|
truncationCharacter = ` ${truncationCharacter}`;
|
||
|
}
|
||
|
|
||
|
return sliceAnsi(text, 0, columns - stringWidth(truncationCharacter)) + truncationCharacter;
|
||
|
}
|
||
|
|
||
|
throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${position}`);
|
||
|
}
|
||
|
|
||
|
const lineSplitRE = /\r?\n/;
|
||
|
const stackIgnorePatterns = [
|
||
|
"node:internal",
|
||
|
"/vitest/dist/",
|
||
|
"/vitest/src/",
|
||
|
"/vite-node/dist/",
|
||
|
"/vite-node/src/",
|
||
|
"/node_modules/chai/",
|
||
|
"/node_modules/tinypool/",
|
||
|
"/node_modules/tinyspy/"
|
||
|
];
|
||
|
function extractLocation(urlLike) {
|
||
|
if (!urlLike.includes(":"))
|
||
|
return [urlLike];
|
||
|
const regExp = /(.+?)(?::(\d+))?(?::(\d+))?$/;
|
||
|
const parts = regExp.exec(urlLike.replace(/[()]/g, ""));
|
||
|
if (!parts)
|
||
|
return [urlLike];
|
||
|
return [parts[1], parts[2] || void 0, parts[3] || void 0];
|
||
|
}
|
||
|
function parseSingleStack(raw) {
|
||
|
let line = raw.trim();
|
||
|
if (line.includes("(eval "))
|
||
|
line = line.replace(/eval code/g, "eval").replace(/(\(eval at [^()]*)|(,.*$)/g, "");
|
||
|
let sanitizedLine = line.replace(/^\s+/, "").replace(/\(eval code/g, "(").replace(/^.*?\s+/, "");
|
||
|
const location = sanitizedLine.match(/ (\(.+\)$)/);
|
||
|
sanitizedLine = location ? sanitizedLine.replace(location[0], "") : sanitizedLine;
|
||
|
const [url, lineNumber, columnNumber] = extractLocation(location ? location[1] : sanitizedLine);
|
||
|
let method = location && sanitizedLine || "";
|
||
|
let file = url && ["eval", "<anonymous>"].includes(url) ? void 0 : url;
|
||
|
if (!file || !lineNumber || !columnNumber)
|
||
|
return null;
|
||
|
if (method.startsWith("async "))
|
||
|
method = method.slice(6);
|
||
|
if (file.startsWith("file://"))
|
||
|
file = file.slice(7);
|
||
|
file = resolve(file);
|
||
|
return {
|
||
|
method,
|
||
|
file,
|
||
|
line: parseInt(lineNumber),
|
||
|
column: parseInt(columnNumber)
|
||
|
};
|
||
|
}
|
||
|
function parseStacktrace(e, full = false) {
|
||
|
if (!e)
|
||
|
return [];
|
||
|
if (e.stacks)
|
||
|
return e.stacks;
|
||
|
const stackStr = e.stack || e.stackStr || "";
|
||
|
const stackFrames = stackStr.split("\n").map((raw) => {
|
||
|
const stack = parseSingleStack(raw);
|
||
|
if (!stack || !full && stackIgnorePatterns.some((p) => stack.file.includes(p)))
|
||
|
return null;
|
||
|
return stack;
|
||
|
}).filter(notNullish);
|
||
|
e.stacks = stackFrames;
|
||
|
return stackFrames;
|
||
|
}
|
||
|
function positionToOffset(source, lineNumber, columnNumber) {
|
||
|
const lines = source.split(lineSplitRE);
|
||
|
let start = 0;
|
||
|
if (lineNumber > lines.length)
|
||
|
return source.length;
|
||
|
for (let i = 0; i < lineNumber - 1; i++)
|
||
|
start += lines[i].length + 1;
|
||
|
return start + columnNumber;
|
||
|
}
|
||
|
function offsetToLineNumber(source, offset) {
|
||
|
if (offset > source.length) {
|
||
|
throw new Error(
|
||
|
`offset is longer than source length! offset ${offset} > length ${source.length}`
|
||
|
);
|
||
|
}
|
||
|
const lines = source.split(lineSplitRE);
|
||
|
let counted = 0;
|
||
|
let line = 0;
|
||
|
for (; line < lines.length; line++) {
|
||
|
const lineLength = lines[line].length + 1;
|
||
|
if (counted + lineLength >= offset)
|
||
|
break;
|
||
|
counted += lineLength;
|
||
|
}
|
||
|
return line + 1;
|
||
|
}
|
||
|
|
||
|
export { positionToOffset as a, parseStacktrace as b, cliTruncate as c, stringWidth as d, sliceAnsi as e, lineSplitRE as l, offsetToLineNumber as o, parseSingleStack as p, stripAnsi as s };
|