[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
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode
|
||||||
import org.jetbrains.kotlin.gradle.util.modify
|
import org.jetbrains.kotlin.gradle.util.modify
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertTrue
|
import kotlin.test.assertTrue
|
||||||
@@ -101,6 +102,9 @@ class DukatIntegrationIT : BaseGradleIT() {
|
|||||||
)
|
)
|
||||||
project.setupWorkingDir()
|
project.setupWorkingDir()
|
||||||
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
||||||
|
project.gradleProperties().modify {
|
||||||
|
"${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}"
|
||||||
|
}
|
||||||
|
|
||||||
val externalSrcs = "build/externals/$projectName/src"
|
val externalSrcs = "build/externals/$projectName/src"
|
||||||
project.build("generateExternalsIntegrated") {
|
project.build("generateExternalsIntegrated") {
|
||||||
@@ -153,6 +157,9 @@ class DukatIntegrationIT : BaseGradleIT() {
|
|||||||
)
|
)
|
||||||
project.setupWorkingDir()
|
project.setupWorkingDir()
|
||||||
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
||||||
|
project.gradleProperties().modify {
|
||||||
|
"${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}"
|
||||||
|
}
|
||||||
|
|
||||||
val externalSrcs = "build/externals/$projectName/src"
|
val externalSrcs = "build/externals/$projectName/src"
|
||||||
project.build("generateExternalsIntegrated") {
|
project.build("generateExternalsIntegrated") {
|
||||||
@@ -224,7 +231,10 @@ class DukatIntegrationIT : BaseGradleIT() {
|
|||||||
project.setupWorkingDir()
|
project.setupWorkingDir()
|
||||||
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
||||||
project.gradleProperties().modify {
|
project.gradleProperties().modify {
|
||||||
"kotlin.js.generate.externals=true"
|
"""
|
||||||
|
kotlin.js.generate.externals=true
|
||||||
|
${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}
|
||||||
|
""".trimIndent()
|
||||||
}
|
}
|
||||||
|
|
||||||
project.gradleBuildScript().modify { buildScript ->
|
project.gradleBuildScript().modify { buildScript ->
|
||||||
@@ -251,18 +261,21 @@ class DukatIntegrationIT : BaseGradleIT() {
|
|||||||
)
|
)
|
||||||
project.setupWorkingDir()
|
project.setupWorkingDir()
|
||||||
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
project.gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl)
|
||||||
|
project.gradleProperties().modify {
|
||||||
|
"${DukatMode.dukatModeProperty}=${DukatMode.SOURCE}"
|
||||||
|
}
|
||||||
|
|
||||||
val externalSrcs = "build/externals/both-jsLegacy/src"
|
val externalSrcs = "build/externals/both-jsIr/src"
|
||||||
project.build("compileKotlinJsIr") {
|
project.build("compileKotlinJsLegacy") {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksExecuted(":legacyGenerateExternalsIntegrated")
|
assertTasksExecuted(":irGenerateExternalsIntegrated")
|
||||||
|
|
||||||
assertSingleFileExists(externalSrcs, "index.module_decamelize.kt")
|
assertSingleFileExists(externalSrcs, "index.module_decamelize.kt")
|
||||||
val irExternals = "build/externals/both-jsIr/src"
|
val legacyExternals = "build/externals/both-jsLegacy/src"
|
||||||
val directoryFile = fileInWorkingDir(irExternals)
|
val directoryFile = fileInWorkingDir(legacyExternals)
|
||||||
assertTrue(
|
assertTrue(
|
||||||
!directoryFile.exists(),
|
!directoryFile.exists(),
|
||||||
"[$irExternals] should not contain files"
|
"[$legacyExternals] should not contain files"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,7 +284,7 @@ class DukatIntegrationIT : BaseGradleIT() {
|
|||||||
"--rerun-tasks"
|
"--rerun-tasks"
|
||||||
) {
|
) {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTasksExecuted(":legacyGenerateExternalsIntegrated")
|
assertTasksExecuted(":irGenerateExternalsIntegrated")
|
||||||
|
|
||||||
assertSingleFileExists(externalSrcs, "index.module_decamelize.kt")
|
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(
|
private fun projectName(
|
||||||
dslType: DslType,
|
dslType: DslType,
|
||||||
dependenciesLocation: DependenciesLocation
|
dependenciesLocation: DependenciesLocation
|
||||||
|
|||||||
+1
@@ -14,6 +14,7 @@ dependencies {
|
|||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
js(BOTH) {
|
js(BOTH) {
|
||||||
|
useCommonJs()
|
||||||
nodejs()
|
nodejs()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
fun main() {
|
||||||
|
decamelize("helloWorld")
|
||||||
|
}
|
||||||
+1
@@ -9,6 +9,7 @@ repositories {
|
|||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
js {
|
js {
|
||||||
|
useCommonJs()
|
||||||
nodejs()
|
nodejs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -15,6 +15,7 @@ dependencies {
|
|||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
js {
|
js {
|
||||||
|
useCommonJs()
|
||||||
nodejs()
|
nodejs()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
@@ -9,6 +9,7 @@ repositories {
|
|||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
js {
|
js {
|
||||||
|
useCommonJs()
|
||||||
nodejs()
|
nodejs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -15,6 +15,7 @@ dependencies {
|
|||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
js {
|
js {
|
||||||
|
useCommonJs()
|
||||||
nodejs()
|
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.mpp.KotlinMultiplatformPlugin
|
||||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
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
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode.Companion.dukatModeProperty
|
||||||
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter
|
||||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||||
import org.jetbrains.kotlin.gradle.tasks.CacheBuilder
|
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
|
* Default mode of generating of Dukat
|
||||||
*/
|
*/
|
||||||
val dukatMode: DukatMode?
|
val dukatMode: DukatMode?
|
||||||
get() = property("dukat.mode")?.let { DukatMode.byArgumentOrNull(it) }
|
get() = property(dukatModeProperty)?.let { DukatMode.byArgumentOrNull(it) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use Kotlin/JS backend compiler type
|
* 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
|
// DO NOT MODIFY DIRECTLY! Use org.jetbrains.kotlin.generators.gradle.targets.js.MainKt
|
||||||
class NpmVersions {
|
class NpmVersions {
|
||||||
val dukat = NpmPackageVersion("dukat", "next")
|
val dukat = NpmPackageVersion("dukat", "0.5.8-rc.2")
|
||||||
val webpack = NpmPackageVersion("webpack", "4.44.1")
|
val webpack = NpmPackageVersion("webpack", "4.44.1")
|
||||||
val webpackCli = NpmPackageVersion("webpack-cli", "3.3.12")
|
val webpackCli = NpmPackageVersion("webpack-cli", "3.3.12")
|
||||||
val webpackBundleAnalyzer = NpmPackageVersion("webpack-bundle-analyzer", "3.8.0")
|
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 externalNpmDependencies = resolution[project][compilation].externalNpmDependencies
|
||||||
|
|
||||||
|
val target = compilation.target
|
||||||
|
val dukatMode = compilation.dukatMode
|
||||||
|
if (target is KotlinJsTarget && dukatMode == DukatMode.SOURCE) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
DukatExecutor(
|
DukatExecutor(
|
||||||
nodeJs,
|
nodeJs,
|
||||||
DtsResolver(npmProject).getAllDts(externalNpmDependencies),
|
DtsResolver(npmProject).getAllDts(externalNpmDependencies),
|
||||||
compilation.dukatMode,
|
dukatMode,
|
||||||
npmProject,
|
npmProject,
|
||||||
packageJsonIsUpdated,
|
packageJsonIsUpdated,
|
||||||
operation = compilation.name + " > " + DukatExecutor.OPERATION,
|
operation = compilation.name + " > " + DukatExecutor.OPERATION,
|
||||||
|
|||||||
+2
@@ -12,5 +12,7 @@ enum class DukatMode {
|
|||||||
companion object {
|
companion object {
|
||||||
fun byArgumentOrNull(argument: String): DukatMode? =
|
fun byArgumentOrNull(argument: String): DukatMode? =
|
||||||
values().firstOrNull { it.name.equals(argument, ignoreCase = true) }
|
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 {
|
val importedExternalGradleDependencies = externalGradleDependencies.mapNotNull {
|
||||||
resolver.gradleNodeModules.get(it.dependency.moduleName, it.dependency.moduleVersion, it.artifact.file)
|
resolver.gradleNodeModules.get(it.dependency.moduleName, it.dependency.moduleVersion, it.artifact.file)
|
||||||
} + fileCollectionDependencies.mapNotNull {
|
} + fileCollectionDependencies.flatMap { dependency ->
|
||||||
val file = it.files.singleFile
|
dependency.files
|
||||||
|
.filter { it.exists() }
|
||||||
resolver.gradleNodeModules.get(
|
.map { file ->
|
||||||
it.name,
|
resolver.gradleNodeModules.get(
|
||||||
it.version ?: "0.0.1",
|
file.name,
|
||||||
file
|
dependency.version ?: "0.0.1",
|
||||||
)
|
file
|
||||||
}
|
)
|
||||||
|
}
|
||||||
|
}.filterNotNull()
|
||||||
|
|
||||||
val compositeDependencies = internalCompositeDependencies.flatMap { dependency ->
|
val compositeDependencies = internalCompositeDependencies.flatMap { dependency ->
|
||||||
dependency.getPackages()
|
dependency.getPackages()
|
||||||
|
|||||||
Reference in New Issue
Block a user