[Gradle, JS] Hardcode with composite build
#KT-32466 fixed #KT-36784 fixed #KT-36864 fixed
This commit is contained in:
+61
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* 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 com.google.gson.GsonBuilder
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.ResolvedDependency
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Creates fake NodeJS module directory from given composite [dependency].
|
||||
*/
|
||||
internal class CompositeNodeModuleBuilder(
|
||||
val project: Project,
|
||||
val dependency: ResolvedDependency,
|
||||
val srcDir: File,
|
||||
val cache: CompositeNodeModulesCache
|
||||
) {
|
||||
var srcPackageJsonFile: File = srcDir
|
||||
|
||||
fun rebuild(): File? {
|
||||
check(srcPackageJsonFile.isFile) {
|
||||
"Unable to read package.json of composite build"
|
||||
}
|
||||
|
||||
val packageJson = fromSrcPackageJson(srcPackageJsonFile)!!
|
||||
|
||||
packageJson.main = srcDir.parentFile.resolve(packageJson.main!!).canonicalPath
|
||||
|
||||
// yarn requires semver
|
||||
packageJson.version = fixSemver(packageJson.version)
|
||||
|
||||
return makeNodeModule2(cache.dir, packageJson)
|
||||
}
|
||||
}
|
||||
|
||||
fun makeNodeModule2(
|
||||
container: File,
|
||||
packageJson: PackageJson
|
||||
): File {
|
||||
val dir = importedPackageDir(container, packageJson.name, packageJson.version)
|
||||
|
||||
if (dir.exists()) dir.deleteRecursively()
|
||||
|
||||
check(dir.mkdirs()) {
|
||||
"Cannot create directory: $dir"
|
||||
}
|
||||
|
||||
val gson = GsonBuilder()
|
||||
.setPrettyPrinting()
|
||||
.create()
|
||||
|
||||
dir.resolve("package.json").writer().use {
|
||||
gson.toJson(packageJson, it)
|
||||
}
|
||||
|
||||
return dir
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* 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.artifacts.ResolvedDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Cache for storing already created [GradleNodeModule]s
|
||||
*/
|
||||
internal class CompositeNodeModulesCache(nodeJs: NodeJsRootExtension) : AbstractNodeModulesCache(nodeJs) {
|
||||
override fun buildImportedPackage(
|
||||
dependency: ResolvedDependency,
|
||||
file: File
|
||||
): File? {
|
||||
val module = CompositeNodeModuleBuilder(project, dependency, file, this)
|
||||
return module.rebuild()
|
||||
}
|
||||
}
|
||||
+1
@@ -18,6 +18,7 @@ class KotlinCompilationNpmResolution(
|
||||
val project: Project,
|
||||
val npmProject: NpmProject,
|
||||
val internalDependencies: Collection<KotlinCompilationNpmResolution>,
|
||||
val internalCompositeDependencies: Collection<GradleNodeModule>,
|
||||
val externalGradleDependencies: Collection<GradleNodeModule>,
|
||||
val externalNpmDependencies: Collection<NpmDependency>,
|
||||
val packageJson: PackageJson
|
||||
|
||||
+13
-1
@@ -198,7 +198,7 @@ internal class KotlinCompilationNpmResolver(
|
||||
?.forEach { dependentResolver ->
|
||||
internalDependencies.add(dependentResolver)
|
||||
}
|
||||
} else {
|
||||
} else if (componentIdentifier !is ProjectComponentIdentifier) {
|
||||
externalGradleDependencies.add(ExternalGradleDependency(dependency, artifact))
|
||||
}
|
||||
|
||||
@@ -253,6 +253,13 @@ internal class KotlinCompilationNpmResolver(
|
||||
resolver.gradleNodeModules.get(it.dependency, it.artifact.file)
|
||||
}
|
||||
|
||||
val compositeDependencies = internalCompositeDependencies.mapNotNull { dependency ->
|
||||
resolver.compositeNodeModules.get(
|
||||
dependency.dependency,
|
||||
dependency.includedBuild.projectDir.resolve("build/js/packages/lib/package.json")
|
||||
)
|
||||
}
|
||||
|
||||
val packageJson = PackageJson(
|
||||
npmProject.name,
|
||||
fixSemver(project.version.toString())
|
||||
@@ -260,6 +267,10 @@ internal class KotlinCompilationNpmResolver(
|
||||
|
||||
packageJson.main = npmProject.main
|
||||
|
||||
compositeDependencies.forEach {
|
||||
packageJson.dependencies[it.name] = it.version
|
||||
}
|
||||
|
||||
resolvedInternalDependencies.forEach {
|
||||
packageJson.dependencies[it.packageJson.name] = it.packageJson.version
|
||||
}
|
||||
@@ -297,6 +308,7 @@ internal class KotlinCompilationNpmResolver(
|
||||
project,
|
||||
npmProject,
|
||||
resolvedInternalDependencies,
|
||||
compositeDependencies,
|
||||
importedExternalGradleDependencies,
|
||||
externalNpmDependencies,
|
||||
packageJson
|
||||
|
||||
+2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatRootResolverPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||
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.KotlinNpmResolutionManager
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJsonUpToDateCheck
|
||||
@@ -37,6 +38,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
||||
private var closed: Boolean = false
|
||||
|
||||
val gradleNodeModules = GradleNodeModulesCache(nodeJs)
|
||||
val compositeNodeModules = CompositeNodeModulesCache(nodeJs)
|
||||
private val projectResolvers = mutableMapOf<Project, KotlinProjectNpmResolver>()
|
||||
|
||||
fun alreadyResolvedMessage(action: String) = "Cannot $action. NodeJS projects already resolved."
|
||||
|
||||
+7
-2
@@ -7,7 +7,10 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.tasks
|
||||
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.plugins.BasePlugin
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.api.tasks.Nested
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
@@ -26,9 +29,11 @@ open class KotlinPackageJsonTask : DefaultTask() {
|
||||
private val producer: KotlinCompilationNpmResolver.PackageJsonProducer
|
||||
get() = compilationResolver.packageJsonProducer
|
||||
|
||||
private fun findDependentTasks(): Collection<KotlinPackageJsonTask> =
|
||||
private fun findDependentTasks(): Collection<Any> =
|
||||
producer.internalDependencies.map { dependentResolver ->
|
||||
dependentResolver.npmProject.packageJsonTask
|
||||
} + producer.internalCompositeDependencies.map { dependency ->
|
||||
dependency.includedBuild.task(":packageJson")
|
||||
}
|
||||
|
||||
@get:Nested
|
||||
|
||||
+2
-2
@@ -9,8 +9,8 @@ import com.google.gson.Gson
|
||||
import org.gradle.api.Project
|
||||
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.resolved.KotlinCompilationNpmResolution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import java.io.File
|
||||
|
||||
class YarnImportedPackagesVersionResolver(
|
||||
@@ -21,7 +21,7 @@ class YarnImportedPackagesVersionResolver(
|
||||
private val resolvedVersion = mutableMapOf<String, String>()
|
||||
private val importedProjectWorkspaces = mutableListOf<String>()
|
||||
private val externalModules = npmProjects.flatMapTo(mutableSetOf()) {
|
||||
it.externalGradleDependencies
|
||||
it.externalGradleDependencies + it.internalCompositeDependencies
|
||||
}
|
||||
|
||||
fun resolveAndUpdatePackages(): MutableList<String> {
|
||||
|
||||
Reference in New Issue
Block a user