msgpack-lite 0.1.20 → 0.1.26

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.
Files changed (45) hide show
  1. package/.npmignore +1 -0
  2. package/.travis.yml +1 -0
  3. package/.zuul.yml +1 -1
  4. package/Makefile +2 -2
  5. package/README.md +27 -7
  6. package/dist/msgpack.min.js +2 -2
  7. package/lib/buffer-global.js +11 -0
  8. package/lib/buffer-lite.js +88 -60
  9. package/lib/bufferish-array.js +41 -0
  10. package/lib/bufferish-buffer.js +46 -0
  11. package/lib/bufferish-proto.js +86 -0
  12. package/lib/bufferish-uint8array.js +51 -0
  13. package/lib/bufferish.js +108 -0
  14. package/lib/codec-base.js +67 -0
  15. package/lib/codec.js +8 -1
  16. package/lib/decode-buffer.js +6 -50
  17. package/lib/encode-buffer.js +6 -79
  18. package/lib/ext-buffer.js +3 -1
  19. package/lib/ext-packer.js +78 -0
  20. package/lib/ext-unpacker.js +81 -0
  21. package/lib/ext.js +4 -77
  22. package/lib/flex-buffer.js +194 -0
  23. package/lib/read-core.js +36 -2
  24. package/lib/read-format.js +83 -56
  25. package/lib/read-token.js +1 -1
  26. package/lib/write-core.js +55 -2
  27. package/lib/write-token.js +54 -26
  28. package/lib/write-type.js +81 -73
  29. package/lib/write-uint8.js +2 -2
  30. package/package.json +23 -13
  31. package/test/10.encode.js +50 -30
  32. package/test/11.decode.js +2 -0
  33. package/test/14.codec.js +8 -1
  34. package/test/16.binarraybuffer.js +91 -0
  35. package/test/17.uint8array.js +43 -0
  36. package/test/18.utf8.js +59 -0
  37. package/test/20.roundtrip.js +53 -33
  38. package/test/23.extbuffer.js +44 -2
  39. package/test/27.usemap.js +66 -0
  40. package/test/61.encode-only.js +26 -0
  41. package/test/62.decode-only.js +23 -0
  42. package/test/63.module-deps.js +77 -0
  43. package/lib/buffer-shortage.js +0 -8
  44. package/lib/ext-preset.js +0 -188
  45. package/test/60.buffer-lite.js +0 -98
@@ -0,0 +1,46 @@
1
+ // bufferish-buffer.js
2
+
3
+ var Bufferish = require("./bufferish");
4
+ var Buffer = Bufferish.global;
5
+
6
+ var exports = module.exports = Bufferish.hasBuffer ? alloc(0) : [];
7
+
8
+ exports.alloc = Bufferish.hasBuffer && Buffer.alloc || alloc;
9
+ exports.concat = Bufferish.concat;
10
+ exports.from = from;
11
+
12
+ /**
13
+ * @param size {Number}
14
+ * @returns {Buffer|Uint8Array|Array}
15
+ */
16
+
17
+ function alloc(size) {
18
+ return new Buffer(size);
19
+ }
20
+
21
+ /**
22
+ * @param value {Array|ArrayBuffer|Buffer|String}
23
+ * @returns {Buffer}
24
+ */
25
+
26
+ function from(value) {
27
+ if (!Bufferish.isBuffer(value) && Bufferish.isView(value)) {
28
+ // TypedArray to Uint8Array
29
+ value = Bufferish.Uint8Array.from(value);
30
+ } else if (Bufferish.isArrayBuffer(value)) {
31
+ // ArrayBuffer to Uint8Array
32
+ value = new Uint8Array(value);
33
+ } else if (typeof value === "string") {
34
+ // String to Buffer
35
+ return Bufferish.from.call(exports, value);
36
+ } else if (typeof value === "number") {
37
+ throw new TypeError('"value" argument must not be a number');
38
+ }
39
+
40
+ // Array-like to Buffer
41
+ if (Buffer.from && Buffer.from.length !== 1) {
42
+ return Buffer.from(value); // node v6+
43
+ } else {
44
+ return new Buffer(value); // node v4
45
+ }
46
+ }
@@ -0,0 +1,86 @@
1
+ // bufferish-proto.js
2
+
3
+ /* jshint eqnull:true */
4
+
5
+ var BufferLite = require("./buffer-lite");
6
+
7
+ exports.copy = copy;
8
+ exports.slice = slice;
9
+ exports.toString = toString;
10
+ exports.write = gen("write");
11
+
12
+ var Bufferish = require("./bufferish");
13
+ var Buffer = Bufferish.global;
14
+
15
+ var isBufferShim = Bufferish.hasBuffer && ("TYPED_ARRAY_SUPPORT" in Buffer);
16
+ var brokenTypedArray = isBufferShim && !Buffer.TYPED_ARRAY_SUPPORT;
17
+
18
+ /**
19
+ * @param target {Buffer|Uint8Array|Array}
20
+ * @param [targetStart] {Number}
21
+ * @param [start] {Number}
22
+ * @param [end] {Number}
23
+ * @returns {Buffer|Uint8Array|Array}
24
+ */
25
+
26
+ function copy(target, targetStart, start, end) {
27
+ var thisIsBuffer = Bufferish.isBuffer(this);
28
+ var targetIsBuffer = Bufferish.isBuffer(target);
29
+ if (thisIsBuffer && targetIsBuffer) {
30
+ // Buffer to Buffer
31
+ return this.copy(target, targetStart, start, end);
32
+ } else if (!brokenTypedArray && !thisIsBuffer && !targetIsBuffer &&
33
+ Bufferish.isView(this) && Bufferish.isView(target)) {
34
+ // Uint8Array to Uint8Array (except for minor some browsers)
35
+ var buffer = (start || end != null) ? slice.call(this, start, end) : this;
36
+ target.set(buffer, targetStart);
37
+ return buffer.length;
38
+ } else {
39
+ // other cases
40
+ return BufferLite.copy.call(this, target, targetStart, start, end);
41
+ }
42
+ }
43
+
44
+ /**
45
+ * @param [start] {Number}
46
+ * @param [end] {Number}
47
+ * @returns {Buffer|Uint8Array|Array}
48
+ */
49
+
50
+ function slice(start, end) {
51
+ // for Buffer, Uint8Array (except for minor some browsers) and Array
52
+ var f = this.slice || (!brokenTypedArray && this.subarray);
53
+ if (f) return f.call(this, start, end);
54
+
55
+ // Uint8Array (for minor some browsers)
56
+ var target = Bufferish.alloc.call(this, end - start);
57
+ copy.call(this, target, 0, start, end);
58
+ return target;
59
+ }
60
+
61
+ /**
62
+ * Buffer.prototype.toString()
63
+ *
64
+ * @param [encoding] {String} ignored
65
+ * @param [start] {Number}
66
+ * @param [end] {Number}
67
+ * @returns {String}
68
+ */
69
+
70
+ function toString(encoding, start, end) {
71
+ var f = (!isBufferShim && Bufferish.isBuffer(this)) ? this.toString : BufferLite.toString;
72
+ return f.apply(this, arguments);
73
+ }
74
+
75
+ /**
76
+ * @private
77
+ */
78
+
79
+ function gen(method) {
80
+ return wrap;
81
+
82
+ function wrap() {
83
+ var f = this[method] || BufferLite[method];
84
+ return f.apply(this, arguments);
85
+ }
86
+ }
@@ -0,0 +1,51 @@
1
+ // bufferish-uint8array.js
2
+
3
+ var Bufferish = require("./bufferish");
4
+
5
+ var exports = module.exports = Bufferish.hasArrayBuffer ? alloc(0) : [];
6
+
7
+ exports.alloc = alloc;
8
+ exports.concat = Bufferish.concat;
9
+ exports.from = from;
10
+
11
+ /**
12
+ * @param size {Number}
13
+ * @returns {Buffer|Uint8Array|Array}
14
+ */
15
+
16
+ function alloc(size) {
17
+ return new Uint8Array(size);
18
+ }
19
+
20
+ /**
21
+ * @param value {Array|ArrayBuffer|Buffer|String}
22
+ * @returns {Uint8Array}
23
+ */
24
+
25
+ function from(value) {
26
+ if (Bufferish.isView(value)) {
27
+ // TypedArray to ArrayBuffer
28
+ var byteOffset = value.byteOffset;
29
+ var byteLength = value.byteLength;
30
+ value = value.buffer;
31
+ if (value.byteLength !== byteLength) {
32
+ if (value.slice) {
33
+ value = value.slice(byteOffset, byteOffset + byteLength);
34
+ } else {
35
+ // Android 4.1 does not have ArrayBuffer.prototype.slice
36
+ value = new Uint8Array(value);
37
+ if (value.byteLength !== byteLength) {
38
+ // TypedArray to ArrayBuffer to Uint8Array to Array
39
+ value = Array.prototype.slice.call(value, byteOffset, byteOffset + byteLength);
40
+ }
41
+ }
42
+ }
43
+ } else if (typeof value === "string") {
44
+ // String to Uint8Array
45
+ return Bufferish.from.call(exports, value);
46
+ } else if (typeof value === "number") {
47
+ throw new TypeError('"value" argument must not be a number');
48
+ }
49
+
50
+ return new Uint8Array(value);
51
+ }
@@ -0,0 +1,108 @@
1
+ // bufferish.js
2
+
3
+ var Buffer = exports.global = require("./buffer-global");
4
+ var hasBuffer = exports.hasBuffer = Buffer && !!Buffer.isBuffer;
5
+ var hasArrayBuffer = exports.hasArrayBuffer = ("undefined" !== typeof ArrayBuffer);
6
+
7
+ var isArray = exports.isArray = require("isarray");
8
+ exports.isArrayBuffer = hasArrayBuffer ? isArrayBuffer : _false;
9
+ var isBuffer = exports.isBuffer = hasBuffer ? Buffer.isBuffer : _false;
10
+ var isView = exports.isView = hasArrayBuffer ? (ArrayBuffer.isView || _is("ArrayBuffer", "buffer")) : _false;
11
+
12
+ exports.alloc = alloc;
13
+ exports.concat = concat;
14
+ exports.from = from;
15
+
16
+ var BufferArray = exports.Array = require("./bufferish-array");
17
+ var BufferBuffer = exports.Buffer = require("./bufferish-buffer");
18
+ var BufferUint8Array = exports.Uint8Array = require("./bufferish-uint8array");
19
+ var BufferProto = exports.prototype = require("./bufferish-proto");
20
+
21
+ /**
22
+ * @param value {Array|ArrayBuffer|Buffer|String}
23
+ * @returns {Buffer|Uint8Array|Array}
24
+ */
25
+
26
+ function from(value) {
27
+ if (typeof value === "string") {
28
+ return fromString.call(this, value);
29
+ } else {
30
+ return auto(this).from(value);
31
+ }
32
+ }
33
+
34
+ /**
35
+ * @param size {Number}
36
+ * @returns {Buffer|Uint8Array|Array}
37
+ */
38
+
39
+ function alloc(size) {
40
+ return auto(this).alloc(size);
41
+ }
42
+
43
+ /**
44
+ * @param list {Array} array of (Buffer|Uint8Array|Array)s
45
+ * @param [length]
46
+ * @returns {Buffer|Uint8Array|Array}
47
+ */
48
+
49
+ function concat(list, length) {
50
+ if (!length) {
51
+ length = 0;
52
+ Array.prototype.forEach.call(list, dryrun);
53
+ }
54
+ var ref = (this !== exports) && this || list[0];
55
+ var result = alloc.call(ref, length);
56
+ var offset = 0;
57
+ Array.prototype.forEach.call(list, append);
58
+ return result;
59
+
60
+ function dryrun(buffer) {
61
+ length += buffer.length;
62
+ }
63
+
64
+ function append(buffer) {
65
+ offset += BufferProto.copy.call(buffer, result, offset);
66
+ }
67
+ }
68
+
69
+ var _isArrayBuffer = _is("ArrayBuffer");
70
+
71
+ function isArrayBuffer(value) {
72
+ return (value instanceof ArrayBuffer) || _isArrayBuffer(value);
73
+ }
74
+
75
+ /**
76
+ * @private
77
+ */
78
+
79
+ function fromString(value) {
80
+ var expected = value.length * 3;
81
+ var that = alloc.call(this, expected);
82
+ var actual = BufferProto.write.call(that, value);
83
+ if (expected !== actual) {
84
+ that = BufferProto.slice.call(that, 0, actual);
85
+ }
86
+ return that;
87
+ }
88
+
89
+ function auto(that) {
90
+ return isBuffer(that) ? BufferBuffer
91
+ : isView(that) ? BufferUint8Array
92
+ : isArray(that) ? BufferArray
93
+ : hasBuffer ? BufferBuffer
94
+ : hasArrayBuffer ? BufferUint8Array
95
+ : BufferArray;
96
+ }
97
+
98
+ function _false() {
99
+ return false;
100
+ }
101
+
102
+ function _is(name, key) {
103
+ /* jshint eqnull:true */
104
+ name = "[object " + name + "]";
105
+ return function(value) {
106
+ return (value != null) && {}.toString.call(key ? value[key] : value) === name;
107
+ };
108
+ }
@@ -0,0 +1,67 @@
1
+ // codec-base.js
2
+
3
+ var IS_ARRAY = require("isarray");
4
+
5
+ exports.createCodec = createCodec;
6
+ exports.install = install;
7
+ exports.filter = filter;
8
+
9
+ var Bufferish = require("./bufferish");
10
+
11
+ function Codec(options) {
12
+ if (!(this instanceof Codec)) return new Codec(options);
13
+ this.options = options;
14
+ this.init();
15
+ }
16
+
17
+ Codec.prototype.init = function() {
18
+ var options = this.options;
19
+
20
+ if (options && options.uint8array) {
21
+ this.bufferish = Bufferish.Uint8Array;
22
+ }
23
+
24
+ return this;
25
+ };
26
+
27
+ function install(props) {
28
+ for (var key in props) {
29
+ Codec.prototype[key] = add(Codec.prototype[key], props[key]);
30
+ }
31
+ }
32
+
33
+ function add(a, b) {
34
+ return (a && b) ? ab : (a || b);
35
+
36
+ function ab() {
37
+ a.apply(this, arguments);
38
+ return b.apply(this, arguments);
39
+ }
40
+ }
41
+
42
+ function join(filters) {
43
+ filters = filters.slice();
44
+
45
+ return function(value) {
46
+ return filters.reduce(iterator, value);
47
+ };
48
+
49
+ function iterator(value, filter) {
50
+ return filter(value);
51
+ }
52
+ }
53
+
54
+ function filter(filter) {
55
+ return IS_ARRAY(filter) ? join(filter) : filter;
56
+ }
57
+
58
+ // @public
59
+ // msgpack.createCodec()
60
+
61
+ function createCodec(options) {
62
+ return new Codec(options);
63
+ }
64
+
65
+ // default shared codec
66
+
67
+ exports.preset = createCodec({preset: true});
package/lib/codec.js CHANGED
@@ -1,5 +1,12 @@
1
1
  // codec.js
2
2
 
3
+ // load both interfaces
4
+ require("./read-core");
5
+ require("./write-core");
6
+
7
+ // @public
8
+ // msgpack.codec.preset
9
+
3
10
  exports.codec = {
4
- preset: require("./ext").createCodec({preset: true})
11
+ preset: require("./codec-base").preset
5
12
  };
@@ -2,9 +2,11 @@
2
2
 
3
3
  exports.DecodeBuffer = DecodeBuffer;
4
4
 
5
- var preset = require("./codec").codec.preset;
5
+ var preset = require("./read-core").preset;
6
6
 
7
- var BufferShortageError = require("./buffer-shortage").BufferShortageError;
7
+ var FlexDecoder = require("./flex-buffer").FlexDecoder;
8
+
9
+ FlexDecoder.mixin(DecodeBuffer.prototype);
8
10
 
9
11
  function DecodeBuffer(options) {
10
12
  if (!(this instanceof DecodeBuffer)) return new DecodeBuffer(options);
@@ -12,60 +14,14 @@ function DecodeBuffer(options) {
12
14
  if (options) {
13
15
  this.options = options;
14
16
  if (options.codec) {
15
- this.codec = options.codec;
17
+ var codec = this.codec = options.codec;
18
+ if (codec.bufferish) this.bufferish = codec.bufferish;
16
19
  }
17
20
  }
18
21
  }
19
22
 
20
- DecodeBuffer.prototype.offset = 0;
21
-
22
- DecodeBuffer.prototype.push = function(chunk) {
23
- var buffers = this.buffers || (this.buffers = []);
24
- buffers.push(chunk);
25
- };
26
-
27
23
  DecodeBuffer.prototype.codec = preset;
28
24
 
29
- DecodeBuffer.prototype.write = function(chunk) {
30
- var prev = this.offset ? this.buffer.slice(this.offset) : this.buffer;
31
- this.buffer = prev ? (chunk ? Buffer.concat([prev, chunk]) : prev) : chunk;
32
- this.offset = 0;
33
- };
34
-
35
- DecodeBuffer.prototype.read = function() {
36
- var length = this.buffers && this.buffers.length;
37
-
38
- // fetch the first result
39
- if (!length) return this.fetch();
40
-
41
- // flush current buffer
42
- this.flush();
43
-
44
- // read from the results
45
- return this.pull();
46
- };
47
-
48
- DecodeBuffer.prototype.pull = function() {
49
- var buffers = this.buffers || (this.buffers = []);
50
- return buffers.shift();
51
- };
52
-
53
25
  DecodeBuffer.prototype.fetch = function() {
54
26
  return this.codec.decode(this);
55
27
  };
56
-
57
- DecodeBuffer.prototype.flush = function() {
58
- while (this.offset < this.buffer.length) {
59
- var start = this.offset;
60
- var value;
61
- try {
62
- value = this.fetch();
63
- } catch (e) {
64
- if (!(e instanceof BufferShortageError)) throw e;
65
- // rollback
66
- this.offset = start;
67
- break;
68
- }
69
- this.push(value);
70
- }
71
- };
@@ -2,10 +2,11 @@
2
2
 
3
3
  exports.EncodeBuffer = EncodeBuffer;
4
4
 
5
- var preset = require("./codec").codec.preset;
5
+ var preset = require("./write-core").preset;
6
6
 
7
- var MIN_BUFFER_SIZE = 2048;
8
- var MAX_BUFFER_SIZE = 65536;
7
+ var FlexEncoder = require("./flex-buffer").FlexEncoder;
8
+
9
+ FlexEncoder.mixin(EncodeBuffer.prototype);
9
10
 
10
11
  function EncodeBuffer(options) {
11
12
  if (!(this instanceof EncodeBuffer)) return new EncodeBuffer(options);
@@ -13,88 +14,14 @@ function EncodeBuffer(options) {
13
14
  if (options) {
14
15
  this.options = options;
15
16
  if (options.codec) {
16
- this.codec = options.codec;
17
+ var codec = this.codec = options.codec;
18
+ if (codec.bufferish) this.bufferish = codec.bufferish;
17
19
  }
18
20
  }
19
21
  }
20
22
 
21
- EncodeBuffer.prototype.offset = 0;
22
- EncodeBuffer.prototype.start = 0;
23
-
24
- EncodeBuffer.prototype.push = function(chunk) {
25
- var buffers = this.buffers || (this.buffers = []);
26
- buffers.push(chunk);
27
- };
28
-
29
23
  EncodeBuffer.prototype.codec = preset;
30
24
 
31
25
  EncodeBuffer.prototype.write = function(input) {
32
26
  this.codec.encode(this, input);
33
27
  };
34
-
35
- EncodeBuffer.prototype.read = function() {
36
- var length = this.buffers && this.buffers.length;
37
-
38
- // fetch the first result
39
- if (!length) return this.fetch();
40
-
41
- // flush current buffer
42
- this.flush();
43
-
44
- // read from the results
45
- return this.pull();
46
- };
47
-
48
- EncodeBuffer.prototype.pull = function() {
49
- var buffers = this.buffers || (this.buffers = []);
50
- var chunk = buffers.length > 1 ? Buffer.concat(buffers) : buffers[0];
51
- buffers.length = 0; // buffer exhausted
52
- return chunk;
53
- };
54
-
55
- EncodeBuffer.prototype.fetch = function() {
56
- var start = this.start;
57
- if (start < this.offset) {
58
- this.start = this.offset;
59
- return this.buffer.slice(start, this.offset);
60
- }
61
- };
62
-
63
- EncodeBuffer.prototype.flush = function() {
64
- var buffer = this.fetch();
65
- if (buffer) this.push(buffer);
66
- };
67
-
68
- EncodeBuffer.prototype.reserve = function(length) {
69
- if (this.buffer) {
70
- var size = this.buffer.length;
71
-
72
- // is it long enough?
73
- if (this.offset + length < size) return;
74
-
75
- // flush current buffer
76
- this.flush();
77
-
78
- // resize it to 2x current length
79
- length = Math.max(length, Math.min(size * 2, MAX_BUFFER_SIZE));
80
- }
81
-
82
- // minimum buffer size
83
- length = length > MIN_BUFFER_SIZE ? length : MIN_BUFFER_SIZE;
84
-
85
- // allocate new buffer
86
- this.buffer = new Buffer(length);
87
- this.start = 0;
88
- this.offset = 0;
89
- };
90
-
91
- EncodeBuffer.prototype.send = function(buffer) {
92
- var end = this.offset + buffer.length;
93
- if (this.buffer && end < this.buffer.length) {
94
- buffer.copy(this.buffer, this.offset);
95
- this.offset = end;
96
- } else {
97
- this.flush();
98
- this.push(buffer);
99
- }
100
- };
package/lib/ext-buffer.js CHANGED
@@ -2,8 +2,10 @@
2
2
 
3
3
  exports.ExtBuffer = ExtBuffer;
4
4
 
5
+ var Bufferish = require("./bufferish");
6
+
5
7
  function ExtBuffer(buffer, type) {
6
8
  if (!(this instanceof ExtBuffer)) return new ExtBuffer(buffer, type);
7
- this.buffer = buffer;
9
+ this.buffer = Bufferish.from(buffer);
8
10
  this.type = type;
9
11
  }
@@ -0,0 +1,78 @@
1
+ // ext-packer.js
2
+
3
+ exports.setExtPackers = setExtPackers;
4
+
5
+ var Bufferish = require("./bufferish");
6
+ var Buffer = Bufferish.global;
7
+ var packTypedArray = Bufferish.Uint8Array.from;
8
+ var _encode;
9
+
10
+ var ERROR_COLUMNS = {name: 1, message: 1, stack: 1, columnNumber: 1, fileName: 1, lineNumber: 1};
11
+
12
+ function setExtPackers(codec) {
13
+ codec.addExtPacker(0x0E, Error, [packError, encode]);
14
+ codec.addExtPacker(0x01, EvalError, [packError, encode]);
15
+ codec.addExtPacker(0x02, RangeError, [packError, encode]);
16
+ codec.addExtPacker(0x03, ReferenceError, [packError, encode]);
17
+ codec.addExtPacker(0x04, SyntaxError, [packError, encode]);
18
+ codec.addExtPacker(0x05, TypeError, [packError, encode]);
19
+ codec.addExtPacker(0x06, URIError, [packError, encode]);
20
+
21
+ codec.addExtPacker(0x0A, RegExp, [packRegExp, encode]);
22
+ codec.addExtPacker(0x0B, Boolean, [packValueOf, encode]);
23
+ codec.addExtPacker(0x0C, String, [packValueOf, encode]);
24
+ codec.addExtPacker(0x0D, Date, [Number, encode]);
25
+ codec.addExtPacker(0x0F, Number, [packValueOf, encode]);
26
+
27
+ if ("undefined" !== typeof Uint8Array) {
28
+ codec.addExtPacker(0x11, Int8Array, packTypedArray);
29
+ codec.addExtPacker(0x12, Uint8Array, packTypedArray);
30
+ codec.addExtPacker(0x13, Int16Array, packTypedArray);
31
+ codec.addExtPacker(0x14, Uint16Array, packTypedArray);
32
+ codec.addExtPacker(0x15, Int32Array, packTypedArray);
33
+ codec.addExtPacker(0x16, Uint32Array, packTypedArray);
34
+ codec.addExtPacker(0x17, Float32Array, packTypedArray);
35
+
36
+ // PhantomJS/1.9.7 doesn't have Float64Array
37
+ if ("undefined" !== typeof Float64Array) {
38
+ codec.addExtPacker(0x18, Float64Array, packTypedArray);
39
+ }
40
+
41
+ // IE10 doesn't have Uint8ClampedArray
42
+ if ("undefined" !== typeof Uint8ClampedArray) {
43
+ codec.addExtPacker(0x19, Uint8ClampedArray, packTypedArray);
44
+ }
45
+
46
+ codec.addExtPacker(0x1A, ArrayBuffer, packTypedArray);
47
+ codec.addExtPacker(0x1D, DataView, packTypedArray);
48
+ }
49
+
50
+ if (Bufferish.hasBuffer) {
51
+ codec.addExtPacker(0x1B, Buffer, Bufferish.from);
52
+ }
53
+ }
54
+
55
+ function encode(input) {
56
+ if (!_encode) _encode = require("./encode").encode; // lazy load
57
+ return _encode(input);
58
+ }
59
+
60
+ function packValueOf(value) {
61
+ return (value).valueOf();
62
+ }
63
+
64
+ function packRegExp(value) {
65
+ value = RegExp.prototype.toString.call(value).split("/");
66
+ value.shift();
67
+ var out = [value.pop()];
68
+ out.unshift(value.join("/"));
69
+ return out;
70
+ }
71
+
72
+ function packError(value) {
73
+ var out = {};
74
+ for (var key in ERROR_COLUMNS) {
75
+ out[key] = value[key];
76
+ }
77
+ return out;
78
+ }