Files
portifolio-evandrodevbr/lib/jogo/creditos.ts
T
evandro 67b32fcab3
CI / audit (push) Successful in 10m48s
CI / verify (push) Successful in 19m2s
CI / deploy (push) Successful in 2m14s
CI / e2e (push) Failing after 36m15s
feat(jogo): expediente dos mortos, jogo de zumbis em primeira pessoa
Etapa 1 inteira (logica com 100% de cobertura, cena 3D, toque, sons, bancada de desempenho, e2e) e a base da etapa 2 (mapa novo no Tiled, texturas, imagens dos itens, sons conferidos, golpe recortado e medido). Pagina /jogo fora do menu e do sitemap ate a medicao no celular.
2026-11-10 19:37:10 -03:00

46 lines
1.3 KiB
TypeScript

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<string>();
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;
}