[Gradle, JS] Get npm dependencies in compilation npm resolver
This commit is contained in:
+5
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
@@ -141,6 +142,10 @@ abstract class KotlinJsIrSubTarget(
|
|||||||
if (it.testFramework == null) {
|
if (it.testFramework == null) {
|
||||||
configureDefaultTestFramework(it)
|
configureDefaultTestFramework(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (it.enabled) {
|
||||||
|
nodeJs.taskRequirements.addTaskRequirements(it as RequiresNpmDependencies)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+29
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
|
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
|
||||||
|
|
||||||
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.artifacts.Configuration
|
import org.gradle.api.artifacts.Configuration
|
||||||
import org.gradle.api.artifacts.ResolvedArtifact
|
import org.gradle.api.artifacts.ResolvedArtifact
|
||||||
import org.gradle.api.artifacts.ResolvedDependency
|
import org.gradle.api.artifacts.ResolvedDependency
|
||||||
@@ -14,6 +15,7 @@ import org.gradle.api.initialization.IncludedBuild
|
|||||||
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
|
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
|
||||||
import org.gradle.api.tasks.Input
|
import org.gradle.api.tasks.Input
|
||||||
import org.gradle.api.tasks.InputFiles
|
import org.gradle.api.tasks.InputFiles
|
||||||
|
import org.gradle.api.tasks.TaskCollection
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.gradle.api.tasks.bundling.Zip
|
import org.gradle.api.tasks.bundling.Zip
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
@@ -30,12 +32,14 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_J
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.CompilationResolverPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.CompilationResolverPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
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.tasks.KotlinPackageJsonTask
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.CompositeProjectComponentArtifactMetadata
|
import org.jetbrains.kotlin.gradle.utils.CompositeProjectComponentArtifactMetadata
|
||||||
import org.jetbrains.kotlin.gradle.utils.`is`
|
import org.jetbrains.kotlin.gradle.utils.`is`
|
||||||
import org.jetbrains.kotlin.gradle.utils.topRealPath
|
import org.jetbrains.kotlin.gradle.utils.topRealPath
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See [KotlinNpmResolutionManager] for details about resolution process.
|
* See [KotlinNpmResolutionManager] for details about resolution process.
|
||||||
@@ -70,6 +74,22 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
project.tasks.implementing(RequiresNpmDependencies::class)
|
||||||
|
.configureEach { task ->
|
||||||
|
if (task.enabled) {
|
||||||
|
task as RequiresNpmDependencies
|
||||||
|
// KotlinJsTest delegates npm dependencies to testFramework,
|
||||||
|
// which can be defined after this configure action
|
||||||
|
if (task !is KotlinJsTest) {
|
||||||
|
nodeJs.taskRequirements.addTaskRequirements(task)
|
||||||
|
}
|
||||||
|
task.dependsOn(packageJsonTaskHolder)
|
||||||
|
task.dependsOn(nodeJs.npmInstallTask)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val plugins: List<CompilationResolverPlugin> = projectResolver.resolver.plugins
|
val plugins: List<CompilationResolverPlugin> = projectResolver.resolver.plugins
|
||||||
.flatMap {
|
.flatMap {
|
||||||
if (compilation.isMain()) {
|
if (compilation.isMain()) {
|
||||||
@@ -365,3 +385,12 @@ internal class KotlinCompilationNpmResolver(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters a [TaskCollection] by type that is not a subtype of [Task] (for use with interfaces)
|
||||||
|
*
|
||||||
|
* TODO properly express within the type system? The result should be a TaskCollection<T & R>
|
||||||
|
*/
|
||||||
|
private fun <T : Task, R : Any> TaskCollection<T>.implementing(kclass: KClass<R>): TaskCollection<T> =
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
withType(kclass.java as Class<T>)
|
||||||
-12
@@ -6,8 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
|
package org.jetbrains.kotlin.gradle.targets.js.npm.resolver
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
|
||||||
import org.gradle.api.tasks.TaskCollection
|
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtensionOrNull
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtensionOrNull
|
||||||
@@ -16,7 +14,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution
|
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution
|
||||||
import kotlin.reflect.KClass
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See [KotlinNpmResolutionManager] for details about resolution process.
|
* See [KotlinNpmResolutionManager] for details about resolution process.
|
||||||
@@ -96,12 +93,3 @@ internal class KotlinProjectNpmResolver(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters a [TaskCollection] by type that is not a subtype of [Task] (for use with interfaces)
|
|
||||||
*
|
|
||||||
* TODO properly express within the type system? The result should be a TaskCollection<T & R>
|
|
||||||
*/
|
|
||||||
private fun <T : Task, R : Any> TaskCollection<T>.implementing(kclass: KClass<R>): TaskCollection<T> =
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
withType(kclass.java as Class<T>)
|
|
||||||
+5
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolverPlugin
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
@@ -131,6 +132,10 @@ abstract class KotlinJsSubTarget(
|
|||||||
if (it.testFramework == null) {
|
if (it.testFramework == null) {
|
||||||
configureDefaultTestFramework(it)
|
configureDefaultTestFramework(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (it.enabled) {
|
||||||
|
nodeJs.taskRequirements.addTaskRequirements(it as RequiresNpmDependencies)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user