[Gradle, JS] Imported dependencies as file dependencies, not workspaces
#KT-32466 fixed #KT-36784 fixed #KT-36864 fixed
This commit is contained in:
+2
-5
@@ -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>()
|
||||||
|
|||||||
+19
-8
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user