utils-error-to-json

Returns a JSON representation of an error object.

Usage no npm install needed!

<script type="module">
  import utilsErrorToJson from 'https://cdn.skypack.dev/utils-error-to-json';
</script>

README

toJSON

NPM version Build Status Coverage Status Dependencies

Returns a JSON representation of an error object.

Installation

$ npm install utils-error-to-json

Usage

var toJSON = require( 'utils-error-to-json' );

toJSON()

Returns a JSON representation of an error object.

var err = new Error( 'beep' );

var json = toJSON( err );
/*
  {
    "type": "Error",
    "name": "Error", // if present
    "message": "beep",
    "stack": "<stack>" // if present
  }
*/

The JSON object is guaranteed to have the following properties:

  • type: error type
  • message: error message

The only standardized cross-platform property is message. Depending on the platform, the following properties may be present:

  • name: error name
  • stack: stack trace
  • code: error code (Node.js system errors)
  • errno: error code string (Node.js system errors)
  • syscall: string representing the failed system call (Node.js system errors)

The function also serializes all enumerable properties.

var err = new Error( 'beep' );
err.a = 'b';
err.c = { 'd': 'e' };

var json = toJSON( err );
/*
  {
    "type": "Error",
    "name": "Error", // if present
    "message": "beep",
    "stack": "<stack>", // if present
    "a": "b",
    "c": {
      "d": "e"
    }
  }
*/

Notes

  • Supported built-in error types:

  • The implementation supports custom error types and sets the type field to the closest built-in error type.

    function CustomError( msg ) {
        this.name = 'CustomError';
        this.message = msg || '';
        this.stack = ( new TypeError() ).stack;
        return this;
    }
    CustomError.prototype = Object.create( TypeError.prototype );
    CustomError.prototype.constructor = CustomError;
    
    var err = new CustomError( 'boop' );
    
    var json = toJSON( err );
    /*
      {
        "type": "TypeError",
        "name": "CustomError", 
        "message": "boop",
        "stack": "<stack>"
      }
    */
    

Examples

var toJSON = require( 'utils-error-to-json' );

var err = new Error( 'beep' );
console.log( toJSON( err ) );
/*
  {
    "type": "Error",
    "name": "Error",
    "message": "beep",
    "stack": "<stack>"
  }
*/

err = new TypeError( 'invalid type' );
console.log( toJSON( err ) );
/*
  {
    "type": "TypeError",
    "name": "TypeError",
    "message": "invalid type",
    "stack": "<stack>"
  }
*/

err = new SyntaxError( 'bad syntax' );
console.log( toJSON( err ) );
/*
  {
    "type": "SyntaxError",
    "name": "SyntaxError",
    "message": "bad syntax",
    "stack": "<stack>"
  }
*/

err = new ReferenceError( 'unknown variable' );
console.log( toJSON( err ) );
/*
  {
    "type": "ReferenceError",
    "name": "ReferenceError",
    "message": "unknown variable",
    "stack": "<stack>"
  }
*/

err = new URIError( 'bad URI' );
console.log( toJSON( err ) );
/*
  {
    "type": "URIError",
    "name": "URIError",
    "message": "bad URI",
    "stack": "<stack>"
  }
*/

err = new RangeError( 'value out-of-range' );
console.log( toJSON( err ) );
/*
  {
    "type": "RangeError",
    "name": "RangeError",
    "message": "value out-of-range",
    "stack": "<stack>"
  }
*/

err = new EvalError( 'eval error' );
console.log( toJSON( err ) );
/*
  {
    "type": "EvalError",
    "name": "EvalError",
    "message": "eval error",
    "stack": "<stack>"
  }
*/

To run the example code from the top-level application directory,

$ node ./examples/index.js

Tests

Unit

This repository uses tape for unit tests. To run the tests, execute the following command in the top-level application directory:

$ make test

All new feature development should have corresponding unit tests to validate correct functionality.

Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:

$ make test-cov

Istanbul creates a ./reports/coverage directory. To access an HTML version of the report,

$ make view-cov

Browser Support

This repository uses Testling for browser testing. To run the tests in a (headless) local web browser, execute the following command in the top-level application directory:

$ make test-browsers

To view the tests in a local web browser,

$ make view-browser-tests

License

MIT license.

Copyright

Copyright © 2015. Athan Reines.