var through = require('through2'); function defaultComparator(a, b) { return a.path.localeCompare(b.path); } module.exports = function gulpSort(params) { var asc = true; var comparator; var files = []; var customSortFn; if (typeof params === 'function') { // params is the sort comparator comparator = params; params = {}; } else { params = params || {}; asc = typeof params.asc !== 'undefined' ? params.asc : asc; comparator = params.comparator || defaultComparator; customSortFn = params.customSortFn; } return through.obj(function (file, enc, cb) { files.push(file); cb(); }, function (cb) { if (customSortFn) { // expect customSortFn to return the files array files = customSortFn(files, comparator); } else { // sort in-place files.sort(comparator); } if (!asc) { files.reverse(); } files.forEach(function (file) { this.push(file); }, this); cb(); }); };