// Generated by CoffeeScript 1.12.5
'use strict';
var DEBUG, baseStream, through;

baseStream = require('stream');

through = require('through2');

DEBUG = process.env.NODE_ENV === 'development';


/*
 * Taps into the pipeline and allows user to easily route data through
 * another stream or change content.
 */

module.exports = function(lambda) {
  var modifyFile, utils;
  utils = function(tapStream, file) {
    return {

      /*
       * Routes through another stream. The filter must not be
       * created. This will create the filter as needed.
       *
       * @param filter {stream}
       * @param args {Array} Array containg arguments to apply to filter.
       *
       * @example
       *   t.through coffee, [{bare: true}]
       */
      through: function(filter, args) {
        var stream;
        if (DEBUG) {
          if (!Array.isArray(args)) {
            throw new TypeError("Args must be an array to `apply` to the filter");
          }
        }
        stream = filter.apply(null, args);
        stream.on("error", function(err) {
          return tapStream.emit("error", err);
        });
        stream.write(file);
        return stream;
      }
    };
  };
  modifyFile = function(file, enc, cb) {
    var data, inst, next, obj;
    inst = {
      file: file
    };
    obj = lambda(inst.file, utils(this, inst.file), inst);
    next = (function(_this) {
      return function() {
        _this.push(file);
        return cb();
      };
    })(this);
    if (obj instanceof baseStream && !obj._readableState.ended) {
      obj.on('end', next);
      return obj.on('data', data = function() {
        obj.removeListener('end', next);
        obj.removeListener('data', data);
        return next();
      });
    } else {
      return next();
    }
  };
  return through.obj(modifyFile, function(cb) {
    return cb();
  });
};

//# sourceMappingURL=tap.js.map