npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

blob-store-replication-stream

v1.3.3

Published

replicate two abstract-blob-store compatible stores together

Downloads

27

Readme

blob-store-replication-stream

Build
Status

Replicate two abstract-blob-store compatible stores together (with caveats).

It would be very useful if any two blob stores could be replicated to each other over a simple duplex stream.

That's just what this module does, but with one large caveat: the abstract-blob-store interface doesn't provide a method for getting a list of the names of all blobs in the store. Without this, a full sync between blob stores isn't possible.

The caveat: any blob store you wish to use for replication must have a ._list(cb) function monkey patched onto it, which should return an array of keys (strings) in the callback cb. This will generally mean delving into the innards of each blob store you wish to support and figuring out how to add this functionality.

Usage

var createReplicationStream = require('blob-store-replication-stream')

var StoreFs = require('fs-blob-store')
StoreFs.prototype._list = function (cb) {
  require('fs').readdir(this.path, cb)
}

var StoreMem = require('abstract-blob-store')
StoreMem.prototype._list = function (cb) {
  process.nextTick(cb, null, Object.keys(this.data))
}

var fs = StoreFs('./fs')
var mem = StoreMem()

var ws = fs.createWriteStream('foo', function (err, metadata) {
  console.log('fs key', metadata.key)
  var ws = mem.createWriteStream('bar', function (err, metadata) {
    console.log('mem key', metadata.key)
    doReplicate()
  })
  ws.end('yo mem world')
})
ws.end('hello fs world')

function doReplicate () {
  var r1 = createReplicationStream(fs)
  var r2 = createReplicationStream(mem)

  r1.pipe(r2).pipe(r1)

  r1.on('end', onDone)
  r2.on('end', onDone)

  var pending = 2
  function onDone () {
    if (!--pending) {
      fs.createReadStream('bar').pipe(process.stdout)
      mem.createReadStream('foo').pipe(process.stdout)
    }
  }
}

outputs

fs key foo
mem key bar
yo mem world
hello fs world

API

var createReplicationStream = require('blob-store-replication-stream')

var stream = createReplicationStream(store[, opts])

Creates the duplex stream stream from the abstract-blob-store instance store.

Pipe this into another replication stream, and have that other replication stream also pipe into this, to create a full duplex channel of communication.

This function will throw an Error if no store._list() function is present.

Valid opts include:

  • mode:
    • 'sync': (default) entries will sent and fetched. the two stores will contain the same blobs post-replication
    • 'pull': entries will only be fetched, not sent
    • 'push': entries will only be sent, not fetched
  • filter: a function that takes a filename and returns true if it should be synced to the other side, or false if it shouldn't

In addition, stream will emit 'progress' events with parameters filesSent and filesTotal for tracking sync progress.

Install

With npm installed, run

$ npm install blob-store-replication-stream

License

ISC