@stix-rust/wasm
v0.2.0
Published
Portable WebAssembly bindings for the [stix-rust](../../README.md) toolkit — runs in Node and the browser.
Readme
stix-rust — TypeScript binding (WebAssembly)
Portable WebAssembly bindings for the stix-rust toolkit — runs in Node and the browser.
- Package:
@stix-rust/wasm - Surface: identical to
@stix-rust/node— typed handles (Engine,Pattern,Bundle,MatchResult); native JS objects;StixErrorhierarchy.
Install
npm install @stix-rust/wasmBuild & test (from source) (Node)
cd bindings/typescript-wasm
npm install
npm run build # wasm (--target nodejs) + TypeScript wrapper -> dist/
npm test # vitest (in Node)Browser build
npm run build:web # wasm-pack --target web -> pkg-web/In the browser, initialize the module before use (per wasm-pack's web target), then
use the same Engine/Pattern/Bundle/MatchResult API.
Usage (Node)
import { Engine } from "@stix-rust/wasm";
const engine = new Engine();
const pattern = engine.parsePattern("[ipv4-addr:value = '198.51.100.5']");
console.log(pattern.ast); // parsed AST as a plain JS object
console.log(pattern.ir); // lowered IR (schema_version, blocks, main) as a plain JS object
console.log(pattern.irListing); // human-readable listing of the IR blocks
console.log(pattern.canonical); // canonical (re-rendered, normalized) pattern text
const bundle = engine.parseBundle(json);
const result = engine.matchBundle(pattern, bundle);
console.log(result.matched, result.observations);
engine.registerType("x-acme-widget", (obj) => ({
...obj,
risk_band: obj.risk_score > 80 ? "high" : "low",
}));Errors are StixError subclasses: ParseError, ModelError, MatchError,
ValidationError.
Playground
playground/ is a static page that parses a pattern in the browser and shows
its AST, IR listing, IR JSON, IR graph, and canonical text. It is published at
/playground/ on the project's docs site.
To run it locally:
npm run build:playground
python3 -m http.server 8000 -d playground-distthen open http://localhost:8000. Any static server works; it must serve
.wasm as application/wasm.
