[Gradle, JS] Move logic of resolving NpmDependency to Npm Api
#KT-36196 fixed
This commit is contained in:
+6
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.npm
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* NodeJS package manager API
|
||||
@@ -22,6 +23,11 @@ interface NpmApi {
|
||||
skipExecution: Boolean
|
||||
)
|
||||
|
||||
fun resolveDependency(
|
||||
resolvedNpmProject: KotlinCompilationNpmResolution,
|
||||
dependency: NpmDependency
|
||||
): Set<File>
|
||||
|
||||
companion object {
|
||||
fun resolveOperationDescription(packageManagerTitle: String): String =
|
||||
"Resolving NPM dependencies using $packageManagerTitle"
|
||||
|
||||
+10
-37
@@ -15,8 +15,8 @@ import org.gradle.api.internal.artifacts.ResolvableDependency
|
||||
import org.gradle.api.internal.artifacts.dependencies.SelfResolvingDependencyInternal
|
||||
import org.gradle.api.tasks.TaskDependency
|
||||
import org.gradle.internal.component.local.model.DefaultLibraryBinaryIdentifier
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import java.io.File
|
||||
|
||||
data class NpmDependency(
|
||||
@@ -59,43 +59,16 @@ data class NpmDependency(
|
||||
return visited
|
||||
}
|
||||
|
||||
override fun resolve(transitive: Boolean): Set<File> {
|
||||
val npmPackage = resolveProject() ?: return mutableSetOf()
|
||||
val npmProject = npmPackage.npmProject
|
||||
|
||||
val all = mutableSetOf<File>()
|
||||
val visited = mutableSetOf<NpmDependency>()
|
||||
|
||||
fun visit(item: NpmDependency) {
|
||||
if (item in visited) return
|
||||
visited.add(item)
|
||||
|
||||
npmProject.resolve(item.key)?.let {
|
||||
if (it.isFile) all.add(it)
|
||||
if (it.path.endsWith(".js")) {
|
||||
val baseName = it.path.removeSuffix(".js")
|
||||
val metaJs = File(baseName + ".meta.js")
|
||||
if (metaJs.isFile) all.add(metaJs)
|
||||
val kjsmDir = File(baseName)
|
||||
if (kjsmDir.isDirectory) {
|
||||
kjsmDir.walkTopDown()
|
||||
.filter { it.extension == "kjsm" }
|
||||
.forEach { all.add(it) }
|
||||
}
|
||||
}
|
||||
override fun resolve(transitive: Boolean): Set<File> =
|
||||
resolveProject()
|
||||
?.let {
|
||||
it
|
||||
.npmProject
|
||||
.nodeJs
|
||||
.packageManager
|
||||
.resolveDependency(it, this)
|
||||
}
|
||||
|
||||
if (transitive) {
|
||||
item.dependencies.forEach {
|
||||
visit(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
visit(this)
|
||||
|
||||
return all
|
||||
}
|
||||
?: mutableSetOf()
|
||||
|
||||
override fun resolve(): MutableSet<File> {
|
||||
val npmPackage = parent?.resolveProject()
|
||||
|
||||
+6
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
|
||||
object Yarn : NpmApi {
|
||||
@@ -20,6 +21,11 @@ object Yarn : NpmApi {
|
||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) =
|
||||
getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject)
|
||||
|
||||
override fun resolveDependency(
|
||||
resolvedNpmProject: KotlinCompilationNpmResolution,
|
||||
dependency: NpmDependency
|
||||
) = getDelegate(resolvedNpmProject.project).resolveDependency(resolvedNpmProject, dependency)
|
||||
|
||||
override fun resolveRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
|
||||
+47
@@ -10,9 +10,13 @@ import org.jetbrains.kotlin.gradle.internal.execWithProgress
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import java.io.File
|
||||
|
||||
abstract class YarnBasics : NpmApi {
|
||||
|
||||
private val resolvedDependencies = mutableMapOf<NpmDependency, Set<File>>()
|
||||
|
||||
override fun setup(project: Project) {
|
||||
YarnPlugin.apply(project).executeSetup()
|
||||
}
|
||||
@@ -36,6 +40,49 @@ abstract class YarnBasics : NpmApi {
|
||||
|
||||
}
|
||||
|
||||
override fun resolveDependency(
|
||||
resolvedNpmProject: KotlinCompilationNpmResolution,
|
||||
dependency: NpmDependency
|
||||
): Set<File> {
|
||||
val files = resolvedDependencies[dependency]
|
||||
|
||||
if (files != null) {
|
||||
return files
|
||||
}
|
||||
|
||||
val npmProject = resolvedNpmProject.npmProject
|
||||
|
||||
val all = mutableSetOf<File>()
|
||||
|
||||
npmProject.resolve(dependency.key)?.let {
|
||||
if (it.isFile) all.add(it)
|
||||
if (it.path.endsWith(".js")) {
|
||||
val baseName = it.path.removeSuffix(".js")
|
||||
val metaJs = File(baseName + ".meta.js")
|
||||
if (metaJs.isFile) all.add(metaJs)
|
||||
val kjsmDir = File(baseName)
|
||||
if (kjsmDir.isDirectory) {
|
||||
kjsmDir.walkTopDown()
|
||||
.filter { it.extension == "kjsm" }
|
||||
.forEach { all.add(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependency.dependencies.forEach {
|
||||
resolveDependency(
|
||||
resolvedNpmProject,
|
||||
it
|
||||
).also { files ->
|
||||
all.addAll(files)
|
||||
}
|
||||
}
|
||||
|
||||
resolvedDependencies[dependency] = all
|
||||
|
||||
return all
|
||||
}
|
||||
|
||||
protected fun yarnLockReadTransitiveDependencies(
|
||||
nodeWorkDir: File,
|
||||
srcDependenciesList: Collection<NpmDependency>
|
||||
|
||||
Reference in New Issue
Block a user