UNPKG

mountable-dwebtrie

Version:

A DWebTrie wrapper that supports mounting of other dWebTries.

52 lines (40 loc) 1.42 kB
const { promisify } = require('util') const Basestore = require('basestorex') const ram = require('random-access-memory') const MountableDWebTrie = require('../..') module.exports.create = async function (numTries, opts = {}) { const sparse = true const ifAvailable = true const tries = [] const stores = [] if (opts.sameStore) { var mainStore = new Basestore((opts && opts._storage) || ram, { sparse, ifAvailable }) } for (let i = 0; i < numTries; i++) { const store = mainStore ? mainStore : new Basestore((opts && opts._storage) || ram, { sparse, ifAvailable }) await store.ready() const feed = store.get() const trie = new MountableDWebTrie(store, null, { ...opts, sparse, feed }) await promisify(trie.ready.bind(trie))() tries.push(trie) stores.push(store) } const streams = replicateAll(tries, { sparse, live: true }) return { tries, stores, streams } } function replicateAll (tries, opts) { const streams = [] const replicated = new Set() for (let i = 0; i < tries.length; i++) { for (let j = 0; j < tries.length; j++) { if (i === j || replicated.has(j)) continue const source = tries[i] const dest = tries[j] const s1 = source.replicate(true, { ...opts }) const s2 = dest.replicate(false, { ...opts }) streams.push([s1, s2]) s1.pipe(s2).pipe(s1) } replicated.add(i) } return streams }