JavaScript ES6 implementation of the MessagePack protocol.
- Isomorphic
- Single codebase to serve both Browser and Node environments
- Future Ready
- Source and tests written in ES6
npm i msgpack-javascript
import {Packer, Unpacker} from 'msgpack-javascript';
let packer = new Packer();
packer.packNil();
packer.packBoolean(true);
packer.packInt(0);
packer.packInt(255);
packer.packInt(65535);
packer.packInt(-2147483648);
packer.packInt(Date.now());
packer.packFloat(1.4e-45);
packer.packDouble(4.9e-324);
packer.packString('yo fibre');
packer.packArray([0, true, 'p']);
packer.packBinary([0, 10, 255]);
packer.packMap(new Map([[0, 'foo'], [1, 'bar']]));
let unpacker = new Unpacker(packer.getBytes()),
actual = {};
unpacker = new Unpacker(packer.getBytes());
actual.nil = unpacker.unpackNil();
actual.boolean = unpacker.unpackBoolean();
actual.fixnum = unpacker.unpackInt();
actual.byte = unpacker.unpackInt();
actual.short = unpacker.unpackInt();
actual.int = unpacker.unpackInt();
actual.long = unpacker.unpackInt();
actual.float = unpacker.unpackFloat();
actual.double = unpacker.unpackDouble();
actual.string = unpacker.unpackString();
actual.array = unpacker.unpackArray();
actual.binary = unpacker.unpackBinary();
actual.map = unpacker.unpackMap();
Packer.packValue allows packing of any value that may be identified as one of the standard value types (excluding Extended).
let packer = new Packer();
packer.packValue(); // packs nil
packer.packValue(true); // packs bool
packer.packValue(0); // packs pos fixint
packer.packValue(255); // packs uint8
packer.packValue(65535); // packs uint16
packer.packValue(-2147483648); // packs int32
packer.packValue(Date.now()); // packs uint64
packer.packValue(3.4028234 * Math.pow(10, 38)); // packs float32
packer.packValue(1.7976931348623157 * Math.pow(10, 308)); // packs float64
packer.packValue('yo fibre'); // packs fixed string
packer.packValue([0, true, 'p']); // packs fixed array
packer.packValue([0, 10, 255]); // packs bin8
packer.packValue(new Map([[0, 'foo'], [1, 'bar']])); // packs fixed map
packer.packValue({foo: 'bar'}); // throws error
Unpacker.unpackValue unpacks the next value by evaluating the prefix of the next byte to be read.
Source Format | JavaScript Type |
---|---|
pos fixint, neg fixint, int 8/16/32 and uint 8/16/32 | Number |
int 64 and uint 64 | Long |
nil | undefined |
false and true | Boolean |
float 32/64 | Number |
fixstr and str 8/16/32 | String |
bin 8/16/32 | Array (of bytes) |
fixarray and array 16/32 | Array |
fixmap map 16/32 | Map |
fixext and ext 8/16/32 | Extended |
JavaScript Type | Output Format |
---|---|
Number, Long | pos fixint, neg fixint, int 8/16/32/64, uint 8/16/32/64, float 32/64 |
undefined, null | nil |
Boolean | false and true |
String | fixstr and str 8/16/32 |
Array (of bytes) | bin 8/16/32 |
Array | fixarray and array 16/32 |
Map | fixmap map 16/32 |
Support for 64-bit integers is realised via npm package pg-long.