import { PackageGroup, VersionType } from '@changesets/types'; import { Package } from '@manypkg/get-packages'; import semverGt from 'semver/functions/gt'; import { InternalRelease } from './types'; export function getHighestReleaseType( releases: InternalRelease[], ): VersionType { if (releases.length === 0) { throw new Error( `Large internal Changesets error when calculating highest release type in the set of releases. Please contact the maintainers`, ); } let highestReleaseType: VersionType = 'none'; for (let release of releases) { switch (release.type) { case 'major': return 'major'; case 'minor': highestReleaseType = 'minor'; break; case 'patch': if (highestReleaseType === 'none') { highestReleaseType = 'patch'; } break; } } return highestReleaseType; } export function getCurrentHighestVersion( packageGroup: PackageGroup, packagesByName: Map, ): string { let highestVersion: string | undefined; for (let pkgName of packageGroup) { let pkg = packagesByName.get(pkgName); if (!pkg) { console.error( `FATAL ERROR IN CHANGESETS! We were unable to version for package group: ${pkgName} in package group: ${packageGroup.toString()}`, ); throw new Error(`fatal: could not resolve linked packages`); } if ( highestVersion === undefined || semverGt(pkg.packageJson.version, highestVersion) ) { highestVersion = pkg.packageJson.version; } } return highestVersion!; }