[Gradle, JS] Use .meta.js as source of "name" and "main" fields

^KT-40342 fixed
This commit is contained in:
Ilya Goncharov
2020-07-22 20:19:26 +03:00
parent cca64b8fab
commit 0b88f457e8
2 changed files with 21 additions and 10 deletions
@@ -7,6 +7,9 @@ package org.jetbrains.kotlin.gradle.targets.js.npm
import org.gradle.api.Project
import org.gradle.api.artifacts.ResolvedDependency
import org.jetbrains.kotlin.gradle.targets.js.JS
import org.jetbrains.kotlin.gradle.targets.js.JS_MAP
import org.jetbrains.kotlin.gradle.targets.js.META_JS
import org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE
import java.io.File
@@ -19,8 +22,8 @@ internal class GradleNodeModuleBuilder(
val srcFiles: Collection<File>,
val cache: GradleNodeModulesCache
) {
var srcPackageJsonFile: File? = null
val files = mutableListOf<File>()
private var srcPackageJsonFile: File? = null
private val files = mutableListOf<File>()
fun visitArtifacts() {
srcFiles.forEach { srcFile ->
@@ -45,19 +48,22 @@ internal class GradleNodeModuleBuilder(
version = version ?: dependency.moduleVersion
} ?: PackageJson(dependency.moduleName, dependency.moduleVersion)
val jsFiles = files.filter { it.name.endsWith(".js") }
if (jsFiles.size == 1) {
val jsFile = jsFiles.single()
packageJson.name = jsFile.nameWithoutExtension
packageJson.main = jsFile.name
val metaFiles = files.filter { it.name.endsWith(".$META_JS") }
if (metaFiles.size == 1) {
val metaFile = metaFiles.single()
val name = metaFile.name.removeSuffix(".$META_JS")
packageJson.name = name
packageJson.main = "${name}.js"
}
// yarn requires semver
packageJson.version = fixSemver(packageJson.version)
val actualFiles = files.filterNot { it.name.endsWith(".$META_JS") }
return makeNodeModule(cache.dir, packageJson) { nodeModule ->
project.copy { copy ->
copy.from(files)
copy.from(actualFiles)
copy.into(nodeModule)
}
}
@@ -73,6 +79,6 @@ private val File.isCompatibleArchive
private fun isKotlinJsRuntimeFile(file: File): Boolean {
if (!file.isFile) return false
val name = file.name
return (name.endsWith(".js") && !name.endsWith(".meta.js"))
|| name.endsWith(".js.map")
return name.endsWith(".$JS")
|| name.endsWith(".$JS_MAP")
}
@@ -21,3 +21,8 @@ fun Appendable.appendConfigsFromDir(confDir: File) {
appendln()
}
}
const val JS = "js"
const val JS_MAP = "js.map"
const val META_JS = "meta.js"