1.0.0 • Published 4 years ago

@anandsuresh/smart-error v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

smart-error

node (scoped) npm (scoped) npm Travis license GitHub followers Twitter Follow

A SmartError is a wrapper around the JavaScript Error class providing a few additional fields:

  • code: A unique code identifying the error
  • metadata: Optional metadata useful for debugging (e.g. the arguments passed to the function that threw the error)
  • cause: An optional error that is being wrapped by the SmartError

usage

const {create} = require('@anandsuresh/smart-error')

const MyError = create('MyError', {
  Unexpected: 'An unexpected error occurred.',
  BadArguments: 'One or more arguments passed were invalid.',
  TimedOut: 'A timeout occurred waiting for the operation to complete.'
})


function isOddNumber(number) {
  if (typeof number !== 'number')
    throw MyError.BadArguments(number)

  return (number % 2 === 0)
}

try {
  console.log(`isOddNumber(3) = ${isOddNumber(3)}`)
} catch (e) {
  if (e.isBadArguments) {
    console.error(`The argument $(e.metadata) is not a number!`)
  } else {
    console.error(e.toDetailedString())
  }
}

api

create(errorName, errors)

create takes 2 arguments:

  • errorName: the name of the error. E.g. 'MyError'
  • errors: an object mapping error codes to error messages. E.g. {Unexpected: 'An unexpected error occurred'}

The create() function creates a static function for each error code and an getter function to check if that is the specific error wrapped by the SmartError. Consider the following example:

const {create} = require('@anandsuresh/smart-error')

const MyError = create('MyError', {
  Unexpected: 'An unexpected error occurred.',
  BadArguments: 'One or more arguments passed were invalid.',
  TimedOut: 'A timeout occurred waiting for the operation to complete.'
})

The newly created MyError class will inherit from the JavaScript Error class and have the following instance properties:

  • name: The name of the error, in this case 'MyError'
  • code: The unique code of the error (Unexpected, BadArguments, TimedOut)
  • message: A human-readable error message
  • metadata: Optional metadata associated with the error (e.g. the arguments passed to the function that threw the error)
  • cause: An optional error that is being wrapped by the SmartError
  • stack: The stack-trace generated by the error
  • isSmartError: Helper property that wraps an instanceof check to return whether or not the instance is a SmartError
  • isUnexpected: Helper property that returns true if the MyError instance has the code Unexpected
  • isBadArguments: Helper property that returns true if the MyError instance has the code BadArguments
  • isTimedOut: Helper property that returns true if the MyError instance has the code TimedOut

MyError will also receive the following set of class methods:

  • Unexpected(metadata, cause): Creates an returns an instance of MyError with the code property set to Unexpected
  • BadArguments(metadata, cause): Creates an returns an instance of MyError with the code property set to BadArguments
  • TimedOut(metadata, cause): Creates an returns an instance of MyError with the code property set to TimedOut
1.0.0

4 years ago