[Gradle, JS] Remove generateExternals

This commit is contained in:
Ilya Goncharov
2022-09-22 16:18:17 +02:00
committed by Space Team
parent 5ed3c20160
commit 1d97b9b936
10 changed files with 16 additions and 291 deletions
@@ -68,51 +68,20 @@ interface KotlinDependencyHandler {
fun platform(notation: Any, configureAction: Action<in Dependency>): Dependency =
project.dependencies.platform(notation, configureAction)
@Deprecated("Declaring NPM dependency without version is forbidden")
fun npm(name: String): Dependency
fun npm(
name: String,
version: String,
generateExternals: Boolean
): Dependency
fun npm(
name: String,
version: String
): Dependency = npm(
name = name,
version = version,
generateExternals = DEFAULT_GENERATE_EXTERNALS
)
fun npm(
name: String,
directory: File,
generateExternals: Boolean
): Dependency
fun npm(
name: String,
directory: File
): Dependency = npm(
name = name,
directory = directory,
generateExternals = DEFAULT_GENERATE_EXTERNALS
)
fun npm(
directory: File,
generateExternals: Boolean
): Dependency
fun npm(
directory: File
): Dependency = npm(
directory = directory,
generateExternals = DEFAULT_GENERATE_EXTERNALS
)
fun devNpm(
name: String,
version: String
@@ -130,45 +99,17 @@ interface KotlinDependencyHandler {
fun optionalNpm(
name: String,
version: String,
generateExternals: Boolean
): Dependency
fun optionalNpm(
name: String,
version: String
): Dependency = optionalNpm(
name = name,
version = version,
generateExternals = DEFAULT_GENERATE_EXTERNALS
)
fun optionalNpm(
name: String,
directory: File,
generateExternals: Boolean
): Dependency
fun optionalNpm(
name: String,
directory: File
): Dependency = optionalNpm(
name = name,
directory = directory,
generateExternals = DEFAULT_GENERATE_EXTERNALS
)
fun optionalNpm(
directory: File,
generateExternals: Boolean
): Dependency
fun optionalNpm(
directory: File
): Dependency = optionalNpm(
directory = directory,
generateExternals = DEFAULT_GENERATE_EXTERNALS
)
fun peerNpm(
name: String,
version: String
@@ -1,8 +0,0 @@
/*
* Copyright 2010-2020 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.plugin
const val DEFAULT_GENERATE_EXTERNALS = false
@@ -373,12 +373,6 @@ internal class PropertiesProvider private constructor(private val project: Proje
val ignoreTcsmOverflow: Boolean
get() = booleanProperty(IGNORE_TCSM_OVERFLOW) ?: false
/**
* Generate kotlin/js external declarations from all .d.ts files found in npm modules
*/
val jsGenerateExternals: Boolean
get() = booleanProperty("kotlin.js.generate.externals") ?: DEFAULT_GENERATE_EXTERNALS
/**
* Automaticaly discover external .d.ts declarations
*/
@@ -12,13 +12,11 @@ import org.gradle.api.artifacts.ModuleDependency
import org.gradle.api.artifacts.ProjectDependency
import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.ComputedCapability
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
import org.jetbrains.kotlin.gradle.targets.js.npm.directoryNpmDependency
import org.jetbrains.kotlin.gradle.targets.js.npm.moduleName
import org.jetbrains.kotlin.gradle.targets.js.npm.onlyNameNpmDependency
import java.io.File
class DefaultKotlinDependencyHandler(
@@ -103,67 +101,32 @@ class DefaultKotlinDependencyHandler(
project.dependencies.add(configurationName, it)
}
override fun npm(name: String): Dependency =
onlyNameNpmDependency(name)
override fun npm(
name: String,
version: String,
generateExternals: Boolean
): NpmDependency =
NpmDependency(
project = project,
name = name,
version = version,
generateExternals = generateExternals
)
override fun npm(
name: String,
version: String
): NpmDependency =
npm(
name = name,
version = version,
generateExternals = defaultGenerateExternals()
)
override fun npm(
name: String,
directory: File,
generateExternals: Boolean
): NpmDependency =
directoryNpmDependency(
name = name,
directory = directory,
scope = NpmDependency.Scope.NORMAL,
generateExternals = generateExternals
)
override fun npm(
name: String,
directory: File
): NpmDependency =
npm(
name = name,
directory = directory,
generateExternals = defaultGenerateExternals()
)
override fun npm(
directory: File,
generateExternals: Boolean
): NpmDependency =
npm(
name = moduleName(directory),
directory = directory,
generateExternals = generateExternals
)
override fun npm(directory: File): NpmDependency =
npm(
directory = directory,
generateExternals = defaultGenerateExternals()
)
override fun devNpm(
@@ -185,7 +148,6 @@ class DefaultKotlinDependencyHandler(
name = name,
directory = directory,
scope = NpmDependency.Scope.DEV,
generateExternals = false
)
override fun devNpm(directory: File): NpmDependency =
@@ -197,59 +159,30 @@ class DefaultKotlinDependencyHandler(
override fun optionalNpm(
name: String,
version: String,
generateExternals: Boolean
): NpmDependency =
NpmDependency(
project = project,
name = name,
version = version,
scope = NpmDependency.Scope.OPTIONAL,
generateExternals = generateExternals
)
override fun optionalNpm(
name: String,
version: String
): NpmDependency =
optionalNpm(
name,
version,
defaultGenerateExternals()
)
override fun optionalNpm(
name: String,
directory: File,
generateExternals: Boolean
): NpmDependency =
directoryNpmDependency(
name = name,
directory = directory,
scope = NpmDependency.Scope.OPTIONAL,
generateExternals = generateExternals
)
override fun optionalNpm(name: String, directory: File): NpmDependency =
optionalNpm(
name = name,
directory = directory,
generateExternals = defaultGenerateExternals()
)
override fun optionalNpm(
directory: File,
generateExternals: Boolean
): NpmDependency =
optionalNpm(
name = moduleName(directory),
directory = directory,
generateExternals = generateExternals
)
override fun optionalNpm(directory: File): NpmDependency =
optionalNpm(
directory = directory,
generateExternals = defaultGenerateExternals()
)
override fun peerNpm(
@@ -263,20 +196,15 @@ class DefaultKotlinDependencyHandler(
scope = NpmDependency.Scope.PEER
)
private fun defaultGenerateExternals(): Boolean =
PropertiesProvider(project).jsGenerateExternals
private fun directoryNpmDependency(
name: String,
directory: File,
scope: NpmDependency.Scope,
generateExternals: Boolean
): NpmDependency =
directoryNpmDependency(
project = project,
name = name,
directory = directory,
scope = scope,
generateExternals = generateExternals
)
}
@@ -26,7 +26,6 @@ data class NpmDependency(
private val name: String,
private val version: String,
val scope: Scope = Scope.NORMAL,
val generateExternals: Boolean = false
) : SelfResolvingDependency,
SelfResolvingDependencyInternal,
ResolvableDependency,
@@ -118,7 +117,6 @@ internal fun directoryNpmDependency(
name: String,
directory: File,
scope: NpmDependency.Scope,
generateExternals: Boolean
): NpmDependency {
check(directory.isDirectory) {
"Dependency on local path should point on directory but $directory found"
@@ -129,16 +127,9 @@ internal fun directoryNpmDependency(
name = name,
version = fileVersion(directory),
scope = scope,
generateExternals = generateExternals
)
}
internal fun onlyNameNpmDependency(
name: String
): Nothing {
throw IllegalArgumentException("NPM dependency '$name' doesn't have version. Please, set version explicitly.")
}
fun String.isFileVersion() =
startsWith(FILE_VERSION_PREFIX)
@@ -14,18 +14,15 @@ data class NpmDependencyDeclaration(
@Input
val name: String,
@Input
val version: String,
@Input
val generateExternals: Boolean
val version: String
) : Serializable
fun NpmDependencyDeclaration.uniqueRepresentation() =
"$scope $name:$version, $generateExternals"
"$scope $name:$version"
internal fun NpmDependency.toDeclaration(): NpmDependencyDeclaration =
NpmDependencyDeclaration(
scope = this.scope,
name = this.name,
version = this.version,
generateExternals = this.generateExternals
)
@@ -10,15 +10,11 @@ import groovy.lang.GString
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.reflect.TypeOf
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.*
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.io.File
interface BaseNpmDependencyExtension {
@Deprecated("Declaring NPM dependency without version is forbidden")
operator fun invoke(name: String): NpmDependency
operator fun invoke(name: String, version: String): NpmDependency
}
@@ -28,32 +24,9 @@ interface NpmDirectoryDependencyExtension : BaseNpmDependencyExtension {
operator fun invoke(directory: File): NpmDependency
}
interface NpmDependencyWithExternalsExtension : BaseNpmDependencyExtension {
operator fun invoke(
name: String,
version: String,
generateExternals: Boolean
): NpmDependency
}
interface NpmDirectoryDependencyWithExternalsExtension : NpmDirectoryDependencyExtension {
operator fun invoke(
name: String,
directory: File,
generateExternals: Boolean
): NpmDependency
operator fun invoke(
directory: File,
generateExternals: Boolean
): NpmDependency
}
interface NpmDependencyExtension :
BaseNpmDependencyExtension,
NpmDependencyWithExternalsExtension,
NpmDirectoryDependencyExtension,
NpmDirectoryDependencyWithExternalsExtension
NpmDirectoryDependencyExtension
interface DevNpmDependencyExtension :
BaseNpmDependencyExtension,
@@ -77,11 +50,12 @@ internal fun Project.addNpmDependencyExtension() {
NORMAL, OPTIONAL -> DefaultNpmDependencyExtension(
this,
scope,
PropertiesProvider(this).jsGenerateExternals
)
DEV -> DefaultDevNpmDependencyExtension(
this
)
PEER -> DefaultPeerNpmDependencyExtension(
this
)
@@ -107,72 +81,40 @@ private fun scopePrefix(scope: NpmDependency.Scope): String {
private abstract class NpmDependencyExtensionDelegate(
protected val project: Project,
protected val scope: NpmDependency.Scope,
protected val _defaultGenerateExternals: Boolean?
) : NpmDependencyExtension,
DevNpmDependencyExtension,
PeerNpmDependencyExtension,
Closure<NpmDependency>(project.dependencies) {
protected val defaultGenerateExternals: Boolean
get() = _defaultGenerateExternals ?: false
override fun invoke(name: String): NpmDependency =
onlyNameNpmDependency(name)
override operator fun invoke(
name: String,
version: String,
generateExternals: Boolean
): NpmDependency =
NpmDependency(
project = project,
name = name,
version = version,
scope = scope,
generateExternals = generateExternals
)
override fun invoke(name: String, version: String): NpmDependency =
invoke(
name = name,
version = version,
generateExternals = defaultGenerateExternals
)
override fun invoke(name: String, directory: File): NpmDependency =
invoke(
name = name,
directory = directory,
generateExternals = defaultGenerateExternals
)
override fun invoke(directory: File): NpmDependency =
invoke(
directory = directory,
generateExternals = defaultGenerateExternals
)
override operator fun invoke(
directory: File,
generateExternals: Boolean
): NpmDependency =
invoke(
name = moduleName(directory),
directory = directory,
generateExternals = generateExternals
)
override fun call(vararg args: Any?): NpmDependency {
if (args.size > 3) npmDeclarationException(args)
if (args.size > 2) npmDeclarationException(args)
return when (val arg = args[0]) {
is String -> withName(
name = arg,
args = args
)
is GString -> withName(
name = arg.toString(),
args = args
)
else -> processNonStringFirstArgument(arg, *args)
}
}
@@ -180,26 +122,24 @@ private abstract class NpmDependencyExtensionDelegate(
protected abstract fun processNonStringFirstArgument(arg: Any?, vararg args: Any?): NpmDependency
private fun withName(name: String, vararg args: Any?): NpmDependency {
val generateExternals = generateExternalsIfPossible(*args)
return when (val arg1 = if (args.size > 1) args[1] else null) {
null -> @Suppress("DEPRECATION") invoke(
name = name
null -> throw IllegalArgumentException(
"NPM dependency '$name' doesn't have version. Please, set version explicitly."
)
is String -> invoke(
name = name,
version = arg1,
generateExternals = generateExternals
)
is GString -> invoke(
name = name,
version = arg1.toString(),
generateExternals = generateExternals
)
else -> processNamedNonStringSecondArgument(
name,
arg1,
generateExternals,
*args
)
}
@@ -208,7 +148,6 @@ private abstract class NpmDependencyExtensionDelegate(
protected abstract fun processNamedNonStringSecondArgument(
name: String,
arg: Any?,
generateExternals: Boolean,
vararg args: Any?
): NpmDependency
@@ -225,34 +164,18 @@ private abstract class NpmDependencyExtensionDelegate(
protected open fun possibleVariants(): List<Pair<String, String>> {
return listOf("${scopePrefix(scope)}('name', 'version')" to "name:version")
}
protected fun generateExternalsIfPossible(vararg args: Any?): Boolean {
val arg2 = (if (args.size > 2) args[2] else null) as? Boolean
if (arg2 != null && _defaultGenerateExternals == null) {
npmDeclarationException(args)
}
return arg2 ?: defaultGenerateExternals
}
}
private class DefaultNpmDependencyExtension(
project: Project,
scope: NpmDependency.Scope,
defaultGenerateExternals: Boolean?
) : Closure<NpmDependency>(project.dependencies),
NpmDependencyExtension {
private val delegate = defaultNpmDependencyDelegate(
project,
scope,
defaultGenerateExternals
)
@Suppress("DEPRECATION")
override fun invoke(name: String): NpmDependency =
delegate.invoke(name)
override fun invoke(name: String, version: String): NpmDependency =
delegate.invoke(name, version)
@@ -262,15 +185,6 @@ private class DefaultNpmDependencyExtension(
override fun invoke(directory: File): NpmDependency =
delegate.invoke(directory)
override fun invoke(name: String, version: String, generateExternals: Boolean): NpmDependency =
delegate.invoke(name, version, generateExternals)
override fun invoke(name: String, directory: File, generateExternals: Boolean): NpmDependency =
delegate.invoke(name, directory, generateExternals)
override fun invoke(directory: File, generateExternals: Boolean): NpmDependency =
delegate.invoke(directory, generateExternals)
override fun call(vararg args: Any?): NpmDependency =
delegate.call(*args)
}
@@ -282,13 +196,8 @@ private class DefaultDevNpmDependencyExtension(
private val delegate = defaultNpmDependencyDelegate(
project,
DEV,
null
)
@Suppress("DEPRECATION")
override fun invoke(name: String): NpmDependency =
delegate.invoke(name)
override fun invoke(name: String, version: String): NpmDependency =
delegate.invoke(name, version)
@@ -305,34 +214,28 @@ private class DefaultDevNpmDependencyExtension(
private fun defaultNpmDependencyDelegate(
project: Project,
scope: NpmDependency.Scope,
defaultGenerateExternals: Boolean?
): NpmDependencyExtensionDelegate {
return object : NpmDependencyExtensionDelegate(
project,
scope,
defaultGenerateExternals
) {
override operator fun invoke(
name: String,
directory: File,
generateExternals: Boolean
): NpmDependency =
directoryNpmDependency(
project = project,
name = name,
directory = directory,
scope = scope,
generateExternals = generateExternals
)
override fun processNonStringFirstArgument(arg: Any?, vararg args: Any?): NpmDependency {
val generateExternals = generateExternalsIfPossible(args)
return when (arg) {
is File -> invoke(
directory = arg,
generateExternals = generateExternals
)
else -> npmDeclarationException(args)
}
}
@@ -340,34 +243,23 @@ private fun defaultNpmDependencyDelegate(
override fun processNamedNonStringSecondArgument(
name: String,
arg: Any?,
generateExternals: Boolean,
vararg args: Any?
): NpmDependency {
return when (arg) {
is File -> invoke(
name = name,
directory = arg,
generateExternals = generateExternals
)
else -> npmDeclarationException(args)
}
}
override fun possibleVariants(): List<Pair<String, String>> {
val result = super.possibleVariants() + listOf(
return super.possibleVariants() + listOf(
"${scopePrefix(scope)}(File)" to "File.name:File",
"${scopePrefix(scope)}('name', File)" to "name:File"
)
if (_defaultGenerateExternals == null) {
return result
}
return result
.map { (first, second) ->
val value = first.replace(")", ", generateExternals = $defaultGenerateExternals)")
value to second
}
}
}
}
@@ -379,12 +271,10 @@ private class DefaultPeerNpmDependencyExtension(
private val delegate: NpmDependencyExtensionDelegate = object : NpmDependencyExtensionDelegate(
project,
PEER,
null
) {
override fun invoke(
name: String,
directory: File,
generateExternals: Boolean
): NpmDependency =
npmDeclarationException(arrayOf(name, directory))
@@ -394,16 +284,11 @@ private class DefaultPeerNpmDependencyExtension(
override fun processNamedNonStringSecondArgument(
name: String,
arg: Any?,
generateExternals: Boolean,
vararg args: Any?
): NpmDependency =
npmDeclarationException(args)
}
@Suppress("DEPRECATION")
override fun invoke(name: String): NpmDependency =
delegate.invoke(name)
override fun invoke(name: String, version: String): NpmDependency =
delegate.invoke(name, version)
@@ -55,7 +55,6 @@ constructor(
scope = it.scope,
name = it.name,
version = it.version,
generateExternals = it.generateExternals
)
}
@@ -32,7 +32,6 @@ class KotlinCompilationNpmResolution(
name = it.name,
version = it.version,
scope = it.scope,
generateExternals = it.generateExternals
)
}
}
@@ -455,7 +455,6 @@ internal class KotlinCompilationNpmResolver(
scope = NpmDependency.Scope.DEV,
name = dukatPackageVersion.name,
version = dukatPackageVersion.version,
generateExternals = false
)
)
} else emptySet()