@@ -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)-' + UID + '-(\\d+)__@"' , 'g' ) ;
14
+ var PLACE_HOLDER_REGEXP = new RegExp ( '(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L|N )-' + 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 .* ?\( / ;
@@ -73,6 +73,7 @@ module.exports = function serialize(obj, options) {
73
73
var infinities = [ ] ;
74
74
var bigInts = [ ] ;
75
75
var urls = [ ] ;
76
+ var nans = [ ] ;
76
77
77
78
// Returns placeholders for functions and regexps (identified by index)
78
79
// which are later replaced by their string representation.
@@ -83,6 +84,10 @@ module.exports = function serialize(obj, options) {
83
84
deleteFunctions ( value ) ;
84
85
}
85
86
87
+ if ( typeof value === 'number' && isNaN ( value ) ) {
88
+ return '@__N-' + UID + '-' + ( nans . push ( value ) - 1 ) + '__@' ;
89
+ }
90
+
86
91
if ( ! value && value !== undefined && value !== BigInt ( 0 ) ) {
87
92
return value ;
88
93
}
@@ -210,7 +215,7 @@ module.exports = function serialize(obj, options) {
210
215
str = str . replace ( UNSAFE_CHARS_REGEXP , escapeUnsafeChars ) ;
211
216
}
212
217
213
- 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 ) {
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 ) {
214
219
return str ;
215
220
}
216
221
@@ -261,6 +266,10 @@ module.exports = function serialize(obj, options) {
261
266
return "new URL(" + serialize ( urls [ valueIndex ] . toString ( ) , options ) + ")" ;
262
267
}
263
268
269
+ if ( type === 'N' ) {
270
+ return 'NaN' ;
271
+ }
272
+
264
273
var fn = functions [ valueIndex ] ;
265
274
266
275
return serializeFunc ( fn ) ;
0 commit comments