Skip to content

denosaurs/wasabi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

17 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

wasabi

This is a template repository for deno modules that want to use wasm. To use it simply click the "Use this template" button to generate a new repo with all the stuff you need to get started writing rust and running it using wasm in deno.

Prerequisites

prerequisite installation
deno deno_install
rust rustup
rustfmt rustup component add rustfmt
rust-clippy rustup component add clippy
wasm-pack cargo install wasm-pack

Structure

β”œβ”€β”€ .github
β”‚   β”œβ”€β”€ workflows
β”‚   β”‚   β”œβ”€β”€ checks.yml  - Performs deno lint, fmt and test
β”‚   β”‚   └── depsbot.yml - Checks the freshness of deno dependencies
β”‚   └── FUNDING.yml     - The denosaurs funding file, omit if not denosaur
β”œβ”€β”€ scripts             - A directory containing all development scripts
β”‚   β”œβ”€β”€ _deps.ts        - All of the dependencies for the scripts
β”‚   β”œβ”€β”€ _util.ts        - Utilities used in the scripts
β”‚   β”œβ”€β”€ build.ts        - The build script for generating the wasm.js file
β”‚   β”œβ”€β”€ clean.ts        - Removes all build data, often solving build issues
β”‚   β”œβ”€β”€ fmt.ts          - Formats both typescript and rust ignoring build data
β”‚   └── lint.ts         - Lints both typescript and rust ignoring build data
β”œβ”€β”€ src                 - The rust part of the module
β”‚   └── lib.rs          - The rust entry point
β”œβ”€β”€ pkg                 - Ignored by .gitignore, used when building
β”œβ”€β”€ target              - Ignored by .gitignore, used when building
β”œβ”€β”€ .gitignore          - A standard .gitignore file for ignoring build directories
β”œβ”€β”€ .rustfmt.toml       - The rustfmt configuration
β”œβ”€β”€ Cargo.toml          - A file describing the rust part of the module
β”œβ”€β”€ LICENSE             - A standard license file you are free to change to fit your needs
β”œβ”€β”€ mod.ts              - The entry point for the deno module
β”œβ”€β”€ README.md           - This readme file
β”œβ”€β”€ test.ts             - Containing tests
└── wasm.js             - A js file containing the built wasm and some glue code generated by the build script

Scripts

build

$ deno run --unstable --allow-read --allow-write --allow-run scripts/build.ts
building rust                  ("wasm-pack build --target web --release")
read wasm                      (size: 1274 bytes)
compressed wasm using lz4      (reduction: 224 bytes, size: 1050 bytes)
encoded wasm using base64      (increase: 350 bytes, size: 1400 bytes)
read js                        (size: 1776 bytes)
inlined js and wasm            (size: 3357 bytes)
minified js                    (size reduction: 754 bytes, size: 2603 bytes)
writing output to file         (wasm.js)
final size is: 2603 bytes

clean

$ deno run --unstable --allow-read --allow-write --allow-run scripts/clean.ts
cleaning cargo build           ("cargo clean")
removing pkg

fmt

$ deno run --unstable --allow-run scripts/fmt.ts
formatting typescript          ("deno --unstable fmt scripts/ test_deps.ts test.ts mod.ts")
Checked 9 files
formatting rust                ("cargo fmt")

lint

$ deno run --unstable --allow-run scripts/lint.ts
linting typescript             ("deno --unstable lint scripts test_deps.ts test.ts mod.ts")
Checked 9 files
linting rust                   ("cargo clippy -q")

Testing

Requires the wasm.js file to be built first.

$ deno test
running 1 tests
test add ... ok (2ms)

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out (2ms)

Other

Contribution

Pull request, issues and feedback are very welcome. Code style is formatted with deno fmt and commit messages are done following Conventional Commits spec.

Licence

Copyright 2020, Denosaurs. All rights reserved. MIT license.

About

🍣 Template repository for deno modules that want to use wasm

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published