1+ import { concat , text2arr } from 'uint8-util'
12import { getType } from './util.js'
23
34/**
45 * Encodes data in bencode.
56 *
6- * @param {Buffer |Array|String|Object|Number|Boolean } data
7- * @return {Buffer }
7+ * @param {Uint8Array |Array|String|Object|Number|Boolean } data
8+ * @return {Uint8Array }
89 */
910function encode ( data , buffer , offset ) {
1011 const buffers = [ ]
1112 let result = null
1213
1314 encode . _encode ( buffers , data )
14- result = Buffer . concat ( buffers )
15+ result = concat ( buffers )
1516 encode . bytes = result . length
1617
17- if ( Buffer . isBuffer ( buffer ) ) {
18- result . copy ( buffer , offset )
18+ if ( ArrayBuffer . isView ( buffer ) ) {
19+ buffer . set ( result , offset )
1920 return buffer
2021 }
2122
@@ -29,29 +30,28 @@ encode._encode = function (buffers, data) {
2930 if ( data == null ) { return }
3031
3132 switch ( getType ( data ) ) {
32- case 'buffer' : encode . buffer ( buffers , data ) ; break
3333 case 'object' : encode . dict ( buffers , data ) ; break
3434 case 'map' : encode . dictMap ( buffers , data ) ; break
3535 case 'array' : encode . list ( buffers , data ) ; break
3636 case 'set' : encode . listSet ( buffers , data ) ; break
3737 case 'string' : encode . string ( buffers , data ) ; break
3838 case 'number' : encode . number ( buffers , data ) ; break
3939 case 'boolean' : encode . number ( buffers , data ) ; break
40- case 'arraybufferview' : encode . buffer ( buffers , Buffer . from ( data . buffer , data . byteOffset , data . byteLength ) ) ; break
41- case 'arraybuffer' : encode . buffer ( buffers , Buffer . from ( data ) ) ; break
40+ case 'arraybufferview' : encode . buffer ( buffers , new Uint8Array ( data . buffer , data . byteOffset , data . byteLength ) ) ; break
41+ case 'arraybuffer' : encode . buffer ( buffers , new Uint8Array ( data ) ) ; break
4242 }
4343}
4444
45- const buffE = Buffer . from ( 'e' )
46- const buffD = Buffer . from ( 'd' )
47- const buffL = Buffer . from ( 'l' )
45+ const buffE = new Uint8Array ( [ 0x65 ] )
46+ const buffD = new Uint8Array ( [ 0x64 ] )
47+ const buffL = new Uint8Array ( [ 0x6C ] )
4848
4949encode . buffer = function ( buffers , data ) {
50- buffers . push ( Buffer . from ( data . length + ':' ) , data )
50+ buffers . push ( text2arr ( data . length + ':' ) , data )
5151}
5252
5353encode . string = function ( buffers , data ) {
54- buffers . push ( Buffer . from ( Buffer . byteLength ( data ) + ':' + data ) )
54+ buffers . push ( text2arr ( text2arr ( data ) . byteLength + ':' + data ) )
5555}
5656
5757encode . number = function ( buffers , data ) {
@@ -60,7 +60,7 @@ encode.number = function (buffers, data) {
6060 const lo = ( data % maxLo ) << 0
6161 const val = hi * maxLo + lo
6262
63- buffers . push ( Buffer . from ( 'i' + val + 'e' ) )
63+ buffers . push ( text2arr ( 'i' + val + 'e' ) )
6464
6565 if ( val !== data && ! encode . _floatConversionDetected ) {
6666 encode . _floatConversionDetected = true
@@ -98,7 +98,7 @@ encode.dictMap = function (buffers, data) {
9898
9999 for ( const key of keys ) {
100100 if ( data . get ( key ) == null ) continue
101- Buffer . isBuffer ( key )
101+ ArrayBuffer . isView ( key )
102102 ? encode . _encode ( buffers , key )
103103 : encode . string ( buffers , String ( key ) )
104104 encode . _encode ( buffers , data . get ( key ) )
0 commit comments