Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ipld/js-dag-cbor
dag-cbor codec for IPLD
https://github.com/ipld/js-dag-cbor
Last synced: about 13 hours ago
JSON representation
dag-cbor codec for IPLD
- Host: GitHub
- URL: https://github.com/ipld/js-dag-cbor
- Owner: ipld
- License: other
- Created: 2020-05-12T04:17:12.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T23:05:41.000Z (about 2 months ago)
- Last Synced: 2024-11-30T17:28:22.412Z (14 days ago)
- Language: JavaScript
- Homepage:
- Size: 299 KB
- Stars: 27
- Watchers: 19
- Forks: 17
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# @ipld/dag-cbor
[![codecov](https://img.shields.io/codecov/c/github/ipld/js-dag-cbor.svg?style=flat-square)](https://codecov.io/gh/ipld/js-dag-cbor)
[![CI](https://img.shields.io/github/workflow/status/ipld/js-dag-cbor/test%20&%20maybe%20release/master?style=flat-square)](https://github.com/ipld/js-dag-cbor/actions/workflows/js-test-and-release.yml)> JS implementation of DAG-CBOR
## Table of contents
- [Install](#install)
- [Spec](#spec)
- [License](#license)
- [Contribute](#contribute)## Install
```console
$ npm i @ipld/dag-cbor
```This is the *new* interface meant for use by itself or with `multiformats` and
`@ipld/block`. It is not used by `js-ipld-format` which is currently
used in IPFS. That library is [here](https://github.com/ipld/js-ipld-dag-cbor).Usage:
```javascript
import { encode, decode } from '@ipld/dag-cbor'
import { CID } from 'multiformats'const obj = {
x: 1,
/* CID instances are encoded as links */
y: [2, 3, CID.parse('QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4')],
z: {
a: CID.parse('QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4'),
b: null,
c: 'string'
}
}let data = encode(obj)
let decoded = decode(data)
decoded.y[0] // 2
CID.asCID(decoded.z.a) // cid instance// encode/decode options are exported for use with cborg's encodedLength and decodeFirst
import { encodeOptions, decodeOptions } from '@ipld/dag-cbor'
import { encodedLength } from 'cborg/length'
import { decodeFirst } from 'cborg'// dag-cbor encoded length of obj in bytes
const byteLength = encodedLength(obj, encodeOptions)
byteLength // 104// concatenate two dag-cbor encoded obj
const concatenatedData = new Uint8Array(data.length * 2)
concatenatedData.set(data)
concatenatedData.set(data, data.length)// returns dag-cbor decoded obj at the beginning of the buffer as well as the remaining bytes
const [first, remainder] = decodeFirst(concatenatedData, decodeOptions)
assert.deepStrictEqual(first, obj)
assert.deepStrictEqual(remainder, data)
```## Spec
The [`dag-cbor` specification is in the IPLD specs repo](https://github.com/ipld/specs/blob/master/block-layer/codecs/dag-cbor.md).
## License
Licensed under either of
- Apache 2.0, ([LICENSE-APACHE](LICENSE-APACHE) / )
- MIT ([LICENSE-MIT](LICENSE-MIT) / )## Contribute
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.