msgpack5 5.3.2 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +1 -1
- package/README.md +1 -1
- package/dist/msgpack5.js +458 -350
- package/dist/msgpack5.min.js +1 -1
- package/lib/decoder.js +2 -3
- package/lib/encoder.js +22 -1
- package/package.json +2 -2
- package/test/compatibility-mode.js +33 -0
package/lib/decoder.js
CHANGED
|
@@ -42,9 +42,8 @@ module.exports = function buildDecode (decodingTypes, options) {
|
|
|
42
42
|
return decode
|
|
43
43
|
|
|
44
44
|
function decode (buf) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
buf = bl().append(buf)
|
|
45
|
+
if (!bl.isBufferList(buf)) {
|
|
46
|
+
buf = bl(buf)
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
const result = tryDecode(buf, 0, context)
|
package/lib/encoder.js
CHANGED
|
@@ -22,7 +22,8 @@ module.exports = function buildEncode (encodingTypes, options) {
|
|
|
22
22
|
}
|
|
23
23
|
// weird hack to support Buffer
|
|
24
24
|
// and Buffer-like objects
|
|
25
|
-
|
|
25
|
+
const _getBufferHeader = options.compatibilityMode ? getCompatibleBufferHeader : getBufferHeader
|
|
26
|
+
return bl([_getBufferHeader(obj.length), obj])
|
|
26
27
|
}
|
|
27
28
|
if (Array.isArray(obj)) return encodeArray(obj, encode)
|
|
28
29
|
if (typeof obj === 'object') return encodeExt(obj, encodingTypes) || encodeObject(obj, options, encode)
|
|
@@ -225,6 +226,26 @@ function getBufferHeader (length) {
|
|
|
225
226
|
return header
|
|
226
227
|
}
|
|
227
228
|
|
|
229
|
+
function getCompatibleBufferHeader (length) {
|
|
230
|
+
let header
|
|
231
|
+
if (length <= 0x1f) {
|
|
232
|
+
// fix raw header: 101XXXXX
|
|
233
|
+
header = Buffer.allocUnsafe(1)
|
|
234
|
+
header[0] = 0xa0 | length
|
|
235
|
+
} else if (length <= 0xffff) {
|
|
236
|
+
// raw 16 header: 0xda, XXXXXXXX, XXXXXXXX
|
|
237
|
+
header = Buffer.allocUnsafe(3)
|
|
238
|
+
header[0] = 0xda
|
|
239
|
+
header.writeUInt16BE(length, 1)
|
|
240
|
+
} else {
|
|
241
|
+
// raw 32 header: 0xdb, XXXXXXXX, XXXXXXXX, XXXXXXXX, XXXXXXXX
|
|
242
|
+
header = Buffer.allocUnsafe(5)
|
|
243
|
+
header[0] = 0xdb
|
|
244
|
+
header.writeUInt32BE(length, 1)
|
|
245
|
+
}
|
|
246
|
+
return header
|
|
247
|
+
}
|
|
248
|
+
|
|
228
249
|
function encodeNumber (obj, options) {
|
|
229
250
|
let buf
|
|
230
251
|
if (isFloat(obj)) return encodeFloat(obj, options.forceFloat64)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "msgpack5",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.2",
|
|
4
4
|
"description": "A msgpack v5 implementation for node.js and the browser, with extension points",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
]
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"bl": "^
|
|
47
|
+
"bl": "^5.0.0",
|
|
48
48
|
"inherits": "^2.0.3",
|
|
49
49
|
"readable-stream": "^3.0.0",
|
|
50
50
|
"safe-buffer": "^5.1.2"
|
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
const test = require('tape').test
|
|
4
4
|
const msgpack = require('../')
|
|
5
5
|
|
|
6
|
+
function buildBuffer (size) {
|
|
7
|
+
const buf = Buffer.allocUnsafe(size)
|
|
8
|
+
buf.fill('a')
|
|
9
|
+
|
|
10
|
+
return buf
|
|
11
|
+
}
|
|
12
|
+
|
|
6
13
|
test('encode/compatibility mode', function (t) {
|
|
7
14
|
const compatEncoder = msgpack({
|
|
8
15
|
compatibilityMode: true
|
|
@@ -37,4 +44,30 @@ test('encode/compatibility mode', function (t) {
|
|
|
37
44
|
t.deepEqual(buf1, buf2, 'must be equal for two byte strings')
|
|
38
45
|
t.end()
|
|
39
46
|
})
|
|
47
|
+
|
|
48
|
+
const fixRawBuffer = buildBuffer(1)
|
|
49
|
+
const raw16Buffer = buildBuffer(Math.pow(2, 16) - 1)
|
|
50
|
+
const raw32Buffer = buildBuffer(Math.pow(2, 16) + 1)
|
|
51
|
+
|
|
52
|
+
t.test('compat. encoding a Buffer of length ' + fixRawBuffer.length, function (t) {
|
|
53
|
+
// fix raw header: 0xa0 | 1 = 0xa1
|
|
54
|
+
const buf = compatEncoder.encode(fixRawBuffer)
|
|
55
|
+
t.equal(buf[0], 0xa1, 'must have the proper header (fix raw)')
|
|
56
|
+
t.equal(buf.toString('utf8', 1, Buffer.byteLength(fixRawBuffer) + 1), fixRawBuffer.toString('utf8'), 'must decode correctly')
|
|
57
|
+
t.end()
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
t.test('compat. encoding a Buffer of length ' + raw16Buffer.length, function (t) {
|
|
61
|
+
const buf = compatEncoder.encode(raw16Buffer)
|
|
62
|
+
t.equal(buf[0], 0xda, 'must have the proper header (raw 16)')
|
|
63
|
+
t.equal(buf.toString('utf8', 3, Buffer.byteLength(raw16Buffer) + 3), raw16Buffer.toString('utf8'), 'must decode correctly')
|
|
64
|
+
t.end()
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
t.test('compat. encoding a Buffer of length ' + raw32Buffer.length, function (t) {
|
|
68
|
+
const buf = compatEncoder.encode(raw32Buffer)
|
|
69
|
+
t.equal(buf[0], 0xdb, 'must have the proper header (raw 32)')
|
|
70
|
+
t.equal(buf.toString('utf8', 5, Buffer.byteLength(raw32Buffer) + 5), raw32Buffer.toString('utf8'), 'must decode correctly')
|
|
71
|
+
t.end()
|
|
72
|
+
})
|
|
40
73
|
})
|