[Gradle, JS] KT-36784 Fix absolute paths on relative in package.json

#KT-32466 fixed
#KT-36784 fixed
#KT-36864 fixed
This commit is contained in:
Ilya Goncharov
2020-03-31 19:10:53 +03:00
parent ffc22f4190
commit a27ae5dd7b
3 changed files with 45 additions and 56 deletions
@@ -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()
}
}
}
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)
@@ -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) {}
}
@@ -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)
}