astro-ghostcms/.pnpm-store/v3/files/d7/e7a059d8d0d721c4c16706d1efd...

52 lines
1.3 KiB
Plaintext

/**
* Shared utility functions and business logic
*/
import semverSatisfies from "semver/functions/satisfies";
import { VersionType } from "@changesets/types";
const bumpTypes = ["none", "patch", "minor", "major"];
/* Converts a bump type into a numeric level to indicate order */
function getBumpLevel(type: VersionType) {
const level = bumpTypes.indexOf(type);
if (level < 0) {
throw new Error(`Unrecognised bump type ${type}`);
}
return level;
}
export function shouldUpdateDependencyBasedOnConfig(
release: { version: string; type: VersionType },
{
depVersionRange,
depType,
}: {
depVersionRange: string;
depType:
| "dependencies"
| "devDependencies"
| "peerDependencies"
| "optionalDependencies";
},
{
minReleaseType,
onlyUpdatePeerDependentsWhenOutOfRange,
}: {
minReleaseType: "patch" | "minor";
onlyUpdatePeerDependentsWhenOutOfRange: boolean;
}
): boolean {
if (!semverSatisfies(release.version, depVersionRange)) {
// Dependencies leaving semver range should always be updated
return true;
}
const minLevel = getBumpLevel(minReleaseType);
let shouldUpdate = getBumpLevel(release.type) >= minLevel;
if (depType === "peerDependencies") {
shouldUpdate = !onlyUpdatePeerDependentsWhenOutOfRange;
}
return shouldUpdate;
}