@ipld/iq

0.4.3 • Public • Published

EXPERIMENTAL: do not use in production.

IPLD Query

Simplified interface for IPLD graph reading and manipulation.

let iq = require('@ipld/iq')
let Block = require('@ipld/block')

let block = Block.encoder({one: {two: {three: 'hello world'}}})

let string = await iq(block, 'one/two/three').toString()
// hello world

Configuring Storage

Read-only example:

/* configure a read interface connected to storage */
let store = {}
let get = cid => store[cid.toString()] || null
iq.config.get = get

let block = Block.encoder({one: {two: {three: 'hello world'}}})
let cid = await block.cid()
store[cid.toString()] = block

let string = await iq(`${cid.toString()}/one/two/three`).toString()
// hello world

API

Read APIs

query.value()

Returns a decoded "kind." Best effort is made to determine the kind from composite types.

TODO: Implement some kind of configurable "max size" for composite types which may be prohibitively expensive to pull into memory.

query.toString([joiner='\n'])

Returns any string values from the expression.

If multiple values are found the joiner string is be used to join them into a single string.

Example at top of README.

query.read([start, end])

  • .read(0, 12) reads the path value from 0 to the 15th byte.
  • .read(5) reads from the 5th byte.

Full example:

let block = Block.encoder({one: {two: {three: Buffer.from('hello world')}}})

let buffer = await iq(block, 'one/two/three').read()
// Buffer containing 'hello world'
Buffer.isBuffer(buffer)
// true

query.readIterator(...[start, end])

Readme

Keywords

none

Package Sidebar

Install

npm i @ipld/iq

Weekly Downloads

1

Version

0.4.3

License

(Apache-2.0 AND MIT)

Unpacked Size

13.2 kB

Total Files

10

Last publish

Collaborators

  • npm-service-account-ipld
  • lidel
  • alanshaw
  • vascosantos
  • achingbrain
  • rvagg
  • daviddias
  • mikeal
  • vmx