Skip to content
This repository has been archived by the owner on Jun 2, 2022. It is now read-only.

ipld/js-iq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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])