[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:
+97
-8
@@ -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
|
||||
|
||||
+1
@@ -14,6 +14,7 @@ dependencies {
|
||||
|
||||
kotlin {
|
||||
js(BOTH) {
|
||||
useCommonJs()
|
||||
nodejs()
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
fun main() {
|
||||
decamelize("helloWorld")
|
||||
}
|
||||
+1
@@ -9,6 +9,7 @@ repositories {
|
||||
|
||||
kotlin {
|
||||
js {
|
||||
useCommonJs()
|
||||
nodejs()
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -15,6 +15,7 @@ dependencies {
|
||||
|
||||
kotlin {
|
||||
js {
|
||||
useCommonJs()
|
||||
nodejs()
|
||||
}
|
||||
}
|
||||
+1
@@ -9,6 +9,7 @@ repositories {
|
||||
|
||||
kotlin {
|
||||
js {
|
||||
useCommonJs()
|
||||
nodejs()
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -15,6 +15,7 @@ dependencies {
|
||||
|
||||
kotlin {
|
||||
js {
|
||||
useCommonJs()
|
||||
nodejs()
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -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
|
||||
|
||||
+1
-1
@@ -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")
|
||||
|
||||
+7
-1
@@ -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,
|
||||
|
||||
+2
@@ -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"
|
||||
}
|
||||
}
|
||||
+11
-9
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user