export type Credito = { arquivo: string; origem: string; autor: string; licenca: string; }; export const LICENCAS_ACEITAS = ["CC0-1.0", "propria"] as const; function errosDoCredito({ arquivo, origem, autor, licenca, }: Credito): string[] { const erros: string[] = []; if (!(LICENCAS_ACEITAS as readonly string[]).includes(licenca)) { erros.push(`${arquivo}: licença não aceita (${licenca}).`); } if (licenca === "CC0-1.0" && !origem.startsWith("https://")) { erros.push(`${arquivo}: a origem de CC0-1.0 deve começar com https://.`); } if (autor.trim() === "") erros.push(`${arquivo}: autor vazio.`); return erros; } export function validarCreditos( arquivos: string[], creditos: Credito[], ): string[] { const erros: string[] = []; const vistos = new Set(); for (const credito of creditos) { if (vistos.has(credito.arquivo)) erros.push(`${credito.arquivo}: creditado mais de uma vez.`); vistos.add(credito.arquivo); if (!arquivos.includes(credito.arquivo)) erros.push(`${credito.arquivo}: crédito de arquivo que não existe.`); erros.push(...errosDoCredito(credito)); } for (const arquivo of arquivos) { if (!vistos.has(arquivo)) erros.push(`${arquivo}: arquivo sem crédito.`); } return erros; }