[Gradle, JS] Activate root npm dependency declaration for multiplatform

This commit is contained in:
Ilya Goncharov
2019-11-22 18:23:26 +03:00
parent 5397023f71
commit 95b56e10b4
3 changed files with 79 additions and 67 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlugin
import org.jetbrains.kotlin.gradle.targets.js.npm.addNpmDependencyExtension
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_COMPILER_EMBEDDABLE
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestsRegistry
@@ -80,6 +81,8 @@ abstract class KotlinBasePluginWrapper(
setupAttributeMatchingStrategy(project)
plugin.apply(project)
project.addNpmDependencyExtension()
}
internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project)
@@ -5,25 +5,15 @@
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
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.reflect.TypeOf.typeOf
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.configureDefaultVersionsResolutionStrategy
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsSingleTargetPreset
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility
interface Npm {
operator fun invoke(packageName: String, version: String = "*"): NpmDependency
operator fun invoke(org: String, packageName: String, version: String = "*"): NpmDependency
}
open class KotlinJsPlugin(
private val kotlinPluginVersion: String
) : Plugin<Project> {
@@ -36,63 +26,6 @@ open class KotlinJsPlugin(
checkGradleCompatibility()
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 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
)
}
}
}
dependencies
.extensions
.add(
typeOf<Npm>(Npm::class.java),
"npm",
npm
)
val kotlinExtension = project.kotlinExtension as KotlinJsProjectExtension
configureDefaultVersionsResolutionStrategy(project, kotlinPluginVersion)
@@ -0,0 +1,76 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.targets.js.npm
import groovy.lang.Closure
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.reflect.TypeOf
interface NpmDependencyExtension {
operator fun invoke(packageName: String, version: String = "*"): NpmDependency
operator fun invoke(org: String, packageName: String, version: String = "*"): NpmDependency
}
fun Project.addNpmDependencyExtension() {
val dependencies = this.dependencies as ExtensionAware
val npmDependencyExtension: NpmDependencyExtension = object : NpmDependencyExtension, Closure<NpmDependency>(dependencies) {
override operator fun invoke(packageName: String, version: String): NpmDependency {
return NpmDependency(this@addNpmDependencyExtension, null, packageName, version)
}
override operator fun invoke(org: String, packageName: String, version: String): NpmDependency {
return NpmDependency(this@addNpmDependencyExtension, 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
)
}
}
}
dependencies
.extensions
.add(
TypeOf.typeOf<NpmDependencyExtension>(NpmDependencyExtension::class.java),
"npm",
npmDependencyExtension
)
}