Sorting constants, type guards, and date comparator functions for building consistent, type-safe sort controls.
1import {2 sortingModes,3 sortingDirections,4 timeSortingDirections,5 alphanumericSortingDirections,6 isSortingMode,7 isSortingDirection,8 isTimeSortingDirection,9 isAlphanumericSortingDirection,10 $sortingMode,11 $sortingDirection,12 $timeSortingDirection,13 $alphanumericSortingDirection,14 timeSortingByDirection,15 compareDatesNewestToOldest,16 compareDatesOldestToNewest,17} from "@ngrok/mantle/utils";18 19import type {20 SortingMode,21 SortingDirection,22 TimeSortingDirection,23 AlphanumericSortingDirection,24} from "@ngrok/mantle/utils";sortingModes1sortingModes; // readonly ["alphanumeric", "time"]sortingDirections1sortingDirections; // readonly ["asc", "desc"]alphanumericSortingDirections1alphanumericSortingDirections; // readonly ["asc", "desc"]timeSortingDirections1timeSortingDirections; // readonly ["newest-to-oldest", "oldest-to-newest"]timeSortingByDirectionMaps a SortingDirection to its equivalent TimeSortingDirection.
1timeSortingByDirection;2// { asc: "oldest-to-newest", desc: "newest-to-oldest" }3 4timeSortingByDirection["asc"]; // "oldest-to-newest"5timeSortingByDirection["desc"]; // "newest-to-oldest"isSortingMode(value)1isSortingMode("alphanumeric"); // true2isSortingMode("time"); // true3isSortingMode("foo"); // falseisSortingDirection(value)1isSortingDirection("asc"); // true2isSortingDirection("desc"); // true3isSortingDirection("foo"); // falseisAlphanumericSortingDirection(value)1isAlphanumericSortingDirection("asc"); // true2isAlphanumericSortingDirection("desc"); // true3isAlphanumericSortingDirection("foo"); // falseisTimeSortingDirection(value)1isTimeSortingDirection("newest-to-oldest"); // true2isTimeSortingDirection("oldest-to-newest"); // true3isTimeSortingDirection("asc"); // false4isTimeSortingDirection("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)1$sortingMode("alphanumeric"); // "alphanumeric" (typed as SortingMode)2$sortingMode("time"); // "time"$sortingDirection(value)1$sortingDirection("asc"); // "asc" (typed as SortingDirection)2$sortingDirection("desc"); // "desc"$alphanumericSortingDirection(value)1$alphanumericSortingDirection("asc"); // "asc" (typed as AlphanumericSortingDirection)2$alphanumericSortingDirection("desc"); // "desc"$timeSortingDirection(value)Accepts either a TimeSortingDirection or a SortingDirection. When given a SortingDirection, it converts it via timeSortingByDirection.
1$timeSortingDirection("asc"); // "oldest-to-newest"2$timeSortingDirection("desc"); // "newest-to-oldest"3$timeSortingDirection("oldest-to-newest"); // "oldest-to-newest"4$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.
1import { compareDatesNewestToOldest } from "@ngrok/mantle/utils";2 3const dates = [new Date("2023-01-01"), new Date("2024-06-15"), new Date("2022-12-31")];4dates.toSorted(compareDatesNewestToOldest);5// → [2024-06-15, 2023-01-01, 2022-12-31]compareDatesOldestToNewest(a, b)Compares two Date values for ascending (oldest-first) sort order.
1import { compareDatesOldestToNewest } from "@ngrok/mantle/utils";2 3const dates = [new Date("2023-01-01"), new Date("2024-06-15"), new Date("2022-12-31")];4dates.toSorted(compareDatesOldestToNewest);5// → [2022-12-31, 2023-01-01, 2024-06-15]