| 
				
					 | 
			%!s(int64=8) %!d(string=hai) anos | |
|---|---|---|
| .. | ||
| LICENSE | %!s(int64=8) %!d(string=hai) anos | |
| README.md | %!s(int64=8) %!d(string=hai) anos | |
| index.js | %!s(int64=8) %!d(string=hai) anos | |
| package.json | %!s(int64=8) %!d(string=hai) anos | |
Deal with vinyl file contents, regardless of whether it is Buffer/Stream
var through = require('through2');
var VinylBufferStream = require('vinyl-bufferstream');
function yourGulpPlugin() {
  var vinylBufferStream = new VinylBufferStream(function(buf, done) {
    syncOrAsyncFn(buf, done); 
  });
  return through.obj(function(file, enc, cb) {
    vinylBufferStream(file, function(err, contents) {
      if (err) {
        self.emit('error', err);
      } else {
        file.contents = contents;
        self.push(file);
      }
      cb();
    });
  });
}
npm install vinyl-bufferstream
var VinylBufferStream = require('vinyl-bufferstream');
(new operator is optional.)
transformFunction: Function
Return: Function
The argument must be a function taking a Buffer and a callback function as its first and second argument, which calls the callback function with passing Node-style callback arguments (error, result).
file: Object (vinyl file object)
callback: Function
When the file.contents is a Buffer, it will call the transformFunction with passing file.contents to the first argument.
When the file.contents is a Stream, it will call the transformFunction with passing the buffered stream of file.contents to the first argument.
When the file.contents is a Stream, it won't call the transformFunction.
error: Error or null
contents: Buffer or Stream
When the file.contents is a Buffer, contents will be a result that transformFunction produces.
When the file.contents is a Stream, contents will be a stream that emits a data transformFunction produces.
When the file.contents is null, contents will be null.
var gulp = require('gulp');
var SVGO = require('svgo');
var through = require('through2');
var VinylBufferStream = require('vinyl-bufferstream');
function svgminPlugin(options) {
  var svgo = new SVGO(options);
  var vinylBufferStream = new VinylBufferStream(function(buf, done) {
    svgo.optimize(String(buf), function(result) {
      if (result.error) {
        done(result.error);
        return;
      }
      done(null, result.data);
    });
  });
  return through.obj(function(file, enc, cb) {
    vinylBufferStream(file, function(err, contents) {
      if (err) {
        self.emit('error', err);
      } else {
        file.contents = contents;
        self.push(file);
      }
      cb();
    });
  });
}
gulp.task('buffer', function() {
  return gulp.src('*.svg')
    .pipe(svgminPlugin())
    .pipe(gulp.dest('dest'));
});
gulp.task('stream', function() {
  return gulp.src('*.svg', {buffer: false})
    .pipe(svgminPlugin())
    .pipe(gulp.dest('dest'));
});
Copyright (c) 2014 - 2015 Shinnosuke Watanabe
Licensed under the MIT License.