[Gradle, JS] Add Groovy Closure support
This commit is contained in:
+44
-5
@@ -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
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user