[Gradle, JS] Extract interface with directory dependency
#KT-38683 fixed
This commit is contained in:
+16
-10
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user