diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt index dcff285fb01..8a853362290 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmRangeVisitor.kt @@ -9,6 +9,7 @@ import com.github.gundy.semver4j.generated.grammar.NodeSemverExpressionBaseVisit import com.github.gundy.semver4j.generated.grammar.NodeSemverExpressionParser import com.github.gundy.semver4j.model.Version import org.antlr.v4.runtime.tree.TerminalNode +import org.gradle.api.GradleException import org.jetbrains.kotlin.gradle.utils.toListOrEmpty class NpmRangeVisitor : NodeSemverExpressionBaseVisitor>() { @@ -18,9 +19,24 @@ class NpmRangeVisitor : NodeSemverExpressionBaseVisitor>() { override fun visitWildcard(ctx: NodeSemverExpressionParser.WildcardContext): List = listOf(NpmRange()) - // TODO check it - override fun visitWildcardRange(ctx: NodeSemverExpressionParser.WildcardRangeContext): List = - listOf(eq(ctx.partialWildcardSemver().text)) + override fun visitWildcardRange(ctx: NodeSemverExpressionParser.WildcardRangeContext): List { + val partialWildcardSemver = ctx.partialWildcardSemver() + val versionText = partialWildcardSemver.text + val version = versionText + .replace(".x", "") + .replace(".X", "") + .replace(".*", "") + .let { Version.fromString(it) } + + val nextVersion = when { + partialWildcardSemver.minor == null -> version.incrementMajor() + partialWildcardSemver.patch == null -> version.incrementMinor() + else -> throw GradleException("Incorrect version pattern $versionText") + } + + return (gteq(version) intersect lt(nextVersion)) + .toListOrEmpty() + } override fun visitOperator(ctx: NodeSemverExpressionParser.OperatorContext): List { val eq: TerminalNode? = ctx.unaryOperator().EQ()