diff --git a/scripts/list-packages.ts b/scripts/list-packages.ts new file mode 100755 index 000000000..607a7005b --- /dev/null +++ b/scripts/list-packages.ts @@ -0,0 +1,75 @@ +import path from 'path' +import fse from 'fs-extra' +import chalk from 'chalk' +import chalkTemplate from 'chalk-template' +import simpleGit from 'simple-git' + +const git = simpleGit() + +const packagesDir = path.resolve(__dirname, '../packages') + +async function main() { + // List all public packages excluding eslint-config-payload + const packageDirs = fse.readdirSync(packagesDir).filter((d) => d !== 'eslint-config-payload') + const packageDetails = await Promise.all( + packageDirs.map(async (dirName) => { + const packageJson = await fse.readJson(`${packagesDir}/${dirName}/package.json`) + const isPublic = packageJson.private !== true + if (!isPublic) return null + + // Get published version from npm + const json = await fetch(`https://registry.npmjs.org/${packageJson.name}`).then((res) => + res.json(), + ) + + const publishedVersion = json?.['dist-tags']?.latest + const publishDate = json?.time?.[publishedVersion] + + const prevGitTag = `${dirName}/${packageJson.version}` + const prevGitTagHash = await git.revparse(prevGitTag) + + const newCommits = await git.log({ + from: prevGitTagHash, + file: `packages/${dirName}`, + }) + + return { + name: packageJson.name, + newCommits: newCommits.total, + packageDir: dirName, + packagePath: `packages/${dirName}`, + publishedVersion, + publishDate, + version: packageJson.version, + } + }), + ) + console.log(chalkTemplate` + + {bold Packages:} + +${packageDetails + .map((p) => { + const name = p?.newCommits + ? chalk.bold.green(p?.packageDir.padEnd(28)) + : p?.packageDir.padEnd(28) + const publishData = `${p?.publishedVersion} at ${p?.publishDate + .split(':') + .slice(0, 2) + .join(':') + .replace('T', ' ')}` + const newCommits = `${p?.newCommits ? `${chalk.bold.green(p?.newCommits)} new commits` : ''}` + + return ` ${name}${publishData} ${newCommits}` + }) + .join('\n')} + +`) +} + +// console.log(packageNames) + +main().catch((error) => { + console.error(error) + process.exit(1) +})