Edoardo Luppi
08/23/2023, 10:33 AMparseFromString<MIME extends keyof {
"text/html": HTMLDocument;
"image/svg+xml": SVGDocument;
"text/xml": XMLDocument;
}>(markupLanguage: string, mimeType: MIME): {
"text/html": HTMLDocument;
"image/svg+xml": SVGDocument;
"text/xml": XMLDocument;
}[MIME];
Basically it allows:
parseFromString(value, "text/html"): HTMLDocument
parseFromString(value, "text/xml"): XMLDocument
parseFromString(value, "image/svg+xml"): SVGDocument
Can I write external declarations in the following form?
external class Parser {
fun parseHtmlFromString(value: String): HTMLDocument
fun parseXmlFromString(value: String): XMLDocument
fun parseSvgFromString(value: String): SVGDocument
}
This would make it a lot more usable from Kotlin code.Artem Kobzar
08/23/2023, 11:37 AMexternal class Parser {
fun parseFromString(markupLanguage: String, mimeType: String): dynamic
}
fun Parser.parseHtmlFromString(markupLanguage: String): HTMLDocument = parseFromString(markupLanguage, "text/html")
fun Parser.parseXmlFromString(markupLanguage: String): XMLDocument = parseFromString(markupLanguage, "text/xml")
fun Parser.parseSvgFromString(markupLanguage: String): SVGDocument = parseFromString(markupLanguage, "image/svg+xml")
Edoardo Luppi
08/23/2023, 11:49 AMinternal
is enough?Artem Kobzar
08/23/2023, 11:49 AMEdoardo Luppi
08/23/2023, 11:50 AMArtem Kobzar
08/23/2023, 11:53 AMEdoardo Luppi
08/23/2023, 11:56 AMinline
), but I abandoned it as soon as I got WRONG_BODY_OF_EXTERNAL_DECLARATION
.
It's the easiest approach from a Kotlin developer perspective, but I'm wondering if it's going to not work at all at some point, since we're suppressing itArtem Kobzar
08/23/2023, 11:57 AMEdoardo Luppi
08/23/2023, 11:59 AMWRONG_BODY_OF_EXTERNAL_DECLARATION
error going to be relaxed at some point to accomodate this style?
Obviously without suppression you'd get
Wrong body of external declaration. Must be either ' = definedExternally' or { definedExternally }
Artem Kobzar
08/23/2023, 12:03 PMArtem Kobzar
08/23/2023, 12:04 PMPROTECTED_CALL_FROM_PUBLIC_INLINE_ERROR
suppress you could use asDynamic
on this:
https://pl.kotl.in/520m70snyEdoardo Luppi
08/23/2023, 12:07 PM@Suppress("INLINE_EXTERNAL_DECLARATION", "WRONG_BODY_OF_EXTERNAL_DECLARATION", "NOTHING_TO_INLINE", "UnsafeCastFromDynamic")
But I can live with thatEdoardo Luppi
08/23/2023, 12:14 PMMimeType
, and I'm gettingNON_EXTERNAL_DECLARATION_IN_INAPPROPRIATE_FILE
.Edoardo Luppi
08/23/2023, 12:14 PM+JsAllowValueClassesInExternals
, my badEdoardo Luppi
08/23/2023, 12:28 PMNON_EXTERNAL_DECLARATION_IN_INAPPROPRIATE_FILE
. Probably it wasn't related.
When I remove @file:JsModule(...)
, the error disappears.Edoardo Luppi
08/23/2023, 12:38 PMinline
solution tho. Thanks again Artem.