@codibre/fluent-iterable
Version:
Provides LINQ-like fluent api operations for iterables and async iterables (ES2018+).
39 lines (38 loc) • 1.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sortByRecipe = sortByRecipe;
const order_assured_1 = require("./../types-internal/order-assured");
const types_internal_1 = require("../types-internal");
const prepare_1 = require("../types-internal/prepare");
function compareFunc(props) {
return function (a, b) {
let ret = 0;
props.some(function (el) {
const descending = (0, order_assured_1.isDescendingOrderAssured)(el);
const x = el(a);
const y = el(b);
if (x !== y) {
ret =
typeof x === 'string' && typeof y === 'string'
? x.localeCompare(y)
: x < y
? -1
: 1;
if (ret !== 0) {
if (descending) {
ret *= -1;
}
return true;
}
}
return false;
});
return ret;
};
}
function sortByRecipe(sort) {
return function (...props) {
const comparer = compareFunc(props.map((x) => (0, types_internal_1.keepOrderAssuring)((0, prepare_1.prepare)(x), x)));
return sort.call(this, comparer);
};
}