0.0.5 • Published 4 years ago
@cloudflare/workers-wasi v0.0.5
Workers WASI
Work in progress
An experimental implementation of the WebAssembly System Interface designed to run on Cloudflare Workers
Usage
import { WASI } from '@cloudflare/workers-wasi';
import mywasm from './mywasm.wasm';
const wasi = new WASI();
const instance = new WebAssembly.Instance(mywasm, {
wasi_snapshot_preview1: wasi.wasiImport
});
await wasi.start(instance);Development
nvm use --ltsBuild and test
git clone --recursive git@github.com:cloudflare/workers-wasi.git
cd ./workers-wasi
make -j testBuild with Docker
git clone --recursive git@github.com:cloudflare/workers-wasi.git
cd ./workers-wasi
cat ./Dockerfile | docker build -t workers-wasi-build -
docker run --rm -it -v $(pwd):/workers-wasi workers-wasi-buildTesting
We aim to be interchangeable with other WASI implementations. Integration tests are run locally using Miniflare against the following test suites:
(52/52)https://github.com/caspervonb/wasi-test-suite(28/42)https://github.com/bytecodealliance/wasmtime/tree/main/crates/test-programs/wasi-tests
Notes
An ephemeral filesystem implementation built on littlefs is included. Both soft and hard links are not yet supported.
The following syscalls are not yet supported and return ENOSYS
fd_readdirpath_linkpath_readlinkpath_symlinkpoll_oneoffsock_recvsock_sendsock_shutdown
Timestamps are captured using Date.now() which has unique behavior on the Workers platform for security reasons. This affects the implementation of
clock_res_getclock_time_getfd_filestat_set_timespath_filestat_set_times
TODO (remove)
Misc TODO:
- path_rename (update old path for existing open fds)
- fix preopens interface (use object), and update options docs
- document difference between nodejs options and ours (streams/fs)
- fd_close (stdio)
- fd_renumber (stdio)
- fd_read/fd_write does not work with renumbering stdio
- update file timestamps appropriately