[Gradle, JS] Add generateKotlinExternals option for root dependencies

KT-38331
This commit is contained in:
Ilya Goncharov
2020-05-07 17:52:55 +03:00
parent 50e0e6ac06
commit e8d10d45a9
@@ -14,19 +14,50 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.*
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File import java.io.File
interface NpmDependencyExtension { interface BaseNpmDependencyExtension {
@Deprecated("Declaring NPM dependency without version is forbidden") @Deprecated("Declaring NPM dependency without version is forbidden")
operator fun invoke(name: String): NpmDependency operator fun invoke(name: String): NpmDependency
operator fun invoke(name: String, version: String): NpmDependency operator fun invoke(name: String, version: String): NpmDependency
} }
interface NpmDirectoryDependencyExtension : NpmDependencyExtension { interface NpmDirectoryDependencyExtension {
operator fun invoke(name: String, directory: File): NpmDependency operator fun invoke(name: String, directory: File): NpmDependency
operator fun invoke(directory: File): NpmDependency operator fun invoke(directory: File): NpmDependency
} }
interface NpmDependencyWithExternalsExtension {
operator fun invoke(
name: String,
version: String,
generateKotlinExternals: Boolean
): NpmDependency
operator fun invoke(
name: String,
directory: File,
generateKotlinExternals: Boolean
): NpmDependency
operator fun invoke(
directory: File,
generateKotlinExternals: Boolean
): NpmDependency
}
interface NpmDependencyExtension :
BaseNpmDependencyExtension,
NpmDirectoryDependencyExtension,
NpmDependencyWithExternalsExtension
interface DevNpmDependencyExtension :
BaseNpmDependencyExtension,
NpmDirectoryDependencyExtension
interface PeerNpmDependencyExtension :
BaseNpmDependencyExtension
internal fun Project.addNpmDependencyExtension() { internal fun Project.addNpmDependencyExtension() {
val extensions = (dependencies as ExtensionAware).extensions val extensions = (dependencies as ExtensionAware).extensions
@@ -37,8 +68,9 @@ internal fun Project.addNpmDependencyExtension() {
.toLowerCase() .toLowerCase()
val type = when (scope) { val type = when (scope) {
NORMAL, DEV, OPTIONAL -> NpmDirectoryDependencyExtension::class.java NORMAL, OPTIONAL -> NpmDependencyExtension::class.java
PEER -> NpmDependencyExtension::class.java DEV -> DevNpmDependencyExtension::class.java
PEER -> PeerNpmDependencyExtension::class.java
} }
val extension = when (scope) { val extension = when (scope) {
@@ -61,7 +93,7 @@ internal fun Project.addNpmDependencyExtension() {
extensions extensions
.add( .add(
TypeOf.typeOf<NpmDependencyExtension>(type), TypeOf.typeOf<BaseNpmDependencyExtension>(type),
lowerCamelCaseName(scopePrefix, "npm"), lowerCamelCaseName(scopePrefix, "npm"),
extension extension
) )
@@ -73,24 +105,53 @@ private abstract class AbstractNpmDependencyExtension(
protected val scope: NpmDependency.Scope, protected val scope: NpmDependency.Scope,
protected val defaultGenerateKotlinExternals: Boolean protected val defaultGenerateKotlinExternals: Boolean
) : NpmDependencyExtension, ) : NpmDependencyExtension,
NpmDirectoryDependencyExtension, DevNpmDependencyExtension,
PeerNpmDependencyExtension,
Closure<NpmDependency>(project.dependencies) { Closure<NpmDependency>(project.dependencies) {
override fun invoke(name: String): NpmDependency = override fun invoke(name: String): NpmDependency =
onlyNameNpmDependency(name) onlyNameNpmDependency(name)
override operator fun invoke(name: String, version: String): NpmDependency = override operator fun invoke(
name: String,
version: String,
generateKotlinExternals: Boolean
): NpmDependency =
NpmDependency( NpmDependency(
project = project, project = project,
name = name, name = name,
version = version, version = version,
scope = scope, scope = scope,
generateKotlinExternals = generateKotlinExternals
)
override fun invoke(name: String, version: String): NpmDependency =
invoke(
name = name,
version = version,
generateKotlinExternals = defaultGenerateKotlinExternals generateKotlinExternals = defaultGenerateKotlinExternals
) )
override operator fun invoke(directory: File): NpmDependency = override fun invoke(name: String, directory: File): NpmDependency =
invoke(
name = name,
directory = directory,
generateKotlinExternals = defaultGenerateKotlinExternals
)
override fun invoke(directory: File): NpmDependency =
invoke(
directory = directory,
generateKotlinExternals = defaultGenerateKotlinExternals
)
override operator fun invoke(
directory: File,
generateKotlinExternals: Boolean
): NpmDependency =
invoke( invoke(
name = moduleName(directory), name = moduleName(directory),
directory = directory directory = directory,
generateKotlinExternals = generateKotlinExternals
) )
override fun call(vararg args: Any?): NpmDependency { override fun call(vararg args: Any?): NpmDependency {
@@ -152,22 +213,17 @@ private class DefaultNpmDependencyExtension(
scope, scope,
defaultGenerateKotlinExternals defaultGenerateKotlinExternals
) { ) {
override fun invoke(name: String): NpmDependency = override operator fun invoke(
onlyNameNpmDependency(name) name: String,
directory: File,
override operator fun invoke(name: String, directory: File): NpmDependency = generateKotlinExternals: Boolean
): NpmDependency =
directoryNpmDependency( directoryNpmDependency(
project = project, project = project,
name = name, name = name,
directory = directory, directory = directory,
scope = scope, scope = scope,
generateKotlinExternals = defaultGenerateKotlinExternals generateKotlinExternals = generateKotlinExternals
)
override operator fun invoke(directory: File): NpmDependency =
invoke(
name = moduleName(directory),
directory = directory
) )
override fun processNonStringFirstArgument(arg: Any?, vararg args: Any?): NpmDependency { override fun processNonStringFirstArgument(arg: Any?, vararg args: Any?): NpmDependency {
@@ -208,7 +264,11 @@ private class NpmDependencyWithoutDirectoryExtension(
scope, scope,
defaultGenerateKotlinExternals defaultGenerateKotlinExternals
) { ) {
override fun invoke(name: String, directory: File): NpmDependency = override fun invoke(
name: String,
directory: File,
generateKotlinExternals: Boolean
): NpmDependency =
npmDeclarationException(arrayOf(name, directory)) npmDeclarationException(arrayOf(name, directory))
override fun processNonStringFirstArgument(arg: Any?, vararg args: Any?): NpmDependency = override fun processNonStringFirstArgument(arg: Any?, vararg args: Any?): NpmDependency =