@@ -31,6 +31,8 @@ encode.getType = function (value) {
3131 if ( ArrayBuffer . isView ( value ) ) return 'arraybufferview'
3232 if ( value instanceof Number ) return 'number'
3333 if ( value instanceof Boolean ) return 'boolean'
34+ if ( value instanceof Set ) return 'set'
35+ if ( value instanceof Map ) return 'map'
3436 if ( value instanceof ArrayBuffer ) return 'arraybuffer'
3537 return typeof value
3638}
@@ -41,7 +43,9 @@ encode._encode = function (buffers, data) {
4143 switch ( encode . getType ( data ) ) {
4244 case 'buffer' : encode . buffer ( buffers , data ) ; break
4345 case 'object' : encode . dict ( buffers , data ) ; break
46+ case 'map' : encode . dictMap ( buffers , data ) ; break
4447 case 'array' : encode . list ( buffers , data ) ; break
48+ case 'set' : encode . listSet ( buffers , data ) ; break
4549 case 'string' : encode . string ( buffers , data ) ; break
4650 case 'number' : encode . number ( buffers , data ) ; break
4751 case 'boolean' : encode . number ( buffers , data ) ; break
@@ -99,6 +103,22 @@ encode.dict = function (buffers, data) {
99103 buffers . push ( buffE )
100104}
101105
106+ encode . dictMap = function ( buffers , data ) {
107+ buffers . push ( buffD )
108+
109+ var keys = Array . from ( data . keys ( ) ) . sort ( )
110+
111+ for ( var key of keys ) {
112+ if ( data . get ( key ) == null ) continue
113+ Buffer . isBuffer ( key )
114+ ? encode . _encode ( buffers , key )
115+ : encode . string ( buffers , String ( key ) )
116+ encode . _encode ( buffers , data . get ( key ) )
117+ }
118+
119+ buffers . push ( buffE )
120+ }
121+
102122encode . list = function ( buffers , data ) {
103123 var i = 0
104124 var c = data . length
@@ -112,4 +132,15 @@ encode.list = function (buffers, data) {
112132 buffers . push ( buffE )
113133}
114134
135+ encode . listSet = function ( buffers , data ) {
136+ buffers . push ( buffL )
137+
138+ for ( var item of data ) {
139+ if ( item == null ) continue
140+ encode . _encode ( buffers , item )
141+ }
142+
143+ buffers . push ( buffE )
144+ }
145+
115146module . exports = encode
0 commit comments