[Gradle, JS] Imported dependencies as file dependencies, not workspaces

#KT-32466 fixed
#KT-36784 fixed
#KT-36864 fixed
This commit is contained in:
Ilya Goncharov
2020-03-30 12:53:34 +03:00
parent 98f012b1c8
commit e85501337e
2 changed files with 21 additions and 13 deletions
@@ -19,12 +19,9 @@ 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.npm.NpmDependency
import org.jetbrains.kotlin.gradle.targets.js.npm.*
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.*
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_JSON
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
@@ -317,7 +314,7 @@ internal class KotlinCompilationNpmResolver(
}
importedExternalGradleDependencies.forEach {
packageJson.dependencies[it.name] = it.version
packageJson.dependencies[it.name] = fileVersion(it.path)
}
val dependencies = mutableMapOf<String, String>()
@@ -21,17 +21,26 @@ class YarnImportedPackagesVersionResolver(
private val resolvedVersion = mutableMapOf<String, String>()
private val importedProjectWorkspaces = mutableListOf<String>()
private val externalModules = npmProjects.flatMapTo(mutableSetOf()) {
it.externalGradleDependencies + it.internalCompositeDependencies
it.externalGradleDependencies
}
private val internalCompositeModules = npmProjects.flatMapTo(mutableSetOf()) {
it.internalCompositeDependencies
}
fun resolveAndUpdatePackages(): MutableList<String> {
resolve()
updatePackages()
resolveAndUpdate(externalModules, false)
resolveAndUpdate(internalCompositeModules, true)
return importedProjectWorkspaces
}
private fun resolve() {
externalModules.groupBy { it.name }.forEach { (name, versions) ->
private fun resolveAndUpdate(modules: MutableSet<GradleNodeModule>, isWorkspace: Boolean) {
resolve(modules, isWorkspace)
updatePackages(modules)
}
private fun resolve(modules: MutableSet<GradleNodeModule>, isWorkspace: Boolean) {
modules.groupBy { it.name }.forEach { (name, versions) ->
val selected: GradleNodeModule = if (versions.size > 1) {
val sorted = versions.sortedBy { it.semver }
rootProject.logger.warn(
@@ -43,18 +52,20 @@ class YarnImportedPackagesVersionResolver(
selected
} else versions.single()
importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path)
if (isWorkspace) {
importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path)
}
}
}
private fun updatePackages() {
private fun updatePackages(modules: MutableSet<GradleNodeModule>) {
if (resolvedVersion.isEmpty()) return
npmProjects.forEach {
updatePackageJson(it.packageJson, it.npmProject.packageJsonFile)
}
externalModules.forEach {
modules.forEach {
val packageJsonFile = it.path.resolve(NpmProject.PACKAGE_JSON)
val packageJson = packageJsonFile.reader().use {
Gson().fromJson<PackageJson>(it, PackageJson::class.java)