[Gradle, JS] Add Groovy Closure support

This commit is contained in:
Ilya Goncharov
2019-11-22 16:09:07 +03:00
parent 028c73d959
commit 5397023f71
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.gradle.targets.js
import groovy.lang.Closure
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
@@ -35,21 +36,59 @@ open class KotlinJsPlugin(
checkGradleCompatibility()
val npm = object : Npm {
override fun invoke(packageName: String, version: String): NpmDependency {
val dependencies = project.dependencies as ExtensionAware
val npm: Npm = object : Npm, Closure<NpmDependency>(dependencies) {
override operator fun invoke(packageName: String, version: String): NpmDependency {
return NpmDependency(project, null, packageName, version)
}
override fun invoke(org: String, packageName: String, version: String): NpmDependency {
override operator fun invoke(org: String, packageName: String, version: String): NpmDependency {
return NpmDependency(project, org, packageName, version)
}
override fun call(vararg args: Any?): NpmDependency {
val size = args.size
if (size > 3) throw IllegalArgumentException(
"""
Unable to add NPM dependency by $args
- npm('packageName') -> packageName:*
- npm('packageName', 'version') -> packageName:version
- npm('org', 'packageName', 'version') -> org/packageName:version
""".trimIndent()
)
if (size == 3) {
val (org, packageName, version) = args
.map { it as String }
return invoke(
org = org,
packageName = packageName,
version = version
)
}
val packageName = args[0] as String
val version = if (size > 1) args[1] as String else null
return if (version != null) {
invoke(
packageName = packageName,
version = version
)
} else {
invoke(
packageName = packageName
)
}
}
}
(project.dependencies as ExtensionAware)
dependencies
.extensions
.add(
typeOf<Npm>(npm::class.java),
typeOf<Npm>(Npm::class.java),
"npm",
npm
)