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