rsnext/packages/next/lib/is-error.ts
Pieter Bogaerts 662fa6362a
fix: fixes #33314 move is-plain-object for es5 compilation (#33690)
## 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.
2022-01-27 17:59:42 +00:00

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 + '')
}