diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt index 42af97fb6a6..dc40267111e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/NpmVersions.kt @@ -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") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt index c293d14ca16..24d86419e55 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt index 3f5750b0b42..b1a43f83903 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt @@ -31,6 +31,9 @@ class PackageJson( val devDependencies = mutableMapOf() val dependencies = mutableMapOf() + val peerDependencies = mutableMapOf() + val optionalDependencies = mutableMapOf() + val bundledDependencies = mutableListOf() companion object { fun scopedName(name: String): ScopedName = if (name.contains("/")) ScopedName( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 25e5b29741f..61badc7e0e9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -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 {