packageList
Every package the codebase locks, by name, its ranges newest first; @types packages fold into theirs.
import type { Codebase } from "#codebase/tcmts/cli/codebase"; import type { PackageRange } from "#codebase/tcmts/cli/package_pages"; import { usersOf } from "#codebase/tcmts/cli/upgrade"; import { compareVersions } from "#codebase/tcmts/core/semver"; export function packageList(cb: Codebase): { name: string; ranges: PackageRange[] }[] { const locked = cb.store.lockedPackages(); const byName = new Map<string, PackageRange[]>(); for (const l of locked) { if (l.name.startsWith("@types/")) continue; const types = locked.find((t) => t.name === `@types/${l.name.replace(/^@/, "").replace("/", "__")}` && t.range === l.range)?.version; const r: PackageRange = { range: l.range, version: l.version, users: usersOf(cb, l.name, l.range).size, ...(l.integrity ? { integrity: l.integrity } : {}), ...(types ? { types } : {}) }; byName.set(l.name, [...(byName.get(l.name) ?? []), r]); } const pad = (r: string) => (r.split(".").length === 1 ? `${r}.0.0` : r.split(".").length === 2 ? `${r}.0` : r); return [...byName].map(([name, ranges]) => ({ name, ranges: ranges.sort((a, b) => compareVersions(pad(b.range), pad(a.range))) })); }
uses
- tcmts.cli.codebase.Codebase
- tcmts.cli.package_pages.PackageRange
- tcmts.cli.upgrade.usersOf
- tcmts.core.semver.compareVersions