[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 project: Project,
|
||||||
val npmProject: NpmProject,
|
val npmProject: NpmProject,
|
||||||
val internalDependencies: Collection<KotlinCompilationNpmResolution>,
|
val internalDependencies: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
val internalCompositeDependencies: Collection<GradleNodeModule>,
|
||||||
val externalGradleDependencies: Collection<GradleNodeModule>,
|
val externalGradleDependencies: Collection<GradleNodeModule>,
|
||||||
val externalNpmDependencies: Collection<NpmDependency>,
|
val externalNpmDependencies: Collection<NpmDependency>,
|
||||||
val packageJson: PackageJson
|
val packageJson: PackageJson
|
||||||
|
|||||||
+13
-1
@@ -198,7 +198,7 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
?.forEach { dependentResolver ->
|
?.forEach { dependentResolver ->
|
||||||
internalDependencies.add(dependentResolver)
|
internalDependencies.add(dependentResolver)
|
||||||
}
|
}
|
||||||
} else {
|
} else if (componentIdentifier !is ProjectComponentIdentifier) {
|
||||||
externalGradleDependencies.add(ExternalGradleDependency(dependency, artifact))
|
externalGradleDependencies.add(ExternalGradleDependency(dependency, artifact))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,6 +253,13 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
resolver.gradleNodeModules.get(it.dependency, it.artifact.file)
|
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(
|
val packageJson = PackageJson(
|
||||||
npmProject.name,
|
npmProject.name,
|
||||||
fixSemver(project.version.toString())
|
fixSemver(project.version.toString())
|
||||||
@@ -260,6 +267,10 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
|
|
||||||
packageJson.main = npmProject.main
|
packageJson.main = npmProject.main
|
||||||
|
|
||||||
|
compositeDependencies.forEach {
|
||||||
|
packageJson.dependencies[it.name] = it.version
|
||||||
|
}
|
||||||
|
|
||||||
resolvedInternalDependencies.forEach {
|
resolvedInternalDependencies.forEach {
|
||||||
packageJson.dependencies[it.packageJson.name] = it.packageJson.version
|
packageJson.dependencies[it.packageJson.name] = it.packageJson.version
|
||||||
}
|
}
|
||||||
@@ -297,6 +308,7 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
project,
|
project,
|
||||||
npmProject,
|
npmProject,
|
||||||
resolvedInternalDependencies,
|
resolvedInternalDependencies,
|
||||||
|
compositeDependencies,
|
||||||
importedExternalGradleDependencies,
|
importedExternalGradleDependencies,
|
||||||
externalNpmDependencies,
|
externalNpmDependencies,
|
||||||
packageJson
|
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.dukat.DukatRootResolverPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
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.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.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.PackageJsonUpToDateCheck
|
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJsonUpToDateCheck
|
||||||
@@ -37,6 +38,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
private var closed: Boolean = false
|
private var closed: Boolean = false
|
||||||
|
|
||||||
val gradleNodeModules = GradleNodeModulesCache(nodeJs)
|
val gradleNodeModules = GradleNodeModulesCache(nodeJs)
|
||||||
|
val compositeNodeModules = CompositeNodeModulesCache(nodeJs)
|
||||||
private val projectResolvers = mutableMapOf<Project, KotlinProjectNpmResolver>()
|
private val projectResolvers = mutableMapOf<Project, KotlinProjectNpmResolver>()
|
||||||
|
|
||||||
fun alreadyResolvedMessage(action: String) = "Cannot $action. NodeJS projects already resolved."
|
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.DefaultTask
|
||||||
import org.gradle.api.plugins.BasePlugin
|
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.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
@@ -26,9 +29,11 @@ open class KotlinPackageJsonTask : DefaultTask() {
|
|||||||
private val producer: KotlinCompilationNpmResolver.PackageJsonProducer
|
private val producer: KotlinCompilationNpmResolver.PackageJsonProducer
|
||||||
get() = compilationResolver.packageJsonProducer
|
get() = compilationResolver.packageJsonProducer
|
||||||
|
|
||||||
private fun findDependentTasks(): Collection<KotlinPackageJsonTask> =
|
private fun findDependentTasks(): Collection<Any> =
|
||||||
producer.internalDependencies.map { dependentResolver ->
|
producer.internalDependencies.map { dependentResolver ->
|
||||||
dependentResolver.npmProject.packageJsonTask
|
dependentResolver.npmProject.packageJsonTask
|
||||||
|
} + producer.internalCompositeDependencies.map { dependency ->
|
||||||
|
dependency.includedBuild.task(":packageJson")
|
||||||
}
|
}
|
||||||
|
|
||||||
@get:Nested
|
@get:Nested
|
||||||
|
|||||||
+2
-2
@@ -9,8 +9,8 @@ import com.google.gson.Gson
|
|||||||
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.GradleNodeModule
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
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.PackageJson
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class YarnImportedPackagesVersionResolver(
|
class YarnImportedPackagesVersionResolver(
|
||||||
@@ -21,7 +21,7 @@ class YarnImportedPackagesVersionResolver(
|
|||||||
private val resolvedVersion = mutableMapOf<String, String>()
|
private val resolvedVersion = mutableMapOf<String, String>()
|
||||||
private val importedProjectWorkspaces = mutableListOf<String>()
|
private val importedProjectWorkspaces = mutableListOf<String>()
|
||||||
private val externalModules = npmProjects.flatMapTo(mutableSetOf()) {
|
private val externalModules = npmProjects.flatMapTo(mutableSetOf()) {
|
||||||
it.externalGradleDependencies
|
it.externalGradleDependencies + it.internalCompositeDependencies
|
||||||
}
|
}
|
||||||
|
|
||||||
fun resolveAndUpdatePackages(): MutableList<String> {
|
fun resolveAndUpdatePackages(): MutableList<String> {
|
||||||
|
|||||||
Reference in New Issue
Block a user