Kotlin Standard Library for experimental WebAssembly JS platform providing core functionality and JavaScript interoperability
npx @tessl/cli install tessl/maven-org-jetbrains-kotlin--kotlin-stdlib-wasm-js@2.2.0The Kotlin Standard Library for WebAssembly JavaScript (kotlin-stdlib-wasm-js) provides comprehensive JavaScript interoperability for Kotlin applications targeting WebAssembly in JavaScript environments. It enables seamless integration between Kotlin/Wasm and JavaScript code, including DOM manipulation, browser APIs, and JavaScript type system mapping.
implementation("org.jetbrains.kotlin:kotlin-stdlib-wasm-js:2.2.0")import kotlin.js.*
import kotlin.wasm.js.*import kotlin.js.*
// Convert between Kotlin and JavaScript types
val kotlinString = "Hello, World!"
val jsString: JsString = kotlinString.toJsString()
val backToKotlin: String = jsString.toString()
// Work with JavaScript arrays
val kotlinList = listOf("apple", "banana", "cherry")
val jsArray: JsArray<JsString> = kotlinList.map { it.toJsString() }.toJsArray()
// Handle JavaScript promises
val promise: Promise<JsString> = Promise { resolve, reject ->
resolve("Success!".toJsString())
}
// Execute JavaScript code directly
js("console.log('Hello from Kotlin/Wasm!')")The library is built around several key components:
JsAny, JsString, JsNumber, etc.) with Kotlin interoperabilityJsReference for wrapping Kotlin objects for JavaScript consumptionCore JavaScript interoperability types and their Kotlin representations for seamless type system integration.
external interface JsAny
external interface JsReference<out T : Any> : JsAny
external class JsString : JsAny
external class JsNumber : JsAny
external class JsBoolean : JsAny
external class JsBigInt : JsAny
external class JsArray<T : JsAny?> : JsAny
external class Promise<out T : JsAny?> : JsAnyBidirectional conversion functions between Kotlin and JavaScript types, enabling seamless data exchange.
fun String.toJsString(): JsString
fun Boolean.toJsBoolean(): JsBoolean
fun Double.toJsNumber(): JsNumber
fun Int.toJsNumber(): JsNumber
fun Long.toJsBigInt(): JsBigInt
fun <T> List<T>.toJsArray(): JsArray<T>
fun <T> Array<T>.toJsArray(): JsArray<T>
fun <T : Any> T.toJsReference(): JsReference<T>Annotations for controlling JavaScript exports, imports, and naming for seamless JavaScript integration.
@Target(AnnotationTarget.FUNCTION)
annotation class JsExport
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY)
annotation class JsName(val name: String)
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.FILE)
annotation class JsModule(val import: String)
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER)
annotation class JsFun(val code: String)JavaScript Promise integration with full async/await support and error handling.
external class Promise<out T : JsAny?>(
executor: (resolve: (T) -> Unit, reject: (JsAny) -> Unit) -> Unit
) : JsAny {
fun <S : JsAny?> then(onFulfilled: ((T) -> S)?): Promise<S>
fun <S : JsAny?> catch(onRejected: (JsAny) -> S): Promise<S>
fun finally(onFinally: () -> Unit): Promise<T>
companion object {
fun <S : JsAny?> all(promise: JsArray<out Promise<S>>): Promise<JsArray<out S>>
fun <S : JsAny?> race(promise: JsArray<out Promise<S>>): Promise<S>
fun reject(e: JsAny): Promise<Nothing>
fun <S : JsAny?> resolve(e: S): Promise<S>
}
}I/O operations, time management, random number generation, UUID support, and reflection services optimized for WebAssembly.
// I/O Operations
fun println()
fun println(message: Any?)
fun print(message: Any?)
// Time Support
object MonotonicTimeSource : TimeSource.WithComparableMarks
fun systemClockNow(): Instant
// Random & UUID
fun defaultPlatformRandom(): Random
fun secureRandomUuid(): Uuid// Exception handling for JavaScript errors
class JsException internal constructor(val thrownValue: JsAny?) : Throwable {
override val message: String
}
// External class reflection support
internal class KExternalClassImpl<T : Any> : KClass<T> {
val simpleName: String?
val qualifiedName: String?
fun isInstance(value: Any?): Boolean
}