blockers
Why a package can't be released as it stands (work left in tcm todo; for a tcm library, code it uses from outside
itself), if so.
import { needsFixing } from "#codebase/tcmts/cli/codebase"; import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { owns } from "#codebase/tcmts/cli/manifests"; import type { Pkg } from "#codebase/tcmts/cli/manifests"; import { outsideUses } from "#codebase/tcmts/cli/releases"; import { isConflicted } from "#codebase/tcmts/core/types"; import type { DefKind } from "#codebase/tcmts/core/types"; import type { NameRow } from "#codebase/tcmts/store"; export function blockers(cb: Codebase, pkg: Pkg, all: Pkg[], rows: NameRow[]): string | undefined { const kinds = new Map<string, DefKind[]>(); for (const n of rows) if (owns(pkg, all, n.path)) kinds.set(n.path, [...(kinds.get(n.path) ?? []), n.kind]); const broken = needsFixing(cb).filter((t) => cb.store.pathsOf(t.hash).some((p) => owns(pkg, all, p)), ); if ([...kinds.values()].some(isConflicted) || broken.length) return `${pkg.name} has work left (\`tcm todo\`): release it when that's done, or --force`; if (pkg.manifest.npm === false) { const outside = outsideUses(cb, pkg, all, rows); if (outside.length) return `${pkg.name} is a tcm library, and it uses what isn't its own: ${outside.slice(0, 8).join(", ")}${outside.length > 8 ? `, and ${outside.length - 8} more` : ""}. A codebase that adds it would have those unnamed: move them into it, or pass them in`; } return undefined; }
uses
- tcmts.cli.codebase.Codebase
- tcmts.cli.codebase.needsFixing
- tcmts.cli.manifests.Pkg
- tcmts.cli.manifests.owns
- tcmts.cli.releases.outsideUses
- tcmts.core.types.DefKind
- tcmts.core.types.isConflicted
- tcmts.store.NameRow