CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-jetbrains-kotlin--kotlin-stdlib-wasm-js

Kotlin Standard Library for experimental WebAssembly JS platform providing core functionality and JavaScript interoperability

Pending
Overview
Eval results
Files

Kotlin Standard Library for WebAssembly JavaScript

The 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.

Package Information

  • Package Name: kotlin-stdlib-wasm-js
  • Package Type: maven
  • Language: Kotlin
  • Installation: implementation("org.jetbrains.kotlin:kotlin-stdlib-wasm-js:2.2.0")

Core Imports

import kotlin.js.*
import kotlin.wasm.js.*

Basic Usage

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!')")

Architecture

The library is built around several key components:

  • JavaScript Type System: Native JavaScript types (JsAny, JsString, JsNumber, etc.) with Kotlin interoperability
  • Type Conversion: Bidirectional conversion functions between Kotlin and JavaScript types
  • Promise Support: Full JavaScript Promise integration with async/await patterns
  • Reference System: JsReference for wrapping Kotlin objects for JavaScript consumption
  • Annotation System: Export and import annotations for JavaScript interoperability
  • Platform Integration: I/O, time, random, UUID, and reflection support optimized for WebAssembly

Capabilities

JavaScript Type System

Core 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?> : JsAny

JavaScript Types

Type Conversion

Bidirectional 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>

Type Conversion

JavaScript Interoperability Annotations

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 Annotations

Promise and Async Support

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>
    }
}

Promise Support

Platform Services

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

Platform Services

Types

// 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
}

Install with Tessl CLI

npx tessl i tessl/maven-org-jetbrains-kotlin--kotlin-stdlib-wasm-js
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.jetbrains.kotlin/kotlin-stdlib-wasm-js@2.2.x