diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt index 43e68dba246..096041a785d 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/HasKotlinDependencies.kt @@ -70,6 +70,12 @@ interface KotlinDependencyHandler { fun devNpm(name: String, directory: File): Dependency fun devNpm(directory: File): Dependency + + fun peerNpm(name: String, version: String = "*"): Dependency + + fun peerNpm(name: String, directory: File): Dependency + + fun peerNpm(directory: File): Dependency } interface HasKotlinDependencies { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/DefaultKotlinDependencyHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/DefaultKotlinDependencyHandler.kt index 397f9cf6c4e..182ead6a263 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/DefaultKotlinDependencyHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/DefaultKotlinDependencyHandler.kt @@ -131,4 +131,28 @@ class DefaultKotlinDependencyHandler( name = moduleName(directory), directory = directory ) + + override fun peerNpm(name: String, version: String): NpmDependency = + NpmDependency( + project = project, + name = name, + version = version, + scope = NpmDependency.Scope.PEER + ) + + override fun peerNpm(name: String, directory: File): NpmDependency { + check(directory.isDirectory) { + "Dependency on local path should point on directory but $directory found" + } + return peerNpm( + name = name, + version = fileVersion(directory) + ) + } + + override fun peerNpm(directory: File): NpmDependency = + peerNpm( + name = moduleName(directory), + directory = directory + ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt index a8cd4873998..10b582f58ea 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependencyExtension.kt @@ -92,30 +92,29 @@ private abstract class AbstractNpmDependencyExtension( } } +private const val NAME_DEPENDENCIES = "npm" +private const val NAME_DEV_DEPENDENCIES = "devNpm" +private const val NAME_PEER_DEPENDENCIES = "peerNpm" + fun Project.addNpmDependencyExtension() { val dependencies = this.dependencies as ExtensionAware - val npmDependencyExtension: NpmDependencyExtension = object : AbstractNpmDependencyExtension( - dependencies, this, NpmDependency.Scope.NORMAL - ) {} + listOf(NpmDependency.Scope.NORMAL, NpmDependency.Scope.DEV, NpmDependency.Scope.PEER).forEach { scope -> + val name = when (scope) { + NpmDependency.Scope.DEV -> NAME_DEV_DEPENDENCIES + NpmDependency.Scope.PEER -> NAME_PEER_DEPENDENCIES + else -> NAME_DEPENDENCIES + } - val devNpmDependencyExtension: NpmDependencyExtension = object : AbstractNpmDependencyExtension( - dependencies, this, NpmDependency.Scope.DEV - ) {} + val dependencyExtension: NpmDependencyExtension = object : AbstractNpmDependencyExtension(dependencies, this, scope) {} - dependencies - .extensions - .add( - TypeOf.typeOf(NpmDependencyExtension::class.java), - "npm", - npmDependencyExtension - ) + dependencies + .extensions + .add( + TypeOf.typeOf(NpmDependencyExtension::class.java), + name, + dependencyExtension + ) - dependencies - .extensions - .add( - TypeOf.typeOf(NpmDependencyExtension::class.java), - "devNpm", - devNpmDependencyExtension - ) + } }