-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
error.ts
48 lines (39 loc) · 1.17 KB
/
error.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import Filter from 'ansi-to-html'
import type { ErrorWithDiff } from 'vitest'
import { parseStacktrace } from '@vitest/utils/source-map'
export function shouldOpenInEditor(name: string, fileName?: string) {
return fileName && name.endsWith(fileName)
}
export async function openInEditor(name: string, line: number, column: number) {
const url = encodeURI(`${name}:${line}:${column}`)
await fetch(`/__open-in-editor?file=${url}`)
}
export function createAnsiToHtmlFilter(dark: boolean) {
return new Filter({
fg: dark ? '#FFF' : '#000',
bg: dark ? '#000' : '#FFF',
})
}
function isPrimitive(value: unknown) {
return value === null || (typeof value !== 'function' && typeof value !== 'object')
}
export function parseError(e: unknown) {
let error = e as ErrorWithDiff
if (isPrimitive(e)) {
error = {
message: String(error).split(/\n/g)[0],
stack: String(error),
name: '',
}
}
if (!e) {
const err = new Error('unknown error')
error = {
message: err.message,
stack: err.stack,
name: '',
}
}
error.stacks = parseStacktrace(error.stack || error.stackStr || '', { ignoreStackEntries: [] })
return error
}