From bdd6186a0762e793767ae58492ba83938e226db7 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 18 Oct 2019 18:42:29 +0300 Subject: [PATCH] [Gradle, JS] Resolve devDependencies and dependencies modules clash --- .../resolver/KotlinCompilationNpmResolver.kt | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index b1f6969a48c..93151e76c30 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -17,15 +17,14 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf -import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatCompilationResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency +import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.* import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson import org.jetbrains.kotlin.gradle.targets.js.npm.fixSemver import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject +import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.CompilationResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.* -import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.CompilationResolverPlugin import java.io.File import java.io.Serializable @@ -246,12 +245,20 @@ internal class KotlinCompilationNpmResolver( packageJson.dependencies[it.name] = it.version } + val dependencies = mutableMapOf() + externalNpmDependencies.forEach { + val module = it.key + dependencies[it.key] = chooseVersion(dependencies[module], it.version) + } + + externalNpmDependencies.forEach { + val dependency = dependencies.getValue(it.key) when (it.scope) { - NORMAL -> packageJson.dependencies[it.key] = chooseVersion(packageJson.dependencies[it.key], it.version) - DEV -> packageJson.devDependencies[it.key] = chooseVersion(packageJson.devDependencies[it.key], it.version) - OPTIONAL -> packageJson.optionalDependencies[it.key] = chooseVersion(packageJson.optionalDependencies[it.key], it.version) - PEER -> packageJson.peerDependencies[it.key] = chooseVersion(packageJson.peerDependencies[it.key], it.version) + NORMAL -> packageJson.dependencies[it.key] = dependency + DEV -> packageJson.devDependencies[it.key] = dependency + OPTIONAL -> packageJson.optionalDependencies[it.key] = dependency + PEER -> packageJson.peerDependencies[it.key] = dependency } } @@ -273,7 +280,14 @@ internal class KotlinCompilationNpmResolver( ) } - private fun chooseVersion(oldVersion: String?, newVersion: String): String = - oldVersion ?: newVersion // todo: real versions conflict resolution + // TODO: real versions conflict resolution + private fun chooseVersion(oldVersion: String?, newVersion: String): String { + // https://yarnpkg.com/lang/en/docs/dependency-versions/#toc-x-ranges + if (oldVersion == "*") { + return newVersion + } + + return oldVersion ?: newVersion + } } } \ No newline at end of file