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