@@ -118,6 +118,10 @@ const meta = [
118118 '' , '' , '' , '' , '' , '' , '' , '' , '' , '' ,
119119 '' , '' , '' , '' , '' , '' , '' , '\\\\'
120120] ;
121+ // Constants to map the iterator state.
122+ const kWeak = 0 ;
123+ const kIterator = 1 ;
124+ const kMapEntries = 2 ;
121125
122126function addQuotes ( str , quotes ) {
123127 if ( quotes === - 1 ) {
@@ -1017,77 +1021,83 @@ function formatMap(ctx, value, recurseTimes, keys) {
10171021 return output ;
10181022}
10191023
1020- function formatWeakSet ( ctx , value , recurseTimes , keys ) {
1024+ function formatSetIterInner ( ctx , value , recurseTimes , keys , entries , state ) {
10211025 const maxArrayLength = Math . max ( ctx . maxArrayLength , 0 ) ;
1022- const [ entries ] = previewEntries ( value ) . slice ( 0 , maxArrayLength + 1 ) ;
10231026 const maxLength = Math . min ( maxArrayLength , entries . length ) ;
10241027 let output = new Array ( maxLength ) ;
10251028 for ( var i = 0 ; i < maxLength ; ++ i )
10261029 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+ }
10321039 for ( i = 0 ; i < keys . length ; i ++ )
10331040 output . push ( formatProperty ( ctx , value , recurseTimes , keys [ i ] , 0 ) ) ;
10341041 return output ;
10351042}
10361043
1037- function formatWeakMap ( ctx , value , recurseTimes , keys ) {
1044+ function formatMapIterInner ( ctx , value , recurseTimes , keys , entries , state ) {
10381045 const maxArrayLength = Math . max ( ctx . maxArrayLength , 0 ) ;
1039- const [ entries ] = previewEntries ( value ) . slice ( 0 , ( maxArrayLength + 1 ) * 2 ) ;
10401046 // 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 ;
10431049 const maxLength = Math . min ( maxArrayLength , len ) ;
10441050 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 ++ ) {
10461061 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' : '' } ` ) ;
10491072 }
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' ) ;
10551073 for ( i = 0 ; i < keys . length ; i ++ )
10561074 output . push ( formatProperty ( ctx , value , recurseTimes , keys [ i ] , 0 ) ) ;
10571075 return output ;
10581076}
10591077
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 ) ;
10651081}
10661082
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 ) ;
10831086}
10841087
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 ) ;
10871091}
10881092
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 ) ;
10911101}
10921102
10931103function formatPromise ( ctx , value , recurseTimes , keys ) {
0 commit comments