@@ -25,30 +25,28 @@ function encode (data, buffer, offset) {
2525encode . bytes = - 1
2626encode . _floatConversionDetected = false
2727
28- encode . _encode = function ( buffers , data ) {
29- if ( Buffer . isBuffer ( data ) ) {
30- buffers . push ( Buffer . from ( data . length + ':' ) )
31- buffers . push ( data )
32- return
33- }
28+ encode . getType = function ( value ) {
29+ if ( Buffer . isBuffer ( value ) ) return 'buffer'
30+ if ( Array . isArray ( value ) ) return 'array'
31+ if ( ArrayBuffer . isView ( value ) ) return 'typedarray'
32+ if ( value instanceof Number ) return 'number'
33+ if ( value instanceof Boolean ) return 'boolean'
34+ if ( value instanceof ArrayBuffer ) return 'arraybuffer'
35+ return typeof value
36+ }
3437
38+ encode . _encode = function ( buffers , data ) {
3539 if ( data == null ) { return }
3640
37- switch ( typeof data ) {
38- case 'string' :
39- encode . buffer ( buffers , data )
40- break
41- case 'number' :
42- encode . number ( buffers , data )
43- break
44- case 'object' :
45- data . constructor === Array
46- ? encode . list ( buffers , data )
47- : encode . dict ( buffers , data )
48- break
49- case 'boolean' :
50- encode . number ( buffers , data ? 1 : 0 )
51- break
41+ switch ( encode . getType ( data ) ) {
42+ case 'buffer' : encode . buffer ( buffers , data ) ; break
43+ case 'object' : encode . dict ( buffers , data ) ; break
44+ case 'array' : encode . list ( buffers , data ) ; break
45+ case 'string' : encode . string ( buffers , data ) ; break
46+ case 'number' : encode . number ( buffers , data ) ; break
47+ case 'boolean' : encode . number ( buffers , data ) ; break
48+ case 'typedarray' : encode . buffer ( buffers , Buffer . from ( data . buffer ) ) ; break
49+ case 'arraybuffer' : encode . buffer ( buffers , Buffer . from ( data ) ) ; break
5250 }
5351}
5452
@@ -57,6 +55,10 @@ var buffD = Buffer.from('d')
5755var buffL = Buffer . from ( 'l' )
5856
5957encode . buffer = function ( buffers , data ) {
58+ buffers . push ( new Buffer ( data . length + ':' ) , data )
59+ }
60+
61+ encode . string = function ( buffers , data ) {
6062 buffers . push ( Buffer . from ( Buffer . byteLength ( data ) + ':' + data ) )
6163}
6264
@@ -90,7 +92,7 @@ encode.dict = function (buffers, data) {
9092 for ( ; j < kl ; j ++ ) {
9193 k = keys [ j ]
9294 if ( data [ k ] == null ) continue
93- encode . buffer ( buffers , k )
95+ encode . string ( buffers , k )
9496 encode . _encode ( buffers , data [ k ] )
9597 }
9698
0 commit comments