msgpack-javascript

0.10.0 • Public • Published

msgpack-javascript

NPM

Circle CI Code Climate Test Coverage Dependency Status devDependency Status

JavaScript ES6 implementation of the MessagePack protocol.

Design Goals

  • Isomorphic
    • Single codebase to serve both Browser and Node environments
  • Future Ready
    • Source and tests written in ES6

Installation

npm i msgpack-javascript

Basic Usage

Import

import {Packer, Unpacker} from 'msgpack-javascript';

Pack

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']]));

Unpack

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();

Reflect

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.

Type Mapping

Source Format => JavaScript Type

Source FormatJavaScript Type
pos fixint, neg fixint, int 8/16/32 and uint 8/16/32Number
int 64 and uint 64Long
nilundefined
false and trueBoolean
float 32/64Number
fixstr and str 8/16/32String
bin 8/16/32Array (of bytes)
fixarray and array 16/32Array
fixmap map 16/32Map
fixext and ext 8/16/32Extended

JavaScript Type => Output Format

JavaScript TypeOutput Format
Number, Longpos fixint, neg fixint, int 8/16/32/64, uint 8/16/32/64, float 32/64
undefined, nullnil
Booleanfalse and true
Stringfixstr and str 8/16/32
Array (of bytes)bin 8/16/32
Arrayfixarray and array 16/32
Mapfixmap map 16/32

64-bit Integers

Support for 64-bit integers is realised via npm package pg-long.

Readme

Keywords

none

Package Sidebar

Install

npm i msgpack-javascript

Weekly Downloads

9

Version

0.10.0

License

Apache-2.0

Last publish

Collaborators

  • davidhaines
  • ahmednuaman
  • polyglotted