Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/ParseError.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,14 @@ class ParseError extends Error {
this.code = code;
Object.defineProperty(this, 'message', {
enumerable: true,
value: message,
value:
typeof message === 'string'
? message
: typeof message === 'object' &&
typeof message.toString === 'function' &&
message.toString() !== '[object Object]'
? message.toString()
: JSON.stringify(message),
});
}

Expand Down
23 changes: 23 additions & 0 deletions src/__tests__/ParseError-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,27 @@ describe('ParseError', () => {
code: 123,
});
});

it('message must be a string', () => {
/**
* error as object
*/
const someRandomError = { code: 420, message: 'time to chill' };
const error = new ParseError(1337, someRandomError);
expect(JSON.parse(JSON.stringify(error))).toEqual({
message: JSON.stringify(someRandomError),
code: 1337,
});

/**
* error as an Error instance
*/
const someRandomError2 = new Error('time to relax');
const error2 = new ParseError(420, someRandomError2);

expect(JSON.parse(JSON.stringify(error2))).toEqual({
message: 'Error: time to relax',
code: 420,
});
});
});