From c3eee72deffc7bb4a98fe7558125bfcf2fa8d277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Rinc=C3=B3n=20Blanco?= Date: Wed, 12 Oct 2022 21:12:44 +0200 Subject: [PATCH] Sort libs based on semver (#4153) --- lib/options-handler.js | 11 +++++++++++ lib/utils.ts | 4 ++-- static/widgets/libs-widget.ts | 8 +++++++- test/options-handler.js | 5 +++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/options-handler.js b/lib/options-handler.js index 21e754bec..2bb78a522 100755 --- a/lib/options-handler.js +++ b/lib/options-handler.js @@ -242,6 +242,17 @@ export class ClientOptionsHandler { } } } + for (const langGroup of Object.values(libraries)) { + for (const libGroup of Object.values(langGroup)) { + const versions = Object.values(libGroup.versions); + versions.sort((a, b) => semverParser.compare(asSafeVer(a.semver), asSafeVer(b.semver), true)); + let order = 0; + // Set $order to index on array. As group is an array, iteration order is guaranteed. + for (const lib of versions) { + lib['$order'] = order++; + } + } + } return libraries; } diff --git a/lib/utils.ts b/lib/utils.ts index 5f50245f0..bb7311700 100644 --- a/lib/utils.ts +++ b/lib/utils.ts @@ -424,8 +424,8 @@ export function countOccurrences(collection: Iterable, item: T): number { return result; } -export function asSafeVer(semver: string | number | null) { - if (semver !== null) { +export function asSafeVer(semver: string | number | null | undefined) { + if (semver != null) { if (typeof semver === 'number') { semver = `${semver}`; } diff --git a/static/widgets/libs-widget.ts b/static/widgets/libs-widget.ts index ae4558c01..cc4bd6683 100644 --- a/static/widgets/libs-widget.ts +++ b/static/widgets/libs-widget.ts @@ -281,7 +281,13 @@ export class LibsWidget { versions.append(noVersionSelectedOption); let hasVisibleVersions = false; - for (const versionId in lib.versions) { + const versionsArr = Object.keys(lib.versions).map(id => { + return {id: id, order: lib.versions[id]['$order']}; + }); + versionsArr.sort((a, b) => b.order - a.order); + + for (const libVersion of versionsArr) { + const versionId = libVersion.id; const version = lib.versions[versionId]; const option = $('