mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-25 15:01:49 +00:00
73b90e958b
refactor: prefer templates rather than `+`
115 lines
3.0 KiB
TypeScript
115 lines
3.0 KiB
TypeScript
import { regEx } from '../../../util/regex.ts';
|
|
import {
|
|
ascendingRange,
|
|
descendingRange,
|
|
exactVersion,
|
|
inclusiveBound,
|
|
lowerBound,
|
|
matchVersion,
|
|
upperBound,
|
|
} from './pattern.ts';
|
|
|
|
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('>=', '')}+`;
|
|
}
|