[Gradle, JS] KT-37207 Add possibility to add npm dependency to directory
This commit is contained in:
+3
@@ -10,6 +10,7 @@ import org.gradle.api.artifacts.Dependency
|
||||
import org.gradle.api.artifacts.ExternalModuleDependency
|
||||
import org.gradle.api.artifacts.ProjectDependency
|
||||
import org.gradle.util.ConfigureUtil
|
||||
import java.io.File
|
||||
|
||||
interface KotlinDependencyHandler {
|
||||
fun api(dependencyNotation: Any): Dependency?
|
||||
@@ -46,6 +47,8 @@ interface KotlinDependencyHandler {
|
||||
|
||||
fun npm(name: String, version: String = "*"): Dependency
|
||||
|
||||
fun npm(name: String, directory: File): Dependency
|
||||
|
||||
@Deprecated(
|
||||
message = "Use npm(name, version) instead. Name like in package.json"
|
||||
)
|
||||
|
||||
+13
-1
@@ -7,6 +7,7 @@ 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.targets.js.npm.NpmDependency
|
||||
import java.io.File
|
||||
|
||||
class DefaultKotlinDependencyHandler(
|
||||
val parent: HasKotlinDependencies,
|
||||
@@ -80,7 +81,18 @@ class DefaultKotlinDependencyHandler(
|
||||
}
|
||||
|
||||
override fun npm(name: String, version: String): NpmDependency =
|
||||
NpmDependency(project, name, version)
|
||||
NpmDependency(
|
||||
project = project,
|
||||
name = name,
|
||||
version = version
|
||||
)
|
||||
|
||||
override fun npm(name: String, directory: File): NpmDependency =
|
||||
NpmDependency(
|
||||
project = project,
|
||||
name = name,
|
||||
directory = directory
|
||||
)
|
||||
|
||||
override fun npm(org: String?, packageName: String, version: String) =
|
||||
npm("${if (org != null) "@$org/" else ""}$packageName", version)
|
||||
|
||||
+11
@@ -17,6 +17,7 @@ import org.gradle.api.tasks.TaskDependency
|
||||
import org.gradle.internal.component.local.model.DefaultLibraryBinaryIdentifier
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import org.jetbrains.kotlin.gradle.utils.relativeToRoot
|
||||
import java.io.File
|
||||
|
||||
data class NpmDependency(
|
||||
@@ -29,6 +30,16 @@ data class NpmDependency(
|
||||
ResolvableDependency,
|
||||
FileCollectionDependency {
|
||||
|
||||
constructor(
|
||||
project: Project,
|
||||
name: String,
|
||||
directory: File
|
||||
) : this(
|
||||
project,
|
||||
name,
|
||||
"file:${directory.relativeToRoot(project)}"
|
||||
)
|
||||
|
||||
enum class Scope {
|
||||
NORMAL,
|
||||
DEV,
|
||||
|
||||
+40
-18
@@ -9,43 +9,65 @@ import groovy.lang.Closure
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.gradle.api.reflect.TypeOf
|
||||
import java.io.File
|
||||
|
||||
interface NpmDependencyExtension {
|
||||
operator fun invoke(name: String, version: String = "*"): NpmDependency
|
||||
|
||||
operator fun invoke(name: String, directory: File): NpmDependency
|
||||
}
|
||||
|
||||
fun Project.addNpmDependencyExtension() {
|
||||
val dependencies = this.dependencies as ExtensionAware
|
||||
|
||||
val npmDependencyExtension: NpmDependencyExtension = object : NpmDependencyExtension, Closure<NpmDependency>(dependencies) {
|
||||
override operator fun invoke(name: String, version: String): NpmDependency {
|
||||
return NpmDependency(this@addNpmDependencyExtension, name, version)
|
||||
}
|
||||
override operator fun invoke(name: String, version: String): NpmDependency =
|
||||
NpmDependency(
|
||||
project = this@addNpmDependencyExtension,
|
||||
name = name,
|
||||
version = version
|
||||
)
|
||||
|
||||
override operator fun invoke(name: String, directory: File): NpmDependency =
|
||||
NpmDependency(
|
||||
project = this@addNpmDependencyExtension,
|
||||
name = name,
|
||||
directory = directory
|
||||
)
|
||||
|
||||
override fun call(vararg args: Any?): NpmDependency {
|
||||
val size = args.size
|
||||
if (size > 2) throw IllegalArgumentException(
|
||||
"""
|
||||
Unable to add NPM dependency by $args
|
||||
- npm('name') -> name:*
|
||||
- npm('name', 'version') -> name:version
|
||||
""".trimIndent()
|
||||
)
|
||||
if (size > 2) throw npmDeclarationException(args)
|
||||
|
||||
val name = args[0] as String
|
||||
val version = if (size > 1) args[1] as String else null
|
||||
val arg = if (size > 1) args[1] else null
|
||||
|
||||
return if (version != null) {
|
||||
invoke(
|
||||
name = name,
|
||||
version = version
|
||||
)
|
||||
} else {
|
||||
invoke(
|
||||
return when (arg) {
|
||||
null -> invoke(
|
||||
name = name
|
||||
)
|
||||
is String -> invoke(
|
||||
name = name,
|
||||
version = arg
|
||||
)
|
||||
is File -> invoke(
|
||||
name = name,
|
||||
directory = arg
|
||||
)
|
||||
else -> throw npmDeclarationException(args)
|
||||
}
|
||||
}
|
||||
|
||||
private fun npmDeclarationException(args: Array<out Any?>): IllegalArgumentException {
|
||||
return IllegalArgumentException(
|
||||
"""
|
||||
Unable to add NPM dependency by $args
|
||||
- npm('name') -> name:*
|
||||
- npm('name', 'version') -> name:version
|
||||
- npm('name', File) -> name:File
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
dependencies
|
||||
|
||||
Reference in New Issue
Block a user