[Gradle, JS] Extract name only npm dependency to separate interface

#KT-38683 fixed
This commit is contained in:
Ilya Goncharov
2020-05-07 15:58:50 +03:00
parent 228e22b4cb
commit 3c0965802a
@@ -13,8 +13,6 @@ import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File import java.io.File
interface NpmDependencyExtension { interface NpmDependencyExtension {
operator fun invoke(name: String): NpmDependency
operator fun invoke(name: String, version: String): NpmDependency operator fun invoke(name: String, version: String): NpmDependency
operator fun invoke(name: String, directory: File): NpmDependency operator fun invoke(name: String, directory: File): NpmDependency
@@ -22,6 +20,10 @@ interface NpmDependencyExtension {
operator fun invoke(directory: File): NpmDependency operator fun invoke(directory: File): NpmDependency
} }
interface NpmDependencyWithNameOnlyExtension : NpmDependencyExtension {
operator fun invoke(name: String): NpmDependency
}
internal fun Project.addNpmDependencyExtension() { internal fun Project.addNpmDependencyExtension() {
val extensions = (dependencies as ExtensionAware).extensions val extensions = (dependencies as ExtensionAware).extensions
@@ -33,7 +35,7 @@ internal fun Project.addNpmDependencyExtension() {
extensions extensions
.add( .add(
TypeOf.typeOf<NpmDependencyExtension>(NpmDependencyExtension::class.java), TypeOf.typeOf(NpmDependencyWithNameOnlyExtension::class.java),
lowerCamelCaseName(extension, "npm"), lowerCamelCaseName(extension, "npm"),
DefaultNpmDependencyExtension(this, scope) DefaultNpmDependencyExtension(this, scope)
) )
@@ -43,7 +45,9 @@ internal fun Project.addNpmDependencyExtension() {
private class DefaultNpmDependencyExtension( private class DefaultNpmDependencyExtension(
private val project: Project, private val project: Project,
private val scope: NpmDependency.Scope private val scope: NpmDependency.Scope
) : NpmDependencyExtension, Closure<NpmDependency>(project.dependencies) { ) : NpmDependencyExtension,
NpmDependencyWithNameOnlyExtension,
Closure<NpmDependency>(project.dependencies) {
override fun invoke(name: String): NpmDependency = override fun invoke(name: String): NpmDependency =
onlyNameNpmDependency(name) onlyNameNpmDependency(name)