@@ -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