CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
index.js217 linesDownload Raw Back to umd
1(function (global, factory) {2    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :3    typeof define === 'function' && define.amd ? define(['exports'], factory) :4    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.compareVersions = {}));5})(this, (function (exports) { 'use strict';6 7    const semver = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;8    const validateAndParse = (version) => {9        if (typeof version !== 'string') {10            throw new TypeError('Invalid argument expected string');11        }12        const match = version.match(semver);13        if (!match) {14            throw new Error(`Invalid argument not valid semver ('${version}' received)`);15        }16        match.shift();17        return match;18    };19    const isWildcard = (s) => s === '*' || s === 'x' || s === 'X';20    const tryParse = (v) => {21        const n = parseInt(v, 10);22        return isNaN(n) ? v : n;23    };24    const forceType = (a, b) => typeof a !== typeof b ? [String(a), String(b)] : [a, b];25    const compareStrings = (a, b) => {26        if (isWildcard(a) || isWildcard(b))27            return 0;28        const [ap, bp] = forceType(tryParse(a), tryParse(b));29        if (ap > bp)30            return 1;31        if (ap < bp)32            return -1;33        return 0;34    };35    const compareSegments = (a, b) => {36        for (let i = 0; i < Math.max(a.length, b.length); i++) {37            const r = compareStrings(a[i] || '0', b[i] || '0');38            if (r !== 0)39                return r;40        }41        return 0;42    };43 44    /**45     * Compare [semver](https://semver.org/) version strings to find greater, equal or lesser.46     * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`.47     * @param v1 - First version to compare48     * @param v2 - Second version to compare49     * @returns Numeric value compatible with the [Array.sort(fn) interface](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#Parameters).50     */51    const compareVersions = (v1, v2) => {52        // validate input and split into segments53        const n1 = validateAndParse(v1);54        const n2 = validateAndParse(v2);55        // pop off the patch56        const p1 = n1.pop();57        const p2 = n2.pop();58        // validate numbers59        const r = compareSegments(n1, n2);60        if (r !== 0)61            return r;62        // validate pre-release63        if (p1 && p2) {64            return compareSegments(p1.split('.'), p2.split('.'));65        }66        else if (p1 || p2) {67            return p1 ? -1 : 1;68        }69        return 0;70    };71 72    /**73     * Compare [semver](https://semver.org/) version strings using the specified operator.74     *75     * @param v1 First version to compare76     * @param v2 Second version to compare77     * @param operator Allowed arithmetic operator to use78     * @returns `true` if the comparison between the firstVersion and the secondVersion satisfies the operator, `false` otherwise.79     *80     * @example81     * ```82     * compare('10.1.8', '10.0.4', '>'); // return true83     * compare('10.0.1', '10.0.1', '='); // return true84     * compare('10.1.1', '10.2.2', '<'); // return true85     * compare('10.1.1', '10.2.2', '<='); // return true86     * compare('10.1.1', '10.2.2', '>='); // return false87     * ```88     */89    const compare = (v1, v2, operator) => {90        // validate input operator91        assertValidOperator(operator);92        // since result of compareVersions can only be -1 or 0 or 193        // a simple map can be used to replace switch94        const res = compareVersions(v1, v2);95        return operatorResMap[operator].includes(res);96    };97    const operatorResMap = {98        '>': [1],99        '>=': [0, 1],100        '=': [0],101        '<=': [-1, 0],102        '<': [-1],103        '!=': [-1, 1],104    };105    const allowedOperators = Object.keys(operatorResMap);106    const assertValidOperator = (op) => {107        if (typeof op !== 'string') {108            throw new TypeError(`Invalid operator type, expected string but got ${typeof op}`);109        }110        if (allowedOperators.indexOf(op) === -1) {111            throw new Error(`Invalid operator, expected one of ${allowedOperators.join('|')}`);112        }113    };114 115    /**116     * Match [npm semver](https://docs.npmjs.com/cli/v6/using-npm/semver) version range.117     *118     * @param version Version number to match119     * @param range Range pattern for version120     * @returns `true` if the version number is within the range, `false` otherwise.121     *122     * @example123     * ```124     * satisfies('1.1.0', '^1.0.0'); // return true125     * satisfies('1.1.0', '~1.0.0'); // return false126     * ```127     */128    const satisfies = (version, range) => {129        // clean input130        range = range.replace(/([><=]+)\s+/g, '$1');131        // handle multiple comparators132        if (range.includes('||')) {133            return range.split('||').some((r) => satisfies(version, r));134        }135        else if (range.includes(' - ')) {136            const [a, b] = range.split(' - ', 2);137            return satisfies(version, `>=${a} <=${b}`);138        }139        else if (range.includes(' ')) {140            return range141                .trim()142                .replace(/\s{2,}/g, ' ')143                .split(' ')144                .every((r) => satisfies(version, r));145        }146        // if no range operator then "="147        const m = range.match(/^([<>=~^]+)/);148        const op = m ? m[1] : '=';149        // if gt/lt/eq then operator compare150        if (op !== '^' && op !== '~')151            return compare(version, range, op);152        // else range of either "~" or "^" is assumed153        const [v1, v2, v3, , vp] = validateAndParse(version);154        const [r1, r2, r3, , rp] = validateAndParse(range);155        const v = [v1, v2, v3];156        const r = [r1, r2 !== null && r2 !== void 0 ? r2 : 'x', r3 !== null && r3 !== void 0 ? r3 : 'x'];157        // validate pre-release158        if (rp) {159            if (!vp)160                return false;161            if (compareSegments(v, r) !== 0)162                return false;163            if (compareSegments(vp.split('.'), rp.split('.')) === -1)164                return false;165        }166        // first non-zero number167        const nonZero = r.findIndex((v) => v !== '0') + 1;168        // pointer to where segments can be >=169        const i = op === '~' ? 2 : nonZero > 1 ? nonZero : 1;170        // before pointer must be equal171        if (compareSegments(v.slice(0, i), r.slice(0, i)) !== 0)172            return false;173        // after pointer must be >=174        if (compareSegments(v.slice(i), r.slice(i)) === -1)175            return false;176        return true;177    };178 179    /**180     * Validate [semver](https://semver.org/) version strings.181     *182     * @param version Version number to validate183     * @returns `true` if the version number is a valid semver version number, `false` otherwise.184     *185     * @example186     * ```187     * validate('1.0.0-rc.1'); // return true188     * validate('1.0-rc.1'); // return false189     * validate('foo'); // return false190     * ```191     */192    const validate = (version) => typeof version === 'string' && /^[v\d]/.test(version) && semver.test(version);193    /**194     * Validate [semver](https://semver.org/) version strings strictly. Will not accept wildcards and version ranges.195     *196     * @param version Version number to validate197     * @returns `true` if the version number is a valid semver version number `false` otherwise198     *199     * @example200     * ```201     * validate('1.0.0-rc.1'); // return true202     * validate('1.0-rc.1'); // return false203     * validate('foo'); // return false204     * ```205     */206    const validateStrict = (version) => typeof version === 'string' &&207        /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/.test(version);208 209    exports.compare = compare;210    exports.compareVersions = compareVersions;211    exports.satisfies = satisfies;212    exports.validate = validate;213    exports.validateStrict = validateStrict;214 215}));216//# sourceMappingURL=index.js.map217 
basant307/AI_Governance_Project · CoolFace