1.6 KiB
epic, story, title, status
| epic | story | title | status |
|---|---|---|---|
| 1 | 1.6 | WASM Bindings (for Web) | draft |
Epic 1 — Core Calculation Engine (Rust Crate)
Goal: Build calcpad-engine as a standalone Rust crate that powers all platforms. This is the foundation.
Story 1.6: WASM Bindings (for Web)
As a web developer integrating CalcPad,
I want wasm-bindgen exports that return JSON-compatible results and fit within a 500KB gzipped bundle,
So that the engine runs performantly in the browser without large download overhead.
Acceptance Criteria:
Given a JavaScript caller invoking the eval_line WASM export with a string input
When the function executes
Then it returns a JsValue that can be deserialized to a JavaScript object
And the object includes type, display, rawValue, and error fields
Given a JavaScript caller invoking eval_sheet with an array of lines
When the function executes
Then it returns an array of result objects corresponding to each line
And variable context flows from earlier lines to later lines
Given the WASM crate is built with wasm-pack build --release
When the output .wasm file is gzip-compressed
Then the compressed size is under 500KB
Given the WASM module is loaded in a browser environment
When eval_line is called with 0.1 + 0.2
Then the result is 0.3 (arbitrary precision works in WASM)
And performance is comparable to native for typical expressions (under 1ms per line)
Given the WASM module is loaded in a Web Worker
When eval_sheet is called
Then it does not block the main thread
And results can be posted back via standard postMessage