diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 8a11fbd9fdc..654a4ae69fc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack -import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfigWriter +import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask class KotlinBrowserJs(target: KotlinJsTarget) : @@ -67,7 +67,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) : it.compilation = compilation it.description = "start webpack dev server" - it.devServer = KotlinWebpackConfigWriter.DevServer( + it.devServer = KotlinWebpackConfig.DevServer( open = true, contentBase = listOf(compilation.output.resourcesDir.canonicalPath) ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index 172c970be20..a4dab5217a4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KarmaConfig.CoverageReporter.Reporter -import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfigWriter +import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig import org.jetbrains.kotlin.gradle.testing.internal.reportsDir import org.slf4j.Logger import java.io.File @@ -108,19 +108,22 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF requiredDependencies.add(versions.karmaWebpack) requiredDependencies.add(versions.webpack) + val webpackConfigWriter = KotlinWebpackConfig( + configDirectory = project.projectDir.resolve("webpack.config.d").takeIf { it.isDirectory }, + sourceMaps = true, + export = false, + progressReporter = true, + progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath + ) + requiredDependencies.addAll(webpackConfigWriter.getRequiredDependencies(versions)) + addPreprocessor("webpack") confJsWriters.add { it.appendln() it.appendln("// webpack config") it.appendln("function createWebpackConfig() {") - KotlinWebpackConfigWriter( - configDirectory = project.projectDir.resolve("webpack.config.d").takeIf { it.isDirectory }, - sourceMaps = true, - export = false, - progressReporter = true, - progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath - ).appendTo(it) + webpackConfigWriter.appendTo(it) it.appendln(" return config;") it.appendln("}") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index adce5f71946..4600b0fb682 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -102,14 +102,14 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { @Input @Optional - var devServer: KotlinWebpackConfigWriter.DevServer? = null + var devServer: KotlinWebpackConfig.DevServer? = null private fun createRunner() = KotlinWebpackRunner( compilation.npmProject, configFile, execHandleFactory, bin, - KotlinWebpackConfigWriter( + KotlinWebpackConfig( entry = entry, reportEvaluatedConfigFile = if (saveEvaluatedConfigFile) evaluatedConfigFile else null, outputPath = destinationDirectory, @@ -126,23 +126,7 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { @Internal get() = true override val requiredNpmDependencies: Collection - @Internal get() = mutableListOf().also { - it.add(versions.webpack) - it.add(versions.webpackCli) - - if (report) { - it.add(versions.webpackBundleAnalyzer) - } - - if (sourceMaps) { - it.add(versions.sourceMapLoader) - it.add(versions.sourceMapSupport) - } - - if (devServer != null) { - it.add(versions.webpackDevServer) - } - } + @Internal get() = createRunner().config.getRequiredDependencies(versions) @TaskAction fun doExecute() { @@ -160,7 +144,7 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { } } else { runner.copy( - configWriter = runner.configWriter.copy( + config = runner.config.copy( progressReporter = true, progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfigWriter.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt similarity index 92% rename from libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfigWriter.kt rename to libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt index e8a92a5c01f..d7e0a1debf4 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfigWriter.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackConfig.kt @@ -9,13 +9,15 @@ package org.jetbrains.kotlin.gradle.targets.js.webpack import com.google.gson.GsonBuilder import com.google.gson.stream.JsonWriter +import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion +import org.jetbrains.kotlin.gradle.targets.js.NpmVersions import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir import java.io.File import java.io.Serializable import java.io.StringWriter @Suppress("MemberVisibilityCanBePrivate") -data class KotlinWebpackConfigWriter( +data class KotlinWebpackConfig( val mode: Mode = Mode.DEVELOPMENT, val entry: File? = null, val outputPath: File? = null, @@ -31,6 +33,24 @@ data class KotlinWebpackConfigWriter( val progressReporter: Boolean = false, val progressReporterPathFilter: String? = null ) { + fun getRequiredDependencies(versions: NpmVersions) = mutableListOf().also { + it.add(versions.webpack) + it.add(versions.webpackCli) + + if (bundleAnalyzerReportDir != null) { + it.add(versions.webpackBundleAnalyzer) + } + + if (sourceMaps) { + it.add(versions.sourceMapLoader) + it.add(versions.sourceMapSupport) + } + + if (devServer != null) { + it.add(versions.webpackDevServer) + } + } + enum class Mode(val code: String) { DEVELOPMENT("development"), PRODUCTION("production") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRunner.kt index 5dfdac1d4dd..a9970459e56 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpackRunner.kt @@ -17,7 +17,7 @@ internal data class KotlinWebpackRunner( val configFile: File, val execHandleFactory: ExecHandleFactory, val tool: String, - val configWriter: KotlinWebpackConfigWriter + val config: KotlinWebpackConfig ) { fun execute() = npmProject.project.execWithProgress("webpack") { configureExec(it) @@ -32,14 +32,14 @@ internal data class KotlinWebpackRunner( } private fun configureExec(execFactory: ExecSpec) { - check(configWriter.entry?.isFile == true) { - "${this}: Entry file not existed \"${configWriter.entry}\"" + check(config.entry?.isFile == true) { + "${this}: Entry file not existed \"${config.entry}\"" } - configWriter.save(configFile) + config.save(configFile) val args = mutableListOf("--config", configFile.absolutePath) - if (configWriter.showProgress) { + if (config.showProgress) { args.add("--progress") }