100 lines
3.5 KiB
Kotlin
100 lines
3.5 KiB
Kotlin
package ru.mipt.npm.gradle.internal
|
|
|
|
import org.gradle.api.artifacts.ProjectDependency
|
|
import org.gradle.api.artifacts.dsl.RepositoryHandler
|
|
import org.gradle.api.file.DuplicatesStrategy
|
|
import org.gradle.api.tasks.Copy
|
|
import org.gradle.kotlin.dsl.get
|
|
import org.gradle.kotlin.dsl.getByName
|
|
import org.gradle.kotlin.dsl.maven
|
|
import org.gradle.language.jvm.tasks.ProcessResources
|
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
|
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
|
|
|
|
internal fun LanguageSettingsBuilder.applySettings(): Unit {
|
|
languageVersion = "1.5"
|
|
apiVersion = "1.5"
|
|
progressiveMode = true
|
|
useExperimentalAnnotation("kotlin.Experimental")
|
|
useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes")
|
|
useExperimentalAnnotation("kotlin.ExperimentalStdlibApi")
|
|
useExperimentalAnnotation("kotlin.time.ExperimentalTime")
|
|
useExperimentalAnnotation("kotlin.contracts.ExperimentalContracts")
|
|
useExperimentalAnnotation("kotlin.js.ExperimentalJsExport")
|
|
}
|
|
|
|
internal fun RepositoryHandler.applyRepos(): Unit {
|
|
mavenCentral()
|
|
maven("https://repo.kotlin.link")
|
|
}
|
|
|
|
internal fun Copy.fromJsDependencies(configurationName: String) = project.run {
|
|
val configuration = configurations[configurationName]
|
|
?: error("Configuration with name $configurationName could not be resolved.")
|
|
val projectDeps = configuration.allDependencies.filterIsInstance<ProjectDependency>().map {
|
|
it.dependencyProject
|
|
}
|
|
projectDeps.forEach { dep ->
|
|
dep.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
|
|
dep.tasks.findByName("jsProcessResources")?.let { task ->
|
|
dependsOn(task)
|
|
from(task)
|
|
}
|
|
}
|
|
dep.pluginManager.withPlugin("org.jetbrains.kotlin.js") {
|
|
dep.tasks.findByName("processResources")?.let { task ->
|
|
dependsOn(task)
|
|
from(task)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
fun KotlinMultiplatformExtension.bundleJsBinaryAsResource(bundleName: String = "js/bundle.js"){
|
|
js {
|
|
binaries.executable()
|
|
browser {
|
|
webpackTask {
|
|
outputFileName = bundleName
|
|
}
|
|
}
|
|
}
|
|
|
|
jvm {
|
|
val processResourcesTaskName =
|
|
compilations[org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.MAIN_COMPILATION_NAME]
|
|
.processResourcesTaskName
|
|
|
|
val jsBrowserDistribution = project.tasks.getByName("jsBrowserDistribution")
|
|
|
|
project.tasks.getByName<ProcessResources>(processResourcesTaskName) {
|
|
duplicatesStrategy = DuplicatesStrategy.WARN
|
|
dependsOn(jsBrowserDistribution)
|
|
from(jsBrowserDistribution)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
//internal fun Copy.copyJVMResources(configuration: Configuration): Unit = project.afterEvaluate {
|
|
// val projectDeps = configuration.allDependencies
|
|
// .filterIsInstance<ProjectDependency>()
|
|
// .map { it.dependencyProject }
|
|
//
|
|
// projectDeps.forEach { dep ->
|
|
// dep.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
|
|
// dep.tasks.findByName("jvmProcessResources")?.let { task ->
|
|
// dependsOn(task)
|
|
// from(task)
|
|
// }
|
|
// }
|
|
// dep.pluginManager.withPlugin("org.jetbrains.kotlin.jvm") {
|
|
// dep.tasks.findByName("processResources")?.let { task ->
|
|
// dependsOn(task)
|
|
// from(task)
|
|
// }
|
|
// }
|
|
// }
|
|
//} |