How to use through2 - 10 common examples

To help you get started, we’ve selected a few through2 examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github hybridables / always-done / test / streams.js View on Github external
*/

/* jshint asi:true */

'use strict'

var fs = require('fs')
var path = require('path')
var test = require('assertit')
var through2 = require('through2')
var alwaysDone = require('../index')

var exists = path.join(__dirname, '../.gitignore')
var notExists = path.join(__dirname, '../not_exists')

var EndStream = through2.ctor(function (chunk, enc, cb) {
  this.push(chunk)
  cb()
}, function (cb) {
  this.emit('end', 2)
  cb()
})

function success () {
  var read = fs.createReadStream(exists)
  return read.pipe(new EndStream())
}

function failure () {
  var read = fs.createReadStream(notExists)
  return read.pipe(new EndStream())
}
github MadLittleMods / gulp-css-spriter / index.js View on Github external
'spritesmithOptions': {},
		// Used to format output CSS
		// You should be using a separate beautifier plugin
		'outputIndent': '\t'
	};

	var settings = extend({}, defaults, options);

	// Keep track of all the chunks that come in so that we can re-emit in the flush
	var chunkList = [];
	// We use an object for imageMap so we don't get any duplicates
	var imageMap = {};
	// Check to make sure all of the images exist(`options.shouldVerifyImagesExist`) before trying to sprite them
	var imagePromiseArray = [];

	var stream = through.obj(function(chunk, enc, cb) {
		// http://nodejs.org/docs/latest/api/stream.html#stream_transform_transform_chunk_encoding_callback
		//console.log('transform');

		// Each `chunk` is a vinyl file: https://www.npmjs.com/package/vinyl
		// chunk.cwd
		// chunk.base
		// chunk.path
		// chunk.contents


		if (chunk.isStream()) {
			self.emit('error', new gutil.PluginError(PLUGIN_NAME, 'Cannot operate on stream'));
		}
		else if (chunk.isBuffer()) {
			var contents = String(chunk.contents);
github kaiqigong / gulp-cdnify / index.js View on Github external
var defaultRewrite = function (url) {
    if (isLocalPath(url))
      return joinBaseAndPath(options.base, url);
    return url;
  };
  if (typeof options.rewriter !== 'function') {
    rewriteURL = defaultRewrite;
  }
  else {
    rewriteURL = function (url) {
      return options.rewriter(url, defaultRewrite);
    }
  }

  // Creating a stream through which each file will pass
  return through.obj(function(file, enc, cb) {

    var srcFile = file.path
    if (file.isNull()) {
      // return empty file
      cb(null, file);
    }
    if (file.isBuffer()) {
      if (/\.css$/.test(srcFile)) {
        // It's a CSS file.
        var oldCSS = String(file.contents),
            newCSS = rewriteCSSURLs(oldCSS, rewriteURL)
        file.contents = new Buffer(newCSS);
        gutil.log("Changed CSS file: \"" + srcFile + "\"");
      }
      else {
        // It's an HTML file.
github alexanderGugel / jdi / index.js View on Github external
// filename of the processed file itself.
	const file = this.options.file
	// The `.md` file will be in the same directory as the source file. We only
	// need the basename.
	const basename = path.basename(file)
	const date = String(new Date())
	this.push('------------------------\n')
	this.push(`Generated _${date}_ from [Ⓢ ${basename}](${basename} "View in source")\n`)
	this.push('\n')
	cb()
}

// ## `Transform`
// Instead of returning a `stream.Transform` instance, through2.ctor() returns a
// constructor for our custom Transform that operates on a line-by-line basis.
const Transform = through2.ctor(transformFunction, flushFunction)

// ## `doc`
// `doc` accepts a filename, creates a corresponding read stream, processes the
// file and writes the resulting `.md` file to disk.
const doc = file =>
	fs.createReadStream(file)
		// [`split`](https://www.npmjs.com/package/split) is a transform that
		// generates chunks separated by new-line.
		.pipe(split())
		// Here we invoke our custom `Transform` instance used for processing
		// the separated line-chunks.
		.pipe(new Transform({
			// If there is no file extension, we assume that the source file is
			// a JavaScript file. In some cases, we could also determine the
			// extension name from the first line of the file, e.g.
			// `#!/usr/bin/env node`.
github choerodon / agile-service-old / gulpfile.js View on Github external
function babelify(js, dir = '') {
  const babelConfig = getBabelCommonConfig();
  const stream = js.pipe(babel(babelConfig));
  return stream
    // eslint-disable-next-line func-names
    .pipe(through2.obj(function (file, encoding, next) {
      const matches = file.path.match(/(routes|dashboard|guide|entry|entrywithoutsider)\.nunjucks\.(js|jsx)/);
      if (matches) {
        const content = file.contents.toString(encoding);
        file.contents = Buffer.from(content
          .replace(`'{{ ${matches[1]} }}'`, `{{ ${matches[1]} }}`)
          // eslint-disable-next-line quotes
          .replace(`'{{ home }}'`, '{{ home }}')
          // eslint-disable-next-line quotes
          .replace(`'{{ master }}'`, '{{ master }}'));
      }
      this.push(file);
      next();
    }))
    .pipe(gulp.dest(path.join(libDir, dir)));
}
github datproject / dat / bin / merge.js View on Github external
function resolutionStream (headA, headB) {
      if (args.stdin) return pumpify.obj(process.stdin, ndjson.parse())

      var pipeline = []

      pipeline.push(db.diff(headA, headB))

      if (args.left || args.right || args.random) {
        var choice = 0 // left
        if (args.right) choice = 1
        if (args.random) choice = +(Math.random() < 0.5)
        pipeline.push(through.obj(function (versions, enc, next) {
          var winner = versions[choice]
          debug('versions', versions)
          debug('winner', winner)
          next(null, winner)
        }))
      } else { // manual
        pipeline.push(batcher(args.limit))
        pipeline.push(manualMergeStream({vizFn: vizFn}))
      }
      return pumpify.obj(pipeline)
    }
  })
github arian / partition-bundle / index.js View on Github external
function renameIDLabels(map) {
  var buf = []; // buffer so each row is renamed before continuing
  return through.obj(function(row, enc, next) {
    if (map[row.id]) {
      row.id = map[row.id];
    }
    if (row.dedupe && map[row.dedupe]) {
      row.dedupe = map[row.dedupe];
    }
    forOwn(row.deps, function(dep, key) {
      if (map[dep]) {
        row.deps[key] = map[dep];
      }
    });
    buf.push(row);
    next();
  }, function() {
    buf.forEach(function(row) {
      this.push(row);
github arso-project / archipel / packages / app / src / features / fs / UploadFile.js View on Github external
async uploadFile (file, i) {
    this.setState({ files: updateAt(this.state.files, i, { pending: true }) })
    const { dir, core } = this.props
    const { name } = file
    const path = (dir === '/' ? '' : dir) + '/' + name
    const speedo = speedometer()
    let speed = 0
    let written = 0
    const update = () => {
      // todo: rerender only if state acually changed.
      this.setState({ files: updateAt(this.state.files, i, { written, speed }) })
    }
    let debounce = setInterval(update, 200)
    const passthrough = through((chunk, enc, next) => {
      written += chunk.length
      speed = speedo(chunk.length)
      next()
    })
    const reader = fileReader(file)
    pump(reader, passthrough)

    const key = this.props.archive
    const res = await core.rpc.request('fs/writeFile', { key, path, stream: reader })
    clearInterval(debounce)
    this.setState({ files: updateAt(this.state.files, i, { pending: false, done: true, written, speed }), pending: false, done: true })

    // todo: is this clean enough?
    core.getStore('fs').fetchStats({ archive: key, path: this.props.dir })
  }
github perrin4869 / gulp-xml-transformer / src / index.js View on Github external
function getContents(file, xml) {
  if (file.isBuffer()) {
    return Buffer.from(xml);
  }

  /* elte if (file.isStream()) */
  const contents = through();
  contents.write(xml);
  contents.end();

  return contents;
}
github arso-project / archipel / packages / drive / frontend / UploadFile.js View on Github external
async uploadFile (file, i) {
    this.setState({ files: updateAt(this.state.files, i, { pending: true }) })
    const { dir, core } = this.props
    let { name, webkitRelativePath } = file
    if (this.state.uploadDir) name = webkitRelativePath

    const path = (dir === '/' ? '' : dir) + '/' + name
    const speedo = speedometer()
    let speed = 0
    let written = 0
    const update = () => {
      // todo: rerender only if state acually changed.
      this.setState({ files: updateAt(this.state.files, i, { written, speed }) })
    }
    let debounce = setInterval(update, 200)
    const passthrough = through((chunk, enc, next) => {
      written += chunk.length
      speed = speedo(chunk.length)
      next()
    })
    const reader = fileReader(file)
    pump(reader, passthrough)

    const key = this.props.archive
    const res = await core.rpc.request('fs/writeFile', { key, path, stream: reader })
    clearInterval(debounce)
    this.setState({ files: updateAt(this.state.files, i, { pending: false, done: true, written, speed }), pending: false, done: true })

    // todo: is this clean enough?
    core.getStore('fs').fetchStats({ archive: key, path: this.props.dir })
  }

through2

A tiny wrapper around Node.js streams.Transform (Streams2/3) to avoid explicit subclassing noise

MIT
Latest version published 4 years ago

Package Health Score

74 / 100
Full package analysis