diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt index 6d76912b31c..138d5b3229b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyConstraint.kt @@ -23,7 +23,7 @@ class NpmDependencyConstraint( private var reason: String? = null - private val versionConstraint = DefaultMutableVersionConstraint(version) + private val versionConstraint = NpmVersionConstraint(version) override fun getGroup(): String? = null @@ -62,7 +62,7 @@ class NpmDependencyConstraint( override fun version(configureAction: Action) { configureAction.execute(versionConstraint) val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - nodeJs.npmResolutionManager.putNpmResolution(path, version) + nodeJs.npmResolutionManager.putNpmResolution(path, versionConstraint.toSemVer()) } override fun getReason(): String? { @@ -75,7 +75,7 @@ class NpmDependencyConstraint( override fun getVersionConstraint(): VersionConstraint { val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - nodeJs.npmResolutionManager.putNpmResolution(path, version) + nodeJs.npmResolutionManager.putNpmResolution(path, versionConstraint.toSemVer()) return versionConstraint } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmVersionConstraint.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmVersionConstraint.kt new file mode 100644 index 00000000000..08bd545186c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmVersionConstraint.kt @@ -0,0 +1,35 @@ +/* + * 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.SemVer +import org.gradle.api.internal.artifacts.dependencies.DefaultMutableVersionConstraint + +class NpmVersionConstraint( + version: String +) : DefaultMutableVersionConstraint(version) { + override fun rejectAll() { + super.rejectAll() + reject("0.0.0") + } + + fun toSemVer(): String { + if (requiredVersion.isEmpty()) { + return preferredVersion + } + + if (strictVersion.isNotEmpty()) { + return strictVersion + } + + val requiredRange = "^$requiredVersion" + return if (SemVer.valid(requiredRange) && SemVer.satisfies(requiredVersion, requiredRange)) { + requiredRange + } else { + requiredVersion + } + } +} \ No newline at end of file