wasm_run
wasm_run copied to clipboard
Dart bindings for web issue with WasiConfig
I think there is something strange with Dart bindings for web:
When I try to setup WasiConfig, the first execution in flutter run -d chrome return an error:
TypeError: Cannot read properties of undefined (reading 'WASI')
.
or if I enable captureStdErr
TypeError: Cannot read properties of undefined (reading 'Fd')
.
simply doing "r" seems that the "refresh" initialise what failed the first time.
Everything seems to work after but is very strange, because of this issue I gave up with WasiConfig and I decided to "write" by myself wasix import basic like fd_write, fd_seek, clock_time_get, proc_exit so that the config can be null... Any solution? If would be possible to expand the test with loading a valid WasiConfig would be also helpful, because I think my config is set up correctly otherwise the code wouldn't work ever.
Here seems the problem from the debugger, I'm investigating:
WasmInstanceBuilder builder({
WasiConfig? wasiConfig,
WorkersConfig? workersConfig,
}) {
_WASI? wasi;
if (wasiConfig != null) {
final stdout = wasiConfig.captureStdout ? WasiStdio() : null;
final stderr = wasiConfig.captureStderr ? WasiStdio() : null;
final wasiWeb = WASI(
wasiConfig.args,
wasiConfig.env
.map((e) => '${e.name}=${e.value}')
.toList(growable: false),
[
OpenFile(WasiWebFile(Uint8List(0))), // TODO: stdin
stdout?.fd ?? OpenFile(WasiWebFile(Uint8List(0))),
stderr?.fd ?? OpenFile(WasiWebFile(Uint8List(0))),
...wasiConfig.webBrowserFileSystem.entries.map(
(e) => PreopenDirectory(
e.key,
js_util.jsify(_mapWasiFiles(e.value.items)) as Object,
),
),
],
);
wasi = _WASI(wasiWeb, stdout, stderr);
}
return _Builder(this, wasi, workersConfig);
}