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 {
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 {
override fun createDependency(project: Project): Dependency =
NpmDependency(project, null, name, version)
override fun createDependency(project: Project, scope: NpmDependency.Scope): Dependency =
NpmDependency(project, null, name, version, scope)
}
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")
}
@@ -23,12 +23,20 @@ data class NpmDependency(
internal val project: Project,
private val org: String?,
private val name: String,
private val version: String
private val version: String,
val scope: Scope = Scope.NORMAL
) : SelfResolvingDependency,
SelfResolvingDependencyInternal,
ResolvableDependency,
FileCollectionDependency {
enum class Scope {
NORMAL,
DEV,
OPTIONAL,
PEER
}
override fun getGroup(): String? = org
internal var parent: NpmDependency? = null
@@ -31,6 +31,9 @@ class PackageJson(
val devDependencies = mutableMapOf<String, String>()
val dependencies = mutableMapOf<String, String>()
val peerDependencies = mutableMapOf<String, String>()
val optionalDependencies = mutableMapOf<String, String>()
val bundledDependencies = mutableListOf<String>()
companion object {
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.resolved.KotlinCompilationNpmResolution
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.Serializable
@@ -204,7 +205,7 @@ internal class KotlinCompilationNpmResolver(
get() = PackageJsonProducerInputs(
internalDependencies.map { it.npmProject.name },
externalGradleDependencies.map { it.artifact.file },
externalNpmDependencies.map { "${it.key}:${it.version}" }
externalNpmDependencies.map { "${it.scope} ${it.key}:${it.version}" }
)
fun createPackageJson(skipWriting: Boolean): KotlinCompilationNpmResolution {
@@ -232,7 +233,12 @@ internal class KotlinCompilationNpmResolver(
}
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 {