import fs from "fs/promises"; import ora from "ora"; import type { Config, Project } from "../types.js"; import { getConfig } from "../utils/config.js"; import { exec } from "child_process"; export async function checkDependencies() { const config: Config = await getConfig(); let projectAudits = []; let projects: Promise[] = []; const spinner = ora("Getting all Project Data").start(); try { const dirs = await fs.readdir(config.path); for (let dir of dirs) { let dirFullPath = `${config.path}${dir}`; const projectDir = await fs.readdir(dirFullPath); if (projectDir.includes("package.json")) { projects.push(getAuditPromise(dirFullPath, dir, spinner)); } } const results = await Promise.allSettled(projects); for (const result of results) { if (result.status === "fulfilled") { projectAudits.push(result.value); } else { console.log("audit failed:", result.reason); } } spinner.succeed("Got the Data successfully"); } catch (error) { spinner.fail("Ups and Error :("); console.log(error); } return projectAudits; } function getAuditPromise( path: string, dirname: string, spinner: any, ): Promise { return new Promise(async (resolve, _) => { spinner.text = "pulling latest"; await promiseExec(`cd "${path}" && git pull `, () => {}); spinner.text = "getting audit"; promiseExec( `cd "${path}" && npm audit --json`, (_: any, stdout: string) => { let output = JSON.parse(stdout); let project: Project = { projectName: dirname, ...output }; resolve(project); }, ); }); } function promiseExec(cmd: string, callback: any) { return new Promise((resolve, _) => { exec(cmd, (_, stdout, __) => { resolve(callback(_, stdout, __)); }); }); }