Sorting constants, type guards, and date comparator functions for building consistent, type-safe sort controls.
import {
sortingModes,
sortingDirections,
timeSortingDirections,
alphanumericSortingDirections,
isSortingMode,
isSortingDirection,
isTimeSortingDirection,
isAlphanumericSortingDirection,
$sortingMode,
$sortingDirection,
$timeSortingDirection,
$alphanumericSortingDirection,
timeSortingByDirection,
compareDatesNewestToOldest,
compareDatesOldestToNewest,
} from "@ngrok/mantle/utils";
import type {
SortingMode,
SortingDirection,
TimeSortingDirection,
AlphanumericSortingDirection,
} from "@ngrok/mantle/utils";sortingModessortingModes; // readonly ["alphanumeric", "time"]sortingDirectionssortingDirections; // readonly ["asc", "desc"]alphanumericSortingDirectionsalphanumericSortingDirections; // readonly ["asc", "desc"]timeSortingDirectionstimeSortingDirections; // readonly ["newest-to-oldest", "oldest-to-newest"]timeSortingByDirectionMaps a SortingDirection to its equivalent TimeSortingDirection.
timeSortingByDirection;
// { asc: "oldest-to-newest", desc: "newest-to-oldest" }
timeSortingByDirection["asc"]; // "oldest-to-newest"
timeSortingByDirection["desc"]; // "newest-to-oldest"isSortingMode(value)isSortingMode("alphanumeric"); // true
isSortingMode("time"); // true
isSortingMode("foo"); // falseisSortingDirection(value)isSortingDirection("asc"); // true
isSortingDirection("desc"); // true
isSortingDirection("foo"); // falseisAlphanumericSortingDirection(value)isAlphanumericSortingDirection("asc"); // true
isAlphanumericSortingDirection("desc"); // true
isAlphanumericSortingDirection("foo"); // falseisTimeSortingDirection(value)isTimeSortingDirection("newest-to-oldest"); // true
isTimeSortingDirection("oldest-to-newest"); // true
isTimeSortingDirection("asc"); // false
isTimeSortingDirection("foo"); // false$ prefix)The $-prefixed helpers are identity functions that provide a runtime value with the correct inferred type. Useful for deriving typed values from string literals without a as const cast.
$sortingMode(value)$sortingMode("alphanumeric"); // "alphanumeric" (typed as SortingMode)
$sortingMode("time"); // "time"$sortingDirection(value)$sortingDirection("asc"); // "asc" (typed as SortingDirection)
$sortingDirection("desc"); // "desc"$alphanumericSortingDirection(value)$alphanumericSortingDirection("asc"); // "asc" (typed as AlphanumericSortingDirection)
$alphanumericSortingDirection("desc"); // "desc"$timeSortingDirection(value)Accepts either a TimeSortingDirection or a SortingDirection. When given a SortingDirection, it converts it via timeSortingByDirection.
$timeSortingDirection("asc"); // "oldest-to-newest"
$timeSortingDirection("desc"); // "newest-to-oldest"
$timeSortingDirection("oldest-to-newest"); // "oldest-to-newest"
$timeSortingDirection("newest-to-oldest"); // "newest-to-oldest"compareDatesNewestToOldest(a, b)Compares two Date values for descending (newest-first) sort order. Pass directly to Array.prototype.sort.
import { compareDatesNewestToOldest } from "@ngrok/mantle/utils";
const dates = [new Date("2023-01-01"), new Date("2024-06-15"), new Date("2022-12-31")];
dates.sort(compareDatesNewestToOldest);
// → [2024-06-15, 2023-01-01, 2022-12-31]compareDatesOldestToNewest(a, b)Compares two Date values for ascending (oldest-first) sort order.
import { compareDatesOldestToNewest } from "@ngrok/mantle/utils";
const dates = [new Date("2023-01-01"), new Date("2024-06-15"), new Date("2022-12-31")];
dates.sort(compareDatesOldestToNewest);
// → [2022-12-31, 2023-01-01, 2024-06-15]