[Gradle, JS] Extract interface with directory dependency

#KT-38683 fixed
This commit is contained in:
Ilya Goncharov
2020-05-07 16:14:36 +03:00
parent 52214e9093
commit 4d32140f6f
@@ -9,34 +9,40 @@ import groovy.lang.Closure
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.reflect.TypeOf import org.gradle.api.reflect.TypeOf
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.*
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File import java.io.File
interface NpmDependencyExtension { interface NpmDependencyExtension {
operator fun invoke(name: String, version: String): NpmDependency @Deprecated("Declaring NPM dependency without version is forbidden")
operator fun invoke(name: String): NpmDependency
operator fun invoke(name: String, version: String): NpmDependency
}
interface NpmDirectoryDependencyExtension : NpmDependencyExtension {
operator fun invoke(name: String, directory: File): NpmDependency operator fun invoke(name: String, directory: File): NpmDependency
operator fun invoke(directory: File): NpmDependency operator fun invoke(directory: File): NpmDependency
} }
interface NpmDependencyWithNameOnlyExtension : NpmDependencyExtension {
@Deprecated("Declaring NPM dependency without version is forbidden")
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
NpmDependency.Scope.values() values()
.forEach { scope -> .forEach { scope ->
val extension = scope.name val extension = scope.name
.removePrefix(NpmDependency.Scope.NORMAL.name) .removePrefix(NORMAL.name)
.toLowerCase() .toLowerCase()
val type = when (scope) {
NORMAL, DEV, OPTIONAL -> NpmDirectoryDependencyExtension::class.java
PEER -> NpmDependencyExtension::class.java
}
extensions extensions
.add( .add(
TypeOf.typeOf(NpmDependencyWithNameOnlyExtension::class.java), TypeOf.typeOf<NpmDependencyExtension>(type),
lowerCamelCaseName(extension, "npm"), lowerCamelCaseName(extension, "npm"),
DefaultNpmDependencyExtension(this, scope) DefaultNpmDependencyExtension(this, scope)
) )
@@ -47,7 +53,7 @@ private class DefaultNpmDependencyExtension(
private val project: Project, private val project: Project,
private val scope: NpmDependency.Scope private val scope: NpmDependency.Scope
) : NpmDependencyExtension, ) : NpmDependencyExtension,
NpmDependencyWithNameOnlyExtension, NpmDirectoryDependencyExtension,
Closure<NpmDependency>(project.dependencies) { Closure<NpmDependency>(project.dependencies) {
override fun invoke(name: String): NpmDependency = override fun invoke(name: String): NpmDependency =
onlyNameNpmDependency(name) onlyNameNpmDependency(name)