CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
satisfies.js66 linesDownload Raw Back to esm
1import { compare } from './compare.js';2import { compareSegments, validateAndParse } from './utils.js';3/**4 * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.5 *6 * @param version Version number to match7 * @param range Range pattern for version8 * @returns `true` if the version number is within the range, `false` otherwise.9 *10 * @example11 * ```12 * satisfies('1.1.0', '^1.0.0'); // return true13 * satisfies('1.1.0', '~1.0.0'); // return false14 * ```15 */16export const satisfies = (version, range) => {17    // clean input18    range = range.replace(/([><=]+)\s+/g, '$1');19    // handle multiple comparators20    if (range.includes('||')) {21        return range.split('||').some((r) => satisfies(version, r));22    }23    else if (range.includes(' - ')) {24        const [a, b] = range.split(' - ', 2);25        return satisfies(version, `>=${a} <=${b}`);26    }27    else if (range.includes(' ')) {28        return range29            .trim()30            .replace(/\s{2,}/g, ' ')31            .split(' ')32            .every((r) => satisfies(version, r));33    }34    // if no range operator then "="35    const m = range.match(/^([<>=~^]+)/);36    const op = m ? m[1] : '=';37    // if gt/lt/eq then operator compare38    if (op !== '^' && op !== '~')39        return compare(version, range, op);40    // else range of either "~" or "^" is assumed41    const [v1, v2, v3, , vp] = validateAndParse(version);42    const [r1, r2, r3, , rp] = validateAndParse(range);43    const v = [v1, v2, v3];44    const r = [r1, r2 !== null && r2 !== void 0 ? r2 : 'x', r3 !== null && r3 !== void 0 ? r3 : 'x'];45    // validate pre-release46    if (rp) {47        if (!vp)48            return false;49        if (compareSegments(v, r) !== 0)50            return false;51        if (compareSegments(vp.split('.'), rp.split('.')) === -1)52            return false;53    }54    // first non-zero number55    const nonZero = r.findIndex((v) => v !== '0') + 1;56    // pointer to where segments can be >=57    const i = op === '~' ? 2 : nonZero > 1 ? nonZero : 1;58    // before pointer must be equal59    if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0)60        return false;61    // after pointer must be >=62    if (compareSegments(v.slice(i), r.slice(i)) === -1)63        return false;64    return true;65};66//# sourceMappingURL=satisfies.js.map
basant307/AI_Governance_Project · CoolFace