Created
August 16, 2024 03:07
-
-
Save lund0n/bd68461b14bee20c0a2570b9f8f04416 to your computer and use it in GitHub Desktop.
Follow the peer deps down each package in a monorepo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env node | |
| // NOTE: I forgot to have it traverse dependencies as well as dev dependencies. | |
| // Really, it should check both if we're going to have a clean set of peer dependencies for a published package. | |
| const { getPackages } = require('@manypkg/get-packages') | |
| const process = require('node:process') | |
| const path = require('node:path') | |
| const ROOT_DIR = process.cwd() | |
| function getPeerDependencies(depName, dir, accumPeerDeps, indent = '') { | |
| const location = require.resolve(`${depName}/package.json`, { | |
| paths: [dir], | |
| }) | |
| const { name, peerDependencies = {} } = require(location) | |
| const peerDeps = Object.entries(peerDependencies) | |
| for (const [dep, version] of peerDeps) { | |
| accumPeerDeps.add(`${dep}:${version}`) | |
| console.log(`${indent} - ${dep}:${version}`) | |
| getPeerDependencies( | |
| dep, | |
| path.dirname(location), | |
| accumPeerDeps, | |
| indent + ' ' | |
| ) | |
| } | |
| } | |
| async function run() { | |
| const { packages } = await getPackages(ROOT_DIR) | |
| for (const pkg of packages) { | |
| const { dir, packageJson } = pkg | |
| const { name, peerDependencies = {} } = packageJson | |
| console.log(`-- ${name} --`) | |
| const peerDeps = Object.entries(peerDependencies) | |
| const accumPeerDeps = new Set() | |
| const indent = '' | |
| for (const [dep, version] of peerDeps) { | |
| accumPeerDeps.add(`${dep}:${version}`) | |
| console.log(`${indent} - ${dep}:${version}`) | |
| getPeerDependencies(dep, dir, accumPeerDeps, indent + ' ') | |
| } | |
| console.log(`** ACCUMULATED PEER DEPS **`) | |
| for (const accumDep of accumPeerDeps) { | |
| console.log(` * ${accumDep}`) | |
| } | |
| } | |
| } | |
| run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment