create symbolic link between hyperdrives
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


NPM Version JavaScript Style Guide

create symbolic link between hyperdrives

npm i hyperdrive-ln


const ln = require('hyperdrive-ln')

var drive = hyperdrive(memdb())
var archive = drive.createArchive(), 'linkfile', <ARCHIVE KEY>, [meta], err => {}) // create symlink to another archive
ln.readlink(archive, 'linkfile', (err, link) => {}) // get link data

// assume, 'path/to/file', <ARCHIVE KEY>)
ln.resolve(archive, 'path/to/file/within/linked/archive', (err, link, restOfThePath)) // returns (err, {link: <ARCHIVE_KEY>, meta: {...}}, 'within/linked/archive')

// resolve through archives
ln.deepResolve(drive, swarmer, archive, path, (err, result) => {})

ln.encode(key, [meta]) // encode a key for linkfile
ln.decode(data) // decode a linkfile content to key

API, path, archiveKey, [meta], cb)

Create a symlink at path point to archiveKey.

You can pass a meta object to store it in the symlink.

ln.readlink(archive, path, cb)

Get the link data stored inside a symlink.

ln.resolve(archive, path, cb)

Resolve a path. Returns an archive and a path within that archive with cb(err, linkedArchiveKey, pathWithinLinkedArchive)

  • If there's a symlink encountered in the path. cb(err, link, pathWithinLinkedArchive) will be invoked.
  • If there's no symlink in the path, cb(err, {}, path) will be called.

for example:, 'foo/bar', '<LINK_KEY>', (err) => {
    ln.resolve(archive, 'foo/bar/baz', (err, link, path) => {
      // link === {link: '<LINK_KEY>', meta: {...}}
      // path === 'baz'

ln.deepResolve(drive, swarmer, archive, path, cb)

Recursively resolve a path through archives. Create swarm connection when necessary.

swarmer is anything let you join swarm . For example: hyperdiscovery.

callback cb(err, result) where result is a recursive structure:

  archive: // traversed archive,
  path: // consumed path,
  swarm: // swarm instance,
  next: result // next component if there's one

For example: Assume we have an archive1 which /foo/bar linked to archive2.

ln.deepResolve(drive, swarmer, archive1, '/foo/bar/baz/baz.txt', cb)

will get the result:

  archive: archive1,
  path: '/foo/bar',
  swarm: // a swarm instance,
  next: {
    archive: archive2,
    path: 'baz/baz.txt',
    swarm: // another swarm instance

use deepClose(result) to close all swarm instance in the result.


Close all swarm instance in the result.

body = ln.encode(key, [meta])

Encode a key to symlink file body.


Decode a symlink file body to linked archive key.


The MIT License