typestar

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

  1. getJson envuelve fetch con chequeos de cabecera y estado.
  2. Promise.all carga el detalle de cada repo a la vez.
  3. Ordenar por estrellas imprime los cinco más activos.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 1 en Bis; paso 19 de 19 en Promesas y async.

← Anterior