[Gradle, JS] Make PublicPackageJsonTask cc-compatible
This commit is contained in:
+1
-1
@@ -85,7 +85,7 @@ internal class DukatCompilationResolverPlugin(
|
||||
internalCompositeDependencies: Set<KotlinCompilationNpmResolver.CompositeDependency>,
|
||||
externalGradleDependencies: Set<KotlinCompilationNpmResolver.ExternalGradleDependency>,
|
||||
externalNpmDependencies: Set<NpmDependency>,
|
||||
fileCollectionDependencies: Set<FileCollectionDependency>
|
||||
fileCollectionDependencies: Set<KotlinCompilationNpmResolver.FileCollectionExternalGradleDependency>
|
||||
) {
|
||||
if (nodeJs.experimental.discoverTypes) {
|
||||
// todo: discoverTypes
|
||||
|
||||
+2
@@ -53,6 +53,8 @@ internal abstract class AbstractNodeModulesCache(nodeJs: NodeJsRootExtension) :
|
||||
}
|
||||
}
|
||||
|
||||
// Synchronized as tasks from configuration cache run in parallel and every task has it's own modules cache
|
||||
@Synchronized
|
||||
fun makeNodeModule(
|
||||
container: File,
|
||||
packageJson: PackageJson,
|
||||
|
||||
+47
-38
@@ -11,8 +11,10 @@ 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.getValue
|
||||
import org.jetbrains.kotlin.gradle.utils.property
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
@@ -27,29 +29,32 @@ constructor(
|
||||
private val nodeJs = npmProject.nodeJs
|
||||
|
||||
private val compilationName = compilation.name
|
||||
private val projectPath = project.path
|
||||
|
||||
private val compilationResolution
|
||||
get() = nodeJs.npmResolutionManager.requireInstalled(
|
||||
services,
|
||||
logger
|
||||
)[projectPath][compilationName]
|
||||
|
||||
private val compilationResolution by lazy {
|
||||
nodeJs.npmResolutionManager.requireInstalled(
|
||||
services,
|
||||
logger
|
||||
)[project.path][compilationName]
|
||||
}
|
||||
|
||||
init {
|
||||
// TODO: temporary workaround for configuration cache enabled builds
|
||||
// disableTaskOnConfigurationCacheBuild { nodeJs.npmResolutionManager.toString() }
|
||||
}
|
||||
|
||||
// @get:Input
|
||||
// val packageJsonCustomFields: Map<String, Any?>
|
||||
// get() = PackageJson(fakePackageJsonValue, fakePackageJsonValue)
|
||||
// .apply {
|
||||
// compilation.packageJsonHandlers.forEach { it() }
|
||||
// }.customFields
|
||||
// TODO: is map contains only serializable values?
|
||||
@get:Input
|
||||
val packageJsonCustomFields: Map<String, Any?> by lazy {
|
||||
PackageJson(fakePackageJsonValue, fakePackageJsonValue)
|
||||
.apply {
|
||||
compilation.packageJsonHandlers.forEach { it() }
|
||||
}.customFields
|
||||
}
|
||||
|
||||
@get:Nested
|
||||
internal val externalDependencies: Collection<NpmDependencyDeclaration> by lazy {
|
||||
compilationResolution.externalNpmDependencies
|
||||
internal val externalDependencies: Collection<NpmDependencyDeclaration>
|
||||
get() = compilationResolution.externalNpmDependencies
|
||||
.map {
|
||||
NpmDependencyDeclaration(
|
||||
scope = it.scope,
|
||||
@@ -58,40 +63,44 @@ constructor(
|
||||
generateExternals = it.generateExternals
|
||||
)
|
||||
}
|
||||
|
||||
private val publicPackageJsonTaskName by lazy {
|
||||
npmProject.publicPackageJsonTaskName
|
||||
}
|
||||
|
||||
private val publicPackageJsonTaskName = npmProject.publicPackageJsonTaskName
|
||||
|
||||
@get:OutputFile
|
||||
var packageJsonFile: File by property {
|
||||
private val defaultPackageJsonFile by lazy {
|
||||
project.buildDir
|
||||
.resolve("tmp")
|
||||
.resolve(publicPackageJsonTaskName)
|
||||
.resolve(PACKAGE_JSON)
|
||||
}
|
||||
|
||||
@get:OutputFile
|
||||
var packageJsonFile: File by property { defaultPackageJsonFile }
|
||||
|
||||
private val isJrIrCompilation = compilation is KotlinJsIrCompilation
|
||||
private val projectVersion = project.version.toString()
|
||||
|
||||
@TaskAction
|
||||
fun resolve() {
|
||||
// val compilation = npmProject.compilation
|
||||
//
|
||||
// packageJson(npmProject, realExternalDependencies).let { packageJson ->
|
||||
// packageJson.main = "${npmProject.name}.js"
|
||||
//
|
||||
// if (compilation is KotlinJsIrCompilation) {
|
||||
// packageJson.types = "${npmProject.name}.d.ts"
|
||||
// }
|
||||
//
|
||||
// packageJson.apply {
|
||||
// listOf(
|
||||
// dependencies,
|
||||
// devDependencies,
|
||||
// peerDependencies,
|
||||
// optionalDependencies
|
||||
// ).forEach { it.processDependencies() }
|
||||
// }
|
||||
//
|
||||
// packageJson.saveTo(this@PublicPackageJsonTask.packageJsonFile)
|
||||
// }
|
||||
packageJson(npmProject.name, projectVersion, npmProject.main, externalDependencies).let { packageJson ->
|
||||
packageJson.main = "${npmProject.name}.js"
|
||||
|
||||
if (isJrIrCompilation) {
|
||||
packageJson.types = "${npmProject.name}.d.ts"
|
||||
}
|
||||
|
||||
packageJson.apply {
|
||||
listOf(
|
||||
dependencies,
|
||||
devDependencies,
|
||||
peerDependencies,
|
||||
optionalDependencies
|
||||
).forEach { it.processDependencies() }
|
||||
}
|
||||
|
||||
packageJson.saveTo(this@PublicPackageJsonTask.packageJsonFile)
|
||||
}
|
||||
}
|
||||
|
||||
private fun MutableMap<String, String>.processDependencies() {
|
||||
|
||||
+1
-2
@@ -5,7 +5,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.npm.plugins
|
||||
|
||||
import org.gradle.api.artifacts.FileCollectionDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmResolver
|
||||
|
||||
@@ -15,6 +14,6 @@ internal interface CompilationResolverPlugin {
|
||||
internalCompositeDependencies: Set<KotlinCompilationNpmResolver.CompositeDependency>,
|
||||
externalGradleDependencies: Set<KotlinCompilationNpmResolver.ExternalGradleDependency>,
|
||||
externalNpmDependencies: Set<NpmDependency>,
|
||||
fileCollectionDependencies: Set<FileCollectionDependency>
|
||||
fileCollectionDependencies: Set<KotlinCompilationNpmResolver.FileCollectionExternalGradleDependency>
|
||||
)
|
||||
}
|
||||
+12
-6
@@ -11,6 +11,7 @@ import org.gradle.api.artifacts.ResolvedArtifact
|
||||
import org.gradle.api.artifacts.ResolvedDependency
|
||||
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
|
||||
import org.gradle.api.attributes.Usage
|
||||
import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.initialization.IncludedBuild
|
||||
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
|
||||
import org.gradle.api.tasks.Input
|
||||
@@ -210,6 +211,11 @@ internal class KotlinCompilationNpmResolver(
|
||||
val artifact: ResolvedArtifact
|
||||
)
|
||||
|
||||
data class FileCollectionExternalGradleDependency(
|
||||
val fileCollection: FileCollection,
|
||||
val dependencyVersion: String?
|
||||
)
|
||||
|
||||
data class FileExternalGradleDependency(
|
||||
val dependencyName: String,
|
||||
val dependencyVersion: String,
|
||||
@@ -226,7 +232,7 @@ internal class KotlinCompilationNpmResolver(
|
||||
private val internalCompositeDependencies = mutableSetOf<CompositeDependency>()
|
||||
private val externalGradleDependencies = mutableSetOf<ExternalGradleDependency>()
|
||||
private val externalNpmDependencies = mutableSetOf<NpmDependency>()
|
||||
private val fileCollectionDependencies = mutableSetOf<FileCollectionDependency>()
|
||||
private val fileCollectionDependencies = mutableSetOf<FileCollectionExternalGradleDependency>()
|
||||
|
||||
fun visit(configuration: Configuration) {
|
||||
configuration.resolvedConfiguration.firstLevelModuleDependencies.forEach {
|
||||
@@ -236,7 +242,7 @@ internal class KotlinCompilationNpmResolver(
|
||||
configuration.allDependencies.forEach { dependency ->
|
||||
when (dependency) {
|
||||
is NpmDependency -> externalNpmDependencies.add(dependency)
|
||||
is FileCollectionDependency -> fileCollectionDependencies.add(dependency)
|
||||
is FileCollectionDependency -> fileCollectionDependencies.add(FileCollectionExternalGradleDependency(dependency.files, dependency.version))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -369,7 +375,7 @@ internal class KotlinCompilationNpmResolver(
|
||||
val externalGradleDependencies: Collection<ExternalGradleDependency>,
|
||||
@Transient
|
||||
val externalNpmDependencies: Collection<NpmDependency>,
|
||||
val fileCollectionDependencies: Collection<FileCollectionDependency>
|
||||
val fileCollectionDependencies: Collection<FileCollectionExternalGradleDependency>
|
||||
) {
|
||||
val externalNpmDependencyDeclarations by lazy {
|
||||
externalNpmDependencies.map {
|
||||
@@ -393,7 +399,7 @@ internal class KotlinCompilationNpmResolver(
|
||||
internalCompositeDependencies.flatMap { it.getPackages() },
|
||||
fileExternalGradleDependencies.map { it.file },
|
||||
externalNpmDependencyDeclarations.map { it.uniqueRepresentation() },
|
||||
fileCollectionDependencies.map { it.files }.flatMap { it.files }
|
||||
fileCollectionDependencies.map{ it.fileCollection }.flatMap { it.files }
|
||||
)
|
||||
|
||||
fun createPackageJson(skipWriting: Boolean): KotlinCompilationNpmResolution {
|
||||
@@ -404,13 +410,13 @@ internal class KotlinCompilationNpmResolver(
|
||||
val importedExternalGradleDependencies = fileExternalGradleDependencies.mapNotNull {
|
||||
gradleNodeModules.get(it.dependencyName, it.dependencyVersion, it.file)
|
||||
} + fileCollectionDependencies.flatMap { dependency ->
|
||||
dependency.files
|
||||
dependency.fileCollection.files
|
||||
// Gradle can hash with FileHasher only files and only existed files
|
||||
.filter { it.isFile }
|
||||
.map { file ->
|
||||
gradleNodeModules.get(
|
||||
file.name,
|
||||
dependency.version ?: "0.0.1",
|
||||
dependency.dependencyVersion ?: "0.0.1",
|
||||
file
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user