Skip to content
Snippets Groups Projects
Unverified Commit b04d4722 authored by Sergei Zharinov's avatar Sergei Zharinov Committed by GitHub
Browse files

feat(pep440): Implement isLessThanRange function (#9915)

parent 87fa48db
No related branches found
No related tags found
No related merge requests found
......@@ -178,3 +178,38 @@ describe('pep440.getNewValue()', () => {
expect(invalid).toEqual('==1.2.3');
});
});
describe('pep.isLessThanRange()', () => {
test.each([
['>= 1.0.0, < 2.0.0', '0.9.9.9', true],
['>= 1.0.0, < 2.0.0', '1.0.0a0', true],
['> 1.0.0, < 2.0.0', '1.0.0.0', true],
['> 1.0.0, < 2.0.0', '2.0.1.0', false],
['> 1.0.0, < 2.0.0', '2.0.0.0', false],
['> 1.0.0, < 2.0.0', '2.0.0a0', false],
['== 1.2.3', '1.2.2.9', true],
['== 1.2.3', '1.2.3a0', true],
['== 1.2.3', '1.2.3.0', false],
['== 1.2.3', '1.2.3.1', false],
['== 1.2.3', '1.2.4a0', false],
['!= 1.2.3', '1.2.2.9', false],
['!= 1.2.3', '1.2.3.0', false],
['!= 1.2.3', '1.2.3.1', false],
['< 1.0.0', '0.0.1', false],
['< 1.0.0', '1.0.0', false],
['< 1.0.0', '2.0.0', false],
['<= 1.0.0', '0.0.1', false],
['<= 1.0.0', '1.0.0', false],
['<= 1.0.0', '2.0.0', false],
['< 1.0.0, > 2.0.0', '0.0.1', true], // fixme (maybe)
['< 1.0.0, > 2.0.0', '3.0.0', false],
])(`%s\t%s\t%s`, (range, version, expected) => {
expect(pep440.isLessThanRange(version, range)).toBe(expected);
});
});
import * as pep440 from '@renovate/pep440';
import { filter } from '@renovate/pep440/lib/specifier';
import type { VersioningApi } from '../types';
import { getNewValue } from './range';
import { getNewValue, isLessThanRange } from './range';
export const id = 'pep440';
export const displayName = 'PEP440';
......@@ -69,6 +69,7 @@ export const api: VersioningApi = {
minSatisfyingVersion,
getNewValue,
sortVersions,
isLessThanRange,
};
export default api;
import { gte, lte, satisfies } from '@renovate/pep440';
import { gte, lt, lte, satisfies } from '@renovate/pep440';
import { parse as parseRange } from '@renovate/pep440/lib/specifier';
import { parse as parseVersion } from '@renovate/pep440/lib/version';
import { logger } from '../../logger';
......@@ -154,3 +154,38 @@ export function getNewValue({
return result;
}
export function isLessThanRange(input: string, range: string): boolean {
try {
let invertResult = true;
const results = range
.split(',')
.map((x) =>
x
.replace(/\s*/g, '')
.split(/(~=|==|!=|<=|>=|<|>|===)/)
.slice(1)
)
.map(([op, version]) => {
if (['!=', '<=', '<'].includes(op)) {
return true;
}
invertResult = false;
if (['~=', '==', '>=', '==='].includes(op)) {
return lt(input, version);
}
if (op === '>') {
return lte(input, version);
}
// istanbul ignore next
return false;
});
const result = results.every((res) => res === true);
return invertResult ? !result : result;
} catch (err) /* istanbul ignore next */ {
return false;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment