pastoralist
Version:
A tool to watch over node module resolutions and overrides
135 lines (134 loc) • 3.95 kB
TypeScript
import type { KeepConstraint } from "../types";
export type Output = {
write: (text: string) => void;
writeLine: (text: string) => void;
clearLine: () => void;
hideCursor: () => void;
showCursor: () => void;
};
export interface BoxOptions {
width?: number;
padding?: number;
title?: string;
}
export interface ProgressOptions {
width?: number;
filled?: string;
empty?: string;
showPercent?: boolean;
}
export type PromptChoiceOption = {
name: string;
value: string;
};
export type HintCache = Record<string, number>;
export type RgbTuple = [number, number, number];
export type TruncateState = {
result: string;
visibleCount: number;
hasOpenAnsi: boolean;
isTruncated: boolean;
};
export type AnsiMatch = RegExpMatchArray & {
index: number;
};
export type SpinnerState = {
text: string;
isSpinning: boolean;
frameIndex: number;
interval: NodeJS.Timeout | null;
};
export interface TerminalGraphOptions {
out?: Output;
quiet?: boolean;
}
export type Spinner = {
start: () => Spinner;
stop: () => Spinner;
succeed: (text?: string) => Spinner;
fail: (text?: string) => Spinner;
info: (text?: string) => Spinner;
warn: (text?: string) => Spinner;
update: (text: string) => Spinner;
};
export type TerminalPhase = "idle" | "banner" | "scanning" | "analyzing" | "resolving" | "writing" | "complete";
export type TerminalGraphState = {
phase: TerminalPhase;
ancestors: boolean[];
spinner: {
active: boolean;
frame: number;
text: string;
interval: NodeJS.Timeout | null;
};
progress: {
current: number;
total: number;
};
};
export type OverridesMap = Record<string, string>;
export type VulnerabilityInfo = {
severity: string;
packageName: string;
currentVersion: string;
title: string;
cves?: string[];
fixAvailable: boolean;
patchedVersion?: string;
url?: string;
};
export type OverrideInfo = {
packageName: string;
version: string;
reason?: string;
dependents?: Record<string, string>;
patches?: string[];
isSecurityFix?: boolean;
cves?: string[];
keep?: boolean | KeepConstraint;
potentiallyFixedIn?: string;
};
export type SecurityFixInfo = {
packageName: string;
fromVersion: string;
toVersion: string;
cves?: string[];
severity?: string;
reason?: string;
};
export type RemovedOverrideInfo = {
packageName: string;
version: string;
reason: string;
};
export interface ExecutiveSummaryData {
vulnerabilitiesFixed?: number;
staleOverridesRemoved?: number;
packagesProtected?: number;
}
export interface CompactSummaryData {
severityCritical: number;
severityHigh: number;
severityMedium: number;
severityLow: number;
overridesTracked: number;
overridesRemoved: number;
packagesScanned: number;
}
export type TerminalGraph = {
banner: () => TerminalGraph;
startPhase: (phase: TerminalPhase, text: string, isLast?: boolean) => TerminalGraph;
progress: (current: number, total: number, item: string) => TerminalGraph;
item: (text: string, isLast?: boolean) => TerminalGraph;
vulnerability: (info: VulnerabilityInfo, isLast?: boolean) => TerminalGraph;
override: (info: OverrideInfo, isLast?: boolean) => TerminalGraph;
securityFix: (info: SecurityFixInfo, isLast?: boolean) => TerminalGraph;
removedOverride: (info: RemovedOverrideInfo, isLast?: boolean) => TerminalGraph;
endPhase: (text?: string) => TerminalGraph;
summary: (overrides: OverridesMap, changes?: string[]) => TerminalGraph;
executiveSummary: (data: ExecutiveSummaryData) => TerminalGraph;
compactSummary: (data: CompactSummaryData) => TerminalGraph;
complete: (text: string, suffix?: string) => TerminalGraph;
notice: (text: string) => TerminalGraph;
stop: () => TerminalGraph;
};