compareFields
uses #tcm/host (encode)
How find orders by a field: missing first, then numbers, dates, strings, anything else by its text.
import { encode } from "#tcm/host"; export function compareFields(a: unknown, b: unknown): number { const key = (v: unknown): [number, number | string] => v === undefined || v === null ? [0, 0] : typeof v === "number" ? [1, v] : v instanceof Date ? [2, v.getTime()] : typeof v === "string" ? [3, v] : [4, encode(v)]; const [x, y] = [key(a), key(b)]; return x[0] - y[0] || (x[1] < y[1] ? -1 : x[1] > y[1] ? 1 : 0); }