[Gradle, JS] Add Groovy Closure support
This commit is contained in:
+44
-5
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js
|
package org.jetbrains.kotlin.gradle.targets.js
|
||||||
|
|
||||||
|
import groovy.lang.Closure
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.plugins.ExtensionAware
|
import org.gradle.api.plugins.ExtensionAware
|
||||||
@@ -35,21 +36,59 @@ open class KotlinJsPlugin(
|
|||||||
|
|
||||||
checkGradleCompatibility()
|
checkGradleCompatibility()
|
||||||
|
|
||||||
val npm = object : Npm {
|
val dependencies = project.dependencies as ExtensionAware
|
||||||
override fun invoke(packageName: String, version: String): NpmDependency {
|
|
||||||
|
val npm: Npm = object : Npm, Closure<NpmDependency>(dependencies) {
|
||||||
|
override operator fun invoke(packageName: String, version: String): NpmDependency {
|
||||||
return NpmDependency(project, null, packageName, version)
|
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)
|
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
|
.extensions
|
||||||
.add(
|
.add(
|
||||||
typeOf<Npm>(npm::class.java),
|
typeOf<Npm>(Npm::class.java),
|
||||||
"npm",
|
"npm",
|
||||||
npm
|
npm
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user