From 487e854f608d0512fe34606baea49589a17546d9 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 23 Jun 2022 18:08:24 +0000 Subject: [PATCH] [Gradle, JS] Compatibility changes for css and scss support --- .../js-library-ir/build.gradle.kts | 4 ++-- .../app/build.gradle.kts | 6 +++--- .../targets/js/webpack/KotlinWebpackConfig.kt | 16 +++++++++++++-- .../js/webpack/KotlinWebpackCssRule.kt | 13 +++++------- .../targets/js/webpack/KotlinWebpackRule.kt | 20 ++++++++----------- .../js/webpack/KotlinWebpackScssRule.kt | 4 +--- 6 files changed, 33 insertions(+), 30 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts index 4b844bba0bf..9306b2711f9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/js-library-ir/build.gradle.kts @@ -13,10 +13,10 @@ kotlin { browser { commonWebpackConfig { cssSupport { - enabled.set(true) + enabled = true } scssSupport { - enabled.set(true) + enabled = true } } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts index ed3c9edf7b3..6279ab7a01d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin-js-browser-project/app/build.gradle.kts @@ -16,7 +16,7 @@ abstract class CustomWebpackRule @javax.inject.Inject constructor(name: String) : org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackRule(name) { init { - test.set("none") + test = "none" } override fun loaders() = listOf() } @@ -26,10 +26,10 @@ kotlin { browser { webpackTask { cssSupport { - enabled.set(true) + enabled = true } scssSupport { - enabled.set(true) + enabled = true } rules { rule("custom") diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt index d1437e0093b..32e504194bc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt @@ -8,8 +8,6 @@ package org.jetbrains.kotlin.gradle.targets.js.webpack import com.google.gson.GsonBuilder -import org.gradle.api.ExtensiblePolymorphicDomainObjectContainer -import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Nested @@ -72,6 +70,20 @@ data class KotlinWebpackConfig( @Input val webpackMajorVersion: WebpackMajorVersion = WebpackMajorVersion.V5 ) : WebpackRulesDsl { + @get:Internal + @Deprecated("use cssSupport methods instead") + var cssSupport: KotlinWebpackCssRule + get() = rules.maybeCreate("css", KotlinWebpackCssRule::class.java) + set(value) { + rules.maybeCreate("css", KotlinWebpackCssRule::class.java).apply { + this.mode = value.mode + this.enabled = value.enabled + this.test = value.test + this.include = value.include + this.exclude = value.exclude + } + } + @get:Input @get:Optional val entryInput: String? diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt index 5a854c03ec9..27b4c3c38d7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackCssRule.kt @@ -25,15 +25,12 @@ typealias KotlinWebpackCssSupport = KotlinWebpackCssRule @Suppress("LeakingThis") abstract class KotlinWebpackCssRule @Inject constructor(name: String) : KotlinWebpackRule(name) { @get:Input - abstract val mode: Property + var mode: String = INLINE - init { - mode.convention(INLINE) - test.convention("/\\.css\$/") - } + override var test: String = "/\\.css\$/" override fun validate(): Boolean { - if (mode.get() !in arrayOf(EXTRACT, INLINE, IMPORT)) { + if (mode !in arrayOf(EXTRACT, INLINE, IMPORT)) { error( """ Possible values for cssSupport.mode: @@ -49,7 +46,7 @@ abstract class KotlinWebpackCssRule @Inject constructor(name: String) : KotlinWe override fun dependencies(versions: NpmVersions): Collection { return mutableListOf().apply { add(versions.cssLoader) - when (mode.get()) { + when (mode) { EXTRACT -> add(versions.miniCssExtractPlugin) INLINE -> add(versions.styleLoader) IMPORT -> add(versions.toStringLoader) @@ -57,7 +54,7 @@ abstract class KotlinWebpackCssRule @Inject constructor(name: String) : KotlinWe } } - override fun loaders(): List = when (mode.get()) { + override fun loaders(): List = when (mode) { EXTRACT -> listOf( Loader( loader = "MiniCssExtractPlugin.loader", diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt index 792a6fda702..69b9ca01216 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRule.kt @@ -20,28 +20,24 @@ import javax.inject.Inject @Suppress("LeakingThis") abstract class KotlinWebpackRule @Inject constructor(private val name: String) : Named { @get:Input - abstract val enabled: Property + var enabled: Boolean = false /** * Raw rule `test` field value. Needs to be wrapped in quotes when using string notation. */ @get:Input - abstract val test: Property + abstract var test: String @get:Input - abstract val include: ListProperty + var include: MutableList = mutableListOf() @get:Input - abstract val exclude: ListProperty + var exclude: MutableList = mutableListOf() @get:Input protected open val description: String get() = (this::class.simpleName?.removeSuffix("_Decorated") ?: "KotlinWebpackRule") + "[${getName()}]" - init { - enabled.convention(false) - } - /** * Validates the rule state just before it getting applied. * Returning false will skip the rule silently. To terminate the build instead, throw an error. @@ -59,7 +55,7 @@ abstract class KotlinWebpackRule @Inject constructor(private val name: String) : protected abstract fun loaders(): List @get:Internal - internal val active: Boolean get() = enabled.get() && validate() + internal val active: Boolean get() = enabled && validate() internal fun Appendable.appendToWebpackConfig() { appendLine( """ @@ -87,14 +83,14 @@ abstract class KotlinWebpackRule @Inject constructor(private val name: String) : """.trimIndent() ) - val excluded = exclude.get().takeIf(List<*>::isNotEmpty) + val excluded = exclude.takeIf(List<*>::isNotEmpty) ?.joinToString(separator = ",", prefix = "[", postfix = "]") ?: "undefined" - val included = include.get().takeIf(List<*>::isNotEmpty) + val included = include.takeIf(List<*>::isNotEmpty) ?.joinToString(separator = ",", prefix = "[", postfix = "]") ?: "undefined" appendLine( """ config.module.rules.push({ - test: ${test.get()}, + test: ${test}, use: use, exclude: $excluded, include: $included, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt index 82c42f1a51a..6efd8486a49 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackScssRule.kt @@ -11,9 +11,7 @@ import javax.inject.Inject @Suppress("LeakingThis") abstract class KotlinWebpackScssRule @Inject constructor(name: String) : KotlinWebpackCssRule(name) { - init { - test.convention("/\\.(scss|sass)\$/") - } + override var test: String = "/\\.(scss|sass)\$/" override fun dependencies(versions: NpmVersions): Collection { return super.dependencies(versions) + versions.sass + versions.sassLoader