@@ -20,6 +20,8 @@ export type SerializedValue =
20
20
{ d : string } |
21
21
{ u : string } |
22
22
{ bi : string } |
23
+ { m : SerializedValue } |
24
+ { se : SerializedValue } |
23
25
{ r : { p : string , f : string } } |
24
26
{ a : SerializedValue [ ] , id : number } |
25
27
{ o : { k : string , v : SerializedValue } [ ] , id : number } |
@@ -35,6 +37,14 @@ type VisitorInfo = {
35
37
36
38
export function source ( ) {
37
39
40
+ function isMap ( obj : any ) : obj is Map < any , any > {
41
+ return obj instanceof Map || Object . prototype . toString . call ( obj ) === '[object Map]' ;
42
+ }
43
+
44
+ function isSet ( obj : any ) : obj is Set < any > {
45
+ return obj instanceof Set || Object . prototype . toString . call ( obj ) === '[object Set]' ;
46
+ }
47
+
38
48
function isRegExp ( obj : any ) : obj is RegExp {
39
49
try {
40
50
return obj instanceof RegExp || Object . prototype . toString . call ( obj ) === '[object RegExp]' ;
@@ -94,6 +104,10 @@ export function source() {
94
104
return new URL ( value . u ) ;
95
105
if ( 'bi' in value )
96
106
return BigInt ( value . bi ) ;
107
+ if ( 'm' in value )
108
+ return new Map ( parseEvaluationResultValue ( value . m ) ) ;
109
+ if ( 'se' in value )
110
+ return new Set ( parseEvaluationResultValue ( value . se ) ) ;
97
111
if ( 'r' in value )
98
112
return new RegExp ( value . r . p , value . r . f ) ;
99
113
if ( 'a' in value ) {
@@ -163,6 +177,11 @@ export function source() {
163
177
if ( typeof value === 'bigint' )
164
178
return { bi : value . toString ( ) } ;
165
179
180
+ if ( isMap ( value ) )
181
+ return { m : serialize ( Array . from ( value ) , handleSerializer , visitorInfo ) } ;
182
+ if ( isSet ( value ) )
183
+ return { se : serialize ( Array . from ( value ) , handleSerializer , visitorInfo ) } ;
184
+
166
185
if ( isError ( value ) ) {
167
186
const error = value ;
168
187
if ( error . stack ?. startsWith ( error . name + ': ' + error . message ) ) {
0 commit comments