[Gradle, JS] Use live collections for webpack configurations
^KT-57116 fixed
This commit is contained in:
committed by
Space Team
parent
f058ee21b0
commit
133992d0bc
+45
@@ -498,6 +498,51 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DisplayName("Webpack config block works after task configured")
|
||||||
|
@GradleTest
|
||||||
|
fun testWebpackConfigWorksAfterTaskConfigured(gradleVersion: GradleVersion) {
|
||||||
|
project("js-library-with-executable", gradleVersion) {
|
||||||
|
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
|
||||||
|
|
||||||
|
buildGradleKts.modify { originalScript ->
|
||||||
|
buildString {
|
||||||
|
append(originalScript)
|
||||||
|
append(
|
||||||
|
"""
|
||||||
|
|
|
||||||
|
|kotlin {
|
||||||
|
| js {
|
||||||
|
| browser {
|
||||||
|
| }
|
||||||
|
| }
|
||||||
|
|}
|
||||||
|
|
|
||||||
|
|tasks.all {
|
||||||
|
| // do nothing
|
||||||
|
|}
|
||||||
|
|
|
||||||
|
|kotlin {
|
||||||
|
| js {
|
||||||
|
| browser {
|
||||||
|
| commonWebpackConfig {
|
||||||
|
| outputFileName = "CORRECT_NAME.js"
|
||||||
|
| }
|
||||||
|
| }
|
||||||
|
| }
|
||||||
|
|}
|
||||||
|
|
|
||||||
|
""".trimMargin()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
build("browserProductionWebpack") {
|
||||||
|
assertTasksExecuted(":browserProductionWebpack")
|
||||||
|
assertFileExists(projectPath.resolve("build/${Distribution.DIST}/js/productionExecutable/CORRECT_NAME.js"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsGradlePluginTests
|
@JsGradlePluginTests
|
||||||
|
|||||||
+8
-4
@@ -6,6 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||||
|
|
||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
|
import org.gradle.api.DomainObjectCollection
|
||||||
|
import org.gradle.api.DomainObjectSet
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
@@ -42,8 +44,10 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
|
|
||||||
private val nodeJs = project.rootProject.kotlinNodeJsExtension
|
private val nodeJs = project.rootProject.kotlinNodeJsExtension
|
||||||
|
|
||||||
private val webpackTaskConfigurations: MutableList<Action<KotlinWebpack>> = mutableListOf()
|
private val webpackTaskConfigurations: DomainObjectSet<Action<KotlinWebpack>> = project.objects.domainObjectSet(Action::class.java)
|
||||||
private val runTaskConfigurations: MutableList<Action<KotlinWebpack>> = mutableListOf()
|
as DomainObjectSet<Action<KotlinWebpack>>
|
||||||
|
private val runTaskConfigurations: DomainObjectSet<Action<KotlinWebpack>> = project.objects.domainObjectSet(Action::class.java)
|
||||||
|
as DomainObjectSet<Action<KotlinWebpack>>
|
||||||
|
|
||||||
override val testTaskDescription: String
|
override val testTaskDescription: String
|
||||||
get() = "Run all ${target.name} tests inside browser using karma and webpack"
|
get() = "Run all ${target.name} tests inside browser using karma and webpack"
|
||||||
@@ -267,7 +271,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
mode: KotlinJsBinaryMode,
|
mode: KotlinJsBinaryMode,
|
||||||
inputFilesDirectory: Provider<File>,
|
inputFilesDirectory: Provider<File>,
|
||||||
entryModuleName: Provider<String>,
|
entryModuleName: Provider<String>,
|
||||||
configurationActions: List<Action<KotlinWebpack>>,
|
configurationActions: DomainObjectSet<Action<KotlinWebpack>>,
|
||||||
nodeJs: NodeJsRootExtension,
|
nodeJs: NodeJsRootExtension,
|
||||||
defaultArchivesName: Property<String>,
|
defaultArchivesName: Property<String>,
|
||||||
) {
|
) {
|
||||||
@@ -285,7 +289,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
|
|
||||||
mainOutputFileName.convention(defaultArchivesName.orElse("main").map { "$it.js" }).finalizeValueOnRead()
|
mainOutputFileName.convention(defaultArchivesName.orElse("main").map { "$it.js" }).finalizeValueOnRead()
|
||||||
|
|
||||||
configurationActions.forEach { configure ->
|
configurationActions.all { configure ->
|
||||||
configure.execute(this)
|
configure.execute(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-10
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.testing
|
package org.jetbrains.kotlin.gradle.targets.js.testing
|
||||||
|
|
||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
|
import org.gradle.api.DomainObjectSet
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.file.RegularFileProperty
|
import org.gradle.api.file.RegularFileProperty
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
@@ -19,6 +20,8 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma
|
import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha
|
import org.jetbrains.kotlin.gradle.targets.js.testing.mocha.KotlinMocha
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
import org.jetbrains.kotlin.gradle.tasks.KotlinTest
|
||||||
import org.jetbrains.kotlin.gradle.utils.getValue
|
import org.jetbrains.kotlin.gradle.utils.getValue
|
||||||
import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
||||||
@@ -46,21 +49,16 @@ constructor(
|
|||||||
var testFramework: KotlinJsTestFramework? = null
|
var testFramework: KotlinJsTestFramework? = null
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
onTestFrameworkCallbacks.forEach { callback ->
|
onTestFrameworkCallbacks.all { callback ->
|
||||||
callback(value)
|
callback.execute(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private var onTestFrameworkCallbacks: MutableList<(KotlinJsTestFramework?) -> Unit> =
|
private var onTestFrameworkCallbacks: DomainObjectSet<Action<KotlinJsTestFramework?>> =
|
||||||
mutableListOf()
|
project.objects.domainObjectSet(Action::class.java) as DomainObjectSet<Action<KotlinJsTestFramework?>>
|
||||||
|
|
||||||
fun onTestFrameworkSet(action: (KotlinJsTestFramework?) -> Unit) {
|
fun onTestFrameworkSet(action: Action<KotlinJsTestFramework?>) {
|
||||||
onTestFrameworkCallbacks.add(action)
|
onTestFrameworkCallbacks.add(action)
|
||||||
testFramework?.let { testFramework: KotlinJsTestFramework ->
|
|
||||||
onTestFrameworkCallbacks.forEach { callback ->
|
|
||||||
callback(testFramework)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
|
|||||||
Reference in New Issue
Block a user