[Gradle, JS] Use gradle dependency constraints for yarn resolutions
^KT-41054 fixed
This commit is contained in:
+2
-1
@@ -21,7 +21,8 @@ interface NpmApi {
|
|||||||
|
|
||||||
fun prepareRootProject(
|
fun prepareRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
resolutions: Map<String, String>
|
||||||
)
|
)
|
||||||
|
|
||||||
fun resolveRootProject(
|
fun resolveRootProject(
|
||||||
|
|||||||
+77
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.Action
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.artifacts.*
|
||||||
|
import org.gradle.api.attributes.AttributeContainer
|
||||||
|
import org.gradle.api.internal.artifacts.DefaultModuleIdentifier
|
||||||
|
import org.gradle.api.internal.artifacts.dependencies.DefaultMutableVersionConstraint
|
||||||
|
import org.gradle.api.internal.artifacts.dependencies.DependencyConstraintInternal
|
||||||
|
import org.gradle.api.internal.attributes.ImmutableAttributes
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
|
|
||||||
|
class NpmDependencyConstraint(
|
||||||
|
internal val project: Project,
|
||||||
|
private val name: String,
|
||||||
|
private val version: String,
|
||||||
|
val scope: NpmDependency.Scope = NpmDependency.Scope.NORMAL
|
||||||
|
) : DependencyConstraintInternal {
|
||||||
|
|
||||||
|
private val moduleIdentifier = DefaultModuleIdentifier.newId(null, name);
|
||||||
|
private val versionConstraint = DefaultMutableVersionConstraint(version)
|
||||||
|
|
||||||
|
override fun getGroup(): String? = moduleIdentifier.group
|
||||||
|
|
||||||
|
override fun getName(): String = moduleIdentifier.name
|
||||||
|
|
||||||
|
override fun getVersion(): String = versionConstraint.version
|
||||||
|
|
||||||
|
override fun matchesStrictly(p0: ModuleVersionIdentifier): Boolean {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getModule(): ModuleIdentifier {
|
||||||
|
return moduleIdentifier
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getAttributes(): AttributeContainer {
|
||||||
|
return ImmutableAttributes.EMPTY
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun attributes(p0: Action<in AttributeContainer>): DependencyConstraint {
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun version(p0: Action<in MutableVersionConstraint>) {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getReason(): String? {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun because(p0: String?) {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getVersionConstraint(): VersionConstraint {
|
||||||
|
println("get version constraint")
|
||||||
|
val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
||||||
|
nodeJs.npmResolutionManager.requireConfiguringState()
|
||||||
|
.resolutions[name] = version
|
||||||
|
return versionConstraint
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setForce(p0: Boolean) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isForce(): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
@@ -31,6 +31,8 @@ class PackageJson(
|
|||||||
|
|
||||||
var workspaces: Collection<String>? = null
|
var workspaces: Collection<String>? = null
|
||||||
|
|
||||||
|
var resolutions: Map<String, String>? = null
|
||||||
|
|
||||||
@Suppress("USELESS_ELVIS")
|
@Suppress("USELESS_ELVIS")
|
||||||
val devDependencies = mutableMapOf<String, String>()
|
val devDependencies = mutableMapOf<String, String>()
|
||||||
get() = field ?: mutableMapOf()
|
get() = field ?: mutableMapOf()
|
||||||
|
|||||||
+3
-1
@@ -49,6 +49,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
val compositeNodeModules = CompositeNodeModulesCache(nodeJs)
|
val compositeNodeModules = CompositeNodeModulesCache(nodeJs)
|
||||||
val packageJsonUmbrella = rootProject.registerTask(PACKAGE_JSON_UMBRELLA_TASK_NAME, Task::class.java) {}
|
val packageJsonUmbrella = rootProject.registerTask(PACKAGE_JSON_UMBRELLA_TASK_NAME, Task::class.java) {}
|
||||||
val projectResolvers = mutableMapOf<Project, KotlinProjectNpmResolver>()
|
val projectResolvers = mutableMapOf<Project, KotlinProjectNpmResolver>()
|
||||||
|
val resolutions = mutableMapOf<String, String>()
|
||||||
|
|
||||||
fun alreadyResolvedMessage(action: String) = "Cannot $action. NodeJS projects already resolved."
|
fun alreadyResolvedMessage(action: String) = "Cannot $action. NodeJS projects already resolved."
|
||||||
|
|
||||||
@@ -110,7 +111,8 @@ internal class KotlinRootNpmResolver internal constructor(
|
|||||||
|
|
||||||
nodeJs.packageManager.prepareRootProject(
|
nodeJs.packageManager.prepareRootProject(
|
||||||
rootProject,
|
rootProject,
|
||||||
allNpmPackages
|
allNpmPackages,
|
||||||
|
resolutions
|
||||||
)
|
)
|
||||||
|
|
||||||
return Installation(
|
return Installation(
|
||||||
|
|||||||
+10
-3
@@ -30,11 +30,13 @@ class Yarn : NpmApi {
|
|||||||
|
|
||||||
override fun prepareRootProject(
|
override fun prepareRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
resolutions: Map<String, String>
|
||||||
) = getDelegate(rootProject.project)
|
) = getDelegate(rootProject.project)
|
||||||
.prepareRootProject(
|
.prepareRootProject(
|
||||||
rootProject,
|
rootProject,
|
||||||
subProjects
|
subProjects,
|
||||||
|
resolutions
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun resolveRootProject(
|
override fun resolveRootProject(
|
||||||
@@ -44,7 +46,12 @@ class Yarn : NpmApi {
|
|||||||
cliArgs: List<String>
|
cliArgs: List<String>
|
||||||
) {
|
) {
|
||||||
getDelegate(rootProject.project)
|
getDelegate(rootProject.project)
|
||||||
.resolveRootProject(rootProject, npmProjects, skipExecution, cliArgs)
|
.resolveRootProject(
|
||||||
|
rootProject,
|
||||||
|
npmProjects,
|
||||||
|
skipExecution,
|
||||||
|
cliArgs
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveDependency(
|
override fun resolveDependency(
|
||||||
|
|||||||
+2
-1
@@ -33,7 +33,8 @@ class YarnSimple : YarnBasics() {
|
|||||||
|
|
||||||
override fun prepareRootProject(
|
override fun prepareRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
resolutions: Map<String, String>
|
||||||
) = Unit
|
) = Unit
|
||||||
|
|
||||||
override fun resolveRootProject(
|
override fun resolveRootProject(
|
||||||
|
|||||||
+15
-4
@@ -26,23 +26,31 @@ class YarnWorkspaces : YarnBasics() {
|
|||||||
|
|
||||||
override fun prepareRootProject(
|
override fun prepareRootProject(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
resolutions: Map<String, String>
|
||||||
) {
|
) {
|
||||||
check(rootProject == rootProject.rootProject)
|
check(rootProject == rootProject.rootProject)
|
||||||
setup(rootProject)
|
setup(rootProject)
|
||||||
return prepareRootPackageJson(
|
return prepareRootPackageJson(
|
||||||
rootProject,
|
rootProject,
|
||||||
subProjects
|
subProjects,
|
||||||
|
resolutions
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun prepareRootPackageJson(
|
private fun prepareRootPackageJson(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
npmProjects: Collection<KotlinCompilationNpmResolution>
|
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
resolutions: Map<String, String>
|
||||||
) {
|
) {
|
||||||
val rootPackageJsonFile = preparedFiles(rootProject).single()
|
val rootPackageJsonFile = preparedFiles(rootProject).single()
|
||||||
|
|
||||||
saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, rootPackageJsonFile)
|
saveRootProjectWorkspacesPackageJson(
|
||||||
|
rootProject,
|
||||||
|
npmProjects,
|
||||||
|
resolutions,
|
||||||
|
rootPackageJsonFile
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resolveRootProject(
|
override fun resolveRootProject(
|
||||||
@@ -68,6 +76,7 @@ class YarnWorkspaces : YarnBasics() {
|
|||||||
private fun saveRootProjectWorkspacesPackageJson(
|
private fun saveRootProjectWorkspacesPackageJson(
|
||||||
rootProject: Project,
|
rootProject: Project,
|
||||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||||
|
resolutions: Map<String, String>,
|
||||||
rootPackageJsonFile: File
|
rootPackageJsonFile: File
|
||||||
) {
|
) {
|
||||||
val nodeJsWorldDir = rootPackageJsonFile.parentFile
|
val nodeJsWorldDir = rootPackageJsonFile.parentFile
|
||||||
@@ -79,6 +88,8 @@ class YarnWorkspaces : YarnBasics() {
|
|||||||
YarnImportedPackagesVersionResolver(rootProject, npmProjects, nodeJsWorldDir).resolveAndUpdatePackages()
|
YarnImportedPackagesVersionResolver(rootProject, npmProjects, nodeJsWorldDir).resolveAndUpdatePackages()
|
||||||
|
|
||||||
rootPackageJson.workspaces = npmProjectWorkspaces + importedProjectWorkspaces
|
rootPackageJson.workspaces = npmProjectWorkspaces + importedProjectWorkspaces
|
||||||
|
println("resolutions $resolutions")
|
||||||
|
rootPackageJson.resolutions = resolutions
|
||||||
rootPackageJson.saveTo(
|
rootPackageJson.saveTo(
|
||||||
rootPackageJsonFile
|
rootPackageJsonFile
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user