lib/gulp-recursive-concat.js
function RecursiveConcat(options) {

	this.concat = null;
	this.currentCountDirectories = 0;
	this.currentCountFiles = 0;
	this.currentFolder = null;
	this.newFileGenerated = null;
	this.newFinalFile = "";
	this.options = options;
	this.walkCounter=0;
	this.stream = new Transform({objectMode: true});
	this.stream._transform = function(chunk, encoding, callback){
		var fullPath = null,
			file = {},
			relative = chunk.relative;

		file.base = chunk.base;
		file.contents = chunk.contents;

		file.extname = Path.extname(relative);
		file.basename = Path.basename(relative, file.extname);
		file.dirname = Path.dirname(relative);
		file.newDirname = utils.fixDirName(file.dirname);
		fullPath = file.newDirname + file.basename + file.extname;
		file.path = Path.join(chunk.base, fullPath);

		if (!file.relative) {
			file.relative = relative;
		}
		callback(null, self.walk(file));
	};

	var self = this;

	return this.stream;
}
function RecursiveConcat(options) {

	this.concat = null;
	this.currentCountDirectories = 0;
	this.currentCountFiles = 0;
	this.currentFolder = null;
	this.newFileGenerated = null;
	this.newFinalFile = "";
	this.options = options;
	this.walkCounter=0;
	this.stream = new Transform({objectMode: true});
	this.stream._transform = function(chunk, encoding, callback){
		var fullPath = null,
			file = {},
			relative = chunk.relative;

		file.base = chunk.base;
		file.contents = chunk.contents;

		file.extname = Path.extname(relative);
		file.basename = Path.basename(relative, file.extname);
		file.dirname = Path.dirname(relative);
		file.newDirname = utils.fixDirName(file.dirname);
		fullPath = file.newDirname + file.basename + file.extname;
		file.path = Path.join(chunk.base, fullPath);

		if (!file.relative) {
			file.relative = relative;
		}
		callback(null, self.walk(file));
	};

	var self = this;

	return this.stream;
}
Gulp Recursive Concat.