error-cause-polyfill
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.0 • Public • Published

    Codecov Node TypeScript Twitter Medium

    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 work
    • Error.stackTraceLimit still works
    • error.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

    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 ❤️. 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!

    Install

    npm i error-cause-polyfill

    DownloadsWeekly Downloads

    52

    Version

    1.1.0

    License

    Apache-2.0

    Unpacked Size

    25.6 kB

    Total Files

    12

    Last publish

    Collaborators

    • ehmicky