diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt index c493d3d2d65..a677a0fe670 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt @@ -10,10 +10,12 @@ import org.gradle.api.Project import org.gradle.api.plugins.JavaBasePlugin import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.configureDefaultVersionsResolutionStrategy import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsSingleTargetPreset import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSingleTargetPreset -import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility +import org.jetbrains.kotlin.gradle.utils.* open class KotlinJsPlugin( private val kotlinPluginVersion: String @@ -34,5 +36,30 @@ open class KotlinJsPlugin( irPreset = KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion) legacyPreset = KotlinJsSingleTargetPreset(project, kotlinPluginVersion) } + + // Explicitly create configurations for main and test + // It is because in single platform we want to declare dependencies with methods not with strings in Kotlin DSL + // implementation("foo") instead of "implementation"("foo") + val configurations = project.configurations + listOf(MAIN_COMPILATION_NAME, TEST_COMPILATION_NAME) + // in main compilation we don't need additional name + .map { it.removeSuffix(MAIN_COMPILATION_NAME) } + .forEach { baseCompilationName -> + listOf( + COMPILE_ONLY, + COMPILE, + IMPLEMENTATION, + API, + RUNTIME_ONLY, + RUNTIME + ).forEach { baseConfigurationName -> + configurations.maybeCreate( + lowerCamelCaseName( + baseCompilationName, + baseConfigurationName + ) + ) + } + } } } \ No newline at end of file