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
:
Error
child classes still workError.stackTraceLimit
error.stack
does not include the polyfill's internal code (in Node.js andUnlike
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 inerror-custom-class
: Createerror-class-utils
: Utilitieserror-serializer
: Convertnormalize-exception
:is-error-instance
: Check ifError
instancemerge-error-cause
: Merge ancause
set-error-class
: Properlyset-error-message
: Properlywrap-error-message
:set-error-props
: Properlyset-error-stack
: Properlyhandle-cli-error
: 💣 Errorlog-process-errors
: Showerror-http-response
:winston-error-format
: LogFor 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!