import { regEx } from '../../util/regex' ; import { ascendingRange , descendingRange , exactVersion , inclusiveBound , lowerBound , matchVersion , upperBound , } from './pattern' ; function getVersionParts ( input ) { const versionParts = input . split ( '-' ) ; if ( versionParts . length === 1 ) { return [ input , '' ] ; } return [ versionParts [ 0 ] , '-' + versionParts [ 1 ] ] ; } export function padZeroes ( input ) { if ( regEx ( /[~^*]/ ) . test ( input ) ) { 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 ) { if ( input . includes ( '+' ) ) { return '>=' + input . replace ( '+' , ' ' ) ; } return input ; } export function rez2npm ( input ) { 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 ) { 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 ) { return input . split ( ',' ) . map ( ( v ) => v . trim ( ) . replace ( regEx ( /[<>=]/g ) , '' ) ) . join ( '..' ) ; } export function npm2rezplus ( input ) { return input . trim ( ) . replace ( '>=' , '' ) + '+' ; }