From fbab517a1747d5f1551e3254e6aaf44ee35e10c8 Mon Sep 17 00:00:00 2001 From: Joxit Date: Thu, 11 May 2023 22:15:06 +0200 Subject: [PATCH] feat(utils): add support to alpha first order --- src/scripts/taglist-order.js | 19 +++++++++---------- test/taglist-order.test.js | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/scripts/taglist-order.js b/src/scripts/taglist-order.js index 3e6bde7..2d83de9 100644 --- a/src/scripts/taglist-order.js +++ b/src/scripts/taglist-order.js @@ -61,16 +61,15 @@ const applyOrder = (order, e1, e2) => { if (e1 === e2) { return 0; } - if (order.numFirst) { - if (typeof e1 === 'number') { - const factor = order.numAsc ? 1 : -1; - return typeof e2 === 'number' ? (e1 - e2) * factor : -1; - } else if (typeof e2 === 'number') { - return 1; - } else { - const factor = order.alphaAsc ? 1 : -1; - return e1.localeCompare(e2) * factor - } + const numFirst = order.numFirst ? 1 : -1; + if (typeof e1 === 'number') { + const factor = order.numAsc ? 1 : -1; + return typeof e2 === 'number' ? (e1 - e2) * factor : -1 * numFirst; + } else if (typeof e2 === 'number') { + return 1 * numFirst; + } else { + const factor = order.alphaAsc ? 1 : -1; + return e1.localeCompare(e2) * factor; } }; diff --git a/test/taglist-order.test.js b/test/taglist-order.test.js index 96dea87..3aaf8a4 100644 --- a/test/taglist-order.test.js +++ b/test/taglist-order.test.js @@ -118,5 +118,41 @@ describe('utils tests', () => { assert.deepEqual(['latest', '0.2.4', 'main'].sort(comparator), ['0.2.4', 'main', 'latest']); assert.deepEqual(['latest', '1.0.0-SNAPSHOT', '1.0.0'].sort(comparator), ['1.0.0', '1.0.0-SNAPSHOT', 'latest']); }); + + it('should sort tags with `alpha-asc;num-asc`', () => { + const comparator = getTagComparator(taglistOrderParser('alpha-asc;num-asc')); + + assert.deepEqual(['0.2.4', '1.2.5', '0.2.5'].sort(comparator), ['0.2.4', '0.2.5', '1.2.5']); + assert.deepEqual(['latest', '0.2.4', 'main'].sort(comparator), ['latest', 'main', '0.2.4']); + assert.deepEqual(['latest', '1.0.0-SNAPSHOT', '1.0.0'].sort(comparator), ['latest', '1.0.0', '1.0.0-SNAPSHOT']); + assert.deepEqual(['latest', 'main', 'edge'].sort(comparator), ['edge', 'latest', 'main']); + }); + + it('should sort tags with `alpha-asc;num-desc`', () => { + const comparator = getTagComparator(taglistOrderParser('alpha-asc;num-desc')); + + assert.deepEqual(['0.2.4', '1.2.5', '0.2.5'].sort(comparator), ['1.2.5', '0.2.5', '0.2.4']); + assert.deepEqual(['latest', '0.2.4', 'main'].sort(comparator), ['latest', 'main', '0.2.4']); + assert.deepEqual(['latest', '1.0.0-SNAPSHOT', '1.0.0'].sort(comparator), ['latest', '1.0.0', '1.0.0-SNAPSHOT']); + assert.deepEqual(['latest', 'main', 'edge'].sort(comparator), ['edge', 'latest', 'main']); + }); + + it('should sort tags with `alpha-desc;num-asc`', () => { + const comparator = getTagComparator(taglistOrderParser('alpha-desc;num-asc')); + + assert.deepEqual(['0.2.4', '1.2.5', '0.2.5'].sort(comparator), ['0.2.4', '0.2.5', '1.2.5']); + assert.deepEqual(['latest', '0.2.4', 'main'].sort(comparator), ['main', 'latest', '0.2.4']); + assert.deepEqual(['latest', '1.0.0-SNAPSHOT', '1.0.0'].sort(comparator), ['latest', '1.0.0', '1.0.0-SNAPSHOT']); + assert.deepEqual(['latest', 'main', 'edge'].sort(comparator), ['main', 'latest', 'edge']); + }); + + it('should sort tags with `alpha-desc;num-desc`', () => { + const comparator = getTagComparator(taglistOrderParser('alpha-desc;num-desc')); + + assert.deepEqual(['0.2.4', '1.2.5', '0.2.5'].sort(comparator), ['1.2.5', '0.2.5', '0.2.4']); + assert.deepEqual(['latest', '0.2.4', 'main'].sort(comparator), ['main', 'latest', '0.2.4']); + assert.deepEqual(['latest', '1.0.0-SNAPSHOT', '1.0.0'].sort(comparator), ['latest', '1.0.0', '1.0.0-SNAPSHOT']); + assert.deepEqual(['latest', 'main', 'edge'].sort(comparator), ['main', 'latest', 'edge']); + }); }); });