import { exec } from "child_process"; import fs from "fs"; type App = { id: string; name: string; description: string; source: string; port: number; }; const getAppsList = async () => { const apps: Record = {}; const appNames = fs.readdirSync(__dirname + "/../../apps"); for (const app of appNames) { try { const appConfig = fs.readFileSync( `${__dirname}/../../apps/${app}/config.json`, "utf8", ); const appConfigJson = JSON.parse(appConfig); if (!appConfigJson.deprecated) { apps[app] = { id: appConfigJson.id, name: appConfigJson.name, description: appConfigJson.short_desc, source: appConfigJson.source, port: appConfigJson.port, }; } } catch (e) { console.error(`Error parsing config for ${app}`); } } return { apps }; }; const appToReadme = async (app: App) => { return `| [${app.name}](${app.source}) | ${app.description} | ${app.port} |`; }; const writeToReadme = (appsList: string, count: number) => { const baseReadme = fs.readFileSync( __dirname + "/../../templates/README.md", "utf8", ); let finalReadme = baseReadme.replace("", appsList); finalReadme = finalReadme.replace("", count.toString()); fs.writeFileSync(__dirname + "/../../README.md", finalReadme); }; const main = async () => { const apps = await getAppsList(); const appKeys = Object.keys(apps["apps"]); let appsList = ""; for (let i = 0; i < appKeys.length; i++) { const appFinal = await appToReadme(apps["apps"][appKeys[i]]); appsList = appsList + (appFinal + "\n"); } writeToReadme(appsList, appKeys.length); exec( `npx prettier ${__dirname + "/../../README.md"} --write`, (stdout, stderr) => { if (stderr) { console.error(stderr); } else if (stdout) { console.log(stdout); } }, ); }; main();