[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(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
resolutions: Map<String, String>
|
||||
)
|
||||
|
||||
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 resolutions: Map<String, String>? = null
|
||||
|
||||
@Suppress("USELESS_ELVIS")
|
||||
val devDependencies = mutableMapOf<String, String>()
|
||||
get() = field ?: mutableMapOf()
|
||||
|
||||
+3
-1
@@ -49,6 +49,7 @@ internal class KotlinRootNpmResolver internal constructor(
|
||||
val compositeNodeModules = CompositeNodeModulesCache(nodeJs)
|
||||
val packageJsonUmbrella = rootProject.registerTask(PACKAGE_JSON_UMBRELLA_TASK_NAME, Task::class.java) {}
|
||||
val projectResolvers = mutableMapOf<Project, KotlinProjectNpmResolver>()
|
||||
val resolutions = mutableMapOf<String, String>()
|
||||
|
||||
fun alreadyResolvedMessage(action: String) = "Cannot $action. NodeJS projects already resolved."
|
||||
|
||||
@@ -110,7 +111,8 @@ internal class KotlinRootNpmResolver internal constructor(
|
||||
|
||||
nodeJs.packageManager.prepareRootProject(
|
||||
rootProject,
|
||||
allNpmPackages
|
||||
allNpmPackages,
|
||||
resolutions
|
||||
)
|
||||
|
||||
return Installation(
|
||||
|
||||
+10
-3
@@ -30,11 +30,13 @@ class Yarn : NpmApi {
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
resolutions: Map<String, String>
|
||||
) = getDelegate(rootProject.project)
|
||||
.prepareRootProject(
|
||||
rootProject,
|
||||
subProjects
|
||||
subProjects,
|
||||
resolutions
|
||||
)
|
||||
|
||||
override fun resolveRootProject(
|
||||
@@ -44,7 +46,12 @@ class Yarn : NpmApi {
|
||||
cliArgs: List<String>
|
||||
) {
|
||||
getDelegate(rootProject.project)
|
||||
.resolveRootProject(rootProject, npmProjects, skipExecution, cliArgs)
|
||||
.resolveRootProject(
|
||||
rootProject,
|
||||
npmProjects,
|
||||
skipExecution,
|
||||
cliArgs
|
||||
)
|
||||
}
|
||||
|
||||
override fun resolveDependency(
|
||||
|
||||
+2
-1
@@ -33,7 +33,8 @@ class YarnSimple : YarnBasics() {
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
resolutions: Map<String, String>
|
||||
) = Unit
|
||||
|
||||
override fun resolveRootProject(
|
||||
|
||||
+15
-4
@@ -26,23 +26,31 @@ class YarnWorkspaces : YarnBasics() {
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
resolutions: Map<String, String>
|
||||
) {
|
||||
check(rootProject == rootProject.rootProject)
|
||||
setup(rootProject)
|
||||
return prepareRootPackageJson(
|
||||
rootProject,
|
||||
subProjects
|
||||
subProjects,
|
||||
resolutions
|
||||
)
|
||||
}
|
||||
|
||||
private fun prepareRootPackageJson(
|
||||
rootProject: Project,
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
resolutions: Map<String, String>
|
||||
) {
|
||||
val rootPackageJsonFile = preparedFiles(rootProject).single()
|
||||
|
||||
saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, rootPackageJsonFile)
|
||||
saveRootProjectWorkspacesPackageJson(
|
||||
rootProject,
|
||||
npmProjects,
|
||||
resolutions,
|
||||
rootPackageJsonFile
|
||||
)
|
||||
}
|
||||
|
||||
override fun resolveRootProject(
|
||||
@@ -68,6 +76,7 @@ class YarnWorkspaces : YarnBasics() {
|
||||
private fun saveRootProjectWorkspacesPackageJson(
|
||||
rootProject: Project,
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
resolutions: Map<String, String>,
|
||||
rootPackageJsonFile: File
|
||||
) {
|
||||
val nodeJsWorldDir = rootPackageJsonFile.parentFile
|
||||
@@ -79,6 +88,8 @@ class YarnWorkspaces : YarnBasics() {
|
||||
YarnImportedPackagesVersionResolver(rootProject, npmProjects, nodeJsWorldDir).resolveAndUpdatePackages()
|
||||
|
||||
rootPackageJson.workspaces = npmProjectWorkspaces + importedProjectWorkspaces
|
||||
println("resolutions $resolutions")
|
||||
rootPackageJson.resolutions = resolutions
|
||||
rootPackageJson.saveTo(
|
||||
rootPackageJsonFile
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user