[Gradle, JS] Build service npm resolution manager does not contain packageJsonHandlers
^KT-60469 fixed
This commit is contained in:
committed by
Space Team
parent
80200fc3c5
commit
a5893d4bee
+1
-1
@@ -53,7 +53,7 @@ abstract class JsIrConfigurationCacheIT : KGPBaseTest() {
|
||||
}
|
||||
|
||||
@DisplayName("configuration cache is reused when idea.version system property is changed in browser project")
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_7_5)
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_8_0)
|
||||
@GradleTest
|
||||
fun testBrowserDistributionOnIdeaPropertyChange(gradleVersion: GradleVersion) {
|
||||
project("kotlin-js-browser-project", gradleVersion) {
|
||||
|
||||
+1
@@ -1136,6 +1136,7 @@ class Kotlin2JsIrGradlePluginIT : KGPBaseTest() {
|
||||
assertEquals(JsonNull.INSTANCE, jso.get("customField2").asJsonNull)
|
||||
assertEquals(JsonNull.INSTANCE, jso.get("customField3").asJsonNull)
|
||||
assertEquals(JsonNull.INSTANCE, jso.get("customField4").asJsonObject.get("foo").asJsonNull)
|
||||
assertEquals("@as/main", jso.get("customField5").asString)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -47,11 +47,13 @@ kotlin {
|
||||
binaries.executable()
|
||||
|
||||
compilations.named("main") {
|
||||
val nameOfModule = this@named.name
|
||||
packageJson {
|
||||
customField("customField1", mapOf("one" to 1, "two" to 2))
|
||||
customField("customField2", null)
|
||||
customField("customField3" to null)
|
||||
customField("customField4", mapOf("foo" to null))
|
||||
customField("customField5", "@as/${nameOfModule}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -9,6 +9,7 @@
|
||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||
|
||||
import groovy.lang.Closure
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.attributes.AttributeContainer
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
|
||||
@@ -78,9 +79,9 @@ open class KotlinJsCompilation @Inject internal constructor(
|
||||
override val compileTaskProvider: TaskProvider<Kotlin2JsCompile>
|
||||
get() = compilation.compileTaskProvider as TaskProvider<Kotlin2JsCompile>
|
||||
|
||||
internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>()
|
||||
internal val packageJsonHandlers = mutableListOf<Action<PackageJson>>()
|
||||
|
||||
fun packageJson(handler: PackageJson.() -> Unit) {
|
||||
fun packageJson(handler: Action<PackageJson>) {
|
||||
packageJsonHandlers.add(handler)
|
||||
}
|
||||
|
||||
|
||||
-7
@@ -109,13 +109,6 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
||||
nodeJs.resolver.close()
|
||||
}
|
||||
)
|
||||
it.parameters.packageJsonHandlers.set(
|
||||
objectFactory.providerWithLazyConvention {
|
||||
nodeJs.resolver.compilations.associate { compilation ->
|
||||
"${compilation.project.path}:${compilation.disambiguatedName}" to compilation.packageJsonHandlers
|
||||
}
|
||||
}
|
||||
)
|
||||
it.parameters.gradleNodeModulesProvider.set(gradleNodeModulesProvider)
|
||||
}
|
||||
|
||||
|
||||
-4
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.targets.js.npm
|
||||
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.gradle.api.provider.MapProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.services.BuildService
|
||||
import org.gradle.api.services.BuildServiceParameters
|
||||
@@ -47,9 +46,6 @@ abstract class KotlinNpmResolutionManager : BuildService<KotlinNpmResolutionMana
|
||||
interface Parameters : BuildServiceParameters {
|
||||
val resolution: Property<KotlinRootNpmResolution>
|
||||
|
||||
// pulled up from compilation resolver since it was failing with ClassNotFoundException on deserialization, see KT-49061
|
||||
val packageJsonHandlers: MapProperty<String, List<PackageJson.() -> Unit>>
|
||||
|
||||
val gradleNodeModulesProvider: Property<GradleNodeModulesCache>
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.npm
|
||||
|
||||
import com.google.gson.*
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.GradleException
|
||||
import org.jetbrains.kotlin.gradle.internal.ensureParentDirsCreated
|
||||
import java.io.File
|
||||
@@ -122,7 +123,7 @@ internal fun packageJson(
|
||||
version: String,
|
||||
main: String,
|
||||
npmDependencies: Collection<NpmDependencyDeclaration>,
|
||||
packageJsonHandlers: List<PackageJson.() -> Unit>
|
||||
packageJsonHandlers: List<Action<PackageJson>>
|
||||
): PackageJson {
|
||||
|
||||
val packageJson = PackageJson(
|
||||
@@ -150,7 +151,7 @@ internal fun packageJson(
|
||||
}
|
||||
|
||||
packageJsonHandlers.forEach {
|
||||
it(packageJson)
|
||||
it.execute(packageJson)
|
||||
}
|
||||
|
||||
return packageJson
|
||||
|
||||
+15
-10
@@ -5,8 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.npm
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.provider.ListProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.Internal
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
@@ -38,22 +41,24 @@ abstract class PublicPackageJsonTask :
|
||||
@get:Internal
|
||||
abstract val npmProjectMain: Property<String>
|
||||
|
||||
private val packageJsonHandlers: List<PackageJson.() -> Unit>
|
||||
get() = npmResolutionManager.get().parameters.packageJsonHandlers.get()
|
||||
.getValue("$projectPath:${compilationDisambiguatedName.get()}")
|
||||
|
||||
@get:Internal
|
||||
abstract val packageJsonHandlers: ListProperty<Action<PackageJson>>
|
||||
|
||||
@get:Input
|
||||
val packageJsonCustomFields: Map<String, Any?>
|
||||
get() = PackageJson(fakePackageJsonValue, fakePackageJsonValue)
|
||||
.apply {
|
||||
packageJsonHandlers.forEach { it() }
|
||||
}.customFields
|
||||
internal val packageJsonInputHandlers: Provider<PackageJson> by lazy {
|
||||
packageJsonHandlers.map { packageJsonHandlersList ->
|
||||
PackageJson(fakePackageJsonValue, fakePackageJsonValue)
|
||||
.apply {
|
||||
packageJsonHandlersList.forEach { it.execute(this) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val compilationResolution
|
||||
get() = npmResolutionManager.get().resolution.get()[projectPath][compilationDisambiguatedName.get()]
|
||||
.getResolutionOrPrepare(
|
||||
npmResolutionManager.get(),
|
||||
packageJsonHandlers,
|
||||
logger
|
||||
)
|
||||
|
||||
@@ -78,7 +83,7 @@ abstract class PublicPackageJsonTask :
|
||||
projectVersion,
|
||||
npmProjectMain.get(),
|
||||
externalDependencies,
|
||||
packageJsonHandlers
|
||||
packageJsonHandlers.get()
|
||||
).let { packageJson ->
|
||||
packageJson.main = "${npmProjectName.get()}.js"
|
||||
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ class KotlinRootNpmResolution(
|
||||
synchronized(projects) {
|
||||
npmResolutionManager.parameters.gradleNodeModulesProvider.get().close()
|
||||
|
||||
val projectResolutions: List<PreparedKotlinCompilationNpmResolution> = projects.values.flatMap { it.npmProjects }.map { it.close(npmResolutionManager, logger) }
|
||||
val projectResolutions: List<PreparedKotlinCompilationNpmResolution> = projects.values.flatMap { it.npmProjects }.map { it.close() }
|
||||
npmEnvironment.packageManager.prepareRootProject(
|
||||
npmEnvironment,
|
||||
rootProjectName,
|
||||
|
||||
+14
-12
@@ -5,7 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.logging.Logger
|
||||
import org.gradle.api.provider.ListProperty
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.TasksRequirements
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.PreparedKotlinCompilationNpmResolution
|
||||
@@ -39,12 +41,13 @@ class KotlinCompilationNpmResolution(
|
||||
)
|
||||
|
||||
private var closed = false
|
||||
private var resolution: PreparedKotlinCompilationNpmResolution? = null
|
||||
internal var resolution: PreparedKotlinCompilationNpmResolution? = null
|
||||
|
||||
@Synchronized
|
||||
fun prepareWithDependencies(
|
||||
skipWriting: Boolean = false,
|
||||
npmResolutionManager: KotlinNpmResolutionManager,
|
||||
packageJsonHandlers: ListProperty<Action<PackageJson>>,
|
||||
logger: Logger
|
||||
): PreparedKotlinCompilationNpmResolution {
|
||||
check(resolution == null) { "$this already resolved" }
|
||||
@@ -52,6 +55,7 @@ class KotlinCompilationNpmResolution(
|
||||
return createPreparedResolution(
|
||||
skipWriting,
|
||||
npmResolutionManager,
|
||||
packageJsonHandlers,
|
||||
logger
|
||||
).also {
|
||||
resolution = it
|
||||
@@ -61,29 +65,29 @@ class KotlinCompilationNpmResolution(
|
||||
@Synchronized
|
||||
fun getResolutionOrPrepare(
|
||||
npmResolutionManager: KotlinNpmResolutionManager,
|
||||
packageJsonHandlers: ListProperty<Action<PackageJson>>,
|
||||
logger: Logger,
|
||||
): PreparedKotlinCompilationNpmResolution {
|
||||
|
||||
return resolution ?: prepareWithDependencies(
|
||||
skipWriting = true,
|
||||
npmResolutionManager,
|
||||
packageJsonHandlers,
|
||||
logger
|
||||
)
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun close(
|
||||
npmResolutionManager: KotlinNpmResolutionManager,
|
||||
logger: Logger,
|
||||
): PreparedKotlinCompilationNpmResolution {
|
||||
fun close(): PreparedKotlinCompilationNpmResolution {
|
||||
check(!closed) { "$this already closed" }
|
||||
closed = true
|
||||
return getResolutionOrPrepare(npmResolutionManager, logger)
|
||||
return resolution!!
|
||||
}
|
||||
|
||||
fun createPreparedResolution(
|
||||
skipWriting: Boolean,
|
||||
npmResolutionManager: KotlinNpmResolutionManager,
|
||||
packageJsonHandlers: ListProperty<Action<PackageJson>>,
|
||||
logger: Logger
|
||||
): PreparedKotlinCompilationNpmResolution {
|
||||
val rootResolver = npmResolutionManager.parameters.resolution.get()
|
||||
@@ -93,6 +97,7 @@ class KotlinCompilationNpmResolution(
|
||||
val compilationNpmResolution: KotlinCompilationNpmResolution = rootResolver[it.projectPath][it.compilationName]
|
||||
compilationNpmResolution.getResolutionOrPrepare(
|
||||
npmResolutionManager,
|
||||
packageJsonHandlers,
|
||||
logger
|
||||
)
|
||||
}
|
||||
@@ -120,20 +125,17 @@ class KotlinCompilationNpmResolution(
|
||||
|
||||
val otherNpmDependencies = toolsNpmDependencies + transitiveNpmDependencies
|
||||
val allNpmDependencies = disambiguateDependencies(externalNpmDependencies, otherNpmDependencies, logger)
|
||||
val packageJsonHandlers =
|
||||
npmResolutionManager.parameters.packageJsonHandlers.get()["$projectPath:${compilationDisambiguatedName}"]
|
||||
?: emptyList()
|
||||
|
||||
val packageJson = packageJson(
|
||||
npmProjectName,
|
||||
npmProjectVersion,
|
||||
npmProjectMain,
|
||||
allNpmDependencies,
|
||||
packageJsonHandlers
|
||||
packageJsonHandlers.get()
|
||||
)
|
||||
|
||||
packageJsonHandlers.forEach {
|
||||
it(packageJson)
|
||||
packageJsonHandlers.get().forEach {
|
||||
it.execute(packageJson)
|
||||
}
|
||||
|
||||
if (!skipWriting) {
|
||||
|
||||
+1
@@ -72,6 +72,7 @@ class KotlinCompilationNpmResolver(
|
||||
it.dependsOn(packageJsonTaskHolder)
|
||||
|
||||
it.compilationDisambiguatedName.set(compilation.disambiguatedName)
|
||||
it.packageJsonHandlers.set(compilation.packageJsonHandlers)
|
||||
|
||||
it.npmResolutionManager.value(npmResolutionManager)
|
||||
.disallowChanges()
|
||||
|
||||
+14
-9
@@ -5,9 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.npm.tasks
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||
import org.gradle.api.provider.ListProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.work.DisableCachingByDefault
|
||||
import org.gradle.work.NormalizeLineEndings
|
||||
@@ -55,19 +58,19 @@ abstract class KotlinPackageJsonTask :
|
||||
@get:Internal
|
||||
abstract val compilationDisambiguatedName: Property<String>
|
||||
|
||||
private val packageJsonHandlers: List<PackageJson.() -> Unit>
|
||||
get() = npmResolutionManager.get().parameters.packageJsonHandlers.get()
|
||||
.getValue("$projectPath:${compilationDisambiguatedName.get()}")
|
||||
@get:Internal
|
||||
abstract val packageJsonHandlers: ListProperty<Action<PackageJson>>
|
||||
|
||||
@get:Input
|
||||
val packageJsonCustomFields: Map<String, Any?> by lazy {
|
||||
PackageJson(fakePackageJsonValue, fakePackageJsonValue)
|
||||
.apply {
|
||||
packageJsonHandlers.forEach { it() }
|
||||
}.customFields
|
||||
internal val packageJsonInputHandlers: Provider<PackageJson> by lazy {
|
||||
packageJsonHandlers.map { packageJsonHandlersList ->
|
||||
PackageJson(fakePackageJsonValue, fakePackageJsonValue)
|
||||
.apply {
|
||||
packageJsonHandlersList.forEach { it.execute(this) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@get:Input
|
||||
internal val toolsNpmDependencies: List<String> by lazy {
|
||||
nodeJs.taskRequirements
|
||||
@@ -112,6 +115,7 @@ abstract class KotlinPackageJsonTask :
|
||||
npmResolutionManager.get().resolution.get()[projectPath][compilationDisambiguatedName.get()]
|
||||
.prepareWithDependencies(
|
||||
npmResolutionManager = npmResolutionManager.get(),
|
||||
packageJsonHandlers = packageJsonHandlers,
|
||||
logger = logger
|
||||
)
|
||||
}
|
||||
@@ -130,6 +134,7 @@ abstract class KotlinPackageJsonTask :
|
||||
val gradleNodeModules = GradleNodeModulesCache.registerIfAbsent(project, null, null)
|
||||
val packageJsonTask = project.registerTask<KotlinPackageJsonTask>(packageJsonTaskName) { task ->
|
||||
task.compilationDisambiguatedName.set(compilation.disambiguatedName)
|
||||
task.packageJsonHandlers.set(compilation.packageJsonHandlers)
|
||||
task.description = "Create package.json file for $compilation"
|
||||
task.group = NodeJsRootPlugin.TASKS_GROUP_NAME
|
||||
|
||||
|
||||
Reference in New Issue
Block a user