mirror of
https://github.com/astral-sh/setup-uv.git
synced 2026-03-27 01:37:31 +00:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
interface VariantAwareEntry {
|
|
variant?: string;
|
|
}
|
|
|
|
export function selectDefaultVariant<T extends VariantAwareEntry>(
|
|
entries: T[],
|
|
duplicateEntryDescription: string,
|
|
): T {
|
|
const firstEntry = entries[0];
|
|
if (firstEntry === undefined) {
|
|
throw new Error("selectDefaultVariant requires at least one candidate.");
|
|
}
|
|
|
|
if (entries.length === 1) {
|
|
return firstEntry;
|
|
}
|
|
|
|
const defaultEntries = entries.filter((entry) =>
|
|
isDefaultVariant(entry.variant),
|
|
);
|
|
if (defaultEntries.length === 1) {
|
|
return defaultEntries[0];
|
|
}
|
|
|
|
throw new Error(
|
|
`${duplicateEntryDescription} with variants ${formatVariants(entries)}. setup-uv currently requires a single default variant for duplicate platform entries.`,
|
|
);
|
|
}
|
|
|
|
function isDefaultVariant(variant: string | undefined): boolean {
|
|
return variant === undefined || variant === "default";
|
|
}
|
|
|
|
function formatVariants<T extends VariantAwareEntry>(entries: T[]): string {
|
|
return entries
|
|
.map((entry) => entry.variant ?? "default")
|
|
.sort((left, right) => left.localeCompare(right))
|
|
.join(", ");
|
|
}
|