[Gradle, JS] Commonize root package json to prepared files for extensibility via other npm package managers
#KT-34832 fixed #KT-35194 fixed
This commit is contained in:
-4
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||
import org.jetbrains.kotlin.gradle.targets.js.NpmVersions
|
||||
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.NpmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn
|
||||
@@ -63,9 +62,6 @@ open class NodeJsRootExtension(val rootProject: Project) : ConfigurationPhaseAwa
|
||||
val rootPackageDir: File
|
||||
get() = rootProject.buildDir.resolve("js")
|
||||
|
||||
val rootPackageJson: File
|
||||
get() = rootPackageDir.resolve(NpmProject.PACKAGE_JSON)
|
||||
|
||||
internal val rootNodeModulesStateFile: File
|
||||
get() = rootPackageDir.resolve("node_modules.state")
|
||||
|
||||
|
||||
+4
-9
@@ -10,7 +10,7 @@ import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.BasePlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.Companion.EXTENSION_NAME
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
|
||||
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
||||
|
||||
open class NodeJsRootPlugin : Plugin<Project> {
|
||||
@@ -30,21 +30,16 @@ open class NodeJsRootPlugin : Plugin<Project> {
|
||||
|
||||
val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME)
|
||||
|
||||
val rootPackageJson = tasks.register(RootPackageJsonTask.NAME, RootPackageJsonTask::class.java) {
|
||||
it.group = TASKS_GROUP_NAME
|
||||
it.description = "Create root package.json"
|
||||
|
||||
it.mustRunAfter(rootClean)
|
||||
}
|
||||
|
||||
tasks.register(KotlinNpmInstallTask.NAME, KotlinNpmInstallTask::class.java) {
|
||||
it.dependsOn(setupTask, rootPackageJson)
|
||||
it.dependsOn(setupTask)
|
||||
it.group = TASKS_GROUP_NAME
|
||||
it.description = "Find, download and link NPM dependencies and projects"
|
||||
|
||||
it.mustRunAfter(rootClean)
|
||||
}
|
||||
|
||||
YarnPlugin.apply(project)
|
||||
|
||||
tasks.register("node" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {
|
||||
it.cleanableStoreProvider = provider { settings.requireConfigured().cleanableStore }
|
||||
it.group = TASKS_GROUP_NAME
|
||||
|
||||
+2
@@ -17,6 +17,8 @@ interface NpmApi {
|
||||
|
||||
fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution)
|
||||
|
||||
fun preparedFiles(project: Project): Collection<File>
|
||||
|
||||
fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
|
||||
+10
-5
@@ -6,7 +6,10 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.npm.tasks
|
||||
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.InputFiles
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import java.io.File
|
||||
|
||||
@@ -15,7 +18,9 @@ open class KotlinNpmInstallTask : DefaultTask() {
|
||||
check(project == project.rootProject)
|
||||
|
||||
onlyIf {
|
||||
rootPackageJson.exists()
|
||||
preparedFiles.all {
|
||||
it.exists()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,9 +35,9 @@ open class KotlinNpmInstallTask : DefaultTask() {
|
||||
val packageJsonFiles: Collection<File>
|
||||
get() = resolutionManager.packageJsonFiles
|
||||
|
||||
@get:InputFile
|
||||
val rootPackageJson: File
|
||||
get() = nodeJs.rootPackageJson
|
||||
@get:InputFiles
|
||||
val preparedFiles: Collection<File>
|
||||
get() = nodeJs.packageManager.preparedFiles(project)
|
||||
|
||||
// avoid using node_modules as output directory, as it is significantly slows down build
|
||||
@get:OutputFile
|
||||
|
||||
+2
-1
@@ -9,6 +9,7 @@ import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||
import java.io.File
|
||||
|
||||
open class RootPackageJsonTask : DefaultTask() {
|
||||
@@ -25,7 +26,7 @@ open class RootPackageJsonTask : DefaultTask() {
|
||||
|
||||
@get:OutputFile
|
||||
val rootPackageJson: File
|
||||
get() = nodeJs.rootPackageJson
|
||||
get() = nodeJs.rootPackageDir.resolve(NpmProject.PACKAGE_JSON)
|
||||
|
||||
@TaskAction
|
||||
fun resolve() {
|
||||
|
||||
+1
-1
@@ -93,7 +93,7 @@ data class KotlinWebpackConfig(
|
||||
val noInfo: Boolean = true,
|
||||
val open: Any = true,
|
||||
val overlay: Any = false,
|
||||
val port: Int = 8080,
|
||||
val port: Int? = null,
|
||||
val proxy: Map<String, Any>? = null,
|
||||
val contentBase: List<String>
|
||||
) : Serializable
|
||||
|
||||
+13
-9
@@ -9,6 +9,7 @@ import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import java.io.File
|
||||
|
||||
class Yarn : NpmApi {
|
||||
private val yarnWorkspaces = YarnWorkspaces()
|
||||
@@ -24,6 +25,18 @@ class Yarn : NpmApi {
|
||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) =
|
||||
getDelegate(resolvedNpmProject.project).resolveProject(resolvedNpmProject)
|
||||
|
||||
override fun preparedFiles(project: Project): Collection<File> =
|
||||
getDelegate(project).preparedFiles(project)
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
) = getDelegate(rootProject.project)
|
||||
.prepareRootProject(
|
||||
rootProject,
|
||||
subProjects
|
||||
)
|
||||
|
||||
override fun resolveRootProject(
|
||||
rootProject: Project,
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
@@ -44,13 +57,4 @@ class Yarn : NpmApi {
|
||||
dependency,
|
||||
transitive
|
||||
)
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
) = getDelegate(rootProject.project)
|
||||
.prepareRootProject(
|
||||
rootProject,
|
||||
subProjects
|
||||
)
|
||||
}
|
||||
+18
-2
@@ -1,13 +1,16 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.BasePlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
||||
|
||||
open class YarnPlugin : Plugin<Project> {
|
||||
@@ -24,6 +27,19 @@ open class YarnPlugin : Plugin<Project> {
|
||||
it.dependsOn(nodeJs.nodeJsSetupTask)
|
||||
}
|
||||
|
||||
val rootClean = project.rootProject.tasks.named(BasePlugin.CLEAN_TASK_NAME)
|
||||
|
||||
val rootPackageJson = tasks.register(RootPackageJsonTask.NAME, RootPackageJsonTask::class.java) {
|
||||
it.group = NodeJsRootPlugin.TASKS_GROUP_NAME
|
||||
it.description = "Create root package.json"
|
||||
|
||||
it.mustRunAfter(rootClean)
|
||||
}
|
||||
|
||||
tasks.named(KotlinNpmInstallTask.NAME).configure {
|
||||
it.dependsOn(rootPackageJson)
|
||||
}
|
||||
|
||||
tasks.register("yarn" + CleanDataTask.NAME_SUFFIX, CleanDataTask::class.java) {
|
||||
it.cleanableStoreProvider = provider { yarnRootExtension.requireConfigured().cleanableStore }
|
||||
it.description = "Clean unused local yarn version"
|
||||
|
||||
+9
-5
@@ -9,6 +9,7 @@ import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJsonUpToDateCheck
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import java.io.File
|
||||
|
||||
class YarnSimple : YarnBasics() {
|
||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) {
|
||||
@@ -27,15 +28,18 @@ class YarnSimple : YarnBasics() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun preparedFiles(project: Project): Collection<File> =
|
||||
emptyList()
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
) = Unit
|
||||
|
||||
override fun resolveRootProject(
|
||||
rootProject: Project,
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>,
|
||||
skipExecution: Boolean,
|
||||
cliArgs: List<String>
|
||||
) = Unit
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
) = Unit
|
||||
}
|
||||
+10
-2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution
|
||||
import java.io.File
|
||||
@@ -15,6 +16,14 @@ import java.io.File
|
||||
class YarnWorkspaces : YarnBasics() {
|
||||
override fun resolveProject(resolvedNpmProject: KotlinCompilationNpmResolution) = Unit
|
||||
|
||||
override fun preparedFiles(project: Project): Collection<File> {
|
||||
return listOf(
|
||||
NodeJsRootPlugin.apply(project.rootProject)
|
||||
.rootPackageDir
|
||||
.resolve(NpmProject.PACKAGE_JSON)
|
||||
)
|
||||
}
|
||||
|
||||
override fun prepareRootProject(
|
||||
rootProject: Project,
|
||||
subProjects: Collection<KotlinCompilationNpmResolution>
|
||||
@@ -31,8 +40,7 @@ class YarnWorkspaces : YarnBasics() {
|
||||
rootProject: Project,
|
||||
npmProjects: Collection<KotlinCompilationNpmResolution>
|
||||
) {
|
||||
val nodeJs = NodeJsRootPlugin.apply(rootProject)
|
||||
val rootPackageJsonFile = nodeJs.rootPackageJson
|
||||
val rootPackageJsonFile = preparedFiles(rootProject).single()
|
||||
|
||||
saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, rootPackageJsonFile)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user