From 1318517155e440416fba9030dc3936c08d00ddc2 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 21 Aug 2020 14:57:34 +0300 Subject: [PATCH] [Gradle, JS] Add configureLibrary ^KT-41566 fixed --- .../targets/js/ir/KotlinJsBinaryTypes.kt | 3 +- .../targets/js/ir/KotlinJsIrSubTarget.kt | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryTypes.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryTypes.kt index 7098dbfa7b3..b885ac65e2e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryTypes.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsBinaryTypes.kt @@ -6,5 +6,6 @@ package org.jetbrains.kotlin.gradle.targets.js.ir enum class KotlinJsBinaryType { - EXECUTABLE + EXECUTABLE, + LIBRARY } \ No newline at end of file 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 b5ff5993281..960db7c23a4 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 @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.ir import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Task import org.gradle.api.plugins.ExtensionAware +import org.gradle.api.tasks.Copy import org.gradle.api.tasks.TaskProvider import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator @@ -25,6 +26,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.subtargets.BrowserDistribution import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest +import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.testing.internal.configureConventions import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry @@ -174,6 +176,7 @@ abstract class KotlinJsIrSubTarget( private fun configureMain(compilation: KotlinJsIrCompilation) { configureRun(compilation) configureBuild(compilation) + configureLibrary(compilation) } protected abstract fun configureRun(compilation: KotlinJsIrCompilation) @@ -181,7 +184,49 @@ abstract class KotlinJsIrSubTarget( protected abstract fun configureBuild(compilation: KotlinJsIrCompilation) protected fun configureLibrary(compilation: KotlinJsIrCompilation) { + val project = compilation.target.project + val processResourcesTask = target.project.tasks.named(compilation.processResourcesTaskName) + + val assembleTaskProvider = project.tasks.named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME) + + val npmProject = compilation.npmProject + + compilation.binaries + .matching { it is Library } + .all { binary -> + binary as Library + + val mode = binary.mode + + val prepareJsLibrary = registerSubTargetTask( + disambiguateCamelCased( + binary.name, + PREPARE_JS_LIBRARY_TASK_NAME + ) + ) { + it.from(processResourcesTask) + it.from(project.tasks.named(npmProject.publicPackageJsonTaskName)) + it.from(binary.linkTask) + + it.into(binary.distribution.directory) + } + + if (mode == KotlinJsBinaryMode.PRODUCTION) { + assembleTaskProvider.dependsOn(prepareJsLibrary) + + registerSubTargetTask( + disambiguateCamelCased( + binary.name, + DISTRIBUTION_TASK_NAME + ) + ) { + it.dependsOn(prepareJsLibrary) + + it.outputs.dir(distribution.directory) + } + } + } } internal inline fun registerSubTargetTask( @@ -199,5 +244,7 @@ abstract class KotlinJsIrSubTarget( const val DISTRIBUTE_RESOURCES_TASK_NAME = "distributeResources" const val DISTRIBUTION_TASK_NAME = "distribution" + + const val PREPARE_JS_LIBRARY_TASK_NAME = "prepareJsLibrary" } } \ No newline at end of file