/cbor-redux

The Concise Binary Object Representation (CBOR) data format (RFC7049) implemented in pure JavaScript, revived.

Primary LanguageTypeScriptMIT LicenseMIT

cbor-redux

The Concise Binary Object Representation (CBOR) data format (RFC 7049) implemented in pure JavaScript, revived. Typed arrays such as Uint8Array, Int16Array or Float32Array are encoded with tags according to RFC8746 CBOR tags for Typed Arrays.

Rewritten in TypeScript for the browser, Deno, and Node.

JavaScript Style Guide codecov GitHub last commit GitHub contributors npm collaborators
GitHub top language npm bundle size GitHub code size in bytes npm NPM
Quality Gate Status Maintainability Rating Security Rating Lines of Code

Usage

Require cbor-redux in Node:

const { CBOR } = require('cbor-redux')

or import in Deno:

import { CBOR } from 'https://deno.land/x/cbor_redux@0.4.0/mod.ts'

or script on an HTML page:

<script src="https://cdn.skypack.dev/cbor-redux@^0.4.0" type="text/javascript"></script>

For ES5 polyfill, use es5/CBOR.js in the npm package or else <script src="https://unpkg.com/cbor-redux@0.4.0/es5/CBOR.js"></script>.

Then you can use it via the CBOR-object in your code:

const initial = { Hello: 'World' }
const encoded = CBOR.encode(initial)
const decoded = CBOR.decode(encoded)

After running this example initial and decoded represent the same value.

API

The CBOR-object provides the following two functions:

  • CBOR.decode(data: ArrayBuffer)

    Take the ArrayBuffer object data and return it decoded as a JavaScript object.

  • CBOR.encode(data: any)

    Take the JavaScript object data and return it encoded as a ArrayBuffer object.

For complete API details, visit the documentation.

Combination with WebSocket

The API was designed to play well with the WebSocket object in the browser:

var websocket = new WebSocket(url);
websocket.binaryType = "arraybuffer";
...
websocket.onmessage = function(event) {
  var message = CBOR.decode(event.data);
};
...
websocket.send(CBOR.encode(message));