1.1.1•Updated a month ago
import { I_File } from "../modules/zip.ts";
import { SerializeVersionNumber } from "./version_helpers.ts";
type SortFN<T> = (a: T, b: T) => number;
type ComplexSorter<T> = SortFN<T> & {
Ascending: SortFN<T>,
Descending: SortFN<T>
}
const Sorter = <T>(input: SortFN<T>): ComplexSorter<T> => {
const ascending = input;
const descending = ((a: T, b: T) => input(a, b) * -1) as SortFN<T>;
return Object.assign(ascending, {
Ascending: ascending,
Descending: descending
});
}
export class Sort {
static Event = Sorter<Viapak.Package.Event>((a: Viapak.Package.Event, b: Viapak.Package.Event) => a.timestamp - b.timestamp)
static EventVersion = Sorter<Viapak.Package.Event>((a: Viapak.Package.Event, b: Viapak.Package.Event) => SerializeVersionNumber(a.version) - SerializeVersionNumber(b.version))
static String = Sorter<string>((a, b) => a > b ? 1 : a < b ? -1 : 0)
static Version = Sorter<string>((a: string, b: string) => SerializeVersionNumber(a) - SerializeVersionNumber(b))
static File = Sorter<I_File>((a: I_File, b: I_File) => (
a.is_directory == b.is_directory
? a.name > b.name ? 1 : a.name < b.name ? -1 : 0
: a.is_directory && !b.is_directory ? 1 : -1 )
)
}