[Gradle, JS] Remove redundant composites in K/JS Gradle Plugin
KT-47351
This commit is contained in:
committed by
Space Team
parent
9407ec35e3
commit
d14a55d775
-17
@@ -11,7 +11,6 @@ import org.gradle.api.Task
|
|||||||
import org.gradle.api.plugins.BasePlugin
|
import org.gradle.api.plugins.BasePlugin
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector
|
import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.CompositeNodeModulesCache
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModulesCache
|
import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModulesCache
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager
|
import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.UsesKotlinNpmResolutionManager
|
import org.jetbrains.kotlin.gradle.targets.js.npm.UsesKotlinNpmResolutionManager
|
||||||
@@ -62,17 +61,10 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
|||||||
nodeJs.nodeModulesGradleCacheDir
|
nodeJs.nodeModulesGradleCacheDir
|
||||||
)
|
)
|
||||||
|
|
||||||
val compositeNodeModulesProvider: Provider<CompositeNodeModulesCache> = CompositeNodeModulesCache.registerIfAbsent(
|
|
||||||
project,
|
|
||||||
project.projectDir,
|
|
||||||
nodeJs.nodeModulesGradleCacheDir
|
|
||||||
)
|
|
||||||
|
|
||||||
val setupFileHasherTask = project.registerTask<KotlinNpmCachesSetup>(KotlinNpmCachesSetup.NAME) {
|
val setupFileHasherTask = project.registerTask<KotlinNpmCachesSetup>(KotlinNpmCachesSetup.NAME) {
|
||||||
it.description = "Setup file hasher for caches"
|
it.description = "Setup file hasher for caches"
|
||||||
|
|
||||||
it.gradleNodeModules.set(gradleNodeModulesProvider)
|
it.gradleNodeModules.set(gradleNodeModulesProvider)
|
||||||
it.compositeNodeModules.set(compositeNodeModulesProvider)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val npmInstall = project.registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) {
|
val npmInstall = project.registerTask<KotlinNpmInstallTask>(KotlinNpmInstallTask.NAME) {
|
||||||
@@ -122,7 +114,6 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
it.parameters.gradleNodeModulesProvider.set(gradleNodeModulesProvider)
|
it.parameters.gradleNodeModulesProvider.set(gradleNodeModulesProvider)
|
||||||
it.parameters.compositeNodeModulesProvider.set(compositeNodeModulesProvider)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
YarnPlugin.apply(project)
|
YarnPlugin.apply(project)
|
||||||
@@ -157,13 +148,6 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
|||||||
null
|
null
|
||||||
)
|
)
|
||||||
|
|
||||||
private val Project.compositeNodeModules
|
|
||||||
get() = CompositeNodeModulesCache.registerIfAbsent(
|
|
||||||
this,
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
|
|
||||||
val Project.kotlinNpmResolutionManager: Provider<KotlinNpmResolutionManager>
|
val Project.kotlinNpmResolutionManager: Provider<KotlinNpmResolutionManager>
|
||||||
get() {
|
get() {
|
||||||
val npmResolutionManager = project.gradle.sharedServices.registerIfAbsent(
|
val npmResolutionManager = project.gradle.sharedServices.registerIfAbsent(
|
||||||
@@ -177,7 +161,6 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
|||||||
project.tasks.withType<UsesKotlinNpmResolutionManager>().configureEach { task ->
|
project.tasks.withType<UsesKotlinNpmResolutionManager>().configureEach { task ->
|
||||||
task.usesService(npmResolutionManager)
|
task.usesService(npmResolutionManager)
|
||||||
task.usesService(gradleNodeModules)
|
task.usesService(gradleNodeModules)
|
||||||
task.usesService(compositeNodeModules)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-45
@@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. 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 java.io.File
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates fake NodeJS module directory from given composite [dependency].
|
|
||||||
*/
|
|
||||||
internal class CompositeNodeModuleBuilder(
|
|
||||||
val srcDir: File,
|
|
||||||
val cacheDir: File
|
|
||||||
) {
|
|
||||||
var srcPackageJsonFile: File = srcDir
|
|
||||||
|
|
||||||
fun rebuild(): File? {
|
|
||||||
check(srcPackageJsonFile.isFile) {
|
|
||||||
"Unable to read package.json of composite build"
|
|
||||||
}
|
|
||||||
|
|
||||||
val packageJson = fromSrcPackageJson(srcPackageJsonFile)!!
|
|
||||||
|
|
||||||
// yarn requires semver
|
|
||||||
packageJson.version = fixSemver(packageJson.version)
|
|
||||||
|
|
||||||
val importedPackageDir = importedPackageDir(cacheDir, packageJson.name, packageJson.version)
|
|
||||||
|
|
||||||
packageJson.main = srcDir.parentFile.resolve(packageJson.main!!)
|
|
||||||
.relativeToOrNull(importedPackageDir)
|
|
||||||
?.path
|
|
||||||
?: throw IllegalStateException("Unable to link composite builds for Kotlin/JS which have different roots")
|
|
||||||
|
|
||||||
return makeNodeModule(cacheDir, packageJson)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun makeNodeModule(
|
|
||||||
container: File,
|
|
||||||
packageJson: PackageJson
|
|
||||||
): File {
|
|
||||||
return makeNodeModule(container, packageJson) {}
|
|
||||||
}
|
|
||||||
-77
@@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. 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.Project
|
|
||||||
import org.gradle.api.Task
|
|
||||||
import org.gradle.api.provider.Property
|
|
||||||
import org.gradle.api.provider.Provider
|
|
||||||
import org.gradle.api.tasks.Internal
|
|
||||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.SingleActionPerProject
|
|
||||||
import java.io.File
|
|
||||||
|
|
||||||
internal interface UsesCompositeNodeModulesCache : Task {
|
|
||||||
@get:Internal
|
|
||||||
val compositeNodeModules: Property<CompositeNodeModulesCache>
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache for storing already created [GradleNodeModule]s
|
|
||||||
*/
|
|
||||||
abstract class CompositeNodeModulesCache : AbstractNodeModulesCache() {
|
|
||||||
override val type: String
|
|
||||||
get() = "composite"
|
|
||||||
|
|
||||||
override fun buildImportedPackage(
|
|
||||||
name: String,
|
|
||||||
version: String,
|
|
||||||
file: File
|
|
||||||
): File? {
|
|
||||||
val module = CompositeNodeModuleBuilder(file, parameters.cacheDir.get().asFile)
|
|
||||||
return module.rebuild()
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private val serviceClass = CompositeNodeModulesCache::class.java
|
|
||||||
private val serviceName = serviceClass.name
|
|
||||||
|
|
||||||
private fun registerIfAbsentImpl(
|
|
||||||
project: Project,
|
|
||||||
rootProjectDir: File?,
|
|
||||||
cacheDir: File?
|
|
||||||
): Provider<CompositeNodeModulesCache> {
|
|
||||||
project.gradle.sharedServices.registrations.findByName(serviceName)?.let {
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
return it.service as Provider<CompositeNodeModulesCache>
|
|
||||||
}
|
|
||||||
|
|
||||||
val message = {
|
|
||||||
"Build service Composite Node Modules should be already registered"
|
|
||||||
}
|
|
||||||
|
|
||||||
requireNotNull(rootProjectDir, message)
|
|
||||||
requireNotNull(cacheDir, message)
|
|
||||||
|
|
||||||
return project.gradle.sharedServices.registerIfAbsent(serviceName, serviceClass) {
|
|
||||||
it.parameters.rootProjectDir.set(rootProjectDir)
|
|
||||||
it.parameters.cacheDir.set(cacheDir)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun registerIfAbsent(
|
|
||||||
project: Project,
|
|
||||||
rootProjectDir: File?,
|
|
||||||
cacheDir: File?
|
|
||||||
) = registerIfAbsentImpl(project, rootProjectDir, cacheDir).also { serviceProvider ->
|
|
||||||
SingleActionPerProject.run(project, UsesCompositeNodeModulesCache::class.java.name) {
|
|
||||||
project.tasks.withType<UsesCompositeNodeModulesCache>().configureEach { task ->
|
|
||||||
task.usesService(serviceProvider)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-1
@@ -51,7 +51,6 @@ abstract class KotlinNpmResolutionManager : BuildService<KotlinNpmResolutionMana
|
|||||||
val packageJsonHandlers: MapProperty<String, List<PackageJson.() -> Unit>>
|
val packageJsonHandlers: MapProperty<String, List<PackageJson.() -> Unit>>
|
||||||
|
|
||||||
val gradleNodeModulesProvider: Property<GradleNodeModulesCache>
|
val gradleNodeModulesProvider: Property<GradleNodeModulesCache>
|
||||||
val compositeNodeModulesProvider: Property<CompositeNodeModulesCache>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val resolution
|
val resolution
|
||||||
|
|||||||
-1
@@ -31,7 +31,6 @@ class KotlinRootNpmResolution(
|
|||||||
): Installation {
|
): Installation {
|
||||||
synchronized(projects) {
|
synchronized(projects) {
|
||||||
npmResolutionManager.parameters.gradleNodeModulesProvider.get().close()
|
npmResolutionManager.parameters.gradleNodeModulesProvider.get().close()
|
||||||
npmResolutionManager.parameters.compositeNodeModulesProvider.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(npmResolutionManager, logger) }
|
||||||
npmEnvironment.packageManager.prepareRootProject(
|
npmEnvironment.packageManager.prepareRootProject(
|
||||||
|
|||||||
-1
@@ -14,7 +14,6 @@ import java.io.Serializable
|
|||||||
*/
|
*/
|
||||||
class PreparedKotlinCompilationNpmResolution(
|
class PreparedKotlinCompilationNpmResolution(
|
||||||
val npmProjectDir: File,
|
val npmProjectDir: File,
|
||||||
val internalCompositeDependencies: Collection<GradleNodeModule>,
|
|
||||||
val externalGradleDependencies: Collection<GradleNodeModule>,
|
val externalGradleDependencies: Collection<GradleNodeModule>,
|
||||||
val externalNpmDependencies: Collection<NpmDependencyDeclaration>,
|
val externalNpmDependencies: Collection<NpmDependencyDeclaration>,
|
||||||
) : Serializable
|
) : Serializable
|
||||||
-18
@@ -15,7 +15,6 @@ import java.io.File
|
|||||||
|
|
||||||
class KotlinCompilationNpmResolution(
|
class KotlinCompilationNpmResolution(
|
||||||
var internalDependencies: Collection<InternalDependency>,
|
var internalDependencies: Collection<InternalDependency>,
|
||||||
var internalCompositeDependencies: Collection<CompositeDependency>,
|
|
||||||
var externalGradleDependencies: Collection<FileExternalGradleDependency>,
|
var externalGradleDependencies: Collection<FileExternalGradleDependency>,
|
||||||
var externalNpmDependencies: Collection<NpmDependencyDeclaration>,
|
var externalNpmDependencies: Collection<NpmDependencyDeclaration>,
|
||||||
var fileCollectionDependencies: Collection<FileCollectionExternalGradleDependency>,
|
var fileCollectionDependencies: Collection<FileCollectionExternalGradleDependency>,
|
||||||
@@ -34,7 +33,6 @@ class KotlinCompilationNpmResolution(
|
|||||||
val inputs: PackageJsonProducerInputs
|
val inputs: PackageJsonProducerInputs
|
||||||
get() = PackageJsonProducerInputs(
|
get() = PackageJsonProducerInputs(
|
||||||
internalDependencies.map { it.projectName },
|
internalDependencies.map { it.projectName },
|
||||||
internalCompositeDependencies.flatMap { it.getPackages() },
|
|
||||||
externalGradleDependencies.map { it.file },
|
externalGradleDependencies.map { it.file },
|
||||||
externalNpmDependencies.map { it.uniqueRepresentation() },
|
externalNpmDependencies.map { it.uniqueRepresentation() },
|
||||||
fileCollectionDependencies.flatMap { it.files }
|
fileCollectionDependencies.flatMap { it.files }
|
||||||
@@ -115,17 +113,6 @@ class KotlinCompilationNpmResolution(
|
|||||||
it.dependencies
|
it.dependencies
|
||||||
}.filter { it.scope != NpmDependency.Scope.DEV }
|
}.filter { it.scope != NpmDependency.Scope.DEV }
|
||||||
|
|
||||||
val compositeDependencies = internalCompositeDependencies.flatMap { dependency ->
|
|
||||||
dependency.getPackages()
|
|
||||||
.map { file ->
|
|
||||||
npmResolutionManager.parameters.compositeNodeModulesProvider.get().get(
|
|
||||||
dependency.dependencyName,
|
|
||||||
dependency.dependencyVersion,
|
|
||||||
file
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}.filterNotNull()
|
|
||||||
|
|
||||||
val toolsNpmDependencies = tasksRequirements
|
val toolsNpmDependencies = tasksRequirements
|
||||||
.getCompilationNpmRequirements(projectPath, compilationDisambiguatedName)
|
.getCompilationNpmRequirements(projectPath, compilationDisambiguatedName)
|
||||||
|
|
||||||
@@ -143,10 +130,6 @@ class KotlinCompilationNpmResolution(
|
|||||||
packageJsonHandlers
|
packageJsonHandlers
|
||||||
)
|
)
|
||||||
|
|
||||||
compositeDependencies.forEach {
|
|
||||||
packageJson.dependencies[it.name] = it.version
|
|
||||||
}
|
|
||||||
|
|
||||||
packageJsonHandlers.forEach {
|
packageJsonHandlers.forEach {
|
||||||
it(packageJson)
|
it(packageJson)
|
||||||
}
|
}
|
||||||
@@ -157,7 +140,6 @@ class KotlinCompilationNpmResolution(
|
|||||||
|
|
||||||
return PreparedKotlinCompilationNpmResolution(
|
return PreparedKotlinCompilationNpmResolution(
|
||||||
npmProjectDir,
|
npmProjectDir,
|
||||||
compositeDependencies,
|
|
||||||
importedExternalGradleDependencies,
|
importedExternalGradleDependencies,
|
||||||
allNpmDependencies,
|
allNpmDependencies,
|
||||||
)
|
)
|
||||||
|
|||||||
-2
@@ -144,7 +144,6 @@ class KotlinCompilationNpmResolver(
|
|||||||
|
|
||||||
inner class ConfigurationVisitor {
|
inner class ConfigurationVisitor {
|
||||||
private val internalDependencies = mutableSetOf<InternalDependency>()
|
private val internalDependencies = mutableSetOf<InternalDependency>()
|
||||||
private val internalCompositeDependencies = mutableSetOf<CompositeDependency>()
|
|
||||||
private val externalGradleDependencies = mutableSetOf<ExternalGradleDependency>()
|
private val externalGradleDependencies = mutableSetOf<ExternalGradleDependency>()
|
||||||
private val externalNpmDependencies = mutableSetOf<NpmDependencyDeclaration>()
|
private val externalNpmDependencies = mutableSetOf<NpmDependencyDeclaration>()
|
||||||
private val fileCollectionDependencies = mutableSetOf<FileCollectionExternalGradleDependency>()
|
private val fileCollectionDependencies = mutableSetOf<FileCollectionExternalGradleDependency>()
|
||||||
@@ -244,7 +243,6 @@ class KotlinCompilationNpmResolver(
|
|||||||
|
|
||||||
fun toPackageJsonProducer() = KotlinCompilationNpmResolution(
|
fun toPackageJsonProducer() = KotlinCompilationNpmResolution(
|
||||||
internalDependencies,
|
internalDependencies,
|
||||||
internalCompositeDependencies,
|
|
||||||
externalGradleDependencies.map {
|
externalGradleDependencies.map {
|
||||||
FileExternalGradleDependency(
|
FileExternalGradleDependency(
|
||||||
it.dependency.moduleName,
|
it.dependency.moduleName,
|
||||||
|
|||||||
-6
@@ -13,12 +13,6 @@ class PackageJsonProducerInputs(
|
|||||||
@get:Input
|
@get:Input
|
||||||
val internalDependencies: Collection<String>,
|
val internalDependencies: Collection<String>,
|
||||||
|
|
||||||
@get:PathSensitive(PathSensitivity.ABSOLUTE)
|
|
||||||
@get:IgnoreEmptyDirectories
|
|
||||||
@get:NormalizeLineEndings
|
|
||||||
@get:InputFiles
|
|
||||||
val internalCompositeDependencies: Collection<File>,
|
|
||||||
|
|
||||||
@get:PathSensitive(PathSensitivity.ABSOLUTE)
|
@get:PathSensitive(PathSensitivity.ABSOLUTE)
|
||||||
@get:IgnoreEmptyDirectories
|
@get:IgnoreEmptyDirectories
|
||||||
@get:NormalizeLineEndings
|
@get:NormalizeLineEndings
|
||||||
|
|||||||
+1
-8
@@ -6,20 +6,14 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.npm.tasks
|
package org.jetbrains.kotlin.gradle.targets.js.npm.tasks
|
||||||
|
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.provider.Property
|
|
||||||
import org.gradle.api.tasks.Internal
|
|
||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.gradle.internal.hash.FileHasher
|
import org.gradle.internal.hash.FileHasher
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.CompositeNodeModulesCache
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModulesCache
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.UsesCompositeNodeModulesCache
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.UsesGradleNodeModulesCache
|
import org.jetbrains.kotlin.gradle.targets.js.npm.UsesGradleNodeModulesCache
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
abstract class KotlinNpmCachesSetup :
|
abstract class KotlinNpmCachesSetup :
|
||||||
DefaultTask(),
|
DefaultTask(),
|
||||||
UsesGradleNodeModulesCache,
|
UsesGradleNodeModulesCache {
|
||||||
UsesCompositeNodeModulesCache {
|
|
||||||
@get:Inject
|
@get:Inject
|
||||||
open val fileHasher: FileHasher
|
open val fileHasher: FileHasher
|
||||||
get() = throw UnsupportedOperationException()
|
get() = throw UnsupportedOperationException()
|
||||||
@@ -27,7 +21,6 @@ abstract class KotlinNpmCachesSetup :
|
|||||||
@TaskAction
|
@TaskAction
|
||||||
fun setup() {
|
fun setup() {
|
||||||
gradleNodeModules.get().fileHasher = fileHasher
|
gradleNodeModules.get().fileHasher = fileHasher
|
||||||
compositeNodeModules.get().fileHasher = fileHasher
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
+1
-10
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
import org.jetbrains.kotlin.gradle.targets.js.npm.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinRootNpmResolver
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinRootNpmResolver
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PackageJsonProducerInputs
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PackageJsonProducerInputs
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -26,8 +25,7 @@ import java.io.File
|
|||||||
abstract class KotlinPackageJsonTask :
|
abstract class KotlinPackageJsonTask :
|
||||||
DefaultTask(),
|
DefaultTask(),
|
||||||
UsesKotlinNpmResolutionManager,
|
UsesKotlinNpmResolutionManager,
|
||||||
UsesGradleNodeModulesCache,
|
UsesGradleNodeModulesCache {
|
||||||
UsesCompositeNodeModulesCache {
|
|
||||||
// Only in configuration phase
|
// Only in configuration phase
|
||||||
// Not part of configuration caching
|
// Not part of configuration caching
|
||||||
|
|
||||||
@@ -43,9 +41,6 @@ abstract class KotlinPackageJsonTask :
|
|||||||
private fun findDependentTasks(): Collection<Any> =
|
private fun findDependentTasks(): Collection<Any> =
|
||||||
compilationResolver.compilationNpmResolution.internalDependencies.map { dependency ->
|
compilationResolver.compilationNpmResolution.internalDependencies.map { dependency ->
|
||||||
nodeJs.resolver[dependency.projectPath][dependency.compilationName].npmProject.packageJsonTaskPath
|
nodeJs.resolver[dependency.projectPath][dependency.compilationName].npmProject.packageJsonTaskPath
|
||||||
} + compilationResolver.compilationNpmResolution.internalCompositeDependencies.map { dependency ->
|
|
||||||
dependency.includedBuild?.task(":$PACKAGE_JSON_UMBRELLA_TASK_NAME") ?: error("includedBuild instance is not available")
|
|
||||||
dependency.includedBuild.task(":${RootPackageJsonTask.NAME}")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----
|
// -----
|
||||||
@@ -115,7 +110,6 @@ abstract class KotlinPackageJsonTask :
|
|||||||
val packageJsonUmbrella = nodeJsTaskProviders.packageJsonUmbrellaTaskProvider
|
val packageJsonUmbrella = nodeJsTaskProviders.packageJsonUmbrellaTaskProvider
|
||||||
val npmResolutionManager = project.kotlinNpmResolutionManager
|
val npmResolutionManager = project.kotlinNpmResolutionManager
|
||||||
val gradleNodeModules = GradleNodeModulesCache.registerIfAbsent(project, null, null)
|
val gradleNodeModules = GradleNodeModulesCache.registerIfAbsent(project, null, null)
|
||||||
val compositeNodeModules = CompositeNodeModulesCache.registerIfAbsent(project, null, null)
|
|
||||||
val packageJsonTask = project.registerTask<KotlinPackageJsonTask>(packageJsonTaskName) { task ->
|
val packageJsonTask = project.registerTask<KotlinPackageJsonTask>(packageJsonTaskName) { task ->
|
||||||
task.compilationDisambiguatedName.set(compilation.disambiguatedName)
|
task.compilationDisambiguatedName.set(compilation.disambiguatedName)
|
||||||
task.description = "Create package.json file for $compilation"
|
task.description = "Create package.json file for $compilation"
|
||||||
@@ -127,9 +121,6 @@ abstract class KotlinPackageJsonTask :
|
|||||||
task.gradleNodeModules.value(gradleNodeModules)
|
task.gradleNodeModules.value(gradleNodeModules)
|
||||||
.disallowChanges()
|
.disallowChanges()
|
||||||
|
|
||||||
task.compositeNodeModules.value(compositeNodeModules)
|
|
||||||
.disallowChanges()
|
|
||||||
|
|
||||||
task.packageJson.set(compilation.npmProject.packageJsonFile)
|
task.packageJson.set(compilation.npmProject.packageJsonFile)
|
||||||
|
|
||||||
task.onlyIf {
|
task.onlyIf {
|
||||||
|
|||||||
+3
-56
@@ -5,12 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||||
|
|
||||||
import com.google.gson.Gson
|
|
||||||
import org.gradle.api.logging.Logger
|
import org.gradle.api.logging.Logger
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModule
|
import org.jetbrains.kotlin.gradle.targets.js.npm.GradleNodeModule
|
||||||
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.fileVersion
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.PreparedKotlinCompilationNpmResolution
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.PreparedKotlinCompilationNpmResolution
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -25,22 +21,13 @@ class YarnImportedPackagesVersionResolver(
|
|||||||
it.externalGradleDependencies
|
it.externalGradleDependencies
|
||||||
}
|
}
|
||||||
|
|
||||||
private val internalCompositeModules = npmProjects.flatMapTo(mutableSetOf()) {
|
|
||||||
it.internalCompositeDependencies
|
|
||||||
}
|
|
||||||
|
|
||||||
fun resolveAndUpdatePackages(): MutableList<String> {
|
fun resolveAndUpdatePackages(): MutableList<String> {
|
||||||
resolve(externalModules, true)
|
resolve(externalModules)
|
||||||
resolve(internalCompositeModules, true)
|
|
||||||
|
|
||||||
if (resolvedVersion.isNotEmpty()) {
|
|
||||||
updatePackages(internalCompositeModules)
|
|
||||||
}
|
|
||||||
|
|
||||||
return importedProjectWorkspaces
|
return importedProjectWorkspaces
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun resolve(modules: MutableSet<GradleNodeModule>, isWorkspace: Boolean) {
|
private fun resolve(modules: MutableSet<GradleNodeModule>) {
|
||||||
modules.groupBy { it.name }.forEach { (name, versions) ->
|
modules.groupBy { it.name }.forEach { (name, versions) ->
|
||||||
val selected: GradleNodeModule = if (versions.size > 1) {
|
val selected: GradleNodeModule = if (versions.size > 1) {
|
||||||
val sorted = versions.sortedBy { it.semver }
|
val sorted = versions.sortedBy { it.semver }
|
||||||
@@ -56,49 +43,9 @@ class YarnImportedPackagesVersionResolver(
|
|||||||
selected
|
selected
|
||||||
} else versions.single()
|
} else versions.single()
|
||||||
|
|
||||||
if (isWorkspace) {
|
importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path)
|
||||||
importedProjectWorkspaces.add(selected.path.relativeTo(nodeJsWorldDir).path)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updatePackages(modules: MutableSet<GradleNodeModule>) {
|
|
||||||
modules.forEach {
|
|
||||||
val packageJsonFile = it.path.resolve(NpmProject.PACKAGE_JSON)
|
|
||||||
val packageJson = packageJsonFile.reader().use {
|
|
||||||
Gson().fromJson<PackageJson>(it, PackageJson::class.java)
|
|
||||||
}
|
|
||||||
|
|
||||||
writePackageJson(
|
|
||||||
packageJson = packageJson,
|
|
||||||
path = packageJsonFile,
|
|
||||||
forceWrite = false
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun writePackageJson(
|
|
||||||
packageJson: PackageJson,
|
|
||||||
path: File,
|
|
||||||
forceWrite: Boolean
|
|
||||||
) {
|
|
||||||
val updates = listOf(packageJson.dependencies, packageJson.devDependencies).map { updateVersionsMap(it) }
|
|
||||||
if (forceWrite || updates.any { it }) {
|
|
||||||
packageJson.saveTo(path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateVersionsMap(map: MutableMap<String, String>): Boolean {
|
|
||||||
var doneSomething = false
|
|
||||||
map.iterator().forEachRemaining {
|
|
||||||
val resolved = resolvedVersion[it.key]
|
|
||||||
if (resolved != null && it.value != resolved.version) {
|
|
||||||
it.setValue(fileVersion(resolved.file))
|
|
||||||
doneSomething = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return doneSomething
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private data class ResolvedNpmDependency(
|
private data class ResolvedNpmDependency(
|
||||||
|
|||||||
Reference in New Issue
Block a user