sequency
Version:
Functional sequences for processing iterable data in JavaScript
69 lines • 2.48 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
function compare(comparison) {
return Object.assign(comparison, {
reversed: function () {
return compare(function (a, b) { return comparison(a, b) * -1; });
},
then: function (nextComparison) {
return compare(function (a, b) {
var result = comparison(a, b);
return result !== 0
? result
: nextComparison(a, b);
});
},
thenDescending: function (nextComparison) {
return this.then(compare(nextComparison)
.reversed());
},
thenBy: function (keyOrSelector) {
var selector = asSelector(keyOrSelector);
return this.then(function (a, b) { return naturalCompare(selector(a), selector(b)); });
},
thenByDescending: function (keyOrSelector) {
var selector = asSelector(keyOrSelector);
return this.then(compare(function (a, b) { return naturalCompare(selector(a), selector(b)); }).reversed());
}
});
}
function compareBy(keyOrSelector) {
var selector = asSelector(keyOrSelector);
return compare(function (a, b) { return naturalCompare(selector(a), selector(b)); });
}
function compareByDescending(keyOrSelector) {
var selector = asSelector(keyOrSelector);
return compare(function (a, b) { return naturalCompare(selector(b), selector(a)); });
}
function asSelector(keyOrSelector) {
return typeof keyOrSelector === "function"
? keyOrSelector
: function (item) { return item[keyOrSelector]; };
}
function naturalCompare(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
function naturalOrder() {
return compare(naturalCompare);
}
function reverseOrder() {
return compare(naturalCompare).reversed();
}
function nullsLast() {
return compare(function (a, b) { return a === null ? 1 : b === null ? -1 : 0; });
}
function nullsFirst() {
return compare(function (a, b) { return a === null ? -1 : b === null ? 1 : 0; });
}
function createComparatorFactory() {
return {
compare: compare,
compareBy: compareBy,
compareByDescending: compareByDescending,
naturalOrder: naturalOrder,
reverseOrder: reverseOrder,
nullsFirst: nullsFirst,
nullsLast: nullsLast
};
}
exports.default = createComparatorFactory;
//# sourceMappingURL=createComparatorFactory.js.map