Skip to content

Instantly share code, notes, and snippets.

@jbenet
Last active August 29, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbenet/caa07c196f78cf30c748 to your computer and use it in GitHub Desktop.
Save jbenet/caa07c196f78cf30c748 to your computer and use it in GitHub Desktop.
var noop = function() {}
var jsonpath = require('jsonpath-rep')
var duplexer2 = require('duplexer2.jbenet')
function processJsonpathStream(path, otherStream) {
var queue = []
var spliter = through2.obj(split)
var joiner = through2.obj(join)
spliter.pipe(otherStream).pipe(joiner)
return duplexer2(spliter, joiner)
function split(item, enc, next) {
queue.unshift(item)
var val = jsonpath.eval(item, path)
this.push(val)
next()
}
function join(item, enc, nect) {
var orig = queue.pop()
var replaced = jsonpath.eval(orig, path, undefined, item)
this.push(replaced)
next()
}
}
@mafintosh
Copy link

using https://github.com/mafintosh/write-transform-read

var wtr = require('write-transform-read')
var through = require('through2')

var wrap = function(otherStream) {
  var transform = wtr(otherStream)
  return through.obj(function(data, enc, cb) {
    transform(data.bar, function(err, result) {
      if (err) return cb(err)
      data.bar = result
      cb(null, data)
    }, function(cb) {
      otherStream.end(cb)
    })
  })
}

use it like so

var squareBar = wrap(square)
squareBar.write({bar:5}) -> {bar:25}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment