2022-01-27 18:59:42 +01:00
|
|
|
import { isPlainObject } from '../shared/lib/is-plain-object'
|
2022-01-11 21:40:03 +01:00
|
|
|
|
2021-09-16 18:06:57 +02:00
|
|
|
// We allow some additional attached properties for Errors
|
2021-10-21 01:23:44 +02:00
|
|
|
export interface NextError extends Error {
|
2021-09-16 18:06:57 +02:00
|
|
|
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
|
|
|
|
)
|
|
|
|
}
|
2022-01-11 21:40:03 +01:00
|
|
|
|
|
|
|
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 + '')
|
|
|
|
}
|