Skip to content

Commit 2df7cd4

Browse files
authored
Merge branch 'master' into encoding-length
2 parents d5c0016 + 9e4d840 commit 2df7cd4

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
language: node_js
22
node_js:
33
- stable
4+
- 12
5+
- 10
46
- 8
5-
- 6
6-
- 4
77
script:
88
- npm test

lib/encode.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
93111
encode.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+
106135
module.exports = encode

test/encode.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ test('bencode#encode()', function (t) {
3131
t.equal(bencode.encode(data).toString(), 'd2:1211:Hello World2:34i12345ee')
3232
})
3333

34+
t.test('should encode a Map as dictionary', function (t) {
35+
t.plan(1)
36+
var data = new Map([
37+
[ 12, 'Hello World' ],
38+
[ '34', 12345 ],
39+
[ Buffer.from('buffer key'), Buffer.from('buffer value') ]
40+
])
41+
t.equal(bencode.encode(data).toString(), 'd2:1211:Hello World2:34i12345e10:buffer key12:buffer valuee')
42+
})
43+
3444
t.test('should be able to encode a positive integer', function (t) {
3545
t.plan(1)
3646
t.equal(bencode.encode(123).toString(), 'i123e')
@@ -110,6 +120,11 @@ test('bencode#encode()', function (t) {
110120
t.equal(bencode.encode([32, 12]).toString(), 'li32ei12ee')
111121
t.equal(bencode.encode([':asdf:']).toString(), 'l6::asdf:e')
112122
})
123+
t.test('should be able to encode a Set as a list', function (t) {
124+
t.plan(2)
125+
t.equal(bencode.encode(new Set([32, 12])).toString(), 'li32ei12ee')
126+
t.equal(bencode.encode(new Set([':asdf:'])).toString(), 'l6::asdf:e')
127+
})
113128
t.test('should be able to encode an object', function (t) {
114129
t.plan(3)
115130
t.equal(bencode.encode({ 'a': 'bc' }).toString(), 'd1:a2:bce')

0 commit comments

Comments
 (0)