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 ac7de89383b..a22fdf7741e 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 @@ -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() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt index 94e7ebe3d83..bb6ad332edb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnImportedPackagesVersionResolver.kt @@ -21,17 +21,26 @@ class YarnImportedPackagesVersionResolver( private val resolvedVersion = mutableMapOf() private val importedProjectWorkspaces = mutableListOf() private val externalModules = npmProjects.flatMapTo(mutableSetOf()) { - it.externalGradleDependencies + it.internalCompositeDependencies + it.externalGradleDependencies + } + + private val internalCompositeModules = npmProjects.flatMapTo(mutableSetOf()) { + it.internalCompositeDependencies } fun resolveAndUpdatePackages(): MutableList { - 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, isWorkspace: Boolean) { + resolve(modules, isWorkspace) + updatePackages(modules) + } + + private fun resolve(modules: MutableSet, 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) { 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(it, PackageJson::class.java)