Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 22 additions & 6 deletions runtime/wasmJsMain/src/kotlinx/benchmark/NodeJsEngineSupport.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,37 @@ package kotlinx.benchmark
import kotlin.time.DurationUnit
import kotlin.time.toDuration

@JsFun("(path, text) => require('fs').writeFileSync(path, text, 'utf8')")
private external fun nodeJsWriteFile(path: String, text: String)
@JsModule("fs")
external object fs {
fun readFileSync(path: String, options: WriteFileOptions): String
fun writeFileSync(path: String, data: String, options: WriteFileOptions)
}

external interface WriteFileOptions : JsAny {
var encoding: String?
var mode: String?
var flag: String?
}

fun writeFileOptions(block: WriteFileOptions.() -> Unit): WriteFileOptions =
js("{}").unsafeCast<WriteFileOptions>().apply(block)

@JsFun("(path) => require('fs').readFileSync(path, 'utf8')")
private external fun nodeJsReadFile(path: String): String
//
//@JsModule("fs")
//private external fun writeFileSync(path: String, text: String, options: String)
//
//@JsModule("fs")
//private external fun readFileSync(path: String, options: String): String

@JsFun("() => process.argv.slice(2).join(' ')")
private external fun nodeJsArguments(): String

internal object NodeJsEngineSupport : JsEngineSupport() {
override fun writeFile(path: String, text: String) =
nodeJsWriteFile(path, text)
fs.writeFileSync(path, text, writeFileOptions { encoding = "utf8" } )

override fun readFile(path: String): String =
nodeJsReadFile(path)
fs.readFileSync(path, writeFileOptions { encoding = "utf8" } )

override fun arguments(): Array<out String> =
nodeJsArguments().split(' ').toTypedArray()
Expand Down