import { shouldSkipPackage } from '@changesets/should-skip-package'; import { Config } from '@changesets/types'; import { Package } from '@manypkg/get-packages'; import { InternalRelease } from './types'; import { getCurrentHighestVersion, getHighestReleaseType } from './utils'; export default function matchFixedConstraint( releases: Map, packagesByName: Map, config: Config, ): boolean { let updated = false; for (let fixedPackages of config.fixed) { let releasingFixedPackages = [...releases.values()].filter( (release) => fixedPackages.includes(release.name) && release.type !== 'none', ); if (releasingFixedPackages.length === 0) continue; let highestReleaseType = getHighestReleaseType(releasingFixedPackages); let highestVersion = getCurrentHighestVersion( fixedPackages, packagesByName, ); // Finally, we update the packages so all of them are on the highest version for (let pkgName of fixedPackages) { if ( shouldSkipPackage(packagesByName.get(pkgName)!, { ignore: config.ignore, allowPrivatePackages: config.privatePackages.version, }) ) { continue; } let release = releases.get(pkgName); if (!release) { updated = true; releases.set(pkgName, { name: pkgName, type: highestReleaseType, oldVersion: highestVersion, changesets: [], }); continue; } if (release.type !== highestReleaseType) { updated = true; release.type = highestReleaseType; } if (release.oldVersion !== highestVersion) { updated = true; release.oldVersion = highestVersion; } } } return updated; }