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 projectsOutputs: Project[] = []; 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(getProjectPromise(dirFullPath, dir, spinner)); } } projectsOutputs = await Promise.all(projects); spinner.succeed("Got the Data successfully"); } catch (error) { spinner.fail("Ups and Error :("); console.log(error); } return projectsOutputs; } function getProjectPromise( 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, __)); }); }); }