Skip to content

Commit 11cc50d

Browse files
committed
Add support for errors
Signed-off-by: Evangelos Lamprou <[email protected]>
1 parent a3c2614 commit 11cc50d

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

index.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var randomBytes = require('randombytes');
1111
// Generate an internal UID to make the regexp pattern harder to guess.
1212
var UID_LENGTH = 16;
1313
var UID = generateUID();
14-
var PLACE_HOLDER_REGEXP = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L|N)-' + UID + '-(\\d+)__@"', 'g');
14+
var PLACE_HOLDER_REGEXP = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L|N|E)-' + UID + '-(\\d+)__@"', 'g');
1515

1616
var IS_NATIVE_CODE_REGEXP = /\{\s*\[native code\]\s*\}/g;
1717
var IS_PURE_FUNCTION = /function.*?\(/;
@@ -74,6 +74,7 @@ module.exports = function serialize(obj, options) {
7474
var bigInts = [];
7575
var urls = [];
7676
var nans = [];
77+
var errors = [];
7778

7879
// Returns placeholders for functions and regexps (identified by index)
7980
// which are later replaced by their string representation.
@@ -114,6 +115,10 @@ module.exports = function serialize(obj, options) {
114115
return '@__S-' + UID + '-' + (sets.push(origValue) - 1) + '__@';
115116
}
116117

118+
if (origValue instanceof Error) {
119+
return '@__E-' + UID + '-' + (errors.push(origValue) - 1) + '__@';
120+
}
121+
117122
if(origValue instanceof Array) {
118123
var isSparse = origValue.filter(function(){return true}).length !== origValue.length;
119124
if (isSparse) {
@@ -215,7 +220,7 @@ module.exports = function serialize(obj, options) {
215220
str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);
216221
}
217222

218-
if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0 && nans.length === 0) {
223+
if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0 && nans.length === 0 && errors.length === 0) {
219224
return str;
220225
}
221226

@@ -270,6 +275,13 @@ module.exports = function serialize(obj, options) {
270275
return 'NaN';
271276
}
272277

278+
if (type === 'E') {
279+
return "new Error(" + serialize({
280+
name: errors[valueIndex].name,
281+
message: errors[valueIndex].message
282+
}, options) + ")";
283+
}
284+
273285
var fn = functions[valueIndex];
274286

275287
return serializeFunc(fn);

0 commit comments

Comments
 (0)