Skip to content

Latest commit

 

History

History
127 lines (91 loc) · 3.03 KB

README.md

File metadata and controls

127 lines (91 loc) · 3.03 KB

borc

Coverage Status Dependency Status Travis CI

Assimilate all your JavaScript objects into the Concise Binary Object Representation (CBOR) data format (RFC7049) as fast as possible.

About

This library is a fork of the awesome node-cbor. It borrows a lot of the interface, but drops all streaming and async processing in favor of a minimal syn api and being as fast as possible.

Installation

$ npm install --save borc

Benchmarks

TODO

Example

const cbor = require('borc')
const assert = require('assert')

const encoded = cbor.encode(true) // returns <Buffer f5>
const decoded = cbor.decodeFirst(encoded)
// decoded is the unpacked object
assert.ok(decoded === true)

// Use integers as keys
var m = new Map()
m.set(1, 2)
encoded = cbor.encode(m) // <Buffer a1 01 02>

API

See https://dignifiedquire.github.io/borc for details

The sync encoding and decoding are exported as a leveldb encoding, as cbor.leveldb.

Supported types

The following types are supported for encoding:

  • boolean
  • number (including -0, NaN, and ±Infinity)
  • string
  • Array, Set (encoded as Array)
  • Object (including null), Map
  • undefined
  • Buffer
  • Date,
  • RegExp
  • url.URL
  • bignumber

Decoding supports the above types, including the following CBOR tag numbers:

Tag Generated Type
0 Date
1 Date
2 bignumber
3 bignumber
4 bignumber
5 bignumber
32 url.URL
35 RegExp

Customizations

Borc supports custom tags as well as custom input types.

Encode Custom Types

class MyType {
  constructor (val) {
    this.val = val
  }

  // Gets called when encoding this object
  // gen - instance of the encoder
  // obj - the object being encoded
  //
  // should return true on success and false otherwise
  encodeCBOR (gen) {
    return gen.pushAny('mytype:' + this.val)
  }
}

cbor.encode([new MyType('hello')])

Encode Custom Tags

cbor.encode([new cbor.Tagged(42, 'hello')])

Decode Custom Tags

const decoder = new cbor.Decoder({
  tags: {
    42: (val) => val + ' world'
  }
})

License

MIT