diff --git a/lib/versioning/cargo/index.ts b/lib/versioning/cargo/index.ts index 3c35d50990c1480363cae17ec3ecbb8800b3c0b8..99b3beb4d5e112faa9e417cb79f46525545993f2 100644 --- a/lib/versioning/cargo/index.ts +++ b/lib/versioning/cargo/index.ts @@ -1,4 +1,5 @@ import { logger } from '../../logger'; +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import { api as npm } from '../npm'; import type { NewValueConfig, VersioningApi } from '../types'; @@ -9,7 +10,12 @@ export const urls = [ 'https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html', ]; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; const isVersion = (input: string): boolean => npm.isVersion(input); diff --git a/lib/versioning/composer/index.ts b/lib/versioning/composer/index.ts index 4e29b5dfbc318c5790a90d52e343f83d011b78fa..0882a254d97eed1d1d74da06ed599689b7f72016 100644 --- a/lib/versioning/composer/index.ts +++ b/lib/versioning/composer/index.ts @@ -1,6 +1,7 @@ import semver from 'semver'; import { parseRange } from 'semver-utils'; import { logger } from '../../logger'; +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import { api as npm } from '../npm'; import type { NewValueConfig, VersioningApi } from '../types'; @@ -14,9 +15,9 @@ export const urls = [ 'https://semver.mwl.be', ]; export const supportsRanges = true; -export const supportedRangeStrategies = [ +export const supportedRangeStrategies: RangeStrategy[] = [ 'bump', - 'extend', + 'widen', 'pin', 'replace', 'update-lockfile', diff --git a/lib/versioning/conan/index.ts b/lib/versioning/conan/index.ts index a27ffae2c15df60a504c5925f789f119b3c5e8af..6426bcedb21f9aa0fcc878e09ac8d7f15c9776e6 100644 --- a/lib/versioning/conan/index.ts +++ b/lib/versioning/conan/index.ts @@ -1,4 +1,5 @@ import * as semver from 'semver'; +import type { RangeStrategy } from '../../types/versioning'; import { api as looseAPI } from '../loose'; import type { NewValueConfig, VersioningApi } from '../types'; import { @@ -26,7 +27,12 @@ export const urls = [ 'https://docs.conan.io/en/latest/versioning/version_ranges.html#version-ranges', ]; export const supportsRanges = true; -export const supportedRangeStrategies = ['auto', 'bump', 'widen', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'auto', + 'bump', + 'widen', + 'replace', +]; const MIN = 1; const MAX = -1; diff --git a/lib/versioning/gradle/index.ts b/lib/versioning/gradle/index.ts index 63fd55ae421a08547aa93b309e296ed1f0a86367..647dfaaa998ecffb820fe7a50420c66e427ff653 100644 --- a/lib/versioning/gradle/index.ts +++ b/lib/versioning/gradle/index.ts @@ -1,3 +1,4 @@ +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import type { NewValueConfig, VersioningApi } from '../types'; import { @@ -17,7 +18,7 @@ export const urls = [ 'https://docs.gradle.org/current/userguide/single_versions.html#version_ordering', ]; export const supportsRanges = true; -export const supportedRangeStrategies = ['pin']; +export const supportedRangeStrategies: RangeStrategy[] = ['pin']; const equals = (a: string, b: string): boolean => compare(a, b) === 0; diff --git a/lib/versioning/hashicorp/index.ts b/lib/versioning/hashicorp/index.ts index c963e84f5d9d8ee8e59e0a341945a0cbcaecf469..d44937ff833f35bbb187e3a235382211ab5e7031 100644 --- a/lib/versioning/hashicorp/index.ts +++ b/lib/versioning/hashicorp/index.ts @@ -1,3 +1,4 @@ +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import { api as npm } from '../npm'; import type { NewValueConfig, VersioningApi } from '../types'; @@ -8,7 +9,12 @@ export const urls = [ 'https://www.terraform.io/docs/configuration/terraform.html#specifying-a-required-terraform-version', ]; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; function hashicorp2npm(input: string): string { // The only case incompatible with semver is a "short" ~>, e.g. ~> 1.2 diff --git a/lib/versioning/helm/index.ts b/lib/versioning/helm/index.ts index a05de053fd359be3057b722aff3b4f898fcaca41..cb6f53f742dcdd55c0fe6c8c7e23ed921abb79a9 100644 --- a/lib/versioning/helm/index.ts +++ b/lib/versioning/helm/index.ts @@ -1,3 +1,4 @@ +import type { RangeStrategy } from '../../types/versioning'; import { api as npm } from '../npm'; import type { VersioningApi } from '../types'; @@ -9,9 +10,9 @@ export const urls = [ 'https://github.com/Masterminds/semver#basic-comparisons', ]; export const supportsRanges = true; -export const supportedRangeStrategies = [ +export const supportedRangeStrategies: RangeStrategy[] = [ 'bump', - 'extend', + 'widen', 'pin', 'replace', 'widen', diff --git a/lib/versioning/hex/index.ts b/lib/versioning/hex/index.ts index 08b195affb1a72953671f298c77a3f60399d60ef..cb43787797fa4e939d72b83ef7b66ffdcd7f69e0 100644 --- a/lib/versioning/hex/index.ts +++ b/lib/versioning/hex/index.ts @@ -1,3 +1,4 @@ +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import { api as npm } from '../npm'; import type { NewValueConfig, VersioningApi } from '../types'; @@ -6,7 +7,12 @@ export const id = 'hex'; export const displayName = 'Hex'; export const urls = ['https://hexdocs.pm/elixir/Version.html']; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; function hex2npm(input: string): string { return input diff --git a/lib/versioning/ivy/index.ts b/lib/versioning/ivy/index.ts index 0557cc4864abfeed6490f1ba47144d19dd0534f6..4dd8fdfb2f14313265bfe4c90dfd9a31a9c9504f 100644 --- a/lib/versioning/ivy/index.ts +++ b/lib/versioning/ivy/index.ts @@ -1,3 +1,4 @@ +import type { RangeStrategy } from '../../types/versioning'; import maven from '../maven'; import { TYPE_QUALIFIER, @@ -17,7 +18,12 @@ export const id = 'ivy'; export const displayName = 'Ivy'; export const urls = ['https://ant.apache.org/ivy/']; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; // eslint-disable-next-line @typescript-eslint/unbound-method const { diff --git a/lib/versioning/maven/index.ts b/lib/versioning/maven/index.ts index f4c8301c1345dfd2b9cdc53459513c55f459e018..219cc5295e2bcad7175de3be44c422e52addd3aa 100644 --- a/lib/versioning/maven/index.ts +++ b/lib/versioning/maven/index.ts @@ -1,3 +1,4 @@ +import type { RangeStrategy } from '../../types/versioning'; import type { NewValueConfig, VersioningApi } from '../types'; import { EXCLUDING_POINT, @@ -22,7 +23,12 @@ export const urls = [ 'https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html', ]; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; const equals = (a: string, b: string): boolean => compare(a, b) === 0; diff --git a/lib/versioning/npm/index.ts b/lib/versioning/npm/index.ts index 9736b893dc55cdd4673566ffa8d0790f6bb38536..2a87ed91fa777e07574660985e769d5a0c4d780a 100644 --- a/lib/versioning/npm/index.ts +++ b/lib/versioning/npm/index.ts @@ -1,5 +1,6 @@ import semver from 'semver'; import stable from 'semver-stable'; +import type { RangeStrategy } from '../../types/versioning'; import type { VersioningApi } from '../types'; import { getNewValue } from './range'; @@ -12,7 +13,12 @@ export const urls = [ 'https://semver.npmjs.com/', ]; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; const { compare: sortVersions, diff --git a/lib/versioning/pep440/index.ts b/lib/versioning/pep440/index.ts index b9bf2890f5862d88a0d7de63784d91eb8e01099f..d395482b1b0baf551ae4cdb9ddf082b9150d6722 100644 --- a/lib/versioning/pep440/index.ts +++ b/lib/versioning/pep440/index.ts @@ -1,4 +1,5 @@ import * as pep440 from '@renovatebot/pep440'; +import type { RangeStrategy } from '../../types/versioning'; import type { VersioningApi } from '../types'; import { getNewValue, isLessThanRange } from './range'; @@ -6,7 +7,12 @@ export const id = 'pep440'; export const displayName = 'PEP440'; export const urls = ['https://www.python.org/dev/peps/pep-0440/']; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; const { compare: sortVersions, diff --git a/lib/versioning/poetry/index.ts b/lib/versioning/poetry/index.ts index a2915e8aa1373b17202ab28a40821d1d1d2e7f0c..8b6301cee60b9f98c6aa5ac597bff7f16e569f0c 100644 --- a/lib/versioning/poetry/index.ts +++ b/lib/versioning/poetry/index.ts @@ -1,7 +1,9 @@ import { parseRange } from 'semver-utils'; import { logger } from '../../logger'; +import type { RangeStrategy } from '../../types/versioning'; import { api as npm } from '../npm'; import type { NewValueConfig, VersioningApi } from '../types'; + import { VERSION_PATTERN } from './patterns'; import { npm2poetry, @@ -14,7 +16,12 @@ export const id = 'poetry'; export const displayName = 'Poetry'; export const urls = ['https://python-poetry.org/docs/versions/']; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; function equals(a: string, b: string): boolean { const semverA = poetry2semver(a); diff --git a/lib/versioning/rez/index.ts b/lib/versioning/rez/index.ts index 68347753c2cfee25e0f77745b0c379f49a41c897..345095660e1851d43b8ac179109592aa75d3c739 100644 --- a/lib/versioning/rez/index.ts +++ b/lib/versioning/rez/index.ts @@ -1,7 +1,9 @@ +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import { api as npm } from '../npm'; import { api as pep440 } from '../pep440'; import type { NewValueConfig, VersioningApi } from '../types'; + import { ascendingRange, descendingRange, @@ -23,7 +25,12 @@ export const id = 'rez'; export const displayName = 'rez'; export const urls = ['https://github.com/nerdvegas/rez']; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; function equals(a: string, b: string): boolean { try { diff --git a/lib/versioning/ruby/index.ts b/lib/versioning/ruby/index.ts index b2218b687381fa73e66f0065bc903618b04c9faa..ace10e5b8bce85c4b07d3f486631d9bd165fd329 100644 --- a/lib/versioning/ruby/index.ts +++ b/lib/versioning/ruby/index.ts @@ -7,6 +7,7 @@ import { valid, } from '@renovatebot/ruby-semver'; import { logger } from '../../logger'; +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import type { NewValueConfig, VersioningApi } from '../types'; import { isSingleOperator, isValidOperator } from './operator'; @@ -22,7 +23,12 @@ export const urls = [ 'https://www.devalot.com/articles/2012/04/gem-versions.html', ]; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; function vtrim<T = unknown>(version: T): string | T { if (typeof version === 'string') { @@ -74,12 +80,14 @@ export const isValid = (input: string): boolean => export const matches = (version: string, range: string): boolean => satisfies(vtrim(version), vtrim(range)); + function getSatisfyingVersion( versions: string[], range: string ): string | null { return maxSatisfying(versions.map(vtrim), vtrim(range)); } + function minSatisfyingVersion( versions: string[], range: string diff --git a/lib/versioning/swift/index.ts b/lib/versioning/swift/index.ts index d3de422d7797fa6f583a04e7345e2e336a783779..e920aa2b19ab5dcd80f4261d397c7fe555b965c6 100644 --- a/lib/versioning/swift/index.ts +++ b/lib/versioning/swift/index.ts @@ -1,5 +1,6 @@ import semver from 'semver'; import stable from 'semver-stable'; +import type { RangeStrategy } from '../../types/versioning'; import { regEx } from '../../util/regex'; import type { VersioningApi } from '../types'; import { getNewValue, toSemverRange } from './range'; @@ -8,7 +9,12 @@ export const id = 'swift'; export const displayName = 'Swift'; export const urls = ['https://swift.org/package-manager/']; export const supportsRanges = true; -export const supportedRangeStrategies = ['bump', 'extend', 'pin', 'replace']; +export const supportedRangeStrategies: RangeStrategy[] = [ + 'bump', + 'widen', + 'pin', + 'replace', +]; const { is: isStable } = stable;