@exodus/borc
v2.1.1
Published
Encode and parse data in the Concise Binary Object Representation (CBOR) data format (RFC7049).
Downloads
14,752
Maintainers
Readme
borc
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