Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
error-type
Advanced tools
Create custom error types.
errorType('errorName')
new CustomError('message', { exampleProp: true })
error.cause
on
older Node.js and browsersimport errorType from 'error-type'
const UserError = errorType('UserError')
const SystemError = errorType('SystemError')
// Throwing with custom error types
try {
throw new UserError('message')
} catch (error) {
console.log(error.name) // 'UserError'
console.log(error instanceof UserError) // true
}
// Error properties can be set using the second argument
const userError = new UserError('message', { userId: 56 })
console.log(userError.userId) // 56
// `error.cause` can be used even in older Node.js or browsers
try {
doSomething()
} catch (cause) {
throw new UserError('message', { cause })
}
const DatabaseError = errorType('DatabaseError', (error, params) => {
error.dbId = params.databaseId
})
const databaseError = new DatabaseError('message', { databaseId: 2 })
console.log(databaseError.dbId) // 2
console.log(databaseError.databaseId) // undefined
npm install error-type
This package is an ES module and must be loaded using
an import
or import()
statement,
not require()
.
errorName
string
onCreate
(error, params) => void
Return value: ErrorType
onCreate(error, params)
is optional and is called on
new ErrorType('message', params)
.
By default, it sets any params
as error
properties. However, you can
override it with any custom logic to validate, normalize params
, etc.
Some error properties are the same for all instances of a given error type. In other words, those are properties of the error type, not of specific instances.
Those can be set by using a separate object with each error type's properties.
They can be assigned using onCreate()
:
const ERROR_PROPS = {
UserError: { isBug: false },
DatabaseError: { isBug: false },
CoreError: { isBug: true },
}
const onCreate = function (error, params) {
Object.assign(error, params, ERROR_PROPS[error.name])
}
const UserError = errorType('UserError', onCreate)
const DatabaseError = errorType('DatabaseError', onCreate)
const CoreError = errorType('CoreError', onCreate)
Alternatively, the logic that catches/handles the error can retrieve those error properties instead:
const UserError = errorType('UserError')
const DatabaseError = errorType('DatabaseError')
const CoreError = errorType('CoreError')
const ERROR_PROPS = {
UserError: { isBug: false },
DatabaseError: { isBug: false },
CoreError: { isBug: true },
}
try {
doSomething()
} catch (error) {
const isBug =
error instanceof Error && error.name in ERROR_PROPS
? ERROR_PROPS[error.name].isBug
: true
}
A common pattern for custom error types is:
class CustomError extends Error {
constructor(message) {
super(message)
this.name = 'CustomError'
}
}
However, this has several issues (which error-type
handles):
error.cause
is not seterror.name
is:
for (const key in error)
will iterate over name
, which is unexpected.Error [CustomError]
instead of CustomError
.Some Error
polyfills (such as
es-shims/error-cause
prevent
extending from it. This library includes
some logic
to fix this.
modern-errors
: Handle errors
like it's 2022 🔮create-error-types
: Create
multiple error typeserror-serializer
: Convert
errors to/from plain objectsnormalize-exception
:
Normalize exceptions/errorsmerge-error-cause
: Merge an
error with its cause
error-cause-polyfill
:
Polyfill error.cause
handle-cli-error
: 💣 Error
handler for CLI applications 💥log-process-errors
: Show
some ❤ to Node.js process errorsFor 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!
2.0.1
FAQs
Create custom error types
The npm package error-type receives a total of 1 weekly downloads. As such, error-type popularity was classified as not popular.
We found that error-type demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.