diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt index de7855b321f..e5636e5b67c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryContainer.kt @@ -92,6 +92,30 @@ constructor( } ) + // For Groovy DSL + @JvmOverloads + fun library( + compilation: KotlinJsCompilation = defaultCompilation + ): List { + if (target is KotlinJsIrTarget) { + target.whenBrowserConfigured { + (this as KotlinJsIrSubTarget).produceLibrary() + } + + target.whenNodejsConfigured { + (this as KotlinJsIrSubTarget).produceLibrary() + } + + return createBinaries( + compilation = compilation, + jsBinaryType = KotlinJsBinaryType.LIBRARY, + create = ::Library + ) + } + + throw GradleException("Library can be produced only for IR compiler") + } + internal fun getIrBinaries( mode: KotlinJsBinaryMode ): DomainObjectSet = diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt index 960db7c23a4..53cbc6f639f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrSubTarget.kt @@ -79,6 +79,14 @@ abstract class KotlinJsIrSubTarget( produceExecutable } + private val produceLibrary: Unit by lazy { + configureLibrary() + } + + internal fun produceLibrary() { + produceLibrary + } + override fun testTask(body: KotlinJsTest.() -> Unit) { testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).executionTask.configure(body) } @@ -176,14 +184,21 @@ abstract class KotlinJsIrSubTarget( private fun configureMain(compilation: KotlinJsIrCompilation) { configureRun(compilation) configureBuild(compilation) - configureLibrary(compilation) } protected abstract fun configureRun(compilation: KotlinJsIrCompilation) protected abstract fun configureBuild(compilation: KotlinJsIrCompilation) - protected fun configureLibrary(compilation: KotlinJsIrCompilation) { + private fun configureLibrary() { + target.compilations.all { compilation -> + if (compilation.isMain()) { + configureLibrary(compilation) + } + } + } + + private fun configureLibrary(compilation: KotlinJsIrCompilation) { val project = compilation.target.project val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName)