[Gradle, JS] Execute dukat on import in both mode

^KT-42339 fixed

[Gradle, JS] Fix tests for dukat

^KT-42339 fixed

[Gradle, JS] Add tests on binaries-both mode

^KT-42339 fixed

[Gradle, JS] Remove snapshot versions

^KT-42339 fixed

[Gradle, JS] Fix file dependency resolution into imported package

^KT-42339 fixed
This commit is contained in:
Ilya Goncharov
2020-10-08 13:37:13 +03:00
parent 0a86beeb64
commit 3ad6d58153
12 changed files with 128 additions and 20 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode
import org.jetbrains.kotlin.gradle.util.modify
import org.junit.Test
import kotlin.test.assertTrue
@@ -101,6 +102,9 @@ class DukatIntegrationIT : BaseGradleIT() {
)
project.setupWorkingDir()
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
project.gradleProperties().modify {
"${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}"
}
val externalSrcs = "build/externals/$projectName/src"
project.build("generateExternalsIntegrated") {
@@ -153,6 +157,9 @@ class DukatIntegrationIT : BaseGradleIT() {
)
project.setupWorkingDir()
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
project.gradleProperties().modify {
"${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}"
}
val externalSrcs = "build/externals/$projectName/src"
project.build("generateExternalsIntegrated") {
@@ -224,7 +231,10 @@ class DukatIntegrationIT : BaseGradleIT() {
project.setupWorkingDir()
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
project.gradleProperties().modify {
"kotlin.js.generate.externals=true"
"""
kotlin.js.generate.externals=true
${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}
""".trimIndent()
}
project.gradleBuildScript().modify { buildScript ->
@@ -251,18 +261,21 @@ class DukatIntegrationIT : BaseGradleIT() {
)
project.setupWorkingDir()
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
project.gradleProperties().modify {
"${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}"
}
val externalSrcs = "build/externals/both-jsLegacy/src"
project.build("compileKotlinJsIr") {
val externalSrcs = "build/externals/both-jsIr/src"
project.build("compileKotlinJsLegacy") {
assertSuccessful()
assertTasksExecuted(":legacyGenerateExternalsIntegrated")
assertTasksExecuted(":irGenerateExternalsIntegrated")
assertSingleFileExists(externalSrcs, "index.module_decamelize.kt")
val irExternals = "build/externals/both-jsIr/src"
val directoryFile = fileInWorkingDir(irExternals)
val legacyExternals = "build/externals/both-jsLegacy/src"
val directoryFile = fileInWorkingDir(legacyExternals)
assertTrue(
!directoryFile.exists(),
"[$irExternals] should not contain files"
"[$legacyExternals] should not contain files"
)
}
@@ -271,7 +284,7 @@ class DukatIntegrationIT : BaseGradleIT() {
"--rerun-tasks"
) {
assertSuccessful()
assertTasksExecuted(":legacyGenerateExternalsIntegrated")
assertTasksExecuted(":irGenerateExternalsIntegrated")
assertSingleFileExists(externalSrcs, "index.module_decamelize.kt")
}
@@ -307,6 +320,82 @@ class DukatIntegrationIT : BaseGradleIT() {
}
}
@Test
fun testAssembleBothBinaries() {
val projectName = "both"
val project = Project(
projectName = projectName,
directoryPrefix = "dukat-integration"
)
project.setupWorkingDir()
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
project.build("assemble") {
assertSuccessful()
}
}
@Test
fun testCompileLegacyBothBinaries() {
val projectName = "both"
val project = Project(
projectName = projectName,
directoryPrefix = "dukat-integration"
)
project.setupWorkingDir()
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
project.gradleProperties().modify {
"""
${DukatMode.dukatModeProperty}=${DukatMode.BINARY}
""".trimIndent()
}
val externalSrcs = "build/externals/both-jsLegacy/src"
project.build("compileKotlinJsLegacy") {
assertSuccessful()
assertSingleFileExists(externalSrcs, "index.d.jar")
val irExternals = "build/externals/both-jsIr/src"
val directoryFile = fileInWorkingDir(irExternals)
assertTrue(
!directoryFile.exists(),
"[$irExternals] should not contain files"
)
}
}
@Test
fun testAssembleBothSource() {
val projectName = "both"
val project = Project(
projectName = projectName,
directoryPrefix = "dukat-integration"
)
project.setupWorkingDir()
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
project.gradleProperties().modify {
"""
${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}
""".trimIndent()
}
val externalSrcs = "build/externals/both-jsIr/src"
project.build("assemble") {
assertSuccessful()
assertTasksExecuted(":irGenerateExternalsIntegrated")
assertSingleFileExists(externalSrcs, "index.module_decamelize.kt")
val legacyExternals = "build/externals/both-jsLegacy/src"
val directoryFile = fileInWorkingDir(legacyExternals)
assertTrue(
!directoryFile.exists(),
"[$legacyExternals] should not contain files"
)
}
}
private fun projectName(
dslType: DslType,
dependenciesLocation: DependenciesLocation
@@ -14,6 +14,7 @@ dependencies {
kotlin {
js(BOTH) {
useCommonJs()
nodejs()
}
}
@@ -9,6 +9,7 @@ repositories {
kotlin {
js {
useCommonJs()
nodejs()
}
@@ -15,6 +15,7 @@ dependencies {
kotlin {
js {
useCommonJs()
nodejs()
}
}
@@ -9,6 +9,7 @@ repositories {
kotlin {
js {
useCommonJs()
nodejs()
}
@@ -15,6 +15,7 @@ dependencies {
kotlin {
js {
useCommonJs()
nodejs()
}
}
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType.Companion.jsCompi
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode.Companion.dukatModeProperty
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.tasks.CacheBuilder
@@ -221,7 +222,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
* Default mode of generating of Dukat
*/
val dukatMode: DukatMode?
get() = property("dukat.mode")?.let { DukatMode.byArgumentOrNull(it) }
get() = property(dukatModeProperty)?.let { DukatMode.byArgumentOrNull(it) }
/**
* Use Kotlin/JS backend compiler type
@@ -10,7 +10,7 @@ package org.jetbrains.kotlin.gradle.targets.js
*/
// DO NOT MODIFY DIRECTLY! Use org.jetbrains.kotlin.generators.gradle.targets.js.MainKt
class NpmVersions {
val dukat = NpmPackageVersion("dukat", "next")
val dukat = NpmPackageVersion("dukat", "0.5.8-rc.2")
val webpack = NpmPackageVersion("webpack", "4.44.1")
val webpackCli = NpmPackageVersion("webpack-cli", "3.3.12")
val webpackBundleAnalyzer = NpmPackageVersion("webpack-bundle-analyzer", "3.8.0")
@@ -85,10 +85,16 @@ internal class DukatCompilationResolverPlugin(
) {
val externalNpmDependencies = resolution[project][compilation].externalNpmDependencies
val target = compilation.target
val dukatMode = compilation.dukatMode
if (target is KotlinJsTarget && dukatMode == DukatMode.SOURCE) {
return
}
DukatExecutor(
nodeJs,
DtsResolver(npmProject).getAllDts(externalNpmDependencies),
compilation.dukatMode,
dukatMode,
npmProject,
packageJsonIsUpdated,
operation = compilation.name + " > " + DukatExecutor.OPERATION,
@@ -12,5 +12,7 @@ enum class DukatMode {
companion object {
fun byArgumentOrNull(argument: String): DukatMode? =
values().firstOrNull { it.name.equals(argument, ignoreCase = true) }
const val dukatModeProperty = "dukat.mode"
}
}
@@ -337,15 +337,17 @@ internal class KotlinCompilationNpmResolver(
}
val importedExternalGradleDependencies = externalGradleDependencies.mapNotNull {
resolver.gradleNodeModules.get(it.dependency.moduleName, it.dependency.moduleVersion, it.artifact.file)
} + fileCollectionDependencies.mapNotNull {
val file = it.files.singleFile
resolver.gradleNodeModules.get(
it.name,
it.version ?: "0.0.1",
file
)
}
} + fileCollectionDependencies.flatMap { dependency ->
dependency.files
.filter { it.exists() }
.map { file ->
resolver.gradleNodeModules.get(
file.name,
dependency.version ?: "0.0.1",
file
)
}
}.filterNotNull()
val compositeDependencies = internalCompositeDependencies.flatMap { dependency ->
dependency.getPackages()