changeText

tcmts.registry.changeText · #iphcx5wq · term · runs anywhere

How an API changed, said briefly, from its semver findings.

import { levelOf, LINTS } from "#codebase/tcmts/cli/semver_checks";
import type { Finding, Level } from "#codebase/tcmts/cli/semver_checks";

export function changeText(findings: Finding[]): string {
  const of = (l: Level) => findings.filter((f) => levelOf(f) === l);
  const names = (fs: Finding[]) =>
    `${fs
      .slice(0, 3)
      .map((f) => f.path)
      .join(", ")}${fs.length > 3 ? ", …" : ""}`;
  const breaking = of("major");
  if (breaking.length)
    return `${breaking.length} breaking: ${breaking[0]!.path} ${LINTS[breaking[0]!.lint].summary}${breaking.length > 1 ? ", …" : ""}`;
  const added = of("minor");
  if (added.length) return `${added.length} added or extended: ${names(added)}`;
  const changed = of("patch");
  return changed.length
    ? `same API, ${changed.length} definition${changed.length === 1 ? "" : "s"} changed`
    : "no API changes";
}

uses

used by