import fs from "node:fs"; async function saveTraffic() { const token = process.env.GRAPH_TOKEN; const repo = process.env.GITHUB_REPOSITORY || "devgelo-labs/astro-starter-pro"; const filePath = "./.github/data/clones.json"; const response = await fetch( `https://api.github.com/repos/${repo}/traffic/clones`, { headers: { Authorization: `Bearer ${token}` }, }, ); if (!response.ok) throw new Error(`GitHub API error: ${response.statusText}`); const apiData = await response.json(); let localData = { count: 0, uniques: 0, clones: [] }; // 1. Si el archivo ya existe, leerlo if (fs.existsSync(filePath)) { try { localData = JSON.parse(fs.readFileSync(filePath, "utf8")); } catch { console.warn( "⚠️ Warning: Error reading existing clones.json, starting fresh.", ); } } // 2. Unir (Merge) los clones nuevos con los viejos sin duplicar fechas const combinedClones = [...localData.clones]; apiData.clones.forEach((newClone) => { const index = combinedClones.findIndex( (c) => c.timestamp === newClone.timestamp, ); if (index !== -1) { // Si el día ya existe, actualizamos los números (por si subieron durante el día) combinedClones[index] = newClone; } else { // Si el día es nuevo, lo agregamos combinedClones.push(newClone); } }); // 3. Ordenar por fecha y actualizar totales globales combinedClones.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp)); const totalCount = combinedClones.reduce((sum, c) => sum + c.count, 0); const totalUniques = combinedClones.reduce((sum, c) => sum + c.uniques, 0); const finalData = { count: totalCount, uniques: totalUniques, clones: combinedClones, }; if (!fs.existsSync("./.github/data")) fs.mkdirSync("./.github/data", { recursive: true }); fs.writeFileSync(filePath, JSON.stringify(finalData, null, 2)); console.log( `✅ Historial actualizado: ${combinedClones.length} días registrados.`, ); } saveTraffic().catch((err) => { console.error(err); process.exit(1); });