renovate/lib/modules/versioning/rez/transform.ts

115 lines
3.0 KiB
TypeScript

import { regEx } from '../../../util/regex';
import {
ascendingRange,
descendingRange,
exactVersion,
inclusiveBound,
lowerBound,
matchVersion,
upperBound,
} from './pattern';
function getVersionParts(input: string): [string, string] {
const versionParts = input.split('-');
if (versionParts.length === 1) {
return [input, ''];
}
return [versionParts[0], '-' + versionParts[1]];
}
export function padZeroes(input: string): string {
if (regEx(/[~^*]/).test(input)) {
// ignore ranges
return input;
}
const [output, stability] = getVersionParts(input);
const sections = output.split('.');
while (sections.length < 3) {
sections.push('0');
}
return sections.join('.') + stability;
}
function plus2npm(input: string): string {
if (input.includes('+')) {
return '>=' + input.replace('+', ' ');
}
return input;
}
export function rez2npm(input: string): string {
if (matchVersion.test(input)) {
return input;
}
if (exactVersion.test(input)) {
return input.replace('==', '=');
}
if (inclusiveBound.test(input)) {
return '>=' + input.replace(regEx(/\.\./g), ' <');
}
if (lowerBound.test(input)) {
return plus2npm(input);
}
if (upperBound.test(input)) {
return input;
}
const matchAscRange = ascendingRange.exec(input);
if (matchAscRange?.groups) {
const lowerBoundAsc = matchAscRange.groups.range_lower_asc;
const upperBoundAsc = matchAscRange.groups.range_upper_asc;
return plus2npm(lowerBoundAsc) + ' ' + plus2npm(upperBoundAsc);
}
const matchDscRange = descendingRange.exec(input);
if (matchDscRange?.groups) {
const upperBoundDesc = matchDscRange.groups.range_upper_desc;
const lowerBoundDesc = matchDscRange.groups.range_lower_desc;
return plus2npm(lowerBoundDesc) + ' ' + plus2npm(upperBoundDesc);
}
return input;
}
export function rez2pep440(input: string): string {
if (matchVersion.test(input)) {
return input;
}
if (exactVersion.test(input)) {
return input;
}
if (inclusiveBound.test(input)) {
return '>=' + input.replace(regEx(/\.\./g), ', <');
}
if (lowerBound.test(input)) {
return plus2npm(input);
}
if (upperBound.test(input)) {
return input;
}
const matchAscRange = ascendingRange.exec(input);
if (matchAscRange?.groups) {
const lowerBoundAsc = matchAscRange.groups.range_lower_asc;
const upperBoundAsc = matchAscRange.groups.range_upper_asc;
return plus2npm(lowerBoundAsc) + ', ' + plus2npm(upperBoundAsc);
}
const matchDscRange = descendingRange.exec(input);
if (matchDscRange?.groups) {
const upperBoundDesc = matchDscRange.groups.range_upper_desc;
const lowerBoundDesc = matchDscRange.groups.range_lower_desc;
return plus2npm(lowerBoundDesc) + ', ' + plus2npm(upperBoundDesc);
}
return input;
}
export function pep4402rezInclusiveBound(input: string): string {
return input
.split(',')
.map((v) => v.trim().replace(regEx(/[<>=]/g), ''))
.join('..');
}
export function npm2rezplus(input: string): string {
return input.trim().replace('>=', '') + '+';
}