From a27ae5dd7bb60e58eeb941ca9ad3c22810139e7e Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 31 Mar 2020 19:10:53 +0300 Subject: [PATCH] [Gradle, JS] KT-36784 Fix absolute paths on relative in package.json #KT-32466 fixed #KT-36784 fixed #KT-36864 fixed --- .../js/npm/AbstractNodeModulesCache.kt | 34 ++++++++++++++++++- .../js/npm/CompositeNodeModuleBuilder.kt | 33 ++++++------------ .../targets/js/npm/GradleNodeModuleBuilder.kt | 34 +------------------ 3 files changed, 45 insertions(+), 56 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt index cb82b697aa1..d84e8e92901 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.targets.js.npm +import com.google.gson.GsonBuilder import org.gradle.api.Project import org.gradle.api.artifacts.ResolvedDependency import org.jetbrains.kotlin.gradle.internal.ProcessedFilesCache @@ -42,4 +43,35 @@ internal abstract class AbstractNodeModulesCache(val nodeJs: NodeJsRootExtension override fun close() { cache.close() } -} \ No newline at end of file +} + +fun makeNodeModule( + container: File, + packageJson: PackageJson, + files: (File) -> Unit +): File { + val dir = importedPackageDir(container, packageJson.name, packageJson.version) + + if (dir.exists()) dir.deleteRecursively() + + check(dir.mkdirs()) { + "Cannot create directory: $dir" + } + + val gson = GsonBuilder() + .setPrettyPrinting() + .create() + + files(dir) + + dir.resolve("package.json").writer().use { + gson.toJson(packageJson, it) + } + + return dir +} + +fun importedPackageDir(container: File, name: String, version: String): File = + container.resolve(name).resolve(version) + +fun GradleNodeModule(dir: File) = GradleNodeModule(dir.parentFile.name, dir.name, dir) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt index a156568f5fa..bb4242b77d6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/CompositeNodeModuleBuilder.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.targets.js.npm -import com.google.gson.GsonBuilder import org.gradle.api.Project import org.gradle.api.artifacts.ResolvedDependency import java.io.File @@ -28,34 +27,24 @@ internal class CompositeNodeModuleBuilder( val packageJson = fromSrcPackageJson(srcPackageJsonFile)!! - packageJson.main = srcDir.parentFile.resolve(packageJson.main!!).canonicalPath - // yarn requires semver packageJson.version = fixSemver(packageJson.version) - return makeNodeModule2(cache.dir, packageJson) + val container = cache.dir + val importedPackageDir = importedPackageDir(container, packageJson.name, packageJson.version) + + packageJson.main = srcDir.parentFile.resolve(packageJson.main!!) + .relativeToOrNull(importedPackageDir) + ?.path + ?: throw IllegalStateException("Unable to link composite builds for Kotlin/JS which have different roots") + + return makeNodeModule(container, packageJson) } } -fun makeNodeModule2( +private fun makeNodeModule( container: File, packageJson: PackageJson ): File { - val dir = importedPackageDir(container, packageJson.name, packageJson.version) - - if (dir.exists()) dir.deleteRecursively() - - check(dir.mkdirs()) { - "Cannot create directory: $dir" - } - - val gson = GsonBuilder() - .setPrettyPrinting() - .create() - - dir.resolve("package.json").writer().use { - gson.toJson(packageJson, it) - } - - return dir + return makeNodeModule(container, packageJson) {} } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt index 4b69ed6543d..5d604abf9aa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.targets.js.npm -import com.google.gson.GsonBuilder import org.gradle.api.Project import org.gradle.api.artifacts.ResolvedDependency import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE @@ -73,35 +72,4 @@ private fun isKotlinJsRuntimeFile(file: File): Boolean { val name = file.name return (name.endsWith(".js") && !name.endsWith(".meta.js")) || name.endsWith(".js.map") -} - -fun makeNodeModule( - container: File, - packageJson: PackageJson, - files: (File) -> Unit -): File { - val dir = importedPackageDir(container, packageJson.name, packageJson.version) - - if (dir.exists()) dir.deleteRecursively() - - check(dir.mkdirs()) { - "Cannot create directory: $dir" - } - - val gson = GsonBuilder() - .setPrettyPrinting() - .create() - - files(dir) - - dir.resolve("package.json").writer().use { - gson.toJson(packageJson, it) - } - - return dir -} - -fun importedPackageDir(container: File, name: String, version: String): File = - container.resolve(name).resolve(version) - -fun GradleNodeModule(dir: File) = GradleNodeModule(dir.parentFile.name, dir.name, dir) \ No newline at end of file +} \ No newline at end of file