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

type-conversion.mddocs/

Type Conversion

Bidirectional conversion functions between Kotlin and JavaScript types for seamless data exchange between Kotlin/Wasm and JavaScript.

Capabilities

Boolean Conversion

Convert between Kotlin Boolean and JavaScript boolean types.

/**
 * Convert Kotlin Boolean to JsBoolean
 * @return JsBoolean JavaScript boolean representation
 */
fun Boolean.toJsBoolean(): JsBoolean

/**
 * Convert JsBoolean to Kotlin Boolean
 * @return Boolean Kotlin boolean representation
 */
fun JsBoolean.toBoolean(): Boolean

Usage Example:

val kotlinBool = true
val jsBool: JsBoolean = kotlinBool.toJsBoolean()
val backToKotlin: Boolean = jsBool.toBoolean()

String Conversion

Convert Kotlin String to JavaScript string type.

/**
 * Convert Kotlin String to JsString
 * @return JsString JavaScript string representation
 */
fun String.toJsString(): JsString

/**
 * Convert JsString to Kotlin String
 * @return String Kotlin string representation
 */
fun JsString.toString(): String

Usage Example:

val kotlinString = "Hello, World!"
val jsString: JsString = kotlinString.toJsString()
val backToKotlin: String = jsString.toString()

Number Conversion

Convert between Kotlin numeric types and JavaScript number.

/**
 * Convert Kotlin Double to JsNumber
 * @return JsNumber JavaScript number representation
 */
fun Double.toJsNumber(): JsNumber

/**
 * Convert Kotlin Int to JsNumber
 * @return JsNumber JavaScript number representation
 */
fun Int.toJsNumber(): JsNumber

/**
 * Convert JsNumber to Kotlin Double
 * @return Double Kotlin double representation
 */
fun JsNumber.toDouble(): Double

/**
 * Convert JsNumber to Kotlin Int
 * @return Int Kotlin int representation
 */
fun JsNumber.toInt(): Int

Usage Examples:

// Double conversion
val kotlinDouble = 3.14159
val jsNumber: JsNumber = kotlinDouble.toJsNumber()
val backToDouble: Double = jsNumber.toDouble()

// Int conversion
val kotlinInt = 42
val jsNumberFromInt: JsNumber = kotlinInt.toJsNumber()
val backToInt: Int = jsNumberFromInt.toInt()

BigInt Conversion

Convert between Kotlin Long and JavaScript bigint.

/**
 * Convert Kotlin Long to JsBigInt
 * @return JsBigInt JavaScript bigint representation
 */
fun Long.toJsBigInt(): JsBigInt

/**
 * Convert JsBigInt to Kotlin Long
 * @return Long Kotlin long representation
 */
fun JsBigInt.toLong(): Long

Usage Example:

val kotlinLong = 9223372036854775807L // Long.MAX_VALUE
val jsBigInt: JsBigInt = kotlinLong.toJsBigInt()
val backToLong: Long = jsBigInt.toLong()

Array Conversion

Convert between Kotlin collections and JavaScript arrays.

/**
 * Convert Kotlin Array to JsArray
 * @return JsArray<T> JavaScript array representation
 */
fun <T> Array<T>.toJsArray(): JsArray<T>

/**
 * Convert Kotlin List to JsArray
 * @return JsArray<T> JavaScript array representation
 */
fun <T> List<T>.toJsArray(): JsArray<T>

/**
 * Convert JsArray to Kotlin Array
 * @return Array<T> Kotlin array representation
 */
fun <T> JsArray<T>.toArray(): Array<T>

/**
 * Convert JsArray to Kotlin List
 * @return List<T> Kotlin list representation
 */
fun <T> JsArray<T>.toList(): List<T>

Usage Examples:

// Array conversion
val kotlinArray = arrayOf("apple", "banana", "cherry")
val jsArray: JsArray<String> = kotlinArray.toJsArray()
val backToArray: Array<String> = jsArray.toArray()

// List conversion
val kotlinList = listOf("red", "green", "blue")
val jsArrayFromList: JsArray<String> = kotlinList.toJsArray()
val backToList: List<String> = jsArrayFromList.toList()

Reference Conversion

Convert Kotlin objects to JavaScript references for safe object passing.

/**
 * Convert any Kotlin object to JsReference
 * @return JsReference<T> JavaScript reference to the Kotlin object
 */
fun <T : Any> T.toJsReference(): JsReference<T>

/**
 * Retrieve original Kotlin value from JsReference
 * @return T The original Kotlin value
 */
fun <T> JsReference<T>.get(): T

Usage Example:

data class User(val name: String, val age: Int)

val user = User("Alice", 25)
val jsRef: JsReference<User> = user.toJsReference()

// Later, retrieve the original object
val retrievedUser: User = jsRef.get()
println("${retrievedUser.name}, ${retrievedUser.age}") // Alice, 25

Exception Conversion

Convert JavaScript exceptions to Kotlin exceptions.

/**
 * For a JsAny value caught in JS, returns corresponding Throwable if thrown from Kotlin, null otherwise
 * @return Throwable? Corresponding Throwable or null
 */
fun JsAny.toThrowableOrNull(): Throwable?

Usage Example:

try {
    // Some operation that might throw JavaScript exception
    js("throw new Error('JavaScript error')")
} catch (jsError: JsAny) {
    val kotlinException = jsError.toThrowableOrNull()
    if (kotlinException != null) {
        println("Caught Kotlin exception: ${kotlinException.message}")
    } else {
        println("Caught JavaScript exception: $jsError")
    }
}

Type Conversion Patterns

Complex Data Structures

// Converting complex nested structures
data class ApiResponse(val data: List<String>, val success: Boolean)

val response = ApiResponse(listOf("item1", "item2"), true)

// Convert to JavaScript-friendly format
val jsData = response.data.map { it.toJsString() }.toJsArray()
val jsResponse = js("""({
    data: arguments[0],
    success: arguments[1]
})""") as JsAny

// Function parameters: jsData, response.success.toJsBoolean()

Working with JavaScript APIs

// Prepare data for JavaScript API calls
val formData = mapOf(
    "username" to "alice",
    "email" to "alice@example.com",
    "age" to 25
)

// Convert for JavaScript consumption
val jsFormData = js("({})") as JsAny
formData.forEach { (key, value) ->
    when (value) {
        is String -> js("arguments[0][arguments[1]] = arguments[2]")(jsFormData, key, value.toJsString())
        is Int -> js("arguments[0][arguments[1]] = arguments[2]")(jsFormData, key, value.toJsNumber())
        is Boolean -> js("arguments[0][arguments[1]] = arguments[2]")(jsFormData, key, value.toJsBoolean())
    }
}

Install with Tessl CLI

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

docs

index.md

js-annotations.md

js-types.md

platform-services.md

promises.md

type-conversion.md

tile.json