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