import { fetch } from 'undici'; import { promises as fs } from 'fs'; import cliProgress from 'cli-progress'; export async function landingPage(API_URL) { const progressBar = new cliProgress.SingleBar({ format: 'Generating landing page | {bar} | {percentage}% || {value}/{total} mods', barCompleteChar: '\u2588', barIncompleteChar: '\u2591', hideCursor: true, }); progressBar.start(100, 0); // Fetch top 100 mods const response = await ( await fetch(API_URL + 'search?limit=100&facets=[["project_type:mod"]]') ).json(); // Simplified array with the format: ['id', 'slug', 'icon_extension'] const compressed = response.hits .filter((project) => project.icon_url) .map((project) => { progressBar.increment(); return [ project.project_id, project.slug || '', project.icon_url.match(/\.[0-9a-z]+$/i)[0].substring(1), ]; }); // Write JSON file await fs.writeFile( './generated/landingPage.json', JSON.stringify({ mods: compressed, random: Math.random(), }) ); progressBar.stop(); }