diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt index 082079f2f97..d8dca27d0a1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt @@ -8,7 +8,9 @@ // Old package for compatibility package org.jetbrains.kotlin.gradle.plugin.mpp +import groovy.lang.Closure import org.gradle.api.tasks.TaskProvider +import org.gradle.util.ConfigureUtil import org.gradle.util.WrapUtil import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl @@ -60,11 +62,16 @@ open class KotlinJsCompilation( internal val packageJsonHandlers = mutableListOf Unit>() - @Suppress("unused") fun packageJson(handler: PackageJson.() -> Unit) { packageJsonHandlers.add(handler) } + fun packageJson(handler: Closure<*>) { + packageJson { + ConfigureUtil.configure(handler, this) + } + } + override val apiConfigurationName: String get() = disambiguateNameInPlatform(API) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt index a25e6642198..a5ef81c16cd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt @@ -10,6 +10,7 @@ import com.google.gson.FieldAttributes import com.google.gson.Gson import com.google.gson.GsonBuilder import org.gradle.api.GradleException +import org.gradle.api.tasks.Input import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated import java.io.File @@ -18,7 +19,7 @@ class PackageJson( var name: String, var version: String ) { - private val customFields = mutableMapOf() + internal val customFields = mutableMapOf() val empty: Boolean get() = main == null && @@ -60,10 +61,22 @@ class PackageJson( val bundledDependencies = mutableListOf() get() = field ?: mutableListOf() + fun customField(pair: Pair) { + customFields[pair.first] = pair.second + } + fun customField(key: String, value: Any) { customFields[key] = value } + fun customField(key: String, value: Number) { + customFields[key] = value + } + + fun customField(key: String, value: Boolean) { + customFields[key] = value + } + companion object { fun scopedName(name: String): ScopedName = if (name.contains("/")) ScopedName( scope = name.substringBeforeLast("/").removePrefix("@"), @@ -163,4 +176,6 @@ private fun chooseVersion( There is already declared version of '$module' with version '$oldVersion' which does not intersects with another declared version '${newVersion}' """.trimIndent() ) -} \ No newline at end of file +} + +internal const val fakePackageJsonValue = "FAKE" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt index 7939e1368a4..2c8427a2b82 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt @@ -21,7 +21,7 @@ import javax.inject.Inject open class PublicPackageJsonTask @Inject constructor( - compilation: KotlinJsCompilation + private val compilation: KotlinJsCompilation ) : DefaultTask() { private val npmProject = compilation.npmProject @@ -31,6 +31,13 @@ constructor( private val compilationResolution get() = nodeJs.npmResolutionManager.requireInstalled()[project][npmProject.compilation] + @get:Input + val packageJsonCustomFields: Map + get() = PackageJson(fakePackageJsonValue, fakePackageJsonValue) + .apply { + compilation.packageJsonHandlers.forEach { it() } + }.customFields + @get:Nested internal val externalDependencies: Collection get() = compilationResolution.externalNpmDependencies diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index 906edacf1c0..69fb8dd2c1c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -11,6 +11,8 @@ import org.gradle.api.tasks.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin +import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson +import org.jetbrains.kotlin.gradle.targets.js.npm.fakePackageJsonValue import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME @@ -28,6 +30,13 @@ open class KotlinPackageJsonTask : DefaultTask() { private val producer: KotlinCompilationNpmResolver.PackageJsonProducer get() = compilationResolver.packageJsonProducer + @get:Input + val packageJsonCustomFields: Map + get() = PackageJson(fakePackageJsonValue, fakePackageJsonValue) + .apply { + compilation.packageJsonHandlers.forEach { it() } + }.customFields + private fun findDependentTasks(): Collection = producer.internalDependencies.map { dependentResolver -> dependentResolver.npmProject.packageJsonTask