@@ -118,6 +118,10 @@ const meta = [
118
118
'' , '' , '' , '' , '' , '' , '' , '' , '' , '' ,
119
119
'' , '' , '' , '' , '' , '' , '' , '\\\\'
120
120
] ;
121
+ // Constants to map the iterator state.
122
+ const kWeak = 0 ;
123
+ const kIterator = 1 ;
124
+ const kMapEntries = 2 ;
121
125
122
126
function addQuotes ( str , quotes ) {
123
127
if ( quotes === - 1 ) {
@@ -1017,77 +1021,83 @@ function formatMap(ctx, value, recurseTimes, keys) {
1017
1021
return output ;
1018
1022
}
1019
1023
1020
- function formatWeakSet ( ctx , value , recurseTimes , keys ) {
1024
+ function formatSetIterInner ( ctx , value , recurseTimes , keys , entries , state ) {
1021
1025
const maxArrayLength = Math . max ( ctx . maxArrayLength , 0 ) ;
1022
- const [ entries ] = previewEntries ( value ) . slice ( 0 , maxArrayLength + 1 ) ;
1023
1026
const maxLength = Math . min ( maxArrayLength , entries . length ) ;
1024
1027
let output = new Array ( maxLength ) ;
1025
1028
for ( var i = 0 ; i < maxLength ; ++ i )
1026
1029
output [ i ] = formatValue ( ctx , entries [ i ] , recurseTimes ) ;
1027
- // Sort all entries to have a halfway reliable output (if more entries than
1028
- // retrieved ones exist, we can not reliably return the same output).
1029
- output = output . sort ( ) ;
1030
- if ( entries . length > maxArrayLength )
1031
- output . push ( '... more items' ) ;
1030
+ if ( state === kWeak ) {
1031
+ // Sort all entries to have a halfway reliable output (if more entries than
1032
+ // retrieved ones exist, we can not reliably return the same output).
1033
+ output = output . sort ( ) ;
1034
+ }
1035
+ const remaining = entries . length - maxLength ;
1036
+ if ( remaining > 0 ) {
1037
+ output . push ( `... ${ remaining } more item${ remaining > 1 ? 's' : '' } ` ) ;
1038
+ }
1032
1039
for ( i = 0 ; i < keys . length ; i ++ )
1033
1040
output . push ( formatProperty ( ctx , value , recurseTimes , keys [ i ] , 0 ) ) ;
1034
1041
return output ;
1035
1042
}
1036
1043
1037
- function formatWeakMap ( ctx , value , recurseTimes , keys ) {
1044
+ function formatMapIterInner ( ctx , value , recurseTimes , keys , entries , state ) {
1038
1045
const maxArrayLength = Math . max ( ctx . maxArrayLength , 0 ) ;
1039
- const [ entries ] = previewEntries ( value ) . slice ( 0 , ( maxArrayLength + 1 ) * 2 ) ;
1040
1046
// Entries exist as [key1, val1, key2, val2, ...]
1041
- const remainder = entries . length / 2 > maxArrayLength ;
1042
- const len = entries . length / 2 - ( remainder ? 1 : 0 ) ;
1047
+ const len = entries . length / 2 ;
1048
+ const remaining = len - maxArrayLength ;
1043
1049
const maxLength = Math . min ( maxArrayLength , len ) ;
1044
1050
let output = new Array ( maxLength ) ;
1045
- for ( var i = 0 ; i < maxLength ; i ++ ) {
1051
+ let start = '' ;
1052
+ let end = '' ;
1053
+ let middle = ' => ' ;
1054
+ let i = 0 ;
1055
+ if ( state === kMapEntries ) {
1056
+ start = '[ ' ;
1057
+ end = ' ]' ;
1058
+ middle = ', ' ;
1059
+ }
1060
+ for ( ; i < maxLength ; i ++ ) {
1046
1061
const pos = i * 2 ;
1047
- output [ i ] = `${ formatValue ( ctx , entries [ pos ] , recurseTimes ) } => ` +
1048
- formatValue ( ctx , entries [ pos + 1 ] , recurseTimes ) ;
1062
+ output [ i ] = `${ start } ${ formatValue ( ctx , entries [ pos ] , recurseTimes ) } ` +
1063
+ `${ middle } ${ formatValue ( ctx , entries [ pos + 1 ] , recurseTimes ) } ${ end } ` ;
1064
+ }
1065
+ if ( state === kWeak ) {
1066
+ // Sort all entries to have a halfway reliable output (if more entries
1067
+ // than retrieved ones exist, we can not reliably return the same output).
1068
+ output = output . sort ( ) ;
1069
+ }
1070
+ if ( remaining > 0 ) {
1071
+ output . push ( `... ${ remaining } more item${ remaining > 1 ? 's' : '' } ` ) ;
1049
1072
}
1050
- // Sort all entries to have a halfway reliable output (if more entries than
1051
- // retrieved ones exist, we can not reliably return the same output).
1052
- output = output . sort ( ) ;
1053
- if ( remainder > 0 )
1054
- output . push ( '... more items' ) ;
1055
1073
for ( i = 0 ; i < keys . length ; i ++ )
1056
1074
output . push ( formatProperty ( ctx , value , recurseTimes , keys [ i ] , 0 ) ) ;
1057
1075
return output ;
1058
1076
}
1059
1077
1060
- function zip2 ( list ) {
1061
- const ret = Array ( list . length / 2 ) ;
1062
- for ( var i = 0 ; i < ret . length ; ++ i )
1063
- ret [ i ] = [ list [ 2 * i ] , list [ 2 * i + 1 ] ] ;
1064
- return ret ;
1078
+ function formatWeakSet ( ctx , value , recurseTimes , keys ) {
1079
+ const entries = previewEntries ( value ) ;
1080
+ return formatSetIterInner ( ctx , value , recurseTimes , keys , entries , kWeak ) ;
1065
1081
}
1066
1082
1067
- function formatCollectionIterator ( ctx , value , recurseTimes , keys ) {
1068
- const output = [ ] ;
1069
- var [ entries , isKeyValue ] = previewEntries ( value ) ;
1070
- if ( isKeyValue )
1071
- entries = zip2 ( entries ) ;
1072
- for ( const entry of entries ) {
1073
- if ( ctx . maxArrayLength === output . length ) {
1074
- output . push ( '... more items' ) ;
1075
- break ;
1076
- }
1077
- output . push ( formatValue ( ctx , entry , recurseTimes ) ) ;
1078
- }
1079
- for ( var n = 0 ; n < keys . length ; n ++ ) {
1080
- output . push ( formatProperty ( ctx , value , recurseTimes , keys [ n ] , 0 ) ) ;
1081
- }
1082
- return output ;
1083
+ function formatWeakMap ( ctx , value , recurseTimes , keys ) {
1084
+ const entries = previewEntries ( value ) ;
1085
+ return formatMapIterInner ( ctx , value , recurseTimes , keys , entries , kWeak ) ;
1083
1086
}
1084
1087
1085
- function formatMapIterator ( ctx , value , recurseTimes , keys ) {
1086
- return formatCollectionIterator ( ctx , value , recurseTimes , keys ) ;
1088
+ function formatSetIterator ( ctx , value , recurseTimes , keys ) {
1089
+ const entries = previewEntries ( value ) ;
1090
+ return formatSetIterInner ( ctx , value , recurseTimes , keys , entries , kIterator ) ;
1087
1091
}
1088
1092
1089
- function formatSetIterator ( ctx , value , recurseTimes , keys ) {
1090
- return formatCollectionIterator ( ctx , value , recurseTimes , keys ) ;
1093
+ function formatMapIterator ( ctx , value , recurseTimes , keys ) {
1094
+ const [ entries , isKeyValue ] = previewEntries ( value , true ) ;
1095
+ if ( isKeyValue ) {
1096
+ return formatMapIterInner (
1097
+ ctx , value , recurseTimes , keys , entries , kMapEntries ) ;
1098
+ }
1099
+
1100
+ return formatSetIterInner ( ctx , value , recurseTimes , keys , entries , kIterator ) ;
1091
1101
}
1092
1102
1093
1103
function formatPromise ( ctx , value , recurseTimes , keys ) {
0 commit comments