diff --git a/src/scripts/error.js b/src/scripts/error.js new file mode 100644 index 0000000..3133d2f --- /dev/null +++ b/src/scripts/error.js @@ -0,0 +1,5 @@ +export class DockerRegistryUIError extends Error { + constructor(msg) { + super(msg); + } +} diff --git a/src/scripts/utils.js b/src/scripts/utils.js index 778226d..f6e39cc 100644 --- a/src/scripts/utils.js +++ b/src/scripts/utils.js @@ -244,3 +244,21 @@ export const taglistOrderVariants = (taglistOrder) => { throw new DockerRegistryUIError(`The order \`${taglistOrder}\` is not recognized.`); } }; + +export function talgistOrderParser(taglistOrder) { + const orders = taglistOrderVariants(taglistOrder) + .split(';') + .filter((e) => e) + .map((e) => e.split('-').filter((e) => e)) + .reduce((acc, e, idx) => { + if (e.length > 1) { + acc[e[0] + 'Asc'] = e[1] === 'asc'; + } + if (idx === 0) { + acc.numFirst = e[0] === 'num'; + } + return acc; + }, {}); + + return orders; +} diff --git a/test/utils.test.js b/test/utils.test.js index c87c8d3..09239a7 100644 --- a/test/utils.test.js +++ b/test/utils.test.js @@ -1,4 +1,4 @@ -import { taglistOrderVariants } from '../src/scripts/utils.js'; +import { taglistOrderVariants, talgistOrderParser } from '../src/scripts/utils.js'; import { DockerRegistryUIError } from '../src/scripts/error.js'; import assert from 'assert'; @@ -35,4 +35,36 @@ describe('utils tests', () => { ); }); }); + + describe('talgistOrderParser', () => { + it('should have default configuration when empty or undefined', () => { + const expected = { numAsc: true, alphaAsc: true, numFirst: true }; + assert.deepEqual(talgistOrderParser(), expected); + assert.deepEqual(talgistOrderParser(''), expected); + }); + + it('should parse correctly `num-asc;alpha-asc` and variants', () => { + const expected = { numAsc: true, alphaAsc: true, numFirst: true }; + ['asc', 'num-asc;alpha-asc', 'num-asc'].forEach((e) => + assert.deepEqual(talgistOrderParser(e), expected, `wrong result for ${e}`) + ); + }); + + it('should parse correctly `alpha-desc;num-desc` and variants', () => { + const expected = { numAsc: false, alphaAsc: false, numFirst: false }; + ['desc', 'alpha-desc;num-desc'].forEach((e) => + assert.deepEqual(talgistOrderParser(e), expected, `wrong result for ${e}`) + ); + }); + + it('should parse correctly `alpha-asc;num-desc` and variants', () => { + const expected = { numAsc: false, alphaAsc: true, numFirst: false }; + assert.deepEqual(talgistOrderParser('alpha-asc;num-desc'), expected) + }); + + it('should parse correctly `num-desc;alpha-desc` and variants', () => { + const expected = { numAsc: false, alphaAsc: false, numFirst: true }; + assert.deepEqual(talgistOrderParser('num-desc;alpha-desc'), expected) + }); + }); });