(urlLike: string)
| 45 | const REGEXP_VITEST = new RegExp(`vitest=\\d{${NOW_LENGTH}}`) |
| 46 | |
| 47 | function extractLocation(urlLike: string) { |
| 48 | // Fail-fast but return locations like "(native)" |
| 49 | if (!urlLike.includes(':')) { |
| 50 | return [urlLike] |
| 51 | } |
| 52 | |
| 53 | const regExp = /(.+?)(?::(\d+))?(?::(\d+))?$/ |
| 54 | const parts = regExp.exec(urlLike.replace(/^\(|\)$/g, '')) |
| 55 | if (!parts) { |
| 56 | return [urlLike] |
| 57 | } |
| 58 | let url = parts[1] |
| 59 | if (url.startsWith('async ')) { |
| 60 | url = url.slice(6) |
| 61 | } |
| 62 | if (url.startsWith('http:') || url.startsWith('https:')) { |
| 63 | const urlObj = new URL(url) |
| 64 | urlObj.searchParams.delete('import') |
| 65 | urlObj.searchParams.delete('browserv') |
| 66 | url = urlObj.pathname + urlObj.hash + urlObj.search |
| 67 | } |
| 68 | if (url.startsWith('/@fs/')) { |
| 69 | const isWindows = /^\/@fs\/[a-zA-Z]:\//.test(url) |
| 70 | url = url.slice(isWindows ? 5 : 4) |
| 71 | } |
| 72 | if (url.includes('vitest=')) { |
| 73 | url = url.replace(REGEXP_VITEST, '').replace(/[?&]$/, '') |
| 74 | } |
| 75 | return [url, parts[2] || undefined, parts[3] || undefined] |
| 76 | } |
| 77 | |
| 78 | export function parseSingleFFOrSafariStack(raw: string): ParsedStack | null { |
| 79 | let line = raw.trim() |
no test coverage detected