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.
Please reach out if you're looking for a Node.js API or CLI engineer (11 years of experience). Most recently I have been Netlify Build's and Netlify Plugins' technical lead for 2.5 years. I am available for full-time remote positions.
Unlike error-cause
:
- The package size is small (~50kB vs ~2000kB)
Error
child classes 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).
npm install error-cause-polyfill
This package works in both Node.js >=18.18.0 and browsers.
This is an ES module. It must be loaded using
an import
or import()
statement,
not require()
. If TypeScript is used, it must be configured to
output ES modules,
not CommonJS.
Return value: () => void
Modifies the global error classes (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()
Return value: object
Returns an object with each error class (Error
, TypeError
, etc.) but with
error.cause
support. If error.cause
is already supported, this returns the
global error classes as is.
Unlike polyfill()
, this does not modify the global error classes.
import { getErrors } from 'error-cause-polyfill'
const Errors = getErrors()
try {
doSomething()
} catch (cause) {
throw new Errors.Error('message', { cause })
}
Return value: boolean
Returns whether the global error classes currently support error.cause
.
import { hasSupport, polyfill } from 'error-cause-polyfill'
console.log(hasSupport()) // false
polyfill()
console.log(hasSupport()) // true
modern-errors
: Handle errors in a simple, stable, consistent wayerror-custom-class
: Create one error classerror-class-utils
: Utilities to properly create error classeserror-serializer
: Convert errors to/from plain objectsnormalize-exception
: Normalize exceptions/errorsis-error-instance
: Check if a value is anError
instancemerge-error-cause
: Merge an error with itscause
set-error-class
: Properly update an error's classset-error-message
: Properly update an error's messagewrap-error-message
: Properly wrap an error's messageset-error-props
: Properly update an error's propertiesset-error-stack
: Properly update an error's stackhandle-cli-error
: 💣 Error handler for CLI applications 💥log-process-errors
: Show some ❤ to Node.js process errorserror-http-response
: Create HTTP error responseswinston-error-format
: Log errors with Winston
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.
This project was made with ❤️. The simplest way to give back is by starring and sharing it online.
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!