ipsambeatae
Version:
Shared dependencies of Compass, the MongoDB extension for VSCode and MongoSH
64 lines (52 loc) • 1.4 kB
text/typescript
import semver from 'semver';
export function intersects(range: string[]) {
for (const [idx, v1] of Object.entries(range)) {
for (const v2 of range.slice(Number(idx) + 1)) {
try {
if (!semver.intersects(v1, v2)) {
return false;
}
} catch (e) {
return false;
}
}
}
return true;
}
export function calculateReplacements(ranges: string[]): Map<string, string> {
const replacements = new Map();
const highestRange = getHighestRange(ranges);
for (const range of ranges) {
try {
if (semver.subset(highestRange ?? '', range)) {
replacements.set(range, highestRange);
}
} catch (e) {
// Range is probably not valid, let's proceed as if there is no
// replacement for it
}
}
return replacements;
}
export function getHighestRange(ranges: string[]): string | null {
const validRanges = ranges.filter(
(range) => semver.validRange(range) && range !== '*'
);
const sortedRanges = validRanges.sort((v1, v2) => {
const res = semver.compare(
semver.minVersion(v2) ?? '',
semver.minVersion(v1) ?? ''
);
if (res === 1 || res === -1) {
return res;
}
if (semver.valid(v1) && !semver.valid(v2)) {
return 1;
}
if (!semver.valid(v1) && semver.valid(v2)) {
return -1;
}
return 0;
});
return sortedRanges[0] || null;
}