unpackRuns

tcmts.cli.suites.unpackRuns · #fmachqwe · term · runs anywhere

The kept runs packRuns wrote; none from anything else (runs kept by an earlier tcm, another way), nor runs recording what they ran another way than this tcm does (KEPT_RUN_FORMAT): they're dropped when runs are next kept.

import { KEPT_RUN_FORMAT } from "#codebase/tcmts/cli/suites";
import type { SuiteRun } from "#codebase/tcmts/cli/suites";

export function unpackRuns(json: string | undefined): Record<string, SuiteRun[]> {
  let kept: { names?: unknown; runs?: unknown };
  try {
    kept = JSON.parse(json ?? "{}") as { names?: unknown; runs?: unknown };
  } catch {
    return {};
  }
  if (!Array.isArray(kept.names) || typeof kept.runs !== "object" || kept.runs === null) return {};
  const names = kept.names as string[];
  const runs = kept.runs as Record<string, (Omit<SuiteRun, "ran"> & { ran: number[] })[]>;
  return Object.fromEntries(
    Object.entries(runs).map(([slot, rs]) => [
      slot,
      rs
        .filter((r) => r.format === KEPT_RUN_FORMAT)
        .map((r) => ({ ...r, ran: r.ran.map((i) => names[i]!) })),
    ]),
  );
}

uses

used by