rsnext/packages/next/lib/is-error.ts
JJ Kasper 57a87050e7
Add util for normalizing errors (#33159)
* JSON.stringify generic errors

* Add util for normalizing errors

* lint-fix

* Add better error for null case as well

Co-authored-by: Michael Ozeryansky <mozeryansky@users.noreply.github.com>
2022-01-11 14:40:03 -06:00

41 lines
1.1 KiB
TypeScript

import { isPlainObject } from './is-plain-object'
// We allow some additional attached properties for Errors
export interface NextError extends Error {
type?: string
page?: string
code?: string | number
cancelled?: boolean
}
export default function isError(err: unknown): err is NextError {
return (
typeof err === 'object' && err !== null && 'name' in err && 'message' in err
)
}
export function getProperError(err: unknown): Error {
if (isError(err)) {
return err
}
if (process.env.NODE_ENV === 'development') {
// provide better error for case where `throw undefined`
// is called in development
if (typeof err === 'undefined') {
return new Error(
'An undefined error was thrown, ' +
'see here for more info: https://nextjs.org/docs/messages/threw-undefined'
)
}
if (err === null) {
return new Error(
'A null error was thrown, ' +
'see here for more info: https://nextjs.org/docs/messages/threw-undefined'
)
}
}
return new Error(isPlainObject(err) ? JSON.stringify(err) : err + '')
}