mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* Convert runMany and runManySync to use injectManyWithMeta Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup type errors due to new Runnable requirements Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add documentation for verifyRunnablesAreDAG Signed-off-by: Sebastian Malton <sebastian@malton.name> * Simplify convertToWithIdWith Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move all utility functions to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move testing utilities to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move run-many and run-many-sync to separate package Signed-off-by: Sebastian Malton <sebastian@malton.name> * Replace all internal uses of utilities with new packages Signed-off-by: Sebastian Malton <sebastian@malton.name> * Use new @k8slens/run-many package in core Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add dep to open-lens Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup type errors Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup uses of @k8slens/test-utils Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup getGlobalOverride Signed-off-by: Sebastian Malton <sebastian@malton.name> * Move tests to new package too Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix type errors Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup uses of AsyncResult and autoBind Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fixup remaining import issues Signed-off-by: Sebastian Malton <sebastian@malton.name> * Finial fixups to fix build Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix lint Signed-off-by: Sebastian Malton <sebastian@malton.name> * Revert moving "testUsingFakeTime" to separate package - This fixes tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix integration tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix unit test failing due to spelling fix Signed-off-by: Sebastian Malton <sebastian@malton.name> --------- Signed-off-by: Sebastian Malton <sebastian@malton.name>
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
import semver, { coerce } from "semver";
|
|
|
|
export enum Ordering {
|
|
LESS = -1,
|
|
EQUAL = 0,
|
|
GREATER = 1,
|
|
}
|
|
|
|
/**
|
|
* This function switches the direction of `ordering` if `direction` is `"desc"`
|
|
* @param ordering The original ordering (assumed to be an "asc" ordering)
|
|
* @param direction The new desired direction
|
|
*/
|
|
export function rectifyOrdering(ordering: Ordering, direction: "asc" | "desc"): Ordering {
|
|
if (direction === "desc") {
|
|
return -ordering;
|
|
}
|
|
|
|
return ordering;
|
|
}
|
|
|
|
/**
|
|
* An ascending sorting function
|
|
* @param left An item from an array
|
|
* @param right An item from an array
|
|
* @returns The relative ordering in an ascending manner.
|
|
* - Less if left < right
|
|
* - Equal if left == right
|
|
* - Greater if left > right
|
|
*/
|
|
export function sortCompare<T>(left: T, right: T): Ordering {
|
|
if (left < right) {
|
|
return Ordering.LESS;
|
|
}
|
|
|
|
if (left === right) {
|
|
return Ordering.EQUAL;
|
|
}
|
|
|
|
return Ordering.GREATER;
|
|
}
|
|
|
|
/**
|
|
* This function sorts of list of items that have what should be a semver version formatted string
|
|
* as the field `version` but if it is not loosely coercible to semver falls back to sorting them
|
|
* alphanumerically
|
|
*/
|
|
export function sortBySemverVersion<T extends { version: string }>(versioned: T[]): T[] {
|
|
return versioned
|
|
.map(versioned => ({
|
|
__version: coerce(versioned.version, { loose: true }),
|
|
raw: versioned,
|
|
}))
|
|
.sort((left, right) => {
|
|
if (left.__version && right.__version) {
|
|
return semver.compare(right.__version, left.__version);
|
|
}
|
|
|
|
if (!left.__version && right.__version) {
|
|
return Ordering.GREATER;
|
|
}
|
|
|
|
if (left.__version && !right.__version) {
|
|
return Ordering.LESS;
|
|
}
|
|
|
|
return sortCompare(left.raw.version, right.raw.version);
|
|
})
|
|
.map(({ raw }) => raw);
|
|
}
|