|
1 | 1 | import { isMainThread, parentPort } from 'worker_threads' |
2 | 2 | import colors from 'kleur' |
| 3 | +import { PandaError } from '@pandacss/shared' |
3 | 4 |
|
4 | | -export function handleError(error: any) { |
5 | | - if (error.loc) { |
| 5 | +export function handleError(error: unknown) { |
| 6 | + if (error instanceof PandaError) { |
| 7 | + console.error(colors.red(`${error.code}: ${error.message}`)) |
| 8 | + if (error.hint) { |
| 9 | + console.error(colors.dim(error.hint)) |
| 10 | + } |
| 11 | + if (error.cause instanceof Error) { |
| 12 | + console.error(colors.dim(`Caused by: ${error.cause.message}`)) |
| 13 | + } |
| 14 | + } else if (isLocError(error)) { |
6 | 15 | console.error(colors.bold(colors.red(`Error parsing: ${error.loc.file}:${error.loc.line}:${error.loc.column}`))) |
7 | | - } |
8 | | - if (error.frame) { |
9 | | - console.error(colors.red(error.message)) |
10 | | - console.error(colors.dim(error.frame)) |
| 16 | + if (error.frame) { |
| 17 | + console.error(colors.red(error.message)) |
| 18 | + console.error(colors.dim(error.frame)) |
| 19 | + } else { |
| 20 | + console.error(colors.red(error.message)) |
| 21 | + } |
11 | 22 | } else { |
12 | | - console.error(colors.red(error.message)) |
| 23 | + const message = error instanceof Error ? error.message : String(error) |
| 24 | + console.error(colors.red(message)) |
13 | 25 | } |
| 26 | + |
14 | 27 | process.exitCode = 1 |
15 | 28 | if (!isMainThread && parentPort) { |
16 | 29 | parentPort.postMessage('error') |
17 | 30 | } |
18 | 31 | } |
| 32 | + |
| 33 | +interface LocError { |
| 34 | + loc: { file: string; line: number; column: number } |
| 35 | + frame?: string |
| 36 | + message: string |
| 37 | +} |
| 38 | + |
| 39 | +function isLocError(error: unknown): error is LocError { |
| 40 | + return ( |
| 41 | + typeof error === 'object' && |
| 42 | + error !== null && |
| 43 | + 'loc' in error && |
| 44 | + typeof (error as any).loc === 'object' && |
| 45 | + 'message' in error |
| 46 | + ) |
| 47 | +} |
0 commit comments