#worker #wasi #install #cli

bin+lib wasi-worker-cli

Tool to create and deploy WASM WASI-based browser service workers

15 unstable releases (5 breaking)

0.6.0 Aug 30, 2020
0.5.0 Feb 7, 2020
0.4.5 Nov 19, 2019
0.3.3 Nov 7, 2019
0.1.2 Oct 30, 2019

#788 in WebAssembly

30 downloads per month

MIT/Apache

485KB
1K SLoC

JavaScript 567 SLoC // 0.0% comments TypeScript 351 SLoC // 0.0% comments Rust 221 SLoC // 0.1% comments

Tool to create and package WASM WASI-based browser service workers

This tool provides JavaScript glue for browser service workers built with wasi-worker library.

Installation

Note: wasi-worker-cli 0.5+ requires rustc 1.41+ as it bases on wasi-snapshot-preview1 now

cargo install wasi-worker-cli

Usage

% wasiworker help       
wasi-worker-cli 0.2.0
Install JavaScript glue code and WASI toolset for WASI worker to function.

USAGE:
    wasiworker <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    deploy     Executes `cargo build --bin worker` and deploys with glue code under ./dist
    help       Prints this message or the help of the given subcommand(s)
    install    Install static files and worker.rs template in current crate
  1. Install wasiworker template considering current directory is a crate root
wasiworker install

It will create bin/worker.rs and place relevant target and dependencies in current Cargo.toml. Will panic if Cargo.toml was not found.

  1. Build and deploy worker under ./dist with all depencies
wasiworker deploy

It will run cargo build --release --target wasm32-wasi --bin worker, copy resulting worker.wasm under ./dist and copy JavaScript glue code under ./dist/worker.js. It will also add wasm_transformer to be able to run in browser.

Note: currently it uses wasm-gc tool to significantly cut resulting wasm file size.

  • Look at converting to cargo wasi subcommand

Building/hacking

Code structure:

  • src/main.rs - is the CLI, when compiled it's embedding dist glue code into resulting binary
  • js/* is the source of JavaScript package, which is using rollup and typescript to build distribution files
  • js/dist/* is the latest glue code distributable built with production settings

Install the cli package from the crate manually

cargo install --path . --force

It will also embed whaever version of JS glue was placed under the ./dist subfolder.

Build JS glue for development

cd js
npm install
npm run build:dev

Build JS glue for distribution

cd js
npm install
npm run build

Attributions

JavaScript glue code is built on top of following great packages. Thanks https://wasmer.io/ for their great work on making WASI easy to use.

TODO

  • CLI
  • JavaScript glue package
  • Embed JavaScript dist into package
  • Documentation
  • Cargo build script to pack and install release or debug version, including building js dependencies
  • Add wasm-gc to optimize resulting wasm size
  • CLI install
  • CLI install allows to customize worker name
  • CLI deploy release only
  • CLI deploy can compile for debug

Dependencies

~6MB
~107K SLoC