Package Exports
- set-error-props
Readme
Properly update an error's properties.
Features
- Prevents overriding error core properties (
name
,message
, etc.) - Protects against prototype pollution
- Merges deeply
- Merges with either high or low priority
- Copies another error's properties
- Strict, deep TypeScript typing of the return value
- Handles invalid errors
Examples
Error core properties
import setErrorProps from 'set-error-props'
const error = new Error('one')
setErrorProps(error, { message: 'two' })
console.log(error.message) // 'one'
Prototype pollution
const error = new Error('one')
setErrorProps(error, { toString: () => 'injected' })
console.log(error.toString()) // 'Error: one'
console.log(Error.prototype.toString()) // 'Error'
Deep merging
// Deep merges plain objects and arrays
const error = new Error('message')
error.prop = { one: [true] }
setErrorProps(error, { prop: { one: [false], two: true } })
console.log(error.prop) // { one: [true, false], two: true }
Low priority merging
const error = new Error('message')
error.prop = { one: true }
setErrorProps(error, { prop: { one: false, two: true } }, { lowPriority: true })
console.log(error.prop) // { one: true, two: true }
Error copy
const error = new Error('one')
const secondError = new Error('two')
secondError.prop = true
setErrorProps(error, secondError)
console.log(error.message) // 'one'
console.log(error.prop) // true
Invalid errors
try {
throw 'not_an_error_instance'
} catch (error) {
setErrorProps(error, { prop: true }) // Converted to an error instance
}
Install
npm install set-error-props
This package is an ES module and must be loaded using
an import
or import()
statement,
not require()
.
API
setErrorProps(error, props, options?)
error
Error | unknown
props
Error | object
options
Options?
Return value: Error
Assigns props
to error
, then returns error
. If error
is not an Error
instance, it is converted to one.
Options
Optional object with the following properties.
lowPriority
Type: boolean
Default: false
Whether props
should have lower merging priority over error
or not.
Related projects
modern-errors
: Handle errors like it's 2022 🔮error-custom-classes
: Create multiple error classeserror-custom-class
: Create one error classerror-serializer
: Convert errors to/from plain objectsnormalize-exception
: Normalize exceptions/errorsmerge-error-cause
: Merge an error with itscause
error-cause-polyfill
: Polyfillerror.cause
handle-cli-error
: 💣 Error handler for CLI applications 💥log-process-errors
: Show some ❤ to Node.js process errors
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!