gulp-sort
Version:
Sort files in stream by path or any custom sort comparator
44 lines (39 loc) • 1.12 kB
JavaScript
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();
});
};