@@ -115,6 +115,10 @@ const meta = [
115
115
'' , '' , '' , '' , '' , '' , '' , '' , '' , '' ,
116
116
'' , '' , '' , '' , '' , '' , '' , '\\\\'
117
117
] ;
118
+ // Constants to map the iterator state.
119
+ const kWeak = 0 ;
120
+ const kIterator = 1 ;
121
+ const kMapEntries = 2 ;
118
122
119
123
const escapeFn = ( str ) => meta [ str . charCodeAt ( 0 ) ] ;
120
124
@@ -982,77 +986,83 @@ function formatMap(ctx, value, recurseTimes, keys) {
982
986
return output ;
983
987
}
984
988
985
- function formatWeakSet ( ctx , value , recurseTimes , keys ) {
989
+ function formatSetIterInner ( ctx , value , recurseTimes , keys , entries , state ) {
986
990
const maxArrayLength = Math . max ( ctx . maxArrayLength , 0 ) ;
987
- const [ entries ] = previewEntries ( value ) . slice ( 0 , maxArrayLength + 1 ) ;
988
991
const maxLength = Math . min ( maxArrayLength , entries . length ) ;
989
992
let output = new Array ( maxLength ) ;
990
993
for ( var i = 0 ; i < maxLength ; ++ i )
991
994
output [ i ] = formatValue ( ctx , entries [ i ] , recurseTimes ) ;
992
- // Sort all entries to have a halfway reliable output (if more entries than
993
- // retrieved ones exist, we can not reliably return the same output).
994
- output = output . sort ( ) ;
995
- if ( entries . length > maxArrayLength )
996
- output . push ( '... more items' ) ;
995
+ if ( state === kWeak ) {
996
+ // Sort all entries to have a halfway reliable output (if more entries than
997
+ // retrieved ones exist, we can not reliably return the same output).
998
+ output = output . sort ( ) ;
999
+ }
1000
+ const remaining = entries . length - maxLength ;
1001
+ if ( remaining > 0 ) {
1002
+ output . push ( `... ${ remaining } more item${ remaining > 1 ? 's' : '' } ` ) ;
1003
+ }
997
1004
for ( i = 0 ; i < keys . length ; i ++ )
998
1005
output . push ( formatProperty ( ctx , value , recurseTimes , keys [ i ] , 0 ) ) ;
999
1006
return output ;
1000
1007
}
1001
1008
1002
- function formatWeakMap ( ctx , value , recurseTimes , keys ) {
1009
+ function formatMapIterInner ( ctx , value , recurseTimes , keys , entries , state ) {
1003
1010
const maxArrayLength = Math . max ( ctx . maxArrayLength , 0 ) ;
1004
- const [ entries ] = previewEntries ( value ) . slice ( 0 , ( maxArrayLength + 1 ) * 2 ) ;
1005
1011
// Entries exist as [key1, val1, key2, val2, ...]
1006
- const remainder = entries . length / 2 > maxArrayLength ;
1007
- const len = entries . length / 2 - ( remainder ? 1 : 0 ) ;
1012
+ const len = entries . length / 2 ;
1013
+ const remaining = len - maxArrayLength ;
1008
1014
const maxLength = Math . min ( maxArrayLength , len ) ;
1009
1015
let output = new Array ( maxLength ) ;
1010
- for ( var i = 0 ; i < maxLength ; i ++ ) {
1016
+ let start = '' ;
1017
+ let end = '' ;
1018
+ let middle = ' => ' ;
1019
+ let i = 0 ;
1020
+ if ( state === kMapEntries ) {
1021
+ start = '[ ' ;
1022
+ end = ' ]' ;
1023
+ middle = ', ' ;
1024
+ }
1025
+ for ( ; i < maxLength ; i ++ ) {
1011
1026
const pos = i * 2 ;
1012
- output [ i ] = `${ formatValue ( ctx , entries [ pos ] , recurseTimes ) } => ` +
1013
- formatValue ( ctx , entries [ pos + 1 ] , recurseTimes ) ;
1027
+ output [ i ] = `${ start } ${ formatValue ( ctx , entries [ pos ] , recurseTimes ) } ` +
1028
+ `${ middle } ${ formatValue ( ctx , entries [ pos + 1 ] , recurseTimes ) } ${ end } ` ;
1029
+ }
1030
+ if ( state === kWeak ) {
1031
+ // Sort all entries to have a halfway reliable output (if more entries
1032
+ // than retrieved ones exist, we can not reliably return the same output).
1033
+ output = output . sort ( ) ;
1034
+ }
1035
+ if ( remaining > 0 ) {
1036
+ output . push ( `... ${ remaining } more item${ remaining > 1 ? 's' : '' } ` ) ;
1014
1037
}
1015
- // Sort all entries to have a halfway reliable output (if more entries than
1016
- // retrieved ones exist, we can not reliably return the same output).
1017
- output = output . sort ( ) ;
1018
- if ( remainder > 0 )
1019
- output . push ( '... more items' ) ;
1020
1038
for ( i = 0 ; i < keys . length ; i ++ )
1021
1039
output . push ( formatProperty ( ctx , value , recurseTimes , keys [ i ] , 0 ) ) ;
1022
1040
return output ;
1023
1041
}
1024
1042
1025
- function zip2 ( list ) {
1026
- const ret = Array ( list . length / 2 ) ;
1027
- for ( var i = 0 ; i < ret . length ; ++ i )
1028
- ret [ i ] = [ list [ 2 * i ] , list [ 2 * i + 1 ] ] ;
1029
- return ret ;
1043
+ function formatWeakSet ( ctx , value , recurseTimes , keys ) {
1044
+ const entries = previewEntries ( value ) ;
1045
+ return formatSetIterInner ( ctx , value , recurseTimes , keys , entries , kWeak ) ;
1030
1046
}
1031
1047
1032
- function formatCollectionIterator ( ctx , value , recurseTimes , keys ) {
1033
- const output = [ ] ;
1034
- var [ entries , isKeyValue ] = previewEntries ( value ) ;
1035
- if ( isKeyValue )
1036
- entries = zip2 ( entries ) ;
1037
- for ( const entry of entries ) {
1038
- if ( ctx . maxArrayLength === output . length ) {
1039
- output . push ( '... more items' ) ;
1040
- break ;
1041
- }
1042
- output . push ( formatValue ( ctx , entry , recurseTimes ) ) ;
1043
- }
1044
- for ( var n = 0 ; n < keys . length ; n ++ ) {
1045
- output . push ( formatProperty ( ctx , value , recurseTimes , keys [ n ] , 0 ) ) ;
1046
- }
1047
- return output ;
1048
+ function formatWeakMap ( ctx , value , recurseTimes , keys ) {
1049
+ const entries = previewEntries ( value ) ;
1050
+ return formatMapIterInner ( ctx , value , recurseTimes , keys , entries , kWeak ) ;
1048
1051
}
1049
1052
1050
- function formatMapIterator ( ctx , value , recurseTimes , keys ) {
1051
- return formatCollectionIterator ( ctx , value , recurseTimes , keys ) ;
1053
+ function formatSetIterator ( ctx , value , recurseTimes , keys ) {
1054
+ const entries = previewEntries ( value ) ;
1055
+ return formatSetIterInner ( ctx , value , recurseTimes , keys , entries , kIterator ) ;
1052
1056
}
1053
1057
1054
- function formatSetIterator ( ctx , value , recurseTimes , keys ) {
1055
- return formatCollectionIterator ( ctx , value , recurseTimes , keys ) ;
1058
+ function formatMapIterator ( ctx , value , recurseTimes , keys ) {
1059
+ const [ entries , isKeyValue ] = previewEntries ( value , true ) ;
1060
+ if ( isKeyValue ) {
1061
+ return formatMapIterInner (
1062
+ ctx , value , recurseTimes , keys , entries , kMapEntries ) ;
1063
+ }
1064
+
1065
+ return formatSetIterInner ( ctx , value , recurseTimes , keys , entries , kIterator ) ;
1056
1066
}
1057
1067
1058
1068
function formatPromise ( ctx , value , recurseTimes , keys ) {
0 commit comments