msgpack-lite 0.1.20 → 0.1.27
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/nodejs.yml +23 -0
- package/.github/workflows/publish.yml +64 -0
- package/LICENSE +1 -1
- package/Makefile +8 -13
- package/README.md +28 -91
- package/dist/msgpack.min.js +2 -2
- package/lib/buffer-global.js +11 -0
- package/lib/buffer-lite.js +88 -60
- package/lib/bufferish-array.js +41 -0
- package/lib/bufferish-buffer.js +46 -0
- package/lib/bufferish-proto.js +86 -0
- package/lib/bufferish-uint8array.js +51 -0
- package/lib/bufferish.js +108 -0
- package/lib/codec-base.js +67 -0
- package/lib/codec.js +8 -1
- package/lib/decode-buffer.js +6 -50
- package/lib/decode-stream.js +7 -3
- package/lib/encode-buffer.js +6 -79
- package/lib/encode-stream.js +12 -4
- package/lib/ext-buffer.js +3 -1
- package/lib/ext-packer.js +78 -0
- package/lib/ext-unpacker.js +81 -0
- package/lib/ext.js +4 -77
- package/lib/flex-buffer.js +194 -0
- package/lib/read-core.js +36 -2
- package/lib/read-format.js +83 -56
- package/lib/read-token.js +1 -1
- package/lib/write-core.js +55 -2
- package/lib/write-token.js +54 -26
- package/lib/write-type.js +81 -73
- package/lib/write-uint8.js +2 -2
- package/package.json +22 -12
- package/test/10.encode.js +53 -33
- package/test/11.decode.js +16 -3
- package/test/14.codec.js +10 -3
- package/test/15.useraw.js +4 -4
- package/test/16.binarraybuffer.js +91 -0
- package/test/17.uint8array.js +43 -0
- package/test/18.utf8.js +59 -0
- package/test/20.roundtrip.js +54 -34
- package/test/23.extbuffer.js +46 -4
- package/test/27.usemap.js +66 -0
- package/test/30.stream.js +49 -1
- package/test/50.compat.js +6 -6
- package/test/61.encode-only.js +26 -0
- package/test/62.decode-only.js +23 -0
- package/test/63.module-deps.js +77 -0
- package/.npmignore +0 -7
- package/.travis.yml +0 -25
- package/.zuul.yml +0 -20
- package/bower.json +0 -34
- package/lib/buffer-shortage.js +0 -8
- package/lib/ext-preset.js +0 -188
- package/test/60.buffer-lite.js +0 -98
- package/test/zuul/ie.html +0 -4
package/lib/read-format.js
CHANGED
|
@@ -8,40 +8,39 @@ var Int64BE = Int64Buffer.Int64BE;
|
|
|
8
8
|
exports.getReadFormat = getReadFormat;
|
|
9
9
|
exports.readUint8 = uint8;
|
|
10
10
|
|
|
11
|
-
var
|
|
12
|
-
var
|
|
11
|
+
var Bufferish = require("./bufferish");
|
|
12
|
+
var BufferProto = require("./bufferish-proto");
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var HAS_MAP = ("undefined" !== typeof Map);
|
|
15
15
|
var NO_ASSERT = true;
|
|
16
16
|
|
|
17
17
|
function getReadFormat(options) {
|
|
18
|
+
var binarraybuffer = Bufferish.hasArrayBuffer && options && options.binarraybuffer;
|
|
19
|
+
var int64 = options && options.int64;
|
|
20
|
+
var usemap = HAS_MAP && options && options.usemap;
|
|
21
|
+
|
|
18
22
|
var readFormat = {
|
|
19
|
-
map:
|
|
23
|
+
map: (usemap ? map_to_map : map_to_obj),
|
|
20
24
|
array: array,
|
|
21
25
|
str: str,
|
|
22
|
-
bin:
|
|
26
|
+
bin: (binarraybuffer ? bin_arraybuffer : bin_buffer),
|
|
23
27
|
ext: ext,
|
|
24
28
|
uint8: uint8,
|
|
25
29
|
uint16: uint16,
|
|
26
|
-
uint32:
|
|
27
|
-
uint64: read(8, readUInt64BE),
|
|
28
|
-
int8:
|
|
29
|
-
int16:
|
|
30
|
-
int32:
|
|
31
|
-
int64: read(8, readInt64BE),
|
|
30
|
+
uint32: uint32,
|
|
31
|
+
uint64: read(8, int64 ? readUInt64BE_int64 : readUInt64BE),
|
|
32
|
+
int8: int8,
|
|
33
|
+
int16: int16,
|
|
34
|
+
int32: int32,
|
|
35
|
+
int64: read(8, int64 ? readInt64BE_int64 : readInt64BE),
|
|
32
36
|
float32: read(4, readFloatBE),
|
|
33
37
|
float64: read(8, readDoubleBE)
|
|
34
38
|
};
|
|
35
39
|
|
|
36
|
-
if (options && options.int64) {
|
|
37
|
-
readFormat.uint64 = read(8, readUInt64BE_int64);
|
|
38
|
-
readFormat.int64 = read(8, readInt64BE_int64);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
40
|
return readFormat;
|
|
42
41
|
}
|
|
43
42
|
|
|
44
|
-
function
|
|
43
|
+
function map_to_obj(decoder, len) {
|
|
45
44
|
var value = {};
|
|
46
45
|
var i;
|
|
47
46
|
var k = new Array(len);
|
|
@@ -58,6 +57,23 @@ function map(decoder, len) {
|
|
|
58
57
|
return value;
|
|
59
58
|
}
|
|
60
59
|
|
|
60
|
+
function map_to_map(decoder, len) {
|
|
61
|
+
var value = new Map();
|
|
62
|
+
var i;
|
|
63
|
+
var k = new Array(len);
|
|
64
|
+
var v = new Array(len);
|
|
65
|
+
|
|
66
|
+
var decode = decoder.codec.decode;
|
|
67
|
+
for (i = 0; i < len; i++) {
|
|
68
|
+
k[i] = decode(decoder);
|
|
69
|
+
v[i] = decode(decoder);
|
|
70
|
+
}
|
|
71
|
+
for (i = 0; i < len; i++) {
|
|
72
|
+
value.set(k[i], v[i]);
|
|
73
|
+
}
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
|
|
61
77
|
function array(decoder, len) {
|
|
62
78
|
var value = new Array(len);
|
|
63
79
|
var decode = decoder.codec.decode;
|
|
@@ -68,54 +84,74 @@ function array(decoder, len) {
|
|
|
68
84
|
}
|
|
69
85
|
|
|
70
86
|
function str(decoder, len) {
|
|
71
|
-
var start = decoder.
|
|
72
|
-
var end =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
87
|
+
var start = decoder.reserve(len);
|
|
88
|
+
var end = start + len;
|
|
89
|
+
return BufferProto.toString.call(decoder.buffer, "utf-8", start, end);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function bin_buffer(decoder, len) {
|
|
93
|
+
var start = decoder.reserve(len);
|
|
94
|
+
var end = start + len;
|
|
95
|
+
var buf = BufferProto.slice.call(decoder.buffer, start, end);
|
|
96
|
+
return Bufferish.from(buf);
|
|
82
97
|
}
|
|
83
98
|
|
|
84
|
-
function
|
|
85
|
-
var start = decoder.
|
|
86
|
-
var end =
|
|
87
|
-
|
|
88
|
-
return
|
|
99
|
+
function bin_arraybuffer(decoder, len) {
|
|
100
|
+
var start = decoder.reserve(len);
|
|
101
|
+
var end = start + len;
|
|
102
|
+
var buf = BufferProto.slice.call(decoder.buffer, start, end);
|
|
103
|
+
return Bufferish.Uint8Array.from(buf).buffer;
|
|
89
104
|
}
|
|
90
105
|
|
|
91
106
|
function ext(decoder, len) {
|
|
92
|
-
var start = decoder.
|
|
93
|
-
var
|
|
94
|
-
|
|
95
|
-
var type = decoder.buffer[start];
|
|
107
|
+
var start = decoder.reserve(len+1);
|
|
108
|
+
var type = decoder.buffer[start++];
|
|
109
|
+
var end = start + len;
|
|
96
110
|
var unpack = decoder.codec.getExtUnpacker(type);
|
|
97
111
|
if (!unpack) throw new Error("Invalid ext type: " + (type ? ("0x" + type.toString(16)) : type));
|
|
98
|
-
var buf = slice.call(decoder.buffer, start
|
|
112
|
+
var buf = BufferProto.slice.call(decoder.buffer, start, end);
|
|
99
113
|
return unpack(buf);
|
|
100
114
|
}
|
|
101
115
|
|
|
102
116
|
function uint8(decoder) {
|
|
103
|
-
var
|
|
104
|
-
|
|
105
|
-
|
|
117
|
+
var start = decoder.reserve(1);
|
|
118
|
+
return decoder.buffer[start];
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function int8(decoder) {
|
|
122
|
+
var start = decoder.reserve(1);
|
|
123
|
+
var value = decoder.buffer[start];
|
|
124
|
+
return (value & 0x80) ? value - 0x100 : value;
|
|
106
125
|
}
|
|
107
126
|
|
|
108
127
|
function uint16(decoder) {
|
|
128
|
+
var start = decoder.reserve(2);
|
|
129
|
+
var buffer = decoder.buffer;
|
|
130
|
+
return (buffer[start++] << 8) | buffer[start];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function int16(decoder) {
|
|
134
|
+
var start = decoder.reserve(2);
|
|
109
135
|
var buffer = decoder.buffer;
|
|
110
|
-
|
|
111
|
-
return (
|
|
136
|
+
var value = (buffer[start++] << 8) | buffer[start];
|
|
137
|
+
return (value & 0x8000) ? value - 0x10000 : value;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function uint32(decoder) {
|
|
141
|
+
var start = decoder.reserve(4);
|
|
142
|
+
var buffer = decoder.buffer;
|
|
143
|
+
return (buffer[start++] * 16777216) + (buffer[start++] << 16) + (buffer[start++] << 8) + buffer[start];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function int32(decoder) {
|
|
147
|
+
var start = decoder.reserve(4);
|
|
148
|
+
var buffer = decoder.buffer;
|
|
149
|
+
return (buffer[start++] << 24) | (buffer[start++] << 16) | (buffer[start++] << 8) | buffer[start];
|
|
112
150
|
}
|
|
113
151
|
|
|
114
152
|
function read(len, method) {
|
|
115
153
|
return function(decoder) {
|
|
116
|
-
var start = decoder.
|
|
117
|
-
var end = decoder.offset = start + len;
|
|
118
|
-
if (end > decoder.buffer.length) throw new BufferShortageError();
|
|
154
|
+
var start = decoder.reserve(len);
|
|
119
155
|
return method.call(decoder.buffer, start, NO_ASSERT);
|
|
120
156
|
};
|
|
121
157
|
}
|
|
@@ -137,18 +173,9 @@ function readInt64BE_int64(start) {
|
|
|
137
173
|
}
|
|
138
174
|
|
|
139
175
|
function readFloatBE(start) {
|
|
140
|
-
if (this.readFloatBE) return this.readFloatBE(start);
|
|
141
176
|
return ieee754.read(this, start, false, 23, 4);
|
|
142
177
|
}
|
|
143
178
|
|
|
144
179
|
function readDoubleBE(start) {
|
|
145
|
-
if (this.readDoubleBE) return this.readDoubleBE(start);
|
|
146
180
|
return ieee754.read(this, start, false, 52, 8);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
function slice(start, end) {
|
|
150
|
-
var f = this.slice || Array.prototype.slice;
|
|
151
|
-
var buf = f.call(this, start, end);
|
|
152
|
-
if (!Buffer.isBuffer(buf)) buf = Buffer(buf);
|
|
153
|
-
return buf;
|
|
154
|
-
}
|
|
181
|
+
}
|
package/lib/read-token.js
CHANGED
package/lib/write-core.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
// write-core.js
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
var ExtBuffer = require("./ext-buffer").ExtBuffer;
|
|
4
|
+
var ExtPacker = require("./ext-packer");
|
|
5
5
|
var WriteType = require("./write-type");
|
|
6
|
+
var CodecBase = require("./codec-base");
|
|
7
|
+
|
|
8
|
+
CodecBase.install({
|
|
9
|
+
addExtPacker: addExtPacker,
|
|
10
|
+
getExtPacker: getExtPacker,
|
|
11
|
+
init: init
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
exports.preset = init.call(CodecBase.preset);
|
|
6
15
|
|
|
7
16
|
function getEncoder(options) {
|
|
8
17
|
var writeType = WriteType.getWriteType(options);
|
|
@@ -14,3 +23,47 @@ function getEncoder(options) {
|
|
|
14
23
|
func(encoder, value);
|
|
15
24
|
}
|
|
16
25
|
}
|
|
26
|
+
|
|
27
|
+
function init() {
|
|
28
|
+
var options = this.options;
|
|
29
|
+
this.encode = getEncoder(options);
|
|
30
|
+
|
|
31
|
+
if (options && options.preset) {
|
|
32
|
+
ExtPacker.setExtPackers(this);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function addExtPacker(etype, Class, packer) {
|
|
39
|
+
packer = CodecBase.filter(packer);
|
|
40
|
+
var name = Class.name;
|
|
41
|
+
if (name && name !== "Object") {
|
|
42
|
+
var packers = this.extPackers || (this.extPackers = {});
|
|
43
|
+
packers[name] = extPacker;
|
|
44
|
+
} else {
|
|
45
|
+
// fallback for IE
|
|
46
|
+
var list = this.extEncoderList || (this.extEncoderList = []);
|
|
47
|
+
list.unshift([Class, extPacker]);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function extPacker(value) {
|
|
51
|
+
if (packer) value = packer(value);
|
|
52
|
+
return new ExtBuffer(value, etype);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function getExtPacker(value) {
|
|
57
|
+
var packers = this.extPackers || (this.extPackers = {});
|
|
58
|
+
var c = value.constructor;
|
|
59
|
+
var e = c && c.name && packers[c.name];
|
|
60
|
+
if (e) return e;
|
|
61
|
+
|
|
62
|
+
// fallback for IE
|
|
63
|
+
var list = this.extEncoderList || (this.extEncoderList = []);
|
|
64
|
+
var len = list.length;
|
|
65
|
+
for (var i = 0; i < len; i++) {
|
|
66
|
+
var pair = list[i];
|
|
67
|
+
if (c === pair[0]) return pair[1];
|
|
68
|
+
}
|
|
69
|
+
}
|
package/lib/write-token.js
CHANGED
|
@@ -1,21 +1,40 @@
|
|
|
1
1
|
// write-token.js
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var ieee754 = require("ieee754");
|
|
4
|
+
var Int64Buffer = require("int64-buffer");
|
|
5
|
+
var Uint64BE = Int64Buffer.Uint64BE;
|
|
6
|
+
var Int64BE = Int64Buffer.Int64BE;
|
|
5
7
|
|
|
6
|
-
var
|
|
8
|
+
var uint8 = require("./write-uint8").uint8;
|
|
9
|
+
var Bufferish = require("./bufferish");
|
|
10
|
+
var Buffer = Bufferish.global;
|
|
11
|
+
var IS_BUFFER_SHIM = Bufferish.hasBuffer && ("TYPED_ARRAY_SUPPORT" in Buffer);
|
|
7
12
|
var NO_TYPED_ARRAY = IS_BUFFER_SHIM && !Buffer.TYPED_ARRAY_SUPPORT;
|
|
13
|
+
var Buffer_prototype = Bufferish.hasBuffer && Buffer.prototype || {};
|
|
8
14
|
|
|
9
15
|
exports.getWriteToken = getWriteToken;
|
|
10
16
|
|
|
11
17
|
function getWriteToken(options) {
|
|
12
|
-
if (
|
|
18
|
+
if (options && options.uint8array) {
|
|
19
|
+
return init_uint8array();
|
|
20
|
+
} else if (NO_TYPED_ARRAY || (Bufferish.hasBuffer && options && options.safe)) {
|
|
13
21
|
return init_safe();
|
|
14
22
|
} else {
|
|
15
23
|
return init_token();
|
|
16
24
|
}
|
|
17
25
|
}
|
|
18
26
|
|
|
27
|
+
function init_uint8array() {
|
|
28
|
+
var token = init_token();
|
|
29
|
+
|
|
30
|
+
// float 32 -- 0xca
|
|
31
|
+
// float 64 -- 0xcb
|
|
32
|
+
token[0xca] = writeN(0xca, 4, writeFloatBE);
|
|
33
|
+
token[0xcb] = writeN(0xcb, 8, writeDoubleBE);
|
|
34
|
+
|
|
35
|
+
return token;
|
|
36
|
+
}
|
|
37
|
+
|
|
19
38
|
// Node.js and browsers with TypedArray
|
|
20
39
|
|
|
21
40
|
function init_token() {
|
|
@@ -43,8 +62,8 @@ function init_token() {
|
|
|
43
62
|
|
|
44
63
|
// float 32 -- 0xca
|
|
45
64
|
// float 64 -- 0xcb
|
|
46
|
-
token[0xca] = writeN(0xca, 4,
|
|
47
|
-
token[0xcb] = writeN(0xcb, 8,
|
|
65
|
+
token[0xca] = writeN(0xca, 4, (Buffer_prototype.writeFloatBE || writeFloatBE), true);
|
|
66
|
+
token[0xcb] = writeN(0xcb, 8, (Buffer_prototype.writeDoubleBE || writeDoubleBE), true);
|
|
48
67
|
|
|
49
68
|
// uint 8 -- 0xcc
|
|
50
69
|
// uint 16 -- 0xcd
|
|
@@ -53,7 +72,7 @@ function init_token() {
|
|
|
53
72
|
token[0xcc] = write1(0xcc);
|
|
54
73
|
token[0xcd] = write2(0xcd);
|
|
55
74
|
token[0xce] = write4(0xce);
|
|
56
|
-
token[0xcf] = writeN(0xcf, 8,
|
|
75
|
+
token[0xcf] = writeN(0xcf, 8, writeUInt64BE);
|
|
57
76
|
|
|
58
77
|
// int 8 -- 0xd0
|
|
59
78
|
// int 16 -- 0xd1
|
|
@@ -62,7 +81,7 @@ function init_token() {
|
|
|
62
81
|
token[0xd0] = write1(0xd0);
|
|
63
82
|
token[0xd1] = write2(0xd1);
|
|
64
83
|
token[0xd2] = write4(0xd2);
|
|
65
|
-
token[0xd3] = writeN(0xd3, 8,
|
|
84
|
+
token[0xd3] = writeN(0xd3, 8, writeInt64BE);
|
|
66
85
|
|
|
67
86
|
// str 8 -- 0xd9
|
|
68
87
|
// str 16 -- 0xda
|
|
@@ -121,7 +140,7 @@ function init_safe() {
|
|
|
121
140
|
token[0xcc] = writeN(0xcc, 1, Buffer.prototype.writeUInt8);
|
|
122
141
|
token[0xcd] = writeN(0xcd, 2, Buffer.prototype.writeUInt16BE);
|
|
123
142
|
token[0xce] = writeN(0xce, 4, Buffer.prototype.writeUInt32BE);
|
|
124
|
-
token[0xcf] = writeN(0xcf, 8,
|
|
143
|
+
token[0xcf] = writeN(0xcf, 8, writeUInt64BE);
|
|
125
144
|
|
|
126
145
|
// int 8 -- 0xd0
|
|
127
146
|
// int 16 -- 0xd1
|
|
@@ -130,7 +149,7 @@ function init_safe() {
|
|
|
130
149
|
token[0xd0] = writeN(0xd0, 1, Buffer.prototype.writeInt8);
|
|
131
150
|
token[0xd1] = writeN(0xd1, 2, Buffer.prototype.writeInt16BE);
|
|
132
151
|
token[0xd2] = writeN(0xd2, 4, Buffer.prototype.writeInt32BE);
|
|
133
|
-
token[0xd3] = writeN(0xd3, 8,
|
|
152
|
+
token[0xd3] = writeN(0xd3, 8, writeInt64BE);
|
|
134
153
|
|
|
135
154
|
// str 8 -- 0xd9
|
|
136
155
|
// str 16 -- 0xda
|
|
@@ -154,46 +173,55 @@ function init_safe() {
|
|
|
154
173
|
|
|
155
174
|
function write1(type) {
|
|
156
175
|
return function(encoder, value) {
|
|
157
|
-
encoder.reserve(2);
|
|
176
|
+
var offset = encoder.reserve(2);
|
|
158
177
|
var buffer = encoder.buffer;
|
|
159
|
-
var offset = encoder.offset;
|
|
160
178
|
buffer[offset++] = type;
|
|
161
|
-
buffer[offset
|
|
162
|
-
encoder.offset = offset;
|
|
179
|
+
buffer[offset] = value;
|
|
163
180
|
};
|
|
164
181
|
}
|
|
165
182
|
|
|
166
183
|
function write2(type) {
|
|
167
184
|
return function(encoder, value) {
|
|
168
|
-
encoder.reserve(3);
|
|
185
|
+
var offset = encoder.reserve(3);
|
|
169
186
|
var buffer = encoder.buffer;
|
|
170
|
-
var offset = encoder.offset;
|
|
171
187
|
buffer[offset++] = type;
|
|
172
188
|
buffer[offset++] = value >>> 8;
|
|
173
|
-
buffer[offset
|
|
174
|
-
encoder.offset = offset;
|
|
189
|
+
buffer[offset] = value;
|
|
175
190
|
};
|
|
176
191
|
}
|
|
177
192
|
|
|
178
193
|
function write4(type) {
|
|
179
194
|
return function(encoder, value) {
|
|
180
|
-
encoder.reserve(5);
|
|
195
|
+
var offset = encoder.reserve(5);
|
|
181
196
|
var buffer = encoder.buffer;
|
|
182
|
-
var offset = encoder.offset;
|
|
183
197
|
buffer[offset++] = type;
|
|
184
198
|
buffer[offset++] = value >>> 24;
|
|
185
199
|
buffer[offset++] = value >>> 16;
|
|
186
200
|
buffer[offset++] = value >>> 8;
|
|
187
|
-
buffer[offset
|
|
188
|
-
encoder.offset = offset;
|
|
201
|
+
buffer[offset] = value;
|
|
189
202
|
};
|
|
190
203
|
}
|
|
191
204
|
|
|
192
205
|
function writeN(type, len, method, noAssert) {
|
|
193
206
|
return function(encoder, value) {
|
|
194
|
-
encoder.reserve(len + 1);
|
|
195
|
-
encoder.buffer[
|
|
196
|
-
method.call(encoder.buffer, value,
|
|
197
|
-
encoder.offset += len;
|
|
207
|
+
var offset = encoder.reserve(len + 1);
|
|
208
|
+
encoder.buffer[offset++] = type;
|
|
209
|
+
method.call(encoder.buffer, value, offset, noAssert);
|
|
198
210
|
};
|
|
199
211
|
}
|
|
212
|
+
|
|
213
|
+
function writeUInt64BE(value, offset) {
|
|
214
|
+
new Uint64BE(this, offset, value);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function writeInt64BE(value, offset) {
|
|
218
|
+
new Int64BE(this, offset, value);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function writeFloatBE(value, offset) {
|
|
222
|
+
ieee754.write(this, value, offset, false, 23, 4);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function writeDoubleBE(value, offset) {
|
|
226
|
+
ieee754.write(this, value, offset, false, 52, 8);
|
|
227
|
+
}
|
package/lib/write-type.js
CHANGED
|
@@ -5,12 +5,14 @@ var Int64Buffer = require("int64-buffer");
|
|
|
5
5
|
var Uint64BE = Int64Buffer.Uint64BE;
|
|
6
6
|
var Int64BE = Int64Buffer.Int64BE;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var Bufferish = require("./bufferish");
|
|
9
|
+
var BufferProto = require("./bufferish-proto");
|
|
9
10
|
var WriteToken = require("./write-token");
|
|
10
11
|
var uint8 = require("./write-uint8").uint8;
|
|
11
12
|
var ExtBuffer = require("./ext-buffer").ExtBuffer;
|
|
12
13
|
|
|
13
|
-
var
|
|
14
|
+
var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array);
|
|
15
|
+
var HAS_MAP = ("undefined" !== typeof Map);
|
|
14
16
|
|
|
15
17
|
var extmap = [];
|
|
16
18
|
extmap[1] = 0xd4;
|
|
@@ -23,22 +25,23 @@ exports.getWriteType = getWriteType;
|
|
|
23
25
|
|
|
24
26
|
function getWriteType(options) {
|
|
25
27
|
var token = WriteToken.getWriteToken(options);
|
|
28
|
+
var useraw = options && options.useraw;
|
|
29
|
+
var binarraybuffer = HAS_UINT8ARRAY && options && options.binarraybuffer;
|
|
30
|
+
var isBuffer = binarraybuffer ? Bufferish.isArrayBuffer : Bufferish.isBuffer;
|
|
31
|
+
var bin = binarraybuffer ? bin_arraybuffer : bin_buffer;
|
|
32
|
+
var usemap = HAS_MAP && options && options.usemap;
|
|
33
|
+
var map = usemap ? map_to_map : obj_to_map;
|
|
26
34
|
|
|
27
35
|
var writeType = {
|
|
28
36
|
"boolean": bool,
|
|
29
37
|
"function": nil,
|
|
30
38
|
"number": number,
|
|
31
|
-
"object": object,
|
|
32
|
-
"string":
|
|
39
|
+
"object": (useraw ? object_raw : object),
|
|
40
|
+
"string": _string(useraw ? raw_head_size : str_head_size),
|
|
33
41
|
"symbol": nil,
|
|
34
42
|
"undefined": nil
|
|
35
43
|
};
|
|
36
44
|
|
|
37
|
-
if (options && options.useraw) {
|
|
38
|
-
writeType.object = object_raw;
|
|
39
|
-
writeType.string = string_raw;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
45
|
return writeType;
|
|
43
46
|
|
|
44
47
|
// false -- 0xc2
|
|
@@ -90,33 +93,53 @@ function getWriteType(options) {
|
|
|
90
93
|
// str 16 -- 0xda
|
|
91
94
|
// str 32 -- 0xdb
|
|
92
95
|
// fixstr -- 0xa0 - 0xbf
|
|
93
|
-
function
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
var maxsize = 5 + length * 3;
|
|
97
|
-
encoder.reserve(maxsize);
|
|
96
|
+
function str_head_size(length) {
|
|
97
|
+
return (length < 32) ? 1 : (length <= 0xFF) ? 2 : (length <= 0xFFFF) ? 3 : 5;
|
|
98
|
+
}
|
|
98
99
|
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
// raw 16 -- 0xda
|
|
101
|
+
// raw 32 -- 0xdb
|
|
102
|
+
// fixraw -- 0xa0 - 0xbf
|
|
103
|
+
function raw_head_size(length) {
|
|
104
|
+
return (length < 32) ? 1 : (length <= 0xFFFF) ? 3 : 5;
|
|
105
|
+
}
|
|
101
106
|
|
|
102
|
-
|
|
103
|
-
|
|
107
|
+
function _string(head_size) {
|
|
108
|
+
return string;
|
|
104
109
|
|
|
105
|
-
|
|
106
|
-
|
|
110
|
+
function string(encoder, value) {
|
|
111
|
+
// prepare buffer
|
|
112
|
+
var length = value.length;
|
|
113
|
+
var maxsize = 5 + length * 3;
|
|
114
|
+
encoder.offset = encoder.reserve(maxsize);
|
|
115
|
+
var buffer = encoder.buffer;
|
|
107
116
|
|
|
108
|
-
|
|
109
|
-
|
|
117
|
+
// expected header size
|
|
118
|
+
var expected = head_size(length);
|
|
110
119
|
|
|
111
|
-
|
|
112
|
-
|
|
120
|
+
// expected start point
|
|
121
|
+
var start = encoder.offset + expected;
|
|
113
122
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
123
|
+
// write string
|
|
124
|
+
length = BufferProto.write.call(buffer, value, start);
|
|
125
|
+
|
|
126
|
+
// actual header size
|
|
127
|
+
var actual = head_size(length);
|
|
128
|
+
|
|
129
|
+
// move content when needed
|
|
130
|
+
if (expected !== actual) {
|
|
131
|
+
var targetStart = start + actual - expected;
|
|
132
|
+
var end = start + length;
|
|
133
|
+
BufferProto.copy.call(buffer, buffer, targetStart, start, end);
|
|
134
|
+
}
|
|
117
135
|
|
|
118
|
-
|
|
119
|
-
|
|
136
|
+
// write header
|
|
137
|
+
var type = (actual === 1) ? (0xa0 + length) : (actual <= 3) ? (0xd7 + actual) : 0xdb;
|
|
138
|
+
token[type](encoder, length);
|
|
139
|
+
|
|
140
|
+
// move cursor
|
|
141
|
+
encoder.offset += length;
|
|
142
|
+
}
|
|
120
143
|
}
|
|
121
144
|
|
|
122
145
|
function object(encoder, value) {
|
|
@@ -124,7 +147,7 @@ function getWriteType(options) {
|
|
|
124
147
|
if (value === null) return nil(encoder, value);
|
|
125
148
|
|
|
126
149
|
// Buffer
|
|
127
|
-
if (
|
|
150
|
+
if (isBuffer(value)) return bin(encoder, value);
|
|
128
151
|
|
|
129
152
|
// Array
|
|
130
153
|
if (IS_ARRAY(value)) return array(encoder, value);
|
|
@@ -138,10 +161,18 @@ function getWriteType(options) {
|
|
|
138
161
|
if (packer) value = packer(value);
|
|
139
162
|
if (value instanceof ExtBuffer) return ext(encoder, value);
|
|
140
163
|
|
|
141
|
-
// plain old
|
|
164
|
+
// plain old Objects or Map
|
|
142
165
|
map(encoder, value);
|
|
143
166
|
}
|
|
144
167
|
|
|
168
|
+
function object_raw(encoder, value) {
|
|
169
|
+
// Buffer
|
|
170
|
+
if (isBuffer(value)) return raw(encoder, value);
|
|
171
|
+
|
|
172
|
+
// others
|
|
173
|
+
object(encoder, value);
|
|
174
|
+
}
|
|
175
|
+
|
|
145
176
|
// nil -- 0xc0
|
|
146
177
|
function nil(encoder, value) {
|
|
147
178
|
var type = 0xc0;
|
|
@@ -165,13 +196,17 @@ function getWriteType(options) {
|
|
|
165
196
|
// bin 8 -- 0xc4
|
|
166
197
|
// bin 16 -- 0xc5
|
|
167
198
|
// bin 32 -- 0xc6
|
|
168
|
-
function
|
|
199
|
+
function bin_buffer(encoder, value) {
|
|
169
200
|
var length = value.length;
|
|
170
201
|
var type = (length < 0xFF) ? 0xc4 : (length <= 0xFFFF) ? 0xc5 : 0xc6;
|
|
171
202
|
token[type](encoder, length);
|
|
172
203
|
encoder.send(value);
|
|
173
204
|
}
|
|
174
205
|
|
|
206
|
+
function bin_arraybuffer(encoder, value) {
|
|
207
|
+
bin_buffer(encoder, new Uint8Array(value));
|
|
208
|
+
}
|
|
209
|
+
|
|
175
210
|
// fixext 1 -- 0xd4
|
|
176
211
|
// fixext 2 -- 0xd5
|
|
177
212
|
// fixext 4 -- 0xd6
|
|
@@ -192,7 +227,7 @@ function getWriteType(options) {
|
|
|
192
227
|
// fixmap -- 0x80 - 0x8f
|
|
193
228
|
// map 16 -- 0xde
|
|
194
229
|
// map 32 -- 0xdf
|
|
195
|
-
function
|
|
230
|
+
function obj_to_map(encoder, value) {
|
|
196
231
|
var keys = Object.keys(value);
|
|
197
232
|
var length = keys.length;
|
|
198
233
|
var type = (length < 16) ? (0x80 + length) : (length <= 0xFFFF) ? 0xde : 0xdf;
|
|
@@ -205,57 +240,30 @@ function getWriteType(options) {
|
|
|
205
240
|
});
|
|
206
241
|
}
|
|
207
242
|
|
|
208
|
-
//
|
|
209
|
-
//
|
|
210
|
-
//
|
|
211
|
-
function
|
|
212
|
-
|
|
213
|
-
var length = value.length;
|
|
214
|
-
var maxsize = 5 + length * 3;
|
|
215
|
-
encoder.reserve(maxsize);
|
|
216
|
-
|
|
217
|
-
// expected header size
|
|
218
|
-
var expected = (length < 32) ? 1 : (length <= 0xFFFF) ? 3 : 5;
|
|
219
|
-
|
|
220
|
-
// expected start point
|
|
221
|
-
var start = encoder.offset + expected;
|
|
222
|
-
|
|
223
|
-
// write string
|
|
224
|
-
length = BufferLite.writeString.call(encoder.buffer, value, start);
|
|
225
|
-
|
|
226
|
-
// actual header size
|
|
227
|
-
var actual = (length < 32) ? 1 : (length <= 0xFFFF) ? 3 : 5;
|
|
228
|
-
|
|
229
|
-
// move content when needed
|
|
230
|
-
if (expected !== actual) move(encoder, start, length, actual - expected);
|
|
243
|
+
// fixmap -- 0x80 - 0x8f
|
|
244
|
+
// map 16 -- 0xde
|
|
245
|
+
// map 32 -- 0xdf
|
|
246
|
+
function map_to_map(encoder, value) {
|
|
247
|
+
if (!(value instanceof Map)) return obj_to_map(encoder, value);
|
|
231
248
|
|
|
232
|
-
|
|
233
|
-
var type = (length <
|
|
249
|
+
var length = value.size;
|
|
250
|
+
var type = (length < 16) ? (0x80 + length) : (length <= 0xFFFF) ? 0xde : 0xdf;
|
|
234
251
|
token[type](encoder, length);
|
|
235
252
|
|
|
236
|
-
|
|
237
|
-
|
|
253
|
+
var encode = encoder.codec.encode;
|
|
254
|
+
value.forEach(function(val, key, m) {
|
|
255
|
+
encode(encoder, key);
|
|
256
|
+
encode(encoder, val);
|
|
257
|
+
});
|
|
238
258
|
}
|
|
239
259
|
|
|
240
260
|
// raw 16 -- 0xda
|
|
241
261
|
// raw 32 -- 0xdb
|
|
242
262
|
// fixraw -- 0xa0 - 0xbf
|
|
243
|
-
function
|
|
244
|
-
if (!Buffer.isBuffer(value)) return object(encoder, value);
|
|
245
|
-
|
|
263
|
+
function raw(encoder, value) {
|
|
246
264
|
var length = value.length;
|
|
247
265
|
var type = (length < 32) ? (0xa0 + length) : (length <= 0xFFFF) ? 0xda : 0xdb;
|
|
248
266
|
token[type](encoder, length);
|
|
249
267
|
encoder.send(value);
|
|
250
268
|
}
|
|
251
269
|
}
|
|
252
|
-
|
|
253
|
-
function move(encoder, start, length, diff) {
|
|
254
|
-
var targetStart = start + diff;
|
|
255
|
-
var end = start + length;
|
|
256
|
-
if (IS_BUFFER_SHIM) {
|
|
257
|
-
BufferLite.copy.call(encoder.buffer, encoder.buffer, targetStart, start, end);
|
|
258
|
-
} else {
|
|
259
|
-
encoder.buffer.copy(encoder.buffer, targetStart, start, end);
|
|
260
|
-
}
|
|
261
|
-
}
|