index.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. 'use strict'
  2. var util = require('util')
  3. /**
  4. * Make custom error types that pass `instanceof` checks, have stack traces and
  5. * support custom messages and properties.
  6. * @module
  7. */
  8. function extendErrorType (base, name, builder) {
  9. var errorConstructor = function () {
  10. Error.captureStackTrace && Error.captureStackTrace(this, this.constructor)
  11. if (builder) builder.apply(this, arguments)
  12. this.name = name
  13. }
  14. util.inherits(errorConstructor, base)
  15. errorConstructor.prototype.withCause = function (cause) {
  16. this.cause = cause
  17. if (this.message && cause.message) {
  18. this.message += ': ' + cause.message
  19. }
  20. return this
  21. }
  22. return errorConstructor
  23. }
  24. function defineErrorType (name, builder) {
  25. return extendErrorType(Error, name, builder)
  26. }
  27. function extendErrorTypeIn (container, base, name, builder) {
  28. container[name] = extendErrorType(base, name, builder)
  29. }
  30. function defineErrorTypeIn (container, name, builder) {
  31. extendErrorTypeIn(container, Error, name, builder)
  32. }
  33. exports.extend = extendErrorType
  34. exports.define = defineErrorType
  35. exports.extendIn = extendErrorTypeIn
  36. exports.defineIn = defineErrorTypeIn