UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

118 lines (117 loc) 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.higherFirst = higherFirst; exports.lowerFirst = lowerFirst; exports.makeFirst = makeFirst; exports.makeLast = makeLast; exports.reverse = reverse; const assert_js_1 = require("./assert.js"); /** * ```js * let arr = [ * { price: 10 }, * { price: 1000 }, * { price: 100 } * ] * arr = arr.sort(higherFirst(el => el.price)) * isEqual(arr, [ * { price: 1000 }, * { price: 100 }, * { price: 10 } * ]) * ``` */ function higherFirst(getValue) { return (element1, element2) => { const val1 = getValue(element1); const val2 = getValue(element2); if (val1 === val2) { return 0; } return val1 > val2 ? -1 : 1; }; } /** * ```js * let arr = [ * { price: 10 }, * { price: 1000 }, * { price: 100 } * ] * arr = arr.sort(lowerFirst(el => el.price)) * isEqual(arr, [ * { price: 10 }, * { price: 100 }, * { price: 1000 } * ]) * ``` */ function lowerFirst(getValue) { return (element1, element2) => { const val1 = getValue(element1); const val2 = getValue(element2); if (val1 === val2) { return 0; } return val1 < val2 ? -1 : 1; }; } /** * ```js * let arr = [ * { name: 'iphone', isRocket: false }, * { name: 'starship', isRocket: true } * ] * arr = arr.sort(makeFirst(el => el.isRocket)) * isEqual(arr, [ * { name: 'starship', isRocket: true }, * { name: 'iphone', isRocket: false } * ]) * ``` */ function makeFirst(getValue) { return (element1, element2) => { const val1 = getValue(element1); const val2 = getValue(element2); (0, assert_js_1.assert)([true, false, null].includes(val1)); (0, assert_js_1.assert)([true, false, null].includes(val2)); if (val1 === val2) { return 0; } if (val1 === true || val2 === false) { return -1; } if (val2 === true || val1 === false) { return 1; } (0, assert_js_1.assert)(false); }; } /** * ```js * let arr = [ * { name: 'starship', isRocket: true }, * { name: 'iphone', isRocket: false } * ] * arr = arr.sort(makeLast(el => el.isRocket)) * isEqual(arr, [ * { name: 'iphone', isRocket: false }, * { name: 'starship', isRocket: true } * ]) * ``` */ function makeLast(getValue) { return makeFirst((element) => { const val = getValue(element); if (val === null) { return null; } else { return !val; } }); } /** Reverse order result. */ function reverse(sortKey) { return (-1 * sortKey); }