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
- Deep merging
- Merge with either high or low priority
- Copy another error's properties
- Exception-safe: this never throws
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) // trueException safety
const error = new Error('one')
Object.defineProperty(error, 'nonWritable', { value: true, writable: false })
setErrorProps(error, { nonWritable: false })
console.log(error.nonWritable) // true// Does not throw even though the arguments are invalid
setErrorProps('', '')Install
npm install set-error-propsThis package is an ES module and must be loaded using
an import or import() statement,
not require().
API
setErrorProps(error, props, options?)
error Errorprops Error | objectoptions Options?
Assign props to error.
Options
Optional object with the following properties.
lowPriority
Type: boolean
Default: false
Whether props should have higher 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 itscauseerror-cause-polyfill: Polyfillerror.causehandle-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!