[Gradle, JS]AbstractNpmDependencyExtension -> DefaultNpmDependencyExtension

This commit is contained in:
subroh0508
2020-05-06 23:40:36 +09:00
committed by Ilya Goncharov
parent abf942b928
commit 50151e0e01
@@ -9,6 +9,7 @@ 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.utils.lowerCamelCaseName
import java.io.File import java.io.File
interface NpmDependencyExtension { interface NpmDependencyExtension {
@@ -19,11 +20,10 @@ interface NpmDependencyExtension {
operator fun invoke(directory: File): NpmDependency operator fun invoke(directory: File): NpmDependency
} }
private abstract class AbstractNpmDependencyExtension( private class DefaultNpmDependencyExtension(
dependencies: ExtensionAware,
private val project: Project, private val project: Project,
private val scope: NpmDependency.Scope private val scope: NpmDependency.Scope
) : NpmDependencyExtension, Closure<NpmDependency>(dependencies) { ) : NpmDependencyExtension, Closure<NpmDependency>(project.dependencies) {
override operator fun invoke(name: String, version: String): NpmDependency = override operator fun invoke(name: String, version: String): NpmDependency =
NpmDependency( NpmDependency(
project = project, project = project,
@@ -92,29 +92,20 @@ private abstract class AbstractNpmDependencyExtension(
} }
} }
private const val NAME_DEPENDENCIES = "npm"
private const val NAME_DEV_DEPENDENCIES = "devNpm"
private const val NAME_PEER_DEPENDENCIES = "peerNpm"
fun Project.addNpmDependencyExtension() { fun Project.addNpmDependencyExtension() {
val dependencies = this.dependencies as ExtensionAware val extensions = (dependencies as ExtensionAware).extensions
listOf(NpmDependency.Scope.NORMAL, NpmDependency.Scope.DEV, NpmDependency.Scope.PEER).forEach { scope -> NpmDependency.Scope.values()
val name = when (scope) { .forEach { scope ->
NpmDependency.Scope.DEV -> NAME_DEV_DEPENDENCIES val extension = scope.name
NpmDependency.Scope.PEER -> NAME_PEER_DEPENDENCIES .removePrefix(NpmDependency.Scope.NORMAL.name)
else -> NAME_DEPENDENCIES .toLowerCase()
extensions
.add(
TypeOf.typeOf<NpmDependencyExtension>(NpmDependencyExtension::class.java),
lowerCamelCaseName(extension, "npm"),
DefaultNpmDependencyExtension(this, scope)
)
} }
val dependencyExtension: NpmDependencyExtension = object : AbstractNpmDependencyExtension(dependencies, this, scope) {}
dependencies
.extensions
.add(
TypeOf.typeOf<NpmDependencyExtension>(NpmDependencyExtension::class.java),
name,
dependencyExtension
)
}
} }