44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
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();
|
|
});
|
|
};
|