import fsPromises from "fs/promises"; import { glob } from "glob"; import packageJson from "../../../../package.json"; const getPackageVersion = () => packageJson.version; const getDependenciesAsync = async (): Promise => { const pathNames = await glob("**/package.json", { ignore: "node_modules/**", cwd: "../../", absolute: true, }); const packageContents = await Promise.all(pathNames.map(async (path) => await fsPromises.readFile(path, "utf-8"))); const packageDependencies = packageContents .map((packageContent) => (JSON.parse(packageContent) as PackageJson).dependencies) .filter((dependencies) => dependencies !== undefined); let dependencies = {}; for (const dependenciesOfPackage of packageDependencies) { dependencies = { ...dependencies, ...dependenciesOfPackage }; } return dependencies; }; export const getPackageAttributesAsync = async () => { return { version: getPackageVersion(), dependencies: await getDependenciesAsync(), }; }; type PackageJsonDependencies = Record; interface PackageJson { dependencies: PackageJsonDependencies | undefined; }