Gradle, js, npm: support scopes

This commit is contained in:
Sergey Rostov
2019-07-07 17:14:50 +03:00
parent 5e6c76a6e7
commit d051748e2b
4 changed files with 24 additions and 7 deletions
@@ -47,15 +47,15 @@ class NpmVersions {
} }
interface RequiredKotlinJsDependency { interface RequiredKotlinJsDependency {
fun createDependency(project: Project): Dependency fun createDependency(project: Project, scope: NpmDependency.Scope = NpmDependency.Scope.DEV): Dependency
} }
data class NpmPackageVersion(val name: String, var version: String) : RequiredKotlinJsDependency { data class NpmPackageVersion(val name: String, var version: String) : RequiredKotlinJsDependency {
override fun createDependency(project: Project): Dependency = override fun createDependency(project: Project, scope: NpmDependency.Scope): Dependency =
NpmDependency(project, null, name, version) NpmDependency(project, null, name, version, scope)
} }
data class KotlinGradleNpmPackage(val simpleModuleName: String) : RequiredKotlinJsDependency { data class KotlinGradleNpmPackage(val simpleModuleName: String) : RequiredKotlinJsDependency {
override fun createDependency(project: Project): Dependency = override fun createDependency(project: Project, scope: NpmDependency.Scope): Dependency =
project.dependencies.create("org.jetbrains.kotlin:kotlin-$simpleModuleName") project.dependencies.create("org.jetbrains.kotlin:kotlin-$simpleModuleName")
} }
@@ -23,12 +23,20 @@ data class NpmDependency(
internal val project: Project, internal val project: Project,
private val org: String?, private val org: String?,
private val name: String, private val name: String,
private val version: String private val version: String,
val scope: Scope = Scope.NORMAL
) : SelfResolvingDependency, ) : SelfResolvingDependency,
SelfResolvingDependencyInternal, SelfResolvingDependencyInternal,
ResolvableDependency, ResolvableDependency,
FileCollectionDependency { FileCollectionDependency {
enum class Scope {
NORMAL,
DEV,
OPTIONAL,
PEER
}
override fun getGroup(): String? = org override fun getGroup(): String? = org
internal var parent: NpmDependency? = null internal var parent: NpmDependency? = null
@@ -31,6 +31,9 @@ class PackageJson(
val devDependencies = mutableMapOf<String, String>() val devDependencies = mutableMapOf<String, String>()
val dependencies = mutableMapOf<String, String>() val dependencies = mutableMapOf<String, String>()
val peerDependencies = mutableMapOf<String, String>()
val optionalDependencies = mutableMapOf<String, String>()
val bundledDependencies = mutableListOf<String>()
companion object { companion object {
fun scopedName(name: String): ScopedName = if (name.contains("/")) ScopedName( fun scopedName(name: String): ScopedName = if (name.contains("/")) ScopedName(
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.fixSemver
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
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.targets.js.npm.tasks.KotlinPackageJsonTask import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency.Scope.*
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
@@ -204,7 +205,7 @@ internal class KotlinCompilationNpmResolver(
get() = PackageJsonProducerInputs( get() = PackageJsonProducerInputs(
internalDependencies.map { it.npmProject.name }, internalDependencies.map { it.npmProject.name },
externalGradleDependencies.map { it.artifact.file }, externalGradleDependencies.map { it.artifact.file },
externalNpmDependencies.map { "${it.key}:${it.version}" } externalNpmDependencies.map { "${it.scope} ${it.key}:${it.version}" }
) )
fun createPackageJson(skipWriting: Boolean): KotlinCompilationNpmResolution { fun createPackageJson(skipWriting: Boolean): KotlinCompilationNpmResolution {
@@ -232,7 +233,12 @@ internal class KotlinCompilationNpmResolver(
} }
externalNpmDependencies.forEach { externalNpmDependencies.forEach {
packageJson.dependencies[it.key] = chooseVersion(packageJson.dependencies[it.key], it.version) when (it.scope) {
NORMAL -> packageJson.dependencies[it.key] = chooseVersion(packageJson.dependencies[it.key], it.version)
DEV -> packageJson.devDependencies[it.key] = chooseVersion(packageJson.devDependencies[it.key], it.version)
OPTIONAL -> packageJson.optionalDependencies[it.key] = chooseVersion(packageJson.optionalDependencies[it.key], it.version)
PEER -> packageJson.peerDependencies[it.key] = chooseVersion(packageJson.peerDependencies[it.key], it.version)
}
} }
compilation.packageJsonHandlers.forEach { compilation.packageJsonHandlers.forEach {