[Gradle, JS] KotlinPackageJson configuration cache works
This commit is contained in:
committed by
Alexander Likhachev
parent
cd0dfd6fa9
commit
b9aa577f84
+9
-7
@@ -5,20 +5,22 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependencyDeclaration
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.toDeclaration
|
||||
|
||||
class TasksRequirements {
|
||||
@Transient
|
||||
private val _byTask = mutableMapOf<RequiresNpmDependencies, Set<RequiredKotlinJsDependency>>()
|
||||
private val byCompilation = mutableMapOf<KotlinJsCompilation, MutableSet<NpmDependency>>()
|
||||
private val byCompilation = mutableMapOf<String, MutableSet<NpmDependencyDeclaration>>()
|
||||
|
||||
val byTask: Map<RequiresNpmDependencies, Set<RequiredKotlinJsDependency>>
|
||||
get() = _byTask
|
||||
|
||||
fun getCompilationNpmRequirements(compilation: KotlinJsCompilation): Set<NpmDependency> =
|
||||
byCompilation[compilation]
|
||||
internal fun getCompilationNpmRequirements(compilationName: String): Set<NpmDependencyDeclaration> =
|
||||
byCompilation[compilationName]
|
||||
?: setOf()
|
||||
|
||||
fun addTaskRequirements(task: RequiresNpmDependencies) {
|
||||
@@ -32,11 +34,11 @@ class TasksRequirements {
|
||||
.filterIsInstance<NpmDependency>()
|
||||
.toMutableSet()
|
||||
|
||||
val compilation = task.compilation
|
||||
val compilation = task.compilation.name
|
||||
if (compilation in byCompilation) {
|
||||
byCompilation[compilation]!!.addAll(requiredNpmDependencies)
|
||||
byCompilation[compilation]!!.addAll(requiredNpmDependencies.map { it.toDeclaration() })
|
||||
} else {
|
||||
byCompilation[compilation] = requiredNpmDependencies
|
||||
byCompilation[compilation] = requiredNpmDependencies.map { it.toDeclaration() }.toMutableSet()
|
||||
}
|
||||
}
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright 2010-2020 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 org.jetbrains.kotlin.gradle.targets.js.npm
|
||||
|
||||
import org.gradle.api.tasks.Input
|
||||
|
||||
data class NpmDependencyDeclaration(
|
||||
@Input
|
||||
val scope: NpmDependency.Scope,
|
||||
@Input
|
||||
val name: String,
|
||||
@Input
|
||||
val version: String,
|
||||
@Input
|
||||
val generateExternals: Boolean
|
||||
)
|
||||
|
||||
internal fun NpmDependency.toDeclaration(): NpmDependencyDeclaration =
|
||||
NpmDependencyDeclaration(
|
||||
scope = this.scope,
|
||||
name = this.name,
|
||||
version = this.version,
|
||||
generateExternals = this.generateExternals
|
||||
)
|
||||
+8
-8
@@ -124,11 +124,11 @@ fun fromSrcPackageJson(packageJson: File?): PackageJson? =
|
||||
Gson().fromJson(it, PackageJson::class.java)
|
||||
}
|
||||
|
||||
fun packageJson(
|
||||
internal fun packageJson(
|
||||
name: String,
|
||||
version: String,
|
||||
main: String,
|
||||
npmDependencies: Collection<NpmDependency>
|
||||
npmDependencies: Collection<NpmDependencyDeclaration>
|
||||
): PackageJson {
|
||||
|
||||
val packageJson = PackageJson(
|
||||
@@ -141,17 +141,17 @@ fun packageJson(
|
||||
val dependencies = mutableMapOf<String, String>()
|
||||
|
||||
npmDependencies.forEach {
|
||||
val module = it.key
|
||||
val module = it.name
|
||||
dependencies[module] = chooseVersion(module, dependencies[module], it.version)
|
||||
}
|
||||
|
||||
npmDependencies.forEach {
|
||||
val dependency = dependencies.getValue(it.key)
|
||||
val dependency = dependencies.getValue(it.name)
|
||||
when (it.scope) {
|
||||
NpmDependency.Scope.NORMAL -> packageJson.dependencies[it.key] = dependency
|
||||
NpmDependency.Scope.DEV -> packageJson.devDependencies[it.key] = dependency
|
||||
NpmDependency.Scope.OPTIONAL -> packageJson.optionalDependencies[it.key] = dependency
|
||||
NpmDependency.Scope.PEER -> packageJson.peerDependencies[it.key] = dependency
|
||||
NpmDependency.Scope.NORMAL -> packageJson.dependencies[it.name] = dependency
|
||||
NpmDependency.Scope.DEV -> packageJson.devDependencies[it.name] = dependency
|
||||
NpmDependency.Scope.OPTIONAL -> packageJson.optionalDependencies[it.name] = dependency
|
||||
NpmDependency.Scope.PEER -> packageJson.peerDependencies[it.name] = dependency
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+5
-17
@@ -11,7 +11,6 @@ import org.gradle.api.tasks.Nested
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_JSON
|
||||
import org.jetbrains.kotlin.gradle.utils.disableTaskOnConfigurationCacheBuild
|
||||
import org.jetbrains.kotlin.gradle.utils.property
|
||||
@@ -43,19 +42,17 @@ constructor(
|
||||
}.customFields
|
||||
|
||||
@get:Nested
|
||||
internal val externalDependencies: Collection<NestedNpmDependency>
|
||||
internal val externalDependencies: Collection<NpmDependencyDeclaration>
|
||||
get() = compilationResolution.externalNpmDependencies
|
||||
.map {
|
||||
NestedNpmDependency(
|
||||
NpmDependencyDeclaration(
|
||||
scope = it.scope,
|
||||
name = it.name,
|
||||
version = it.version
|
||||
version = it.version,
|
||||
generateExternals = it.generateExternals
|
||||
)
|
||||
}
|
||||
|
||||
private val realExternalDependencies: Collection<NpmDependency>
|
||||
get() = compilationResolution.externalNpmDependencies
|
||||
|
||||
private val publicPackageJsonTaskName = npmProject.publicPackageJsonTaskName
|
||||
|
||||
@get:OutputFile
|
||||
@@ -101,13 +98,4 @@ constructor(
|
||||
companion object {
|
||||
const val NAME = "publicPackageJson"
|
||||
}
|
||||
}
|
||||
|
||||
internal data class NestedNpmDependency(
|
||||
@Input
|
||||
val scope: NpmDependency.Scope,
|
||||
@Input
|
||||
val name: String,
|
||||
@Input
|
||||
val version: String
|
||||
)
|
||||
}
|
||||
+14
-5
@@ -6,10 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.npm.resolved
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModule
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
||||
|
||||
/**
|
||||
* Resolved [NpmProject]
|
||||
@@ -22,11 +19,23 @@ class KotlinCompilationNpmResolution(
|
||||
val internalDependencies: Collection<KotlinCompilationNpmResolution>,
|
||||
val internalCompositeDependencies: Collection<GradleNodeModule>,
|
||||
val externalGradleDependencies: Collection<GradleNodeModule>,
|
||||
val externalNpmDependencies: Collection<NpmDependency>,
|
||||
private val _externalNpmDependencies: Collection<NpmDependencyDeclaration>,
|
||||
val packageJson: PackageJson
|
||||
) {
|
||||
val project
|
||||
get() = _project!!
|
||||
val npmProject
|
||||
get() = _npmProject!!
|
||||
|
||||
val externalNpmDependencies
|
||||
get() = _externalNpmDependencies
|
||||
.map {
|
||||
NpmDependency(
|
||||
project = project,
|
||||
name = it.name,
|
||||
version = it.version,
|
||||
scope = it.scope,
|
||||
generateExternals = it.generateExternals
|
||||
)
|
||||
}
|
||||
}
|
||||
+9
-3
@@ -62,6 +62,8 @@ internal class KotlinCompilationNpmResolver(
|
||||
@Transient
|
||||
val npmProject = compilation.npmProject
|
||||
|
||||
val compilationName = compilation.name
|
||||
|
||||
val npmName by lazy {
|
||||
npmProject.name
|
||||
}
|
||||
@@ -80,6 +82,10 @@ internal class KotlinCompilationNpmResolver(
|
||||
|
||||
val nodeJs get() = resolver.nodeJs
|
||||
|
||||
val taskRequirements by lazy {
|
||||
nodeJs.taskRequirements
|
||||
}
|
||||
|
||||
val target get() = compilation.target
|
||||
|
||||
val project get() = target.project
|
||||
@@ -415,10 +421,10 @@ internal class KotlinCompilationNpmResolver(
|
||||
}
|
||||
.filterNotNull()
|
||||
|
||||
// val toolsNpmDependencies = nodeJs.taskRequirements
|
||||
// .getCompilationNpmRequirements(compilation)
|
||||
val toolsNpmDependencies = taskRequirements
|
||||
.getCompilationNpmRequirements(compilationName)
|
||||
|
||||
val allNpmDependencies = externalNpmDependencies/* + toolsNpmDependencies*/
|
||||
val allNpmDependencies = externalNpmDependencies.map { it.toDeclaration() } + toolsNpmDependencies
|
||||
|
||||
val packageJson = packageJson(
|
||||
npmName,
|
||||
|
||||
+6
-2
@@ -33,6 +33,10 @@ open class KotlinPackageJsonTask : DefaultTask() {
|
||||
@Transient
|
||||
private lateinit var compilation: KotlinJsCompilation
|
||||
|
||||
private val compilationName by lazy {
|
||||
compilation.name
|
||||
}
|
||||
|
||||
@Input
|
||||
val projectPath = project.path
|
||||
|
||||
@@ -60,8 +64,8 @@ open class KotlinPackageJsonTask : DefaultTask() {
|
||||
@get:Input
|
||||
internal val toolsNpmDependencies: List<String> by lazy {
|
||||
nodeJs.taskRequirements
|
||||
.getCompilationNpmRequirements(compilation)
|
||||
.map { it.uniqueRepresentation() }
|
||||
.getCompilationNpmRequirements(compilationName)
|
||||
.map { it.toString() }
|
||||
}
|
||||
|
||||
@get:Nested
|
||||
|
||||
Reference in New Issue
Block a user