fetch-repos.js en JavaScript
Traer los repos de un usuario en concurrencia y clasificarlos por estrellas.
#!/usr/bin/env node
// Trae en paralelo los repos públicos de un usuario y muestra los más activos.
const API = "https://api.github.com";
async function getJson(url) {
const response = await fetch(url, {
headers: { Accept: "application/vnd.github+json" },
});
if (!response.ok) {
throw new Error(`${url} -> ${response.status}`);
}
return response.json();
}
async function main() {
const user = process.argv[2] ?? "torvalds";
const repos = await getJson(`${API}/users/${user}/repos?per_page=10`);
const detailed = await Promise.all(
repos.map((repo) => getJson(`${API}/repos/${repo.full_name}`)),
);
const busiest = detailed
.sort((a, b) => b.stargazers_count - a.stargazers_count)
.slice(0, 5);
console.log(`top repos for ${user}:`);
for (const repo of busiest) {
const stars = String(repo.stargazers_count).padStart(7);
console.log(`${stars} ${repo.name} (${repo.language ?? "n/a"})`);
}
}
main().catch((error) => {
console.error(error.message);
process.exitCode = 1;
});
Cómo funciona
getJsonenvuelve fetch con chequeos de cabecera y estado.Promise.allcarga el detalle de cada repo a la vez.- Ordenar por estrellas imprime los cinco más activos.
Palabras clave y builtins usados aquí
PromiseStringasyncawaitcatchconstforfunctionifofreturnthrow
El intento, en números
- Líneas
- 38
- Caracteres a escribir
- 980
- Tokens
- 259
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 141 segundos.
Paso 1 de 1 en Bis; paso 19 de 19 en Promesas y async.