diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt index 17b805252cd..16b271a0c26 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt @@ -11,9 +11,12 @@ import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.internal.ConfigurationPhaseAware import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.NpmVersions +import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi +import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask @@ -50,6 +53,8 @@ open class NodeJsRootExtension(val rootProject: Project) : ConfigurationPhaseAwa val experimental = Experimental() + val taskRequirements = TasksRequirements() + val nodeJsSetupTask: NodeJsSetupTask get() = rootProject.tasks.getByName(NodeJsSetupTask.NAME) as NodeJsSetupTask @@ -120,4 +125,22 @@ open class NodeJsRootExtension(val rootProject: Project) : ConfigurationPhaseAwa companion object { const val EXTENSION_NAME: String = "kotlinNodeJs" } +} + +class TasksRequirements { + val byTask = mutableMapOf>() + val byCompilation = mutableMapOf>() + + fun getTaskRequirements(compilation: KotlinJsCompilation): Collection = + byCompilation[compilation] ?: listOf() + + fun addTaskRequirements(task: RequiresNpmDependencies) { + val requirements = task.requiredNpmDependencies.toList() + + byTask[task] = requirements + + byCompilation + .getOrPut(task.compilation) { mutableListOf() } + .add(task) + } } \ No newline at end of file