[Gradle, JS] Activate root npm dependency declaration for multiplatform
This commit is contained in:
+3
@@ -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.mpp.KotlinUsages
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory
|
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlugin
|
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_COMPILER_EMBEDDABLE
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP
|
import org.jetbrains.kotlin.gradle.tasks.KOTLIN_MODULE_GROUP
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestsRegistry
|
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestsRegistry
|
||||||
@@ -80,6 +81,8 @@ abstract class KotlinBasePluginWrapper(
|
|||||||
setupAttributeMatchingStrategy(project)
|
setupAttributeMatchingStrategy(project)
|
||||||
|
|
||||||
plugin.apply(project)
|
plugin.apply(project)
|
||||||
|
|
||||||
|
project.addNpmDependencyExtension()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project)
|
internal open fun createTestRegistry(project: Project) = KotlinTestsRegistry(project)
|
||||||
|
|||||||
-67
@@ -5,25 +5,15 @@
|
|||||||
|
|
||||||
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.JavaBasePlugin
|
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.KotlinJsProjectExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.configureDefaultVersionsResolutionStrategy
|
import org.jetbrains.kotlin.gradle.plugin.configureDefaultVersionsResolutionStrategy
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsSingleTargetPreset
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsSingleTargetPreset
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility
|
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(
|
open class KotlinJsPlugin(
|
||||||
private val kotlinPluginVersion: String
|
private val kotlinPluginVersion: String
|
||||||
) : Plugin<Project> {
|
) : Plugin<Project> {
|
||||||
@@ -36,63 +26,6 @@ open class KotlinJsPlugin(
|
|||||||
|
|
||||||
checkGradleCompatibility()
|
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
|
val kotlinExtension = project.kotlinExtension as KotlinJsProjectExtension
|
||||||
configureDefaultVersionsResolutionStrategy(project, kotlinPluginVersion)
|
configureDefaultVersionsResolutionStrategy(project, kotlinPluginVersion)
|
||||||
|
|
||||||
|
|||||||
+76
@@ -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
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user