listPackages

tcmts.cli.upgrade.listPackages · #zsdypmcw · term · runs on the server

uses tcmts.cli.style.dim, which uses node:util

tcm packages: what the codebase runs, and what uses it.

import type { Codebase } from "#codebase/tcmts/cli/codebase";
import { TOOLS } from "#codebase/tcmts/cli/lint";
import { dim } from "#codebase/tcmts/cli/style";
import { usersOf } from "#codebase/tcmts/cli/upgrade";

export function listPackages(cb: Codebase) {
  const locked = cb.store.lockedPackages();
  if (!locked.length) return console.log(dim("no packages yet: import one in a scratch file"));
  const users = new Map<string, number>();
  for (const l of locked) users.set(`${l.name}@${l.range}`, usersOf(cb, l.name, l.range).size);
  const width = Math.max(...locked.map((l) => l.name.length));
  for (const l of locked) {
    const n = users.get(`${l.name}@${l.range}`) ?? 0;
    const tool = TOOLS.has(l.name) && (cb.store.getSetting(`tool.${l.name}`) ?? l.range) === l.range;
    const note = l.name.startsWith("@types/") ? "types" : n ? `${n} definition${n === 1 ? "" : "s"}` : tool ? "tool" : "unused";
    console.log(`${l.name.padEnd(width)}  ${dim(l.range.padEnd(6))}  ${l.version.padEnd(10)}  ${dim(note)}`);
  }
}

uses

used by