Skip to content

Commit 761b7f5

Browse files
authored
fix(check): add type-guarding for non-esbuild errors (#1004)
1 parent 9f2e0bc commit 761b7f5

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

src/node/check.ts

+37-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from 'node:path'
22

3-
import esbuild, {type BuildFailure} from 'esbuild'
3+
import esbuild, {type BuildFailure, type Message} from 'esbuild'
44

55
import {createConsoleSpy} from './consoleSpy'
66
import {loadConfig, loadPkgWithReporting} from './core'
@@ -130,10 +130,20 @@ async function checkExports(
130130
logger.log()
131131
}
132132
} catch (err) {
133-
const {errors} = err as BuildFailure
133+
if (isEsbuildFailure(err)) {
134+
const {errors} = err
134135

135-
for (const msg of errors) {
136-
printEsbuildMessage(logger.error, msg)
136+
for (const msg of errors) {
137+
printEsbuildMessage(logger.error, msg)
138+
139+
logger.log()
140+
}
141+
} else if (err instanceof Error) {
142+
logger.error(err.stack || err.message)
143+
144+
logger.log()
145+
} else {
146+
logger.error(`${err}`)
137147

138148
logger.log()
139149
}
@@ -155,3 +165,26 @@ function printEsbuildMessage(log: (...args: unknown[]) => void, msg: esbuild.Mes
155165
log(msg.detail || msg.text)
156166
}
157167
}
168+
169+
function isEsbuildFailure(err: unknown): err is BuildFailure {
170+
return (
171+
err instanceof Error &&
172+
'errors' in err &&
173+
Array.isArray(err.errors) &&
174+
err.errors.every(isEsbuildMessage) &&
175+
'warnings' in err &&
176+
Array.isArray(err.warnings) &&
177+
err.warnings.every(isEsbuildMessage)
178+
)
179+
}
180+
181+
function isEsbuildMessage(msg: unknown): msg is Message {
182+
return (
183+
typeof msg === 'object' &&
184+
msg !== null &&
185+
'text' in msg &&
186+
typeof msg.text === 'string' &&
187+
'location' in msg &&
188+
(msg.location === null || typeof msg.location === 'object')
189+
)
190+
}

0 commit comments

Comments
 (0)