@@ -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)-' + UID + '-(\\d+)__@"' , 'g' ) ;
14
+ var PLACE_HOLDER_REGEXP = new RegExp ( '(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L )-' + 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 .* ?\( / ;
@@ -72,6 +72,7 @@ module.exports = function serialize(obj, options) {
72
72
var undefs = [ ] ;
73
73
var infinities = [ ] ;
74
74
var bigInts = [ ] ;
75
+ var urls = [ ] ;
75
76
76
77
// Returns placeholders for functions and regexps (identified by index)
77
78
// which are later replaced by their string representation.
@@ -114,6 +115,10 @@ module.exports = function serialize(obj, options) {
114
115
return '@__A-' + UID + '-' + ( arrays . push ( origValue ) - 1 ) + '__@' ;
115
116
}
116
117
}
118
+
119
+ if ( origValue instanceof URL ) {
120
+ return '@__L-' + UID + '-' + ( urls . push ( origValue ) - 1 ) + '__@' ;
121
+ }
117
122
}
118
123
119
124
if ( type === 'function' ) {
@@ -205,7 +210,7 @@ module.exports = function serialize(obj, options) {
205
210
str = str . replace ( UNSAFE_CHARS_REGEXP , escapeUnsafeChars ) ;
206
211
}
207
212
208
- 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 ) {
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 ) {
209
214
return str ;
210
215
}
211
216
@@ -252,6 +257,10 @@ module.exports = function serialize(obj, options) {
252
257
return "BigInt(\"" + bigInts [ valueIndex ] + "\")" ;
253
258
}
254
259
260
+ if ( type === 'L' ) {
261
+ return "new URL(\"" + urls [ valueIndex ] . toString ( ) + "\")" ;
262
+ }
263
+
255
264
var fn = functions [ valueIndex ] ;
256
265
257
266
return serializeFunc ( fn ) ;
0 commit comments