Last active
October 6, 2023 15:15
-
-
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.
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
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