Ktor. Can't create an instance of Httpclient in kotlin-js side

Viewed 670

When I'm trying to obtain an instance of HttpClient on client side I have follow js-exception

List is empty.", cause_th0jdv$_0: null, name: "NoSuchElementException", stack: "NoSuchElementException:

enter image description here

Unfortunately follow workaround doesn't help

js {
        browser {
            dceTask {
                keep("ktor-ktor-io.\$\$importsForInline\$\$.ktor-ktor-io.io.ktor.utils.io")
            }
        }
    }

SampleJs.kt

package sample

import io.ktor.client.HttpClient
import io.ktor.client.features.json.JsonFeature
import kotlin.browser.document

actual class Sample {
    actual fun checkMe() = 14
}

actual object Platform {
    actual val name: String = "JS"
}


@Suppress("unused")
@JsName("helloWorld")
fun helloWorld(salutation: String) {
    val message = "$salutation from Kotlin.JS ${hello()}, check me value: ${Sample().checkMe()}"
    document.getElementById("js-response")?.textContent = message
}

fun main() {
    document.addEventListener("DOMContentLoaded", {
        helloWorld("Hi!")
        val client = HttpClient {
            install(JsonFeature)
        }




    })
}

build.gradle

buildscript {
    repositories {
        jcenter()
    }
}

plugins {
    id 'org.jetbrains.kotlin.multiplatform' version '1.3.72'
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.3.72'
    id 'distribution'
}

repositories {
    jcenter()
    maven { url "https://dl.bintray.com/kotlin/ktor" }
    mavenCentral()
}


def ktor_version = '1.3.2'
def logback_version = '1.2.3'
def serialization_version = '0.20.0'


kotlin {
    jvm()
    js {
        browser {
            dceTask {
                keep("ktor-ktor-io.\$\$importsForInline\$\$.ktor-ktor-io.io.ktor.utils.io")
            }
        }
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation kotlin('stdlib-common')
                implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
            }
        }
        commonTest {
            dependencies {
                implementation kotlin('test-common')
                implementation kotlin('test-annotations-common')
            }
        }
        jvmMain {
            dependencies {
                implementation kotlin('stdlib-jdk8')
                implementation "io.ktor:ktor-server-netty:$ktor_version"
                implementation "io.ktor:ktor-server-servlet:$ktor_version"
                implementation "io.ktor:ktor-html-builder:$ktor_version"
                implementation "ch.qos.logback:logback-classic:$logback_version"
                implementation "io.ktor:ktor-client-core:$ktor_version"
                implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
            }
        }
        jvmTest {
            dependencies {
                implementation kotlin('test')
                implementation kotlin('test-junit')
            }
        }
        jsMain {
            dependencies {
                implementation npm ("text-encoding", "0.7.0")
                implementation npm ("bufferutil", "4.0.1")
                implementation npm ("utf-8-validate", "5.0.2")
                implementation npm ("abort-controller", "3.0.0")
                implementation npm ("fs", "0.0.1-security")
                implementation kotlin('stdlib-js')
                implementation "io.ktor:ktor-client-json-js:$ktor_version"
                implementation "io.ktor:ktor-client-js:$ktor_version"
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.3.8"
                implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version"
            }
        }
        jsTest {
            dependencies {
                implementation kotlin('test-js')
            }
        }
    }
}

jvmJar {
    dependsOn(jsBrowserProductionWebpack)
    from(new File(jsBrowserProductionWebpack.entry.name, jsBrowserProductionWebpack.outputPath))
}

task run(type: JavaExec, dependsOn: [jvmJar]) {
    group = "application"
    main = "sample.SampleJvmKt"
    classpath(configurations.jvmRuntimeClasspath, jvmJar)
    args = []
}
1 Answers
Related