[Gradle, JS] Support custom attributes for public package json configuration

^KT-57985 fixed
^KT-57817 fixed
This commit is contained in:
Ilya Goncharov
2023-04-19 09:50:19 +00:00
committed by Space Team
parent af9252aa96
commit bf757d3163
7 changed files with 81 additions and 4 deletions
@@ -485,6 +485,19 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) {
}
}
}
@DisplayName("Multiple targets works without clash")
@GradleTest
fun testMultipleJsTargets(gradleVersion: GradleVersion) {
project("kotlin-js-multiple-targets", gradleVersion) {
buildGradleKts.modify(::transformBuildScriptWithPluginsDsl)
build("assemble") {
assertTasksExecuted(":compileProductionExecutableKotlinServerSide")
assertTasksExecuted(":compileProductionExecutableKotlinClientSide")
}
}
}
}
@JsGradlePluginTests
@@ -0,0 +1,30 @@
plugins {
kotlin("multiplatform")
}
repositories {
mavenCentral()
mavenLocal()
}
kotlin {
js("clientSide") {
attributes {
attribute(Attribute.of("js.target", String::class.java), "clientSide")
}
browser {
}
binaries.executable()
}
js("serverSide") {
attributes {
attribute(Attribute.of("js.target", String::class.java), "serverSide")
}
nodejs {
}
binaries.executable()
}
}
@@ -0,0 +1,10 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package com.example
fun main() {
println("Sheldon")
}
@@ -0,0 +1,10 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package com.example
fun main() {
println("Leonard")
}
@@ -9,6 +9,7 @@
package org.jetbrains.kotlin.gradle.plugin.mpp
import groovy.lang.Closure
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
@@ -53,6 +54,19 @@ open class KotlinJsCompilation @Inject internal constructor(
override val processResourcesTaskName: String
get() = disambiguateName("processResources")
val npmConfigurationName
get() = compilation.disambiguateName("npm")
val publicPackageJsonConfigurationName
get() = compilation.disambiguateName("publicPackageJsonConfiguration")
override val relatedConfigurationNames: List<String>
get() = super.relatedConfigurationNames + npmConfigurationName + publicPackageJsonConfigurationName
override fun getAttributes(): AttributeContainer {
return compilation.attributes
}
@Suppress("DEPRECATION")
@Deprecated("Accessing task instance directly is deprecated", replaceWith = ReplaceWith("compileTaskProvider"))
override val compileKotlinTask: Kotlin2JsCompile
@@ -132,4 +132,4 @@ internal val JsBinary.executeTaskBaseName: String
null
)
internal val COMPILE_SYNC = "compileSync"
internal const val COMPILE_SYNC = "compileSync"
@@ -103,7 +103,7 @@ class KotlinCompilationNpmResolver(
override fun toString(): String = "KotlinCompilationNpmResolver(${npmProject.name})"
val aggregatedConfiguration: Configuration by lazy {
val aggregatedConfiguration: Configuration = run {
createAggregatedConfiguration()
}
@@ -126,7 +126,7 @@ class KotlinCompilationNpmResolver(
}
private fun createAggregatedConfiguration(): Configuration {
val all = project.configurations.create(compilation.disambiguateName("npm"))
val all = project.configurations.create(compilation.npmConfigurationName)
all.usesPlatformOf(target)
all.attributes.attribute(Usage.USAGE_ATTRIBUTE, KotlinUsages.consumerRuntimeUsage(target))
@@ -156,7 +156,7 @@ class KotlinCompilationNpmResolver(
}
private fun createPublicPackageJsonConfiguration(): Configuration {
val all = project.configurations.create(compilation.disambiguateName("publicPackageJsonConfiguration"))
val all = project.configurations.create(compilation.publicPackageJsonConfigurationName)
all.usesPlatformOf(target)
all.attributes.attribute(Usage.USAGE_ATTRIBUTE, KotlinUsages.consumerRuntimeUsage(target))