[Gradle, JS] Use rejected versions

^KT-41054 fixed
This commit is contained in:
Ilya Goncharov
2020-08-03 18:15:53 +03:00
parent d232e2ceb3
commit f1b8c62231
3 changed files with 47 additions and 8 deletions
@@ -13,23 +13,33 @@ class NpmVersionConstraint(
) : DefaultMutableVersionConstraint(version) {
override fun rejectAll() {
super.rejectAll()
reject("0.0.0")
reject(NONE_VERSION)
}
fun toSemVer(): String {
if (requiredVersion.isEmpty()) {
return preferredVersion
return buildNpmVersion(
includedVersions = listOf(preferredVersion),
excludedVersions = rejectedVersions
)
}
if (strictVersion.isNotEmpty()) {
return strictVersion
return buildNpmVersion(
includedVersions = listOf(strictVersion),
excludedVersions = rejectedVersions
)
}
val requiredRange = "^$requiredVersion"
return if (SemVer.valid(requiredRange) && SemVer.satisfies(requiredVersion, requiredRange)) {
val version = buildNpmVersion(listOf(requiredVersion), rejectedVersions)
val requiredRange = "^$version"
return if (SemVer.valid(requiredRange) && SemVer.satisfies(version, requiredRange)) {
requiredRange
} else {
requiredVersion
version
}
}
}
}
const val NONE_VERSION = "0.0.0"
@@ -12,7 +12,7 @@ import org.antlr.v4.runtime.tree.TerminalNode
class NpmVersionInvertedVisitor : NodeSemverExpressionBaseVisitor<String>() {
override fun visitEmptyRange(ctx: NodeSemverExpressionParser.EmptyRangeContext): String =
WILDCARD_VERSION
NONE_VERSION
override fun visitWildcard(ctx: NodeSemverExpressionParser.WildcardContext): String =
NONE_VERSION
@@ -0,0 +1,29 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.targets.js.npm
import com.github.gundy.semver4j.generated.grammar.NodeSemverExpressionLexer
import com.github.gundy.semver4j.generated.grammar.NodeSemverExpressionParser
import org.antlr.v4.runtime.ANTLRInputStream
import org.antlr.v4.runtime.CommonTokenStream
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmVersionInvertedVisitor.Companion.AND
fun invertNpmVersion(version: String): String {
val lexer = NodeSemverExpressionLexer(ANTLRInputStream(version))
val tokens = CommonTokenStream(lexer)
val parser = NodeSemverExpressionParser(tokens)
return NpmVersionInvertedVisitor()
.visit(parser.rangeSet())!!
}
fun buildNpmVersion(
includedVersions: List<String>,
excludedVersions: List<String>
): String =
includedVersions
.joinToString(AND) { it.trimIndent() } +
excludedVersions
.joinToString(prefix = AND, separator = AND) { invertNpmVersion(it.trimIndent()) }