[Gradle, JS] Replace outputFileProperty onto Binary's mainFile
^KT-63435 fixed
This commit is contained in:
committed by
Space Team
parent
d3322d515f
commit
81efc8d7c7
@@ -56,8 +56,7 @@ val nodeModules by configurations.registering {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val compileTestDevelopmentExecutableKotlinJs = tasks.named<KotlinJsIrLink>("compileTestDevelopmentExecutableKotlinJs") {
|
val compileTestDevelopmentExecutableKotlinJs = tasks.named<KotlinJsIrLink>("compileTestDevelopmentExecutableKotlinJs") {
|
||||||
@Suppress("DEPRECATION")
|
compilerOptions.moduleName = "kotlin-kotlin-test-js-ir-it-test"
|
||||||
kotlinOptions.outputFile = buildDir.resolve("compileSync/js/test/testDevelopmentExecutable/kotlin/kotlin-kotlin-test-js-ir-it-test.js").normalize().absolutePath
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val populateNodeModules = tasks.register<Copy>("populateNodeModules") {
|
val populateNodeModules = tasks.register<Copy>("populateNodeModules") {
|
||||||
|
|||||||
+2
-1
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.gradle.tasks
|
|||||||
|
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
import org.gradle.api.file.ConfigurableFileCollection
|
import org.gradle.api.file.ConfigurableFileCollection
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.work.NormalizeLineEndings
|
import org.gradle.work.NormalizeLineEndings
|
||||||
@@ -40,7 +41,7 @@ interface IncrementalSyncTask : Task {
|
|||||||
* @suppress
|
* @suppress
|
||||||
*/
|
*/
|
||||||
@get:Internal
|
@get:Internal
|
||||||
@Deprecated("Use destinationDirProperty with Provider API", ReplaceWith("destinationDirProperty.get()"))
|
@Deprecated("Use destinationDirectory with Provider API", ReplaceWith("destinationDirectory.get()"))
|
||||||
val destinationDir: File
|
val destinationDir: File
|
||||||
get() = destinationDirectory.get()
|
get() = destinationDirectory.get()
|
||||||
}
|
}
|
||||||
+1
-1
@@ -37,7 +37,7 @@ class ExecutionStrategyJsIT : ExecutionStrategyIT() {
|
|||||||
|
|
|
|
||||||
|afterEvaluate {
|
|afterEvaluate {
|
||||||
| tasks.named('compileKotlinJs') {
|
| tasks.named('compileKotlinJs') {
|
||||||
| kotlinOptions.outputFile = "${'$'}{project.projectDir}/web/js/"
|
| destinationDirectory = new File(project.projectDir, "web/js/")
|
||||||
| }
|
| }
|
||||||
|}
|
|}
|
||||||
|
|
|
|
||||||
|
|||||||
+2
-1
@@ -847,7 +847,8 @@ class Kotlin2JsIrGradlePluginIT : KGPBaseTest() {
|
|||||||
"""
|
"""
|
||||||
|project("app") {
|
|project("app") {
|
||||||
| tasks.$taskSelector {
|
| tasks.$taskSelector {
|
||||||
| kotlinOptions.outputFile = "${'$'}{buildDir}/kotlin2js/app.js"
|
| destinationDirectory.set(file("${'$'}{buildDir}/kotlin2js"))
|
||||||
|
| kotlinOptions.moduleName = "app"
|
||||||
| }
|
| }
|
||||||
|}
|
|}
|
||||||
|
|
|
|
||||||
|
|||||||
-29
@@ -43,35 +43,6 @@ internal class KotlinJsIrSourceSetProcessor(
|
|||||||
it.dependsOn(kotlinTask)
|
it.dependsOn(kotlinTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
val compilation = compilationInfo.tcs.compilation as KotlinJsIrCompilation
|
|
||||||
|
|
||||||
compilation.binaries
|
|
||||||
.withType(JsIrBinary::class.java)
|
|
||||||
.all { binary ->
|
|
||||||
val configAction = KotlinJsIrLinkConfig(binary)
|
|
||||||
configAction.configureTask {
|
|
||||||
it.description = taskDescription
|
|
||||||
it.libraries.from(project.filesProvider { compilation.runtimeDependencyFiles })
|
|
||||||
}
|
|
||||||
configAction.configureTask { task ->
|
|
||||||
val targetCompilerOptions = (compilation.target as KotlinJsIrTarget).compilerOptions
|
|
||||||
KotlinJsCompilerOptionsHelper.syncOptionsAsConvention(
|
|
||||||
targetCompilerOptions,
|
|
||||||
task.compilerOptions
|
|
||||||
)
|
|
||||||
|
|
||||||
// Restoring already configured module name
|
|
||||||
task.compilerOptions.moduleName.convention(
|
|
||||||
project.provider { compilation.npmProject.name }
|
|
||||||
)
|
|
||||||
|
|
||||||
task.modeProperty.set(binary.mode)
|
|
||||||
task.dependsOn(kotlinTask)
|
|
||||||
}
|
|
||||||
|
|
||||||
tasksProvider.registerKotlinJsIrTask(project, binary.linkTaskName, configAction)
|
|
||||||
}
|
|
||||||
|
|
||||||
project.whenEvaluated {
|
project.whenEvaluated {
|
||||||
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
|
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
|
||||||
/* Not supported in KPM, yet */
|
/* Not supported in KPM, yet */
|
||||||
|
|||||||
+3
-3
@@ -11,8 +11,8 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
|
|||||||
import groovy.lang.Closure
|
import groovy.lang.Closure
|
||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.attributes.AttributeContainer
|
import org.gradle.api.attributes.AttributeContainer
|
||||||
import org.gradle.api.tasks.TaskProvider
|
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
|
||||||
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
open class KotlinJsCompilation @Inject internal constructor(
|
open class KotlinJsCompilation @Inject internal constructor(
|
||||||
compilation: KotlinCompilationImpl
|
compilation: KotlinCompilationImpl,
|
||||||
) : AbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(compilation),
|
) : AbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(compilation),
|
||||||
HasBinaries<KotlinJsBinaryContainer> {
|
HasBinaries<KotlinJsBinaryContainer> {
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ open class KotlinJsCompilation @Inject internal constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal val KotlinJsCompilation.fileExtension: Provider<String>
|
val KotlinJsCompilation.fileExtension: Provider<String>
|
||||||
get() {
|
get() {
|
||||||
val isWasm = platformType == KotlinPlatformType.wasm
|
val isWasm = platformType == KotlinPlatformType.wasm
|
||||||
return compilerOptions.options.moduleKind.map { moduleKind ->
|
return compilerOptions.options.moduleKind.map { moduleKind ->
|
||||||
|
|||||||
+1
@@ -10,6 +10,7 @@ import org.gradle.work.DisableCachingByDefault
|
|||||||
import org.gradle.work.InputChanges
|
import org.gradle.work.InputChanges
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.internal.RewriteSourceMapFilterReader
|
import org.jetbrains.kotlin.gradle.targets.js.internal.RewriteSourceMapFilterReader
|
||||||
import org.jetbrains.kotlin.gradle.tasks.IncrementalSyncTask
|
import org.jetbrains.kotlin.gradle.tasks.IncrementalSyncTask
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getFile
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|||||||
+92
-37
@@ -6,19 +6,27 @@
|
|||||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||||
|
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.file.RegularFile
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptionsHelper
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
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.plugin.mpp.fileExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
import org.jetbrains.kotlin.gradle.targets.js.binaryen.BinaryenExec
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.Distribution
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer.Companion.generateBinaryName
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer.Companion.generateBinaryName
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.subtargets.createDefaultDistribution
|
import org.jetbrains.kotlin.gradle.targets.js.subtargets.createDefaultDistribution
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.IncrementalSyncTask
|
import org.jetbrains.kotlin.gradle.tasks.configuration.KotlinJsIrLinkConfig
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.mapToFile
|
||||||
|
|
||||||
interface JsBinary {
|
interface JsBinary {
|
||||||
val compilation: KotlinJsCompilation
|
val compilation: KotlinJsCompilation
|
||||||
@@ -30,19 +38,69 @@ interface JsBinary {
|
|||||||
sealed class JsIrBinary(
|
sealed class JsIrBinary(
|
||||||
final override val compilation: KotlinJsIrCompilation,
|
final override val compilation: KotlinJsIrCompilation,
|
||||||
final override val name: String,
|
final override val name: String,
|
||||||
override val mode: KotlinJsBinaryMode
|
override val mode: KotlinJsBinaryMode,
|
||||||
) : JsBinary {
|
) : JsBinary {
|
||||||
override val distribution: Distribution =
|
override val distribution: Distribution =
|
||||||
createDefaultDistribution(compilation.target.project, compilation.target.targetName, name)
|
createDefaultDistribution(compilation.target.project, compilation.target.targetName, name)
|
||||||
|
|
||||||
val linkTaskName: String = linkTaskName()
|
val linkTaskName: String = linkTaskName()
|
||||||
|
|
||||||
|
val linkSyncTaskName: String = linkSyncTaskName()
|
||||||
|
|
||||||
|
val validateGeneratedTsTaskName: String = validateTypeScriptTaskName()
|
||||||
|
|
||||||
var generateTs: Boolean = false
|
var generateTs: Boolean = false
|
||||||
|
|
||||||
val linkTask: TaskProvider<KotlinJsIrLink>
|
val linkTask: TaskProvider<KotlinJsIrLink> = project.registerTask(linkTaskName, KotlinJsIrLink::class.java, listOf(project))
|
||||||
get() = target.project.tasks
|
|
||||||
.withType(KotlinJsIrLink::class.java)
|
private val _linkSyncTask: TaskProvider<DefaultIncrementalSyncTask>? =
|
||||||
.named(linkTaskName)
|
if (target.wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||||
|
null
|
||||||
|
} else {
|
||||||
|
project.registerTask<DefaultIncrementalSyncTask>(
|
||||||
|
linkSyncTaskName
|
||||||
|
) { task ->
|
||||||
|
task.from.from(
|
||||||
|
linkTask.flatMap { linkTask ->
|
||||||
|
linkTask.destinationDirectory
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
task.from.from(project.tasks.named(compilation.processResourcesTaskName))
|
||||||
|
|
||||||
|
task.destinationDirectory.set(compilation.npmProject.dist.mapToFile())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wasi target doesn't have sync task
|
||||||
|
// need to extract wasm related binaries
|
||||||
|
val linkSyncTask: TaskProvider<DefaultIncrementalSyncTask>
|
||||||
|
get() = if (target.wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||||
|
throw IllegalStateException("Wasi target has no sync task")
|
||||||
|
} else {
|
||||||
|
_linkSyncTask!!
|
||||||
|
}
|
||||||
|
|
||||||
|
val mainFileName: Provider<String> = linkTask.flatMap {
|
||||||
|
it.compilerOptions.moduleName.zip(compilation.fileExtension) { moduleName, extension ->
|
||||||
|
"$moduleName.$extension"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val mainFile: Provider<RegularFile> = linkTask.flatMap {
|
||||||
|
it.destinationDirectory.file(mainFileName.get())
|
||||||
|
}
|
||||||
|
|
||||||
|
val mainFileSyncPath: Provider<RegularFile> =
|
||||||
|
if (target.wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||||
|
project.objects.fileProperty()
|
||||||
|
} else {
|
||||||
|
project.objects.fileProperty().fileProvider(
|
||||||
|
linkSyncTask.map {
|
||||||
|
it.destinationDirectory.get().resolve(mainFileName.get())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun linkTaskName(): String =
|
private fun linkTaskName(): String =
|
||||||
lowerCamelCaseName(
|
lowerCamelCaseName(
|
||||||
@@ -52,15 +110,6 @@ sealed class JsIrBinary(
|
|||||||
target.targetName
|
target.targetName
|
||||||
)
|
)
|
||||||
|
|
||||||
val linkSyncTaskName: String = linkSyncTaskName()
|
|
||||||
|
|
||||||
val validateGeneratedTsTaskName: String = validateTypeScriptTaskName()
|
|
||||||
|
|
||||||
val linkSyncTask: TaskProvider<IncrementalSyncTask>
|
|
||||||
get() = target.project.tasks
|
|
||||||
.withType<IncrementalSyncTask>()
|
|
||||||
.named(linkSyncTaskName)
|
|
||||||
|
|
||||||
private fun linkSyncTaskName(): String =
|
private fun linkSyncTaskName(): String =
|
||||||
lowerCamelCaseName(
|
lowerCamelCaseName(
|
||||||
compilation.target.disambiguationClassifier,
|
compilation.target.disambiguationClassifier,
|
||||||
@@ -77,17 +126,38 @@ sealed class JsIrBinary(
|
|||||||
TypeScriptValidationTask.NAME
|
TypeScriptValidationTask.NAME
|
||||||
)
|
)
|
||||||
|
|
||||||
val target: KotlinTarget
|
val target: KotlinJsIrTarget
|
||||||
get() = compilation.target
|
get() = compilation.target as KotlinJsIrTarget
|
||||||
|
|
||||||
val project: Project
|
val project: Project
|
||||||
get() = target.project
|
get() = target.project
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
internal fun JsIrBinary.configLinkTask() {
|
||||||
|
val configAction = KotlinJsIrLinkConfig(this)
|
||||||
|
configAction.configureTask {
|
||||||
|
it.libraries.from(project.filesProvider { compilation.runtimeDependencyFiles })
|
||||||
|
}
|
||||||
|
configAction.configureTask { task ->
|
||||||
|
val targetCompilerOptions = (compilation.target as KotlinJsIrTarget).compilerOptions
|
||||||
|
KotlinJsCompilerOptionsHelper.syncOptionsAsConvention(
|
||||||
|
targetCompilerOptions,
|
||||||
|
task.compilerOptions
|
||||||
|
)
|
||||||
|
|
||||||
|
task.modeProperty.set(mode)
|
||||||
|
task.dependsOn(compilation.compileTaskProvider)
|
||||||
|
}
|
||||||
|
|
||||||
|
configAction.execute(linkTask)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class Executable(
|
open class Executable(
|
||||||
compilation: KotlinJsIrCompilation,
|
compilation: KotlinJsIrCompilation,
|
||||||
name: String,
|
name: String,
|
||||||
mode: KotlinJsBinaryMode
|
mode: KotlinJsBinaryMode,
|
||||||
) : JsIrBinary(
|
) : JsIrBinary(
|
||||||
compilation,
|
compilation,
|
||||||
name,
|
name,
|
||||||
@@ -111,7 +181,7 @@ open class Executable(
|
|||||||
open class ExecutableWasm(
|
open class ExecutableWasm(
|
||||||
compilation: KotlinJsIrCompilation,
|
compilation: KotlinJsIrCompilation,
|
||||||
name: String,
|
name: String,
|
||||||
mode: KotlinJsBinaryMode
|
mode: KotlinJsBinaryMode,
|
||||||
) : Executable(
|
) : Executable(
|
||||||
compilation,
|
compilation,
|
||||||
name,
|
name,
|
||||||
@@ -131,26 +201,11 @@ open class ExecutableWasm(
|
|||||||
class Library(
|
class Library(
|
||||||
compilation: KotlinJsIrCompilation,
|
compilation: KotlinJsIrCompilation,
|
||||||
name: String,
|
name: String,
|
||||||
mode: KotlinJsBinaryMode
|
mode: KotlinJsBinaryMode,
|
||||||
) : JsIrBinary(
|
) : JsIrBinary(
|
||||||
compilation,
|
compilation,
|
||||||
name,
|
name,
|
||||||
mode
|
mode
|
||||||
) {
|
)
|
||||||
val executeTaskBaseName: String =
|
|
||||||
generateBinaryName(
|
|
||||||
compilation,
|
|
||||||
mode,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hack for legacy
|
|
||||||
internal val JsBinary.executeTaskBaseName: String
|
|
||||||
get() = generateBinaryName(
|
|
||||||
compilation,
|
|
||||||
mode,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
|
|
||||||
internal const val COMPILE_SYNC = "compileSync"
|
internal const val COMPILE_SYNC = "compileSync"
|
||||||
+12
-6
@@ -8,6 +8,8 @@ package org.jetbrains.kotlin.gradle.targets.js.ir
|
|||||||
import org.gradle.api.Action
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.DomainObjectSet
|
import org.gradle.api.DomainObjectSet
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
|
import org.gradle.api.file.Directory
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.Copy
|
import org.gradle.api.tasks.Copy
|
||||||
@@ -15,7 +17,6 @@ import org.gradle.language.base.plugins.LifecycleBasePlugin
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.utils.archivesName
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
||||||
@@ -29,8 +30,9 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig.Mode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.WebpackDevtool
|
||||||
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
import org.jetbrains.kotlin.gradle.tasks.dependsOn
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.archivesName
|
||||||
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
|
import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
|
||||||
import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.relativeOrAbsolute
|
import org.jetbrains.kotlin.gradle.utils.relativeOrAbsolute
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -156,7 +158,9 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
task.commonConfigure(
|
task.commonConfigure(
|
||||||
binary = binary,
|
binary = binary,
|
||||||
mode = mode,
|
mode = mode,
|
||||||
inputFilesDirectory = task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() },
|
inputFilesDirectory = task.project.objects.directoryProperty().fileProvider(
|
||||||
|
task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() },
|
||||||
|
),
|
||||||
entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName },
|
entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName },
|
||||||
configurationActions = runTaskConfigurations,
|
configurationActions = runTaskConfigurations,
|
||||||
nodeJs = nodeJs,
|
nodeJs = nodeJs,
|
||||||
@@ -209,7 +213,9 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
task.commonConfigure(
|
task.commonConfigure(
|
||||||
binary = binary,
|
binary = binary,
|
||||||
mode = mode,
|
mode = mode,
|
||||||
inputFilesDirectory = task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() },
|
inputFilesDirectory = task.project.objects.directoryProperty().fileProvider(
|
||||||
|
task.project.provider { binary.linkSyncTask.get().destinationDirectory.get() },
|
||||||
|
),
|
||||||
entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName },
|
entryModuleName = binary.linkTask.flatMap { it.compilerOptions.moduleName },
|
||||||
configurationActions = webpackTaskConfigurations,
|
configurationActions = webpackTaskConfigurations,
|
||||||
nodeJs = nodeJs,
|
nodeJs = nodeJs,
|
||||||
@@ -257,7 +263,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
private fun KotlinWebpack.commonConfigure(
|
private fun KotlinWebpack.commonConfigure(
|
||||||
binary: JsIrBinary,
|
binary: JsIrBinary,
|
||||||
mode: KotlinJsBinaryMode,
|
mode: KotlinJsBinaryMode,
|
||||||
inputFilesDirectory: Provider<File>,
|
inputFilesDirectory: Provider<Directory>,
|
||||||
entryModuleName: Provider<String>,
|
entryModuleName: Provider<String>,
|
||||||
configurationActions: DomainObjectSet<Action<KotlinWebpack>>,
|
configurationActions: DomainObjectSet<Action<KotlinWebpack>>,
|
||||||
nodeJs: NodeJsRootExtension,
|
nodeJs: NodeJsRootExtension,
|
||||||
@@ -271,7 +277,7 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
|
|
||||||
configureOptimization(mode)
|
configureOptimization(mode)
|
||||||
|
|
||||||
this.inputFilesDirectory.fileProvider(inputFilesDirectory)
|
this.inputFilesDirectory.set(inputFilesDirectory)
|
||||||
|
|
||||||
val platformType = binary.compilation.platformType
|
val platformType = binary.compilation.platformType
|
||||||
val moduleKind = binary.linkTask.flatMap { it.compilerOptions.moduleKind }
|
val moduleKind = binary.linkTask.flatMap { it.compilerOptions.moduleKind }
|
||||||
|
|||||||
+2
-8
@@ -34,14 +34,8 @@ abstract class KotlinD8Ir @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
val runTaskHolder = D8Exec.create(binary.compilation, name) {
|
val runTaskHolder = D8Exec.create(binary.compilation, name) {
|
||||||
group = taskGroupName
|
group = taskGroupName
|
||||||
dependsOn(binary.linkSyncTask)
|
dependsOn(binary.linkSyncTask)
|
||||||
inputFileProperty.fileProvider(
|
inputFileProperty.set(
|
||||||
binary.linkSyncTask.flatMap { linkSyncTask ->
|
binary.mainFileSyncPath
|
||||||
binary.linkTask.flatMap { linkTask ->
|
|
||||||
linkTask.outputFileProperty.map { file ->
|
|
||||||
linkSyncTask.destinationDirectory.get().resolve(file.name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
target.runTask.dependsOn(runTaskHolder)
|
target.runTask.dependsOn(runTaskHolder)
|
||||||
|
|||||||
+14
-10
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.PRODUCTION
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.ir.JsIrBinary.Companion.configLinkTask
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -25,8 +26,8 @@ open class KotlinJsBinaryContainer
|
|||||||
@Inject
|
@Inject
|
||||||
constructor(
|
constructor(
|
||||||
val target: KotlinTargetWithBinaries<KotlinJsIrCompilation, KotlinJsBinaryContainer>,
|
val target: KotlinTargetWithBinaries<KotlinJsIrCompilation, KotlinJsBinaryContainer>,
|
||||||
backingContainer: DomainObjectSet<JsBinary>,
|
backingContainer: DomainObjectSet<JsIrBinary>,
|
||||||
) : DomainObjectSet<JsBinary> by backingContainer {
|
) : DomainObjectSet<JsIrBinary> by backingContainer {
|
||||||
val project: Project
|
val project: Project
|
||||||
get() = target.project
|
get() = target.project
|
||||||
|
|
||||||
@@ -37,14 +38,14 @@ constructor(
|
|||||||
|
|
||||||
fun executable(
|
fun executable(
|
||||||
compilation: KotlinJsIrCompilation,
|
compilation: KotlinJsIrCompilation,
|
||||||
): List<JsBinary> {
|
): List<JsIrBinary> {
|
||||||
return executable(compilation as KotlinJsCompilation)
|
return executable(compilation as KotlinJsCompilation)
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun executable(
|
fun executable(
|
||||||
compilation: KotlinJsCompilation = defaultCompilation,
|
compilation: KotlinJsCompilation = defaultCompilation,
|
||||||
): List<JsBinary> {
|
): List<JsIrBinary> {
|
||||||
if (target is KotlinJsIrTarget) {
|
if (target is KotlinJsIrTarget) {
|
||||||
target.whenBrowserConfigured {
|
target.whenBrowserConfigured {
|
||||||
(this as KotlinJsIrSubTarget).produceExecutable()
|
(this as KotlinJsIrSubTarget).produceExecutable()
|
||||||
@@ -64,7 +65,7 @@ constructor(
|
|||||||
throw GradleException("Target should be KotlinJsIrTarget, but found $target")
|
throw GradleException("Target should be KotlinJsIrTarget, but found $target")
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun executableIrInternal(compilation: KotlinJsIrCompilation): List<JsBinary> = createBinaries(
|
internal fun executableIrInternal(compilation: KotlinJsIrCompilation): List<JsIrBinary> = createBinaries(
|
||||||
compilation = compilation,
|
compilation = compilation,
|
||||||
jsBinaryType = KotlinJsBinaryType.EXECUTABLE,
|
jsBinaryType = KotlinJsBinaryType.EXECUTABLE,
|
||||||
create = { compilation, name, mode ->
|
create = { compilation, name, mode ->
|
||||||
@@ -80,7 +81,7 @@ constructor(
|
|||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
fun library(
|
fun library(
|
||||||
compilation: KotlinJsIrCompilation = defaultCompilation,
|
compilation: KotlinJsIrCompilation = defaultCompilation,
|
||||||
): List<JsBinary> {
|
): List<JsIrBinary> {
|
||||||
if (target is KotlinJsIrTarget) {
|
if (target is KotlinJsIrTarget) {
|
||||||
target.whenBrowserConfigured {
|
target.whenBrowserConfigured {
|
||||||
(this as KotlinJsIrSubTarget).produceLibrary()
|
(this as KotlinJsIrSubTarget).produceLibrary()
|
||||||
@@ -115,7 +116,7 @@ constructor(
|
|||||||
withType(JsIrBinary::class.java)
|
withType(JsIrBinary::class.java)
|
||||||
.matching { it.mode == mode }
|
.matching { it.mode == mode }
|
||||||
|
|
||||||
private fun <T : JsBinary> createBinaries(
|
private fun <T : JsIrBinary> createBinaries(
|
||||||
compilation: KotlinJsIrCompilation,
|
compilation: KotlinJsIrCompilation,
|
||||||
modes: Collection<KotlinJsBinaryMode> = listOf(PRODUCTION, DEVELOPMENT),
|
modes: Collection<KotlinJsBinaryMode> = listOf(PRODUCTION, DEVELOPMENT),
|
||||||
jsBinaryType: KotlinJsBinaryType,
|
jsBinaryType: KotlinJsBinaryType,
|
||||||
@@ -130,12 +131,12 @@ constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T : JsBinary> createBinary(
|
private fun <T : JsIrBinary> createBinary(
|
||||||
compilation: KotlinJsIrCompilation,
|
compilation: KotlinJsIrCompilation,
|
||||||
mode: KotlinJsBinaryMode,
|
mode: KotlinJsBinaryMode,
|
||||||
jsBinaryType: KotlinJsBinaryType,
|
jsBinaryType: KotlinJsBinaryType,
|
||||||
create: (compilation: KotlinJsIrCompilation, name: String, mode: KotlinJsBinaryMode) -> T,
|
create: (compilation: KotlinJsIrCompilation, name: String, mode: KotlinJsBinaryMode) -> T,
|
||||||
): JsBinary {
|
): JsIrBinary {
|
||||||
val name = generateBinaryName(
|
val name = generateBinaryName(
|
||||||
compilation,
|
compilation,
|
||||||
mode,
|
mode,
|
||||||
@@ -148,7 +149,10 @@ constructor(
|
|||||||
|
|
||||||
binaryNames.add(name)
|
binaryNames.add(name)
|
||||||
|
|
||||||
val binary = create(compilation, name, mode)
|
val binary = create(compilation, name, mode).also {
|
||||||
|
it.configLinkTask()
|
||||||
|
}
|
||||||
|
|
||||||
add(binary)
|
add(binary)
|
||||||
// Allow accessing binaries as properties of the container in Groovy DSL.
|
// Allow accessing binaries as properties of the container in Groovy DSL.
|
||||||
if (this is ExtensionAware) {
|
if (this is ExtensionAware) {
|
||||||
|
|||||||
+4
-13
@@ -32,7 +32,6 @@ import org.jetbrains.kotlin.gradle.tasks.registerTask
|
|||||||
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
import org.jetbrains.kotlin.gradle.testing.internal.configureConventions
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.gradle.utils.newFileProperty
|
|
||||||
|
|
||||||
abstract class KotlinJsIrSubTarget(
|
abstract class KotlinJsIrSubTarget(
|
||||||
val target: KotlinJsIrTarget,
|
val target: KotlinJsIrTarget,
|
||||||
@@ -124,28 +123,20 @@ abstract class KotlinJsIrSubTarget(
|
|||||||
|
|
||||||
val inputFileProperty = if (target.wasmTargetType != KotlinWasmTargetType.WASI) {
|
val inputFileProperty = if (target.wasmTargetType != KotlinWasmTargetType.WASI) {
|
||||||
testJs.dependsOn(binary.linkSyncTask)
|
testJs.dependsOn(binary.linkSyncTask)
|
||||||
binary.linkSyncTask.flatMap { linkSyncTask ->
|
binary.mainFileSyncPath
|
||||||
binary.linkTask.flatMap { linkTask ->
|
|
||||||
linkTask.outputFileProperty.map { file ->
|
|
||||||
linkSyncTask.destinationDirectory.get().resolve(file.name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (project.locateTask<BinaryenExec>((binary as ExecutableWasm).optimizeTaskName) != null) {
|
if (project.locateTask<BinaryenExec>((binary as ExecutableWasm).optimizeTaskName) != null) {
|
||||||
testJs.dependsOn(binary.optimizeTask)
|
testJs.dependsOn(binary.optimizeTask)
|
||||||
binary.optimizeTask.flatMap { optimizeTask ->
|
binary.optimizeTask.flatMap { optimizeTask ->
|
||||||
optimizeTask.outputFileProperty.asFile
|
optimizeTask.outputFileProperty
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
testJs.dependsOn(binary.linkTask)
|
testJs.dependsOn(binary.linkTask)
|
||||||
binary.linkTask.flatMap { linkTask ->
|
binary.mainFile
|
||||||
linkTask.outputFileProperty
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testJs.inputFileProperty.fileProvider(
|
testJs.inputFileProperty.set(
|
||||||
inputFileProperty
|
inputFileProperty
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+2
-22
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator.Companion.configureJsDefaultOptions
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator.Companion.configureJsDefaultOptions
|
||||||
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.npmProject
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
import org.jetbrains.kotlin.gradle.targets.js.typescript.TypeScriptValidationTask
|
||||||
import org.jetbrains.kotlin.gradle.tasks.*
|
import org.jetbrains.kotlin.gradle.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.*
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
@@ -151,7 +150,7 @@ constructor(
|
|||||||
compilation.binaries
|
compilation.binaries
|
||||||
.withType(JsIrBinary::class.java)
|
.withType(JsIrBinary::class.java)
|
||||||
.all { binary ->
|
.all { binary ->
|
||||||
val syncTask = registerCompileSync(binary)
|
val syncTask = binary.linkSyncTask
|
||||||
binaryenReplaceInput[binary]?.invoke()
|
binaryenReplaceInput[binary]?.invoke()
|
||||||
val tsValidationTask = registerTypeScriptCheckTask(binary)
|
val tsValidationTask = registerTypeScriptCheckTask(binary)
|
||||||
|
|
||||||
@@ -169,25 +168,6 @@ constructor(
|
|||||||
|
|
||||||
private val commonLazy by commonLazyDelegate
|
private val commonLazy by commonLazyDelegate
|
||||||
|
|
||||||
private fun registerCompileSync(binary: JsIrBinary): TaskProvider<DefaultIncrementalSyncTask> {
|
|
||||||
val compilation = binary.compilation
|
|
||||||
val npmProject = compilation.npmProject
|
|
||||||
|
|
||||||
return project.registerTask<DefaultIncrementalSyncTask>(
|
|
||||||
binary.linkSyncTaskName
|
|
||||||
) { task ->
|
|
||||||
task.from.from(
|
|
||||||
binary.linkTask.flatMap { linkTask ->
|
|
||||||
linkTask.destinationDirectory.map { it.asFile }
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
task.from.from(project.tasks.named(compilation.processResourcesTaskName))
|
|
||||||
|
|
||||||
task.destinationDirectory.set(npmProject.dist.mapToFile())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun registerTypeScriptCheckTask(binary: JsIrBinary): TaskProvider<TypeScriptValidationTask> {
|
private fun registerTypeScriptCheckTask(binary: JsIrBinary): TaskProvider<TypeScriptValidationTask> {
|
||||||
val linkTask = binary.linkTask
|
val linkTask = binary.linkTask
|
||||||
val compilation = binary.compilation
|
val compilation = binary.compilation
|
||||||
@@ -280,7 +260,7 @@ constructor(
|
|||||||
|
|
||||||
whenNodejsConfigured {
|
whenNodejsConfigured {
|
||||||
testTask {
|
testTask {
|
||||||
val name = binary.linkTask.flatMap { it.outputFileProperty.map { it.name } }
|
val name = binary.mainFileName
|
||||||
it.inputFileProperty.fileProvider(
|
it.inputFileProperty.fileProvider(
|
||||||
binaryenExec.flatMap { it.outputFileProperty.map { it.asFile.parentFile.resolve(name.get()) } }
|
binaryenExec.flatMap { it.outputFileProperty.map { it.asFile.parentFile.resolve(name.get()) } }
|
||||||
)
|
)
|
||||||
|
|||||||
+3
-11
@@ -45,20 +45,12 @@ abstract class KotlinNodeJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
val inputFile = if ((compilation.target as KotlinJsIrTarget).wasmTargetType == KotlinWasmTargetType.WASI) {
|
val inputFile = if ((compilation.target as KotlinJsIrTarget).wasmTargetType == KotlinWasmTargetType.WASI) {
|
||||||
dependsOn(binary.linkTask)
|
dependsOn(binary.linkTask)
|
||||||
sourceMapStackTraces = false
|
sourceMapStackTraces = false
|
||||||
binary.linkTask.flatMap { linkTask ->
|
binary.mainFile
|
||||||
linkTask.outputFileProperty
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
dependsOn(binary.linkSyncTask)
|
dependsOn(binary.linkSyncTask)
|
||||||
binary.linkSyncTask.flatMap { linkSyncTask ->
|
binary.mainFileSyncPath
|
||||||
binary.linkTask.flatMap { linkTask ->
|
|
||||||
linkTask.outputFileProperty.map { file ->
|
|
||||||
linkSyncTask.destinationDirectory.get().resolve(file.name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
inputFileProperty.fileProvider(
|
inputFileProperty.set(
|
||||||
inputFile
|
inputFile
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-10
@@ -10,11 +10,10 @@ import org.gradle.api.file.Directory
|
|||||||
import org.gradle.api.file.RegularFile
|
import org.gradle.api.file.RegularFile
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.process.ExecSpec
|
import org.gradle.process.ExecSpec
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.fileExtension
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrCompilation
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension
|
||||||
@@ -40,12 +39,7 @@ val KotlinJsCompilation.npmProject: NpmProject
|
|||||||
open class NpmProject(@Transient val compilation: KotlinJsIrCompilation) : Serializable {
|
open class NpmProject(@Transient val compilation: KotlinJsIrCompilation) : Serializable {
|
||||||
val compilationName = compilation.disambiguatedName
|
val compilationName = compilation.disambiguatedName
|
||||||
|
|
||||||
private val extension by lazy {
|
private val extension: Provider<String> = compilation.fileExtension
|
||||||
if (
|
|
||||||
compilation.platformType == KotlinPlatformType.wasm ||
|
|
||||||
compilation.kotlinOptions.moduleKind == JsModuleKind.MODULE_ES.kind
|
|
||||||
) ".mjs" else ".js"
|
|
||||||
}
|
|
||||||
|
|
||||||
val name: String by lazy {
|
val name: String by lazy {
|
||||||
buildNpmProjectName()
|
buildNpmProjectName()
|
||||||
@@ -83,8 +77,7 @@ open class NpmProject(@Transient val compilation: KotlinJsIrCompilation) : Seria
|
|||||||
val dist: Provider<Directory>
|
val dist: Provider<Directory>
|
||||||
get() = dir.map { it.dir(DIST_FOLDER) }
|
get() = dir.map { it.dir(DIST_FOLDER) }
|
||||||
|
|
||||||
val main: String
|
val main: Provider<String> = extension.map { "${DIST_FOLDER}/$name.$it" }
|
||||||
get() = "${DIST_FOLDER}/$name$extension"
|
|
||||||
|
|
||||||
val publicPackageJsonTaskName: String
|
val publicPackageJsonTaskName: String
|
||||||
get() = compilation.disambiguateName(PublicPackageJsonTask.NAME)
|
get() = compilation.disambiguateName(PublicPackageJsonTask.NAME)
|
||||||
|
|||||||
+2
-3
@@ -38,7 +38,7 @@ abstract class PublicPackageJsonTask :
|
|||||||
abstract val jsIrCompilation: Property<Boolean>
|
abstract val jsIrCompilation: Property<Boolean>
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
abstract val esModules: Property<Boolean>
|
abstract val extension: Property<String>
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
abstract val npmProjectName: Property<String>
|
abstract val npmProjectName: Property<String>
|
||||||
@@ -91,8 +91,7 @@ abstract class PublicPackageJsonTask :
|
|||||||
externalDependencies,
|
externalDependencies,
|
||||||
packageJsonHandlers.get()
|
packageJsonHandlers.get()
|
||||||
).let { packageJson ->
|
).let { packageJson ->
|
||||||
val extension = if (esModules.get()) "mjs" else "js"
|
packageJson.main = "${npmProjectName.get()}.${extension.get()}"
|
||||||
packageJson.main = "${npmProjectName.get()}.$extension"
|
|
||||||
|
|
||||||
if (jsIrCompilation.get()) {
|
if (jsIrCompilation.get()) {
|
||||||
packageJson.types = "${npmProjectName.get()}.d.ts"
|
packageJson.types = "${npmProjectName.get()}.d.ts"
|
||||||
|
|||||||
+2
-4
@@ -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.Action
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.file.Directory
|
|
||||||
import org.gradle.api.file.RegularFile
|
|
||||||
import org.gradle.api.logging.Logger
|
import org.gradle.api.logging.Logger
|
||||||
import org.gradle.api.provider.ListProperty
|
import org.gradle.api.provider.ListProperty
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
@@ -27,7 +25,6 @@ class KotlinCompilationNpmResolution(
|
|||||||
val compilationDisambiguatedName: String,
|
val compilationDisambiguatedName: String,
|
||||||
val npmProjectName: String,
|
val npmProjectName: String,
|
||||||
val npmProjectVersion: String,
|
val npmProjectVersion: String,
|
||||||
val npmProjectMain: String,
|
|
||||||
val tasksRequirements: TasksRequirements,
|
val tasksRequirements: TasksRequirements,
|
||||||
) : Serializable {
|
) : Serializable {
|
||||||
|
|
||||||
@@ -127,12 +124,13 @@ class KotlinCompilationNpmResolution(
|
|||||||
|
|
||||||
fun createPackageJson(
|
fun createPackageJson(
|
||||||
resolution: PreparedKotlinCompilationNpmResolution,
|
resolution: PreparedKotlinCompilationNpmResolution,
|
||||||
|
npmProjectMain: Provider<String>,
|
||||||
packageJsonHandlers: ListProperty<Action<PackageJson>>,
|
packageJsonHandlers: ListProperty<Action<PackageJson>>,
|
||||||
) {
|
) {
|
||||||
val packageJson = packageJson(
|
val packageJson = packageJson(
|
||||||
npmProjectName,
|
npmProjectName,
|
||||||
npmProjectVersion,
|
npmProjectVersion,
|
||||||
npmProjectMain,
|
npmProjectMain.get(),
|
||||||
resolution.externalNpmDependencies,
|
resolution.externalNpmDependencies,
|
||||||
packageJsonHandlers.get()
|
packageJsonHandlers.get()
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-3
@@ -16,10 +16,10 @@ import org.gradle.api.attributes.Usage
|
|||||||
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
|
import org.gradle.api.internal.artifacts.DefaultProjectComponentIdentifier
|
||||||
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.dsl.JsModuleKind
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
import org.jetbrains.kotlin.gradle.plugin.categoryByName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.fileExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.compilationDependencyConfigurationByScope
|
import org.jetbrains.kotlin.gradle.plugin.sources.compilationDependencyConfigurationByScope
|
||||||
@@ -79,7 +79,7 @@ class KotlinCompilationNpmResolver(
|
|||||||
it.jsIrCompilation.set(true)
|
it.jsIrCompilation.set(true)
|
||||||
it.npmProjectName.set(npmProject.name)
|
it.npmProjectName.set(npmProject.name)
|
||||||
it.npmProjectMain.set(npmProject.main)
|
it.npmProjectMain.set(npmProject.main)
|
||||||
it.esModules.set(compilation.compilerOptions.options.moduleKind.get() == JsModuleKind.MODULE_ES)
|
it.extension.set(compilation.fileExtension)
|
||||||
}.also { packageJsonTask ->
|
}.also { packageJsonTask ->
|
||||||
project.dependencies.attributesSchema {
|
project.dependencies.attributesSchema {
|
||||||
it.attribute(publicPackageJsonAttribute)
|
it.attribute(publicPackageJsonAttribute)
|
||||||
@@ -313,7 +313,6 @@ class KotlinCompilationNpmResolver(
|
|||||||
compilationDisambiguatedName,
|
compilationDisambiguatedName,
|
||||||
npmProject.name,
|
npmProject.name,
|
||||||
npmVersion,
|
npmVersion,
|
||||||
npmProject.main,
|
|
||||||
rootResolver.tasksRequirements
|
rootResolver.tasksRequirements
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-1
@@ -62,6 +62,9 @@ abstract class KotlinPackageJsonTask :
|
|||||||
@get:Internal
|
@get:Internal
|
||||||
abstract val packageJsonHandlers: ListProperty<Action<PackageJson>>
|
abstract val packageJsonHandlers: ListProperty<Action<PackageJson>>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
abstract val packageJsonMain: Property<String>
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
internal val packageJsonInputHandlers: Provider<PackageJson> by lazy {
|
internal val packageJsonInputHandlers: Provider<PackageJson> by lazy {
|
||||||
packageJsonHandlers.map { packageJsonHandlersList ->
|
packageJsonHandlers.map { packageJsonHandlersList ->
|
||||||
@@ -120,7 +123,7 @@ abstract class KotlinPackageJsonTask :
|
|||||||
logger = logger
|
logger = logger
|
||||||
)
|
)
|
||||||
|
|
||||||
resolution.createPackageJson(preparedResolution, packageJsonHandlers)
|
resolution.createPackageJson(preparedResolution, packageJsonMain, packageJsonHandlers)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -147,6 +150,8 @@ abstract class KotlinPackageJsonTask :
|
|||||||
task.gradleNodeModules.value(gradleNodeModules)
|
task.gradleNodeModules.value(gradleNodeModules)
|
||||||
.disallowChanges()
|
.disallowChanges()
|
||||||
|
|
||||||
|
task.packageJsonMain.set(compilation.npmProject.main)
|
||||||
|
|
||||||
task.packageJson.set(compilation.npmProject.packageJsonFile.mapToFile())
|
task.packageJson.set(compilation.npmProject.packageJsonFile.mapToFile())
|
||||||
|
|
||||||
task.onlyIf {
|
task.onlyIf {
|
||||||
|
|||||||
+17
-29
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.tasks
|
package org.jetbrains.kotlin.gradle.tasks
|
||||||
|
|
||||||
import org.gradle.api.InvalidUserDataException
|
|
||||||
import org.gradle.api.file.Directory
|
import org.gradle.api.file.Directory
|
||||||
import org.gradle.api.file.DirectoryProperty
|
import org.gradle.api.file.DirectoryProperty
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
@@ -37,7 +36,6 @@ import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingServi
|
|||||||
import org.jetbrains.kotlin.gradle.targets.js.internal.UsesLibraryFilterCachingService
|
import org.jetbrains.kotlin.gradle.targets.js.internal.UsesLibraryFilterCachingService
|
||||||
import org.jetbrains.kotlin.gradle.tasks.internal.KotlinJsOptionsCompat
|
import org.jetbrains.kotlin.gradle.tasks.internal.KotlinJsOptionsCompat
|
||||||
import org.jetbrains.kotlin.gradle.utils.getFile
|
import org.jetbrains.kotlin.gradle.utils.getFile
|
||||||
import org.jetbrains.kotlin.gradle.utils.isParentOf
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.newInstance
|
import org.jetbrains.kotlin.gradle.utils.newInstance
|
||||||
import org.jetbrains.kotlin.gradle.utils.toPathsArray
|
import org.jetbrains.kotlin.gradle.utils.toPathsArray
|
||||||
import org.jetbrains.kotlin.incremental.ClasspathChanges
|
import org.jetbrains.kotlin.incremental.ClasspathChanges
|
||||||
@@ -83,9 +81,15 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
|||||||
@get:Internal
|
@get:Internal
|
||||||
internal abstract val defaultDestinationDirectory: DirectoryProperty
|
internal abstract val defaultDestinationDirectory: DirectoryProperty
|
||||||
|
|
||||||
@Deprecated("Use destinationDirectory and moduleName instead")
|
// To be sure that outputFileProperty will be correct on transition period
|
||||||
@get:Internal
|
@get:Internal
|
||||||
abstract val outputFileProperty: Property<File>
|
internal abstract val _outputFileProperty: Property<File>
|
||||||
|
|
||||||
|
// hidden to keep ABI compatiblity, because we have plugins which still use outputFileProperty
|
||||||
|
@Deprecated("Use destinationDirectory and moduleName instead", level = DeprecationLevel.HIDDEN)
|
||||||
|
@get:Internal
|
||||||
|
val outputFileProperty: Property<File>
|
||||||
|
get() = _outputFileProperty
|
||||||
|
|
||||||
// Workaround to add additional compiler args based on the exising one
|
// Workaround to add additional compiler args based on the exising one
|
||||||
// Currently there is a logic to add additional compiler arguments based on already existing one.
|
// Currently there is a logic to add additional compiler arguments based on already existing one.
|
||||||
@@ -105,6 +109,13 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
|||||||
@get:Internal
|
@get:Internal
|
||||||
internal var executionTimeFreeCompilerArgs: List<String>? = null
|
internal var executionTimeFreeCompilerArgs: List<String>? = null
|
||||||
|
|
||||||
|
@get:Deprecated(
|
||||||
|
message = "Task.moduleName is not used in Kotlin/JS"
|
||||||
|
)
|
||||||
|
@get:Optional
|
||||||
|
@get:Input
|
||||||
|
abstract override val moduleName: Property<String>
|
||||||
|
|
||||||
@get:Nested
|
@get:Nested
|
||||||
override val multiplatformStructure: K2MultiplatformStructure = objectFactory.newInstance()
|
override val multiplatformStructure: K2MultiplatformStructure = objectFactory.newInstance()
|
||||||
|
|
||||||
@@ -128,15 +139,8 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
|||||||
|
|
||||||
KotlinJsCompilerOptionsHelper.fillCompilerArguments(compilerOptions, args)
|
KotlinJsCompilerOptionsHelper.fillCompilerArguments(compilerOptions, args)
|
||||||
|
|
||||||
val outputFilePath: String? = compilerOptions.outputFile.orNull
|
args.outputDir = destinationDirectory.get().asFile.normalize().absolutePath
|
||||||
if (outputFilePath != null) {
|
args.moduleName = compilerOptions.moduleName.get()
|
||||||
val outputFile = File(outputFilePath)
|
|
||||||
args.outputDir = (if (outputFile.extension == "") outputFile else outputFile.parentFile).normalize().absolutePath
|
|
||||||
args.moduleName = outputFile.nameWithoutExtension
|
|
||||||
} else {
|
|
||||||
args.outputDir = destinationDirectory.get().asFile.normalize().absolutePath
|
|
||||||
args.moduleName = compilerOptions.moduleName.get()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (compilerOptions.usesK2.get()) {
|
if (compilerOptions.usesK2.get()) {
|
||||||
args.fragments = multiplatformStructure.fragmentsCompilerArgs
|
args.fragments = multiplatformStructure.fragmentsCompilerArgs
|
||||||
@@ -234,8 +238,6 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
|||||||
) {
|
) {
|
||||||
logger.debug("Calling compiler")
|
logger.debug("Calling compiler")
|
||||||
|
|
||||||
validateOutputDirectory()
|
|
||||||
|
|
||||||
val dependencies = libraries
|
val dependencies = libraries
|
||||||
.filter { it.exists() && libraryFilter(it) }
|
.filter { it.exists() && libraryFilter(it) }
|
||||||
.map { it.normalize().absolutePath }
|
.map { it.normalize().absolutePath }
|
||||||
@@ -288,18 +290,4 @@ abstract class Kotlin2JsCompile @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val rootProjectDir = project.rootDir
|
private val rootProjectDir = project.rootDir
|
||||||
|
|
||||||
private fun validateOutputDirectory() {
|
|
||||||
val outputFile = outputFileProperty.get()
|
|
||||||
val outputDir = outputFile.parentFile
|
|
||||||
|
|
||||||
if (outputDir.isParentOf(rootProjectDir)) {
|
|
||||||
throw InvalidUserDataException(
|
|
||||||
"The output directory '$outputDir' (defined by outputFile of ':$name') contains or " +
|
|
||||||
"matches the project root directory '${rootProjectDir}'.\n" +
|
|
||||||
"Gradle will not be able to build the project because of the root directory lock.\n" +
|
|
||||||
"To fix this, consider using the default outputFile location instead of providing it explicitly."
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
-8
@@ -118,14 +118,6 @@ internal open class KotlinTasksProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun registerKotlinJsIrTask(
|
|
||||||
project: Project, taskName: String, configuration: KotlinJsIrLinkConfig
|
|
||||||
): TaskProvider<out KotlinJsIrLink> {
|
|
||||||
return project.registerTask(taskName, KotlinJsIrLink::class.java, listOf(project)).also {
|
|
||||||
configuration.execute(it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun registerKotlinCommonTask(
|
fun registerKotlinCommonTask(
|
||||||
project: Project,
|
project: Project,
|
||||||
taskName: String,
|
taskName: String,
|
||||||
|
|||||||
-33
@@ -9,12 +9,6 @@ import org.jetbrains.kotlin.compilerRunner.GradleCompilerRunner
|
|||||||
import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService
|
import org.jetbrains.kotlin.gradle.incremental.IncrementalModuleInfoBuildService
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationInfo
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.getExtension
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.fileExtension
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.tcs
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinWasmTargetType
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingService
|
import org.jetbrains.kotlin.gradle.targets.js.internal.LibraryFilterCachingService
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
import org.jetbrains.kotlin.gradle.targets.js.ir.*
|
||||||
@@ -43,33 +37,6 @@ internal open class BaseKotlin2JsCompileConfig<TASK : Kotlin2JsCompile>(
|
|||||||
|
|
||||||
configureAdditionalFreeCompilerArguments(task, compilation)
|
configureAdditionalFreeCompilerArguments(task, compilation)
|
||||||
|
|
||||||
val binaryCompilation = compilation.tcs.compilation
|
|
||||||
val compilationTarget = binaryCompilation.target
|
|
||||||
if (compilationTarget is KotlinJsTarget ||
|
|
||||||
(compilationTarget is KotlinWithJavaTarget<*, *> && compilationTarget.platformType == KotlinPlatformType.js)
|
|
||||||
) {
|
|
||||||
// JS v1 which does not configure module name via target compiler options
|
|
||||||
task.compilerOptions.moduleName.convention(compilation.moduleName)
|
|
||||||
task.moduleName.set(providers.provider { compilation.moduleName })
|
|
||||||
} else {
|
|
||||||
task.moduleName.set(task.compilerOptions.moduleName)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
task.outputFileProperty.value(
|
|
||||||
task.destinationDirectory.flatMap { dir ->
|
|
||||||
if (task.compilerOptions.outputFile.orNull != null) {
|
|
||||||
task.compilerOptions.outputFile.map { File(it) }
|
|
||||||
} else {
|
|
||||||
task.compilerOptions.moduleName.flatMap { name ->
|
|
||||||
(binaryCompilation as KotlinJsCompilation).fileExtension.map {
|
|
||||||
dir.file("$name.$it").asFile
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
task.destinationDirectory
|
task.destinationDirectory
|
||||||
.convention(
|
.convention(
|
||||||
project.objects.directoryProperty().fileProvider(
|
project.objects.directoryProperty().fileProvider(
|
||||||
|
|||||||
+3
-1
@@ -49,7 +49,9 @@ internal open class KotlinJsIrLinkConfig(
|
|||||||
.map { it.dir(binary.name) }
|
.map { it.dir(binary.name) }
|
||||||
.map { it.dir(NpmProject.DIST_FOLDER) }
|
.map { it.dir(NpmProject.DIST_FOLDER) }
|
||||||
)
|
)
|
||||||
task.compilerOptions.moduleName.convention(project.provider { compilation.npmProject.name })
|
task.compilerOptions.moduleName.set(project.provider { compilation.npmProject.name })
|
||||||
|
|
||||||
|
task._outputFileProperty.convention(binary.mainFile.map { it.asFile })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user