@@ -32,7 +32,9 @@ encode._encode = function (buffers, data) {
3232 switch ( getType ( data ) ) {
3333 case 'buffer' : encode . buffer ( buffers , data ) ; break
3434 case 'object' : encode . dict ( buffers , data ) ; break
35+ case 'map' : encode . dictMap ( buffers , data ) ; break
3536 case 'array' : encode . list ( buffers , data ) ; break
37+ case 'set' : encode . listSet ( buffers , data ) ; break
3638 case 'string' : encode . string ( buffers , data ) ; break
3739 case 'number' : encode . number ( buffers , data ) ; break
3840 case 'boolean' : encode . number ( buffers , data ) ; break
@@ -90,6 +92,22 @@ encode.dict = function (buffers, data) {
9092 buffers . push ( buffE )
9193}
9294
95+ encode . dictMap = function ( buffers , data ) {
96+ buffers . push ( buffD )
97+
98+ var keys = Array . from ( data . keys ( ) ) . sort ( )
99+
100+ for ( var key of keys ) {
101+ if ( data . get ( key ) == null ) continue
102+ Buffer . isBuffer ( key )
103+ ? encode . _encode ( buffers , key )
104+ : encode . string ( buffers , String ( key ) )
105+ encode . _encode ( buffers , data . get ( key ) )
106+ }
107+
108+ buffers . push ( buffE )
109+ }
110+
93111encode . list = function ( buffers , data ) {
94112 var i = 0
95113 var c = data . length
@@ -103,4 +121,15 @@ encode.list = function (buffers, data) {
103121 buffers . push ( buffE )
104122}
105123
124+ encode . listSet = function ( buffers , data ) {
125+ buffers . push ( buffL )
126+
127+ for ( var item of data ) {
128+ if ( item == null ) continue
129+ encode . _encode ( buffers , item )
130+ }
131+
132+ buffers . push ( buffE )
133+ }
134+
106135module . exports = encode
0 commit comments