@@ -11,7 +11,7 @@ var randomBytes = require('randombytes');
11
11
// Generate an internal UID to make the regexp pattern harder to guess.
12
12
var UID_LENGTH = 16 ;
13
13
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' ) ;
15
15
16
16
var IS_NATIVE_CODE_REGEXP = / \{ \s * \[ n a t i v e c o d e \] \s * \} / g;
17
17
var IS_PURE_FUNCTION = / f u n c t i o n .* ?\( / ;
@@ -74,6 +74,7 @@ module.exports = function serialize(obj, options) {
74
74
var bigInts = [ ] ;
75
75
var urls = [ ] ;
76
76
var nans = [ ] ;
77
+ var errors = [ ] ;
77
78
78
79
// Returns placeholders for functions and regexps (identified by index)
79
80
// which are later replaced by their string representation.
@@ -114,6 +115,10 @@ module.exports = function serialize(obj, options) {
114
115
return '@__S-' + UID + '-' + ( sets . push ( origValue ) - 1 ) + '__@' ;
115
116
}
116
117
118
+ if ( origValue instanceof Error ) {
119
+ return '@__E-' + UID + '-' + ( errors . push ( origValue ) - 1 ) + '__@' ;
120
+ }
121
+
117
122
if ( origValue instanceof Array ) {
118
123
var isSparse = origValue . filter ( function ( ) { return true } ) . length !== origValue . length ;
119
124
if ( isSparse ) {
@@ -215,7 +220,7 @@ module.exports = function serialize(obj, options) {
215
220
str = str . replace ( UNSAFE_CHARS_REGEXP , escapeUnsafeChars ) ;
216
221
}
217
222
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 ) {
219
224
return str ;
220
225
}
221
226
@@ -270,6 +275,13 @@ module.exports = function serialize(obj, options) {
270
275
return 'NaN' ;
271
276
}
272
277
278
+ if ( type === 'E' ) {
279
+ return "new Error(" + serialize ( {
280
+ name : errors [ valueIndex ] . name ,
281
+ message : errors [ valueIndex ] . message
282
+ } , options ) + ")" ;
283
+ }
284
+
273
285
var fn = functions [ valueIndex ] ;
274
286
275
287
return serializeFunc ( fn ) ;
0 commit comments