Polyfill error.cause
.
error.cause
is a recent JavaScript feature to wrap errors.
try {
doSomething()
} catch (cause) {
throw new Error('message', { cause })
}
Unfortunately, it is not supported in Node <16.9.0, Opera nor Safari <15. This library adds support for it in those environments.
Differences with other polyfills
Unlike error-cause
:
- The package size is small (~50kB vs ~2000kB)
Error
child types still workError.stackTraceLimit
still workserror.stack
does not include the polyfill's internal code (in Node.js and Chrome)
Unlike core-js
/Babel, this does not require adding core-js
as a production dependency (~1000kB).
Install
npm install error-cause-polyfill
This package is an ES module and must be loaded using an import
or import()
statement, not require()
.
API
polyfill()
Return value: () => void
Modifies the global error types (Error
, TypeError
, etc.) so they support error.cause
. If error.cause
is already supported, this is a noop.
import 'error-cause-polyfill/auto'
try {
doSomething()
} catch (cause) {
throw new Error('message', { cause })
}
Or alternatively:
import { polyfill } from 'error-cause-polyfill'
polyfill()
try {
doSomething()
} catch (cause) {
throw new Error('message', { cause })
}
This returns a function to undo everything.
import { polyfill } from 'error-cause-polyfill'
const undoPolyfill = polyfill()
undoPolyfill()
getErrors()
Return value: object
Returns an object with each error type (Error
, TypeError
, etc.) but with error.cause
support. If error.cause
is already supported, this returns the global error types as is.
Unlike polyfill()
, this does not modify the global error types.
import { getErrors } from 'error-cause-polyfill'
const Errors = getErrors()
try {
doSomething()
} catch (cause) {
throw new Errors.Error('message', { cause })
}
hasSupport()
Return value: boolean
Returns whether the global error types currently support error.cause
.
import { hasSupport, polyfill } from 'error-cause-polyfill'
console.log(hasSupport()) // false
polyfill()
console.log(hasSupport()) // true
Related projects
modern-errors
: Handle errors like it's 2022๐ฎ error-type
: Create custom error typesnormalize-exception
: Normalize exceptions/errorsmerge-error-cause
: Merge an error with itscause
Support
For any question, don't hesitate to submit an issue on GitHub.
Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.
Contributing
This project was made with
If the documentation is unclear or has a typo, please click on the page's Edit
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!