Properly update an error's properties
MIT License
Properly update an error's properties.
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.
name
,message
, etc.)enumerable
, writable
,configurable
, get
/set
)import setErrorProps from 'set-error-props'
const error = new Error('one')
setErrorProps(error, { prop: true, message: 'two' })
console.log(error.prop) // true
console.log(error.message) // 'one': message is readonly
npm install set-error-props
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.
error
Error | object
props
Error | object
options
Options?
Return value: Error
Assigns props
to error
, then returns error
.
Type: boolean
Default: false
Prevents overriding existing properties.
const error = new Error('one')
setErrorProps(error, { message: 'two' })
console.log(error.message) // 'one'
const error = new Error('one')
setErrorProps(error, { toString: () => 'injected' })
console.log(error.toString()) // 'Error: one'
console.log(Error.prototype.toString()) // 'Error'
const error = new Error('message')
error.one = true
setErrorProps(error, { one: false, two: true }, { soft: true })
console.log(error.one) // true
console.log(error.two) // true
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
const error = new Error('message')
// Properties that start with `_` are not enumerable
setErrorProps(error, { _one: true, two: true })
console.log(error._one) // true
console.log(error.two) // true
console.log(Object.keys(error)) // ['two']
console.log(error) // Prints `two` but not `_one`
const error = new Error('message')
Object.defineProperty(error, 'prop', {
value: false,
enumerable: false,
writable: true,
configurable: true,
})
setErrorProps(error, { prop: true })
console.log(error.prop) // true
console.log(Object.getOwnPropertyDescriptor(error, 'prop').enumerable) // false
const error = new Proxy(new Error('message'), {
set: () => {
throw new Error('example')
},
defineProperty: () => {
throw new Error('example')
},
})
setErrorProps(error, { prop: true }) // This does not throw
modern-errors
: Handle errors inerror-custom-class
: Createerror-class-utils
: Utilitieserror-serializer
: Convertnormalize-exception
:is-error-instance
: Check ifError
instanceset-error-class
: Properlyset-error-message
: Properlywrap-error-message
:set-error-stack
: Properlymerge-error-cause
: Merge ancause
error-cause-polyfill
:error.cause
handle-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!