[Gradle, JS] Resolve devDependencies and dependencies modules clash

This commit is contained in:
Ilya Goncharov
2019-10-18 18:42:29 +03:00
parent fa647680d3
commit bdd6186a07
@@ -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.KotlinUsages
import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName
import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf 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
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.PackageJson
import org.jetbrains.kotlin.gradle.targets.js.npm.fixSemver 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.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.resolved.KotlinCompilationNpmResolution
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask 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.File
import java.io.Serializable import java.io.Serializable
@@ -246,12 +245,20 @@ internal class KotlinCompilationNpmResolver(
packageJson.dependencies[it.name] = it.version packageJson.dependencies[it.name] = it.version
} }
val dependencies = mutableMapOf<String, String>()
externalNpmDependencies.forEach { 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) { when (it.scope) {
NORMAL -> packageJson.dependencies[it.key] = chooseVersion(packageJson.dependencies[it.key], it.version) NORMAL -> packageJson.dependencies[it.key] = dependency
DEV -> packageJson.devDependencies[it.key] = chooseVersion(packageJson.devDependencies[it.key], it.version) DEV -> packageJson.devDependencies[it.key] = dependency
OPTIONAL -> packageJson.optionalDependencies[it.key] = chooseVersion(packageJson.optionalDependencies[it.key], it.version) OPTIONAL -> packageJson.optionalDependencies[it.key] = dependency
PEER -> packageJson.peerDependencies[it.key] = chooseVersion(packageJson.peerDependencies[it.key], it.version) PEER -> packageJson.peerDependencies[it.key] = dependency
} }
} }
@@ -273,7 +280,14 @@ internal class KotlinCompilationNpmResolver(
) )
} }
private fun chooseVersion(oldVersion: String?, newVersion: String): String = // TODO: real versions conflict resolution
oldVersion ?: newVersion // 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
}
} }
} }