[K/JS] Introduce v2015 target

This commit is contained in:
Artem Kobzar
2024-03-06 12:21:38 +00:00
committed by Space Team
parent e989e6d397
commit 77f0cba23f
19 changed files with 115 additions and 84 deletions
@@ -336,7 +336,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions
public abstract fun getSourceMapPrefix ()Ljava/lang/String;
public abstract fun getTarget ()Ljava/lang/String;
public abstract fun getTypedArrays ()Z
public abstract fun getUseEsClasses ()Z
public abstract fun getUseEsClasses ()Ljava/lang/Boolean;
public abstract fun setFriendModulesDisabled (Z)V
public abstract fun setMain (Ljava/lang/String;)V
public abstract fun setMetaInfo (Z)V
@@ -349,7 +349,7 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions
public abstract fun setSourceMapPrefix (Ljava/lang/String;)V
public abstract fun setTarget (Ljava/lang/String;)V
public abstract fun setTypedArrays (Z)V
public abstract fun setUseEsClasses (Z)V
public abstract fun setUseEsClasses (Ljava/lang/Boolean;)V
}
public final class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions$DefaultImpls {
@@ -370,7 +370,7 @@ public final class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions$DefaultImpls
public static fun getSuppressWarnings (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Z
public static fun getTarget (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Ljava/lang/String;
public static fun getTypedArrays (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Z
public static fun getUseEsClasses (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Z
public static fun getUseEsClasses (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Ljava/lang/Boolean;
public static fun getUseK2 (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Z
public static fun getVerbose (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;)Z
public static fun setAllWarningsAsErrors (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V
@@ -390,7 +390,7 @@ public final class org/jetbrains/kotlin/gradle/dsl/KotlinJsOptions$DefaultImpls
public static fun setSuppressWarnings (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V
public static fun setTarget (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Ljava/lang/String;)V
public static fun setTypedArrays (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V
public static fun setUseEsClasses (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V
public static fun setUseEsClasses (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Ljava/lang/Boolean;)V
public static fun setUseK2 (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V
public static fun setVerbose (Lorg/jetbrains/kotlin/gradle/dsl/KotlinJsOptions;Z)V
}
@@ -38,12 +38,13 @@ interface KotlinJsCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommon
val metaInfo: org.gradle.api.provider.Property<kotlin.Boolean>
/**
* The kind of JS module generated by the compiler.
* The kind of JS module generated by the compiler. ES modules are enabled by default in case of ES2015 target usage
*
* Possible values: "plain", "amd", "commonjs", "umd"
*
* Default value: JsModuleKind.MODULE_PLAIN
* Default value: null
*/
@get:org.gradle.api.tasks.Optional
@get:org.gradle.api.tasks.Input
val moduleKind: org.gradle.api.provider.Property<org.jetbrains.kotlin.gradle.dsl.JsModuleKind>
@@ -107,9 +108,9 @@ interface KotlinJsCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommon
/**
* Generate JS files for the specified ECMA version.
*
* Possible values: "v5"
* Possible values: "es5", "es2015"
*
* Default value: "v5"
* Default value: "es5"
*/
@get:org.gradle.api.tasks.Input
val target: org.gradle.api.provider.Property<kotlin.String>
@@ -123,10 +124,11 @@ interface KotlinJsCompilerOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommon
val typedArrays: org.gradle.api.provider.Property<kotlin.Boolean>
/**
* Let generated JavaScript code use ES2015 classes.
* Let generated JavaScript code use ES2015 classes. Enabled by default in case of ES2015 target usage
*
* Default value: false
* Default value: null
*/
@get:org.gradle.api.tasks.Optional
@get:org.gradle.api.tasks.Input
val useEsClasses: org.gradle.api.provider.Property<kotlin.Boolean>
}
@@ -51,19 +51,19 @@ interface KotlinJsOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
get() = options.metaInfo.get()
set(value) = options.metaInfo.set(value)
private val kotlin.String.moduleKindCompilerOption get() = org.jetbrains.kotlin.gradle.dsl.JsModuleKind.fromKind(this)
private val kotlin.String?.moduleKindCompilerOption get() = this?.let { org.jetbrains.kotlin.gradle.dsl.JsModuleKind.fromKind(it) }
private val org.jetbrains.kotlin.gradle.dsl.JsModuleKind.moduleKindKotlinOption get() = this.kind
private val org.jetbrains.kotlin.gradle.dsl.JsModuleKind?.moduleKindKotlinOption get() = this?.kind
/**
* The kind of JS module generated by the compiler.
* The kind of JS module generated by the compiler. ES modules are enabled by default in case of ES2015 target usage
*
* Possible values: "plain", "amd", "commonjs", "umd"
*
* Default value: JsModuleKind.MODULE_PLAIN
* Default value: null
*/
var moduleKind: kotlin.String
get() = options.moduleKind.get().moduleKindKotlinOption
var moduleKind: kotlin.String?
get() = options.moduleKind.orNull.moduleKindKotlinOption
set(value) = options.moduleKind.set(value.moduleKindCompilerOption)
/**
@@ -136,9 +136,9 @@ interface KotlinJsOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
/**
* Generate JS files for the specified ECMA version.
*
* Possible values: "v5"
* Possible values: "es5", "es2015"
*
* Default value: "v5"
* Default value: "es5"
*/
var target: kotlin.String
get() = options.target.get()
@@ -154,11 +154,11 @@ interface KotlinJsOptions : org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
set(value) = options.typedArrays.set(value)
/**
* Let generated JavaScript code use ES2015 classes.
* Let generated JavaScript code use ES2015 classes. Enabled by default in case of ES2015 target usage
*
* Default value: false
* Default value: null
*/
var useEsClasses: kotlin.Boolean
get() = options.useEsClasses.get()
var useEsClasses: kotlin.Boolean?
get() = options.useEsClasses.orNull
set(value) = options.useEsClasses.set(value)
}
@@ -20,7 +20,7 @@ internal abstract class KotlinJsCompilerOptionsDefault @javax.inject.Inject cons
objectFactory.property(kotlin.Boolean::class.java).convention(true)
override val moduleKind: org.gradle.api.provider.Property<org.jetbrains.kotlin.gradle.dsl.JsModuleKind> =
objectFactory.property(org.jetbrains.kotlin.gradle.dsl.JsModuleKind::class.java).convention(org.jetbrains.kotlin.gradle.dsl.JsModuleKind.MODULE_PLAIN)
objectFactory.property(org.jetbrains.kotlin.gradle.dsl.JsModuleKind::class.java)
override val moduleName: org.gradle.api.provider.Property<kotlin.String> =
objectFactory.property(kotlin.String::class.java)
@@ -42,11 +42,11 @@ internal abstract class KotlinJsCompilerOptionsDefault @javax.inject.Inject cons
objectFactory.property(kotlin.String::class.java)
override val target: org.gradle.api.provider.Property<kotlin.String> =
objectFactory.property(kotlin.String::class.java).convention("v5")
objectFactory.property(kotlin.String::class.java).convention("es5")
override val typedArrays: org.gradle.api.provider.Property<kotlin.Boolean> =
objectFactory.property(kotlin.Boolean::class.java).convention(true)
override val useEsClasses: org.gradle.api.provider.Property<kotlin.Boolean> =
objectFactory.property(kotlin.Boolean::class.java).convention(false)
objectFactory.property(kotlin.Boolean::class.java)
}
@@ -15,7 +15,7 @@ internal object KotlinJsCompilerOptionsHelper {
args.friendModulesDisabled = from.friendModulesDisabled.get()
args.main = from.main.get().mode
args.metaInfo = from.metaInfo.get()
args.moduleKind = from.moduleKind.get().kind
args.moduleKind = from.moduleKind.orNull?.kind
args.moduleName = from.moduleName.orNull
args.noStdlib = from.noStdlib.get()
args.sourceMap = from.sourceMap.get()
@@ -24,7 +24,7 @@ internal object KotlinJsCompilerOptionsHelper {
args.sourceMapPrefix = from.sourceMapPrefix.orNull
args.target = from.target.get()
args.typedArrays = from.typedArrays.get()
args.useEsClasses = from.useEsClasses.get()
args.useEsClasses = from.useEsClasses.orNull
}
internal fun syncOptionsAsConvention(
@@ -3,7 +3,7 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("PackageDirectoryMismatch")
@file:Suppress("PackageDirectoryMismatch", "DEPRECATION", "TYPEALIAS_EXPANSION_DEPRECATION")
// Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp
@@ -13,8 +13,12 @@ import org.gradle.api.Action
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskProvider
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
import org.jetbrains.kotlin.gradle.plugin.DeprecatedHasCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary
@@ -23,7 +27,6 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
import javax.inject.Inject
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION", "DEPRECATION")
open class KotlinJsCompilation @Inject internal constructor(
compilation: KotlinCompilationImpl,
) : DeprecatedAbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(compilation),
@@ -102,11 +105,19 @@ val KotlinJsCompilation.fileExtension: Provider<String>
get() {
val isWasm = platformType == KotlinPlatformType.wasm
@Suppress("DEPRECATION")
return compilerOptions.options.moduleKind.map { moduleKind ->
if (isWasm || moduleKind == JsModuleKind.MODULE_ES) {
"mjs"
} else {
"js"
return compilerOptions.options.moduleKind
.orElse(
compilerOptions.options.target.map {
if (it == K2JsArgumentConstants.ES_2015) {
JsModuleKind.MODULE_ES
} else JsModuleKind.MODULE_UMD
}
)
.map { moduleKind ->
if (isWasm || moduleKind == JsModuleKind.MODULE_ES) {
"mjs"
} else {
"js"
}
}
}
}
@@ -13,6 +13,7 @@ import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.Copy
import org.gradle.language.base.plugins.LifecycleBasePlugin
import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants.ES_2015
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
@@ -34,6 +35,7 @@ import org.jetbrains.kotlin.gradle.utils.doNotTrackStateCompat
import org.jetbrains.kotlin.gradle.utils.domainObjectSet
import org.jetbrains.kotlin.gradle.utils.relativeOrAbsolute
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import javax.inject.Inject
abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
@@ -274,7 +276,11 @@ abstract class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
this.inputFilesDirectory.set(inputFilesDirectory)
val platformType = binary.compilation.platformType
val moduleKind = binary.linkTask.flatMap { it.compilerOptions.moduleKind }
val moduleKind = binary.linkTask.flatMap { task ->
task.compilerOptions.moduleKind.orElse(task.compilerOptions.target.map {
if (it == ES_2015) JsModuleKind.MODULE_ES else JsModuleKind.MODULE_UMD
})
}
this.entryModuleName.set(entryModuleName)
this.esModules.convention(
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.gradle.targets.js.ir
import org.jetbrains.kotlin.gradle.dsl.JsModuleKind
import org.jetbrains.kotlin.gradle.dsl.JsSourceMapEmbedMode
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator
@@ -15,7 +14,6 @@ open class KotlinJsIrTargetConfigurator :
internal companion object {
internal fun KotlinJsCompilerOptions.configureJsDefaultOptions() {
moduleKind.convention(JsModuleKind.MODULE_UMD)
sourceMap.convention(true)
sourceMapEmbedSources.convention(JsSourceMapEmbedMode.SOURCE_MAP_SOURCE_CONTENT_NEVER)
}