Skip to content

Instantly share code, notes, and snippets.

@eddiecooro
Last active October 6, 2023 15:15
Show Gist options
  • Save eddiecooro/e7727f903ea368a0162a241bf20a343d to your computer and use it in GitHub Desktop.
Save eddiecooro/e7727f903ea368a0162a241bf20a343d to your computer and use it in GitHub Desktop.
An script for updating every package of an ecosystem, while locking the main package to a specific version.
const pacote = require("pacote")
const semver = require("semver")
const mainPackageName = "Name of the main package. e.g. gatsby";
const mainPackageVersion = "The version of the main package to lock to. e.g. 3.0.0";
const packages = [
// List of the ecosystem packages to check for compatibality with the main package.
]
packages.forEach(package => {
pacote
.packument(package)
.then(data => {
const versions = Object.keys(data.versions)
let latestCompatibleVersion = null
for (let i = versions.length - 1; i >= 0; i--) {
const version = versions[i]
const peerDependencies = data.versions[version].peerDependencies
const dependencies = data.versions[version].dependencies
if (
(peerDependencies &&
peerDependencies[mainPackageName] &&
semver.satisfies(mainPackageVersion, peerDependencies[mainPackageName])) ||
(dependencies &&
dependencies[mainPackageName] &&
semver.satisfies(mainPackageVersion, dependencies[mainPackageName]))
) {
latestCompatibleVersion = version
break
}
}
if (latestCompatibleVersion) {
console.log(`${package}: ${latestCompatibleVersion}`)
}
})
.catch(err => {
console.error(`Failed to fetch data for package: ${package}`, err)
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment