UNPKG

sequency

Version:

Functional sequences for processing iterable data in JavaScript

69 lines 2.48 kB
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