@@ -11,7 +11,7 @@ var randomBytes = require('randombytes');
1111// Generate an internal UID to make the regexp pattern harder to guess.
1212var UID_LENGTH = 16 ;
1313var 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' ) ;
1515
1616var IS_NATIVE_CODE_REGEXP = / \{ \s * \[ n a t i v e c o d e \] \s * \} / g;
1717var IS_PURE_FUNCTION = / f u n c t i o n .* ?\( / ;
@@ -73,6 +73,7 @@ module.exports = function serialize(obj, options) {
7373 var infinities = [ ] ;
7474 var bigInts = [ ] ;
7575 var urls = [ ] ;
76+ var nans = [ ] ;
7677
7778 // Returns placeholders for functions and regexps (identified by index)
7879 // which are later replaced by their string representation.
@@ -83,6 +84,10 @@ module.exports = function serialize(obj, options) {
8384 deleteFunctions ( value ) ;
8485 }
8586
87+ if ( typeof value === 'number' && isNaN ( value ) ) {
88+ return '@__N-' + UID + '-' + ( nans . push ( value ) - 1 ) + '__@' ;
89+ }
90+
8691 if ( ! value && value !== undefined && value !== BigInt ( 0 ) ) {
8792 return value ;
8893 }
@@ -210,7 +215,7 @@ module.exports = function serialize(obj, options) {
210215 str = str . replace ( UNSAFE_CHARS_REGEXP , escapeUnsafeChars ) ;
211216 }
212217
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 ) {
214219 return str ;
215220 }
216221
@@ -261,6 +266,10 @@ module.exports = function serialize(obj, options) {
261266 return "new URL(" + serialize ( urls [ valueIndex ] . toString ( ) , options ) + ")" ;
262267 }
263268
269+ if ( type === 'N' ) {
270+ return 'NaN' ;
271+ }
272+
264273 var fn = functions [ valueIndex ] ;
265274
266275 return serializeFunc ( fn ) ;
0 commit comments