[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.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.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.NpmDependency.Scope.*
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_JSON 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.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
@@ -317,7 +314,7 @@ internal class KotlinCompilationNpmResolver(
} }
importedExternalGradleDependencies.forEach { importedExternalGradleDependencies.forEach {
packageJson.dependencies[it.name] = it.version packageJson.dependencies[it.name] = fileVersion(it.path)
} }
val dependencies = mutableMapOf<String, String>() val dependencies = mutableMapOf<String, String>()
@@ -21,17 +21,26 @@ class YarnImportedPackagesVersionResolver(
private val resolvedVersion = mutableMapOf<String, String>() private val resolvedVersion = mutableMapOf<String, String>()
private val importedProjectWorkspaces = mutableListOf<String>() private val importedProjectWorkspaces = mutableListOf<String>()
private val externalModules = npmProjects.flatMapTo(mutableSetOf()) { private val externalModules = npmProjects.flatMapTo(mutableSetOf()) {
it.externalGradleDependencies + it.internalCompositeDependencies it.externalGradleDependencies
}
private val internalCompositeModules = npmProjects.flatMapTo(mutableSetOf()) {
it.internalCompositeDependencies
} }
fun resolveAndUpdatePackages(): MutableList<String> { fun resolveAndUpdatePackages(): MutableList<String> {
resolve() resolveAndUpdate(externalModules, false)
updatePackages() resolveAndUpdate(internalCompositeModules, true)
return importedProjectWorkspaces return importedProjectWorkspaces
} }
private fun resolve() { private fun resolveAndUpdate(modules: MutableSet<GradleNodeModule>, isWorkspace: Boolean) {
externalModules.groupBy { it.name }.forEach { (name, versions) -> 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 selected: GradleNodeModule = if (versions.size > 1) {
val sorted = versions.sortedBy { it.semver } val sorted = versions.sortedBy { it.semver }
rootProject.logger.warn( rootProject.logger.warn(
@@ -43,18 +52,20 @@ class YarnImportedPackagesVersionResolver(
selected selected
} else versions.single() } 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 if (resolvedVersion.isEmpty()) return
npmProjects.forEach { npmProjects.forEach {
updatePackageJson(it.packageJson, it.npmProject.packageJsonFile) updatePackageJson(it.packageJson, it.npmProject.packageJsonFile)
} }
externalModules.forEach { modules.forEach {
val packageJsonFile = it.path.resolve(NpmProject.PACKAGE_JSON) val packageJsonFile = it.path.resolve(NpmProject.PACKAGE_JSON)
val packageJson = packageJsonFile.reader().use { val packageJson = packageJsonFile.reader().use {
Gson().fromJson<PackageJson>(it, PackageJson::class.java) Gson().fromJson<PackageJson>(it, PackageJson::class.java)