71 lines
3.7 KiB
JavaScript
71 lines
3.7 KiB
JavaScript
|
|
import { A as LOOSE_PLAIN, D as GREATER_LESS_THAN, E as FULL_PLAIN, F as safeRegex, S as tryParse, a as compareParsed, x as parse, y as formatComparableVersion } from "./comparison-CmVirWIW.js";
|
||
|
|
//#region src/comparator/parse.ts
|
||
|
|
const STRICT_COMPARATOR = safeRegex(String.raw`^${GREATER_LESS_THAN}\s*(${FULL_PLAIN})$|^$`);
|
||
|
|
const LOOSE_COMPARATOR = safeRegex(String.raw`^${GREATER_LESS_THAN}\s*(${LOOSE_PLAIN})$|^$`);
|
||
|
|
function formatComparator(comparator) {
|
||
|
|
return comparator.version ? `${comparator.operator}${formatComparableVersion(comparator.version)}` : "";
|
||
|
|
}
|
||
|
|
function parseComparator(comparator, options = {}) {
|
||
|
|
if (typeof comparator !== "string") return comparator;
|
||
|
|
const normalized = comparator.trim().replaceAll(/\s+/g, " ");
|
||
|
|
const match = normalized.match(options.loose ? LOOSE_COMPARATOR : STRICT_COMPARATOR);
|
||
|
|
if (!match) throw new TypeError(`Invalid comparator: ${normalized}`);
|
||
|
|
const operator = match[1] === "=" ? "" : match[1] || "";
|
||
|
|
const version = match[2] ? parse(match[2], options) : null;
|
||
|
|
return {
|
||
|
|
operator,
|
||
|
|
options,
|
||
|
|
value: version ? `${operator}${formatComparableVersion(version)}` : "",
|
||
|
|
version
|
||
|
|
};
|
||
|
|
}
|
||
|
|
function tryParseComparator(comparator, options = {}) {
|
||
|
|
try {
|
||
|
|
return typeof comparator === "string" ? parseComparator(comparator, options) : comparator;
|
||
|
|
} catch {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
//#endregion
|
||
|
|
//#region src/comparator/set.ts
|
||
|
|
function testParsedComparator(comparator, version) {
|
||
|
|
if (!comparator.version) return true;
|
||
|
|
const comparison = compareParsed(version, comparator.version);
|
||
|
|
switch (comparator.operator) {
|
||
|
|
case "": return comparison === 0;
|
||
|
|
case ">": return comparison > 0;
|
||
|
|
case ">=": return comparison >= 0;
|
||
|
|
case "<": return comparison < 0;
|
||
|
|
case "<=": return comparison <= 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
function testComparatorVersion(comparator, version) {
|
||
|
|
const parsed = tryParse(version, comparator.options);
|
||
|
|
return parsed ? testParsedComparator(comparator, parsed) : false;
|
||
|
|
}
|
||
|
|
function comparatorAllowsPrerelease(comparator, version) {
|
||
|
|
const allowed = comparator.version;
|
||
|
|
return allowed !== null && !!allowed.prerelease?.length && allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch;
|
||
|
|
}
|
||
|
|
function testComparatorSet(set, version, options) {
|
||
|
|
if (set.some((comparator) => !testParsedComparator(comparator, version))) return false;
|
||
|
|
return !version.prerelease?.length || !!options.includePrerelease || set.some((comparator) => comparatorAllowsPrerelease(comparator, version));
|
||
|
|
}
|
||
|
|
function parsedComparatorsIntersect(left, right, options = {}) {
|
||
|
|
if (!left.version || !right.version) return true;
|
||
|
|
if (left.operator === "") return testComparatorSet([right], left.version, options);
|
||
|
|
if (right.operator === "") return testComparatorSet([left], right.version, options);
|
||
|
|
const leftValue = formatComparator(left);
|
||
|
|
const rightValue = formatComparator(right);
|
||
|
|
if (options.includePrerelease && (leftValue === "<0.0.0-0" || rightValue === "<0.0.0-0")) return false;
|
||
|
|
if (!options.includePrerelease && (leftValue.startsWith("<0.0.0") || rightValue.startsWith("<0.0.0"))) return false;
|
||
|
|
if (left.operator.startsWith(">") && right.operator.startsWith(">")) return true;
|
||
|
|
if (left.operator.startsWith("<") && right.operator.startsWith("<")) return true;
|
||
|
|
const comparison = compareParsed(left.version, right.version);
|
||
|
|
if (comparison === 0 && left.operator.includes("=") && right.operator.includes("=")) return true;
|
||
|
|
if (comparison < 0 && left.operator.startsWith(">") && right.operator.startsWith("<")) return true;
|
||
|
|
return comparison > 0 && left.operator.startsWith("<") && right.operator.startsWith(">");
|
||
|
|
}
|
||
|
|
//#endregion
|
||
|
|
export { testParsedComparator as a, tryParseComparator as c, testComparatorVersion as i, parsedComparatorsIntersect as n, formatComparator as o, testComparatorSet as r, parseComparator as s, comparatorAllowsPrerelease as t };
|