compareFields

tcmts.server.compareFields · #l6vxso2p · term · runs on the server

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);
}

used by