[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.Project
import org.gradle.api.artifacts.ResolvedDependency 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 org.jetbrains.kotlin.gradle.targets.js.ir.KLIB_TYPE
import java.io.File import java.io.File
@@ -19,8 +22,8 @@ internal class GradleNodeModuleBuilder(
val srcFiles: Collection<File>, val srcFiles: Collection<File>,
val cache: GradleNodeModulesCache val cache: GradleNodeModulesCache
) { ) {
var srcPackageJsonFile: File? = null private var srcPackageJsonFile: File? = null
val files = mutableListOf<File>() private val files = mutableListOf<File>()
fun visitArtifacts() { fun visitArtifacts() {
srcFiles.forEach { srcFile -> srcFiles.forEach { srcFile ->
@@ -45,19 +48,22 @@ internal class GradleNodeModuleBuilder(
version = version ?: dependency.moduleVersion version = version ?: dependency.moduleVersion
} ?: PackageJson(dependency.moduleName, dependency.moduleVersion) } ?: PackageJson(dependency.moduleName, dependency.moduleVersion)
val jsFiles = files.filter { it.name.endsWith(".js") } val metaFiles = files.filter { it.name.endsWith(".$META_JS") }
if (jsFiles.size == 1) { if (metaFiles.size == 1) {
val jsFile = jsFiles.single() val metaFile = metaFiles.single()
packageJson.name = jsFile.nameWithoutExtension val name = metaFile.name.removeSuffix(".$META_JS")
packageJson.main = jsFile.name packageJson.name = name
packageJson.main = "${name}.js"
} }
// yarn requires semver // yarn requires semver
packageJson.version = fixSemver(packageJson.version) packageJson.version = fixSemver(packageJson.version)
val actualFiles = files.filterNot { it.name.endsWith(".$META_JS") }
return makeNodeModule(cache.dir, packageJson) { nodeModule -> return makeNodeModule(cache.dir, packageJson) { nodeModule ->
project.copy { copy -> project.copy { copy ->
copy.from(files) copy.from(actualFiles)
copy.into(nodeModule) copy.into(nodeModule)
} }
} }
@@ -73,6 +79,6 @@ private val File.isCompatibleArchive
private fun isKotlinJsRuntimeFile(file: File): Boolean { private fun isKotlinJsRuntimeFile(file: File): Boolean {
if (!file.isFile) return false if (!file.isFile) return false
val name = file.name val name = file.name
return (name.endsWith(".js") && !name.endsWith(".meta.js")) return name.endsWith(".$JS")
|| name.endsWith(".js.map") || name.endsWith(".$JS_MAP")
} }
@@ -21,3 +21,8 @@ fun Appendable.appendConfigsFromDir(confDir: File) {
appendln() appendln()
} }
} }
const val JS = "js"
const val JS_MAP = "js.map"
const val META_JS = "meta.js"