[Gradle, JS] Require version use caret
^KT-41054 fixed
This commit is contained in:
+5
-1
@@ -31,7 +31,11 @@ class NpmVersionConstraint(
|
||||
)
|
||||
}
|
||||
|
||||
return buildNpmVersion(listOf(requiredVersion), rejectedVersions)
|
||||
return buildNpmVersion(
|
||||
listOf(requiredVersion),
|
||||
rejectedVersions,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+20
-1
@@ -21,11 +21,13 @@ fun versionToNpmRanges(version: String): List<NpmRange> {
|
||||
|
||||
fun buildNpmVersion(
|
||||
includedVersions: List<String>,
|
||||
excludedVersions: List<String>
|
||||
excludedVersions: List<String>,
|
||||
includedWithCaret: Boolean = false
|
||||
): String {
|
||||
val includedRange: NpmRange? = try {
|
||||
includedVersions
|
||||
.flatMap { versionToNpmRanges(it) }
|
||||
.map { if (includedWithCaret) it.caretizeSingleVersion() else it }
|
||||
.reduce { acc: NpmRange, next: NpmRange ->
|
||||
val intersection = acc intersect next
|
||||
requireNotNull(intersection) {
|
||||
@@ -39,6 +41,8 @@ fun buildNpmVersion(
|
||||
|
||||
includedRange!!
|
||||
|
||||
if (excludedVersions.isEmpty()) return includedRange.toString()
|
||||
|
||||
val excludedRanges: List<NpmRange> = try {
|
||||
excludedVersions
|
||||
.flatMap { versionToNpmRanges(it) }
|
||||
@@ -55,4 +59,19 @@ fun buildNpmVersion(
|
||||
.mapNotNull { it intersect includedRange }
|
||||
.sortedBy { it.startVersion }
|
||||
.joinToString(NpmRangeVisitor.OR)
|
||||
}
|
||||
|
||||
private fun NpmRange.caretizeSingleVersion(): NpmRange {
|
||||
if (startVersion?.toVersion() != endVersion?.toVersion() || !(startInclusive || endInclusive)) {
|
||||
return this
|
||||
}
|
||||
|
||||
return NpmRange(
|
||||
startVersion = startVersion,
|
||||
startInclusive = startInclusive,
|
||||
endVersion = startVersion
|
||||
?.toVersion()
|
||||
?.incrementMajor()
|
||||
?.toSemVer()
|
||||
)
|
||||
}
|
||||
+9
@@ -182,6 +182,15 @@ fun Version.toSemVer(): SemVer =
|
||||
build = buildIdentifiers.joinToString(".").let { if (it.isNotEmpty()) it else null }
|
||||
)
|
||||
|
||||
fun SemVer.toVersion(): Version =
|
||||
Version.builder()
|
||||
.major(major.toInt())
|
||||
.minor(minor.toInt())
|
||||
.patch(patch.toInt())
|
||||
.preReleaseIdentifiers(preRelease?.split(".")?.map { Version.Identifier.fromString(it) } ?: emptyList())
|
||||
.buildIdentifiers(build?.split(".")?.map { Version.Identifier.fromString(it) } ?: emptyList())
|
||||
.build()
|
||||
|
||||
fun min(a: SemVer, b: SemVer): SemVer =
|
||||
if (a < b) a else b
|
||||
|
||||
|
||||
Reference in New Issue
Block a user