issues.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const jsonize = function(err, filter, space) {
  2. if (typeof(err) != 'object')
  3. return err
  4. var plainObject = {}
  5. Object.getOwnPropertyNames(err).forEach(function(key) {
  6. plainObject[key] = err[key]
  7. })
  8. return plainObject
  9. }
  10. module.exports = {
  11. _interpretError: function(err) {
  12. var s_err = {}
  13. if (typeof(err) === 'string') {
  14. // Simple string processing
  15. s_err.message = err
  16. s_err.stack = err
  17. }
  18. else if (!(err instanceof Error) && typeof(err) === 'object') {
  19. // JSON processing
  20. s_err.message = err
  21. s_err.stack = err
  22. }
  23. else if (err instanceof Error) {
  24. // Error object type processing
  25. err.stack
  26. if (err.__error_callsites) {
  27. var stackFrames = []
  28. err.__error_callsites.forEach(function(callSite) {
  29. stackFrames.push({ file_name: callSite.getFileName(), line_number: callSite.getLineNumber()})
  30. })
  31. err.stackframes = stackFrames
  32. delete err.__error_callsites
  33. }
  34. s_err = err
  35. }
  36. return jsonize(s_err)
  37. },
  38. /**
  39. * Sends an Issue
  40. * @memberof TX2
  41. * @param {string|Error} err Error object or string to notify
  42. * @example
  43. * tx2.issue(new Error('bad error')
  44. */
  45. issue: function(err) {
  46. var ret_err = this._interpretError(err)
  47. this.send({
  48. type : 'process:exception',
  49. data : ret_err
  50. })
  51. return ret_err
  52. }
  53. }