662fa6362a
## Bug - [ ] Related issues linked using `fixes #33314` #33314 - [ ] Moved the `is-plain-object` file to the shared directory since it's emitted to the client and thus needs to be transpiled. This is just my 2nd PR so if I'm missing something please let me know.
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
import { isPlainObject } from '../shared/lib/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 + '')
|
|
}
|