# libavoid Vendor (tool server)

Obstacle-avoiding orthogonal **edge routing** for the `routing: "libavoid"`
option on `open_drawio_xml`. Vendored from [`libavoid-js`](https://github.com/Aksem/libavoid-js).

Unlike the app server (which inlines the *browser* build + base64 wasm into a
sandboxed iframe), the tool server runs in plain Node, so we vendor the **node
build** and let it read the wasm from disk — no patching, no base64.

Artifacts:

- `libavoid-node.mjs` — the Node ESM build (`libavoid-js` `dist/index-node.mjs`).
  Exposes `AvoidLib.load(wasmPath)` / `AvoidLib.getInstance()`. It reads the
  wasm via `fs.readFileSync` (no fetch).
- `libavoid.wasm` — the Emscripten binary (~492 KB). Loaded by path:
  `await AvoidLib.load(join(__dirname, "vendor/libavoid/libavoid.wasm"))`.
- `libavoid.d.ts` — TypeScript typings.
- `LICENSE` — libavoid-js is LGPL-2.1-or-later.

## Usage

```js
import { AvoidLib } from "./vendor/libavoid/libavoid-node.mjs";
import { computeLibavoidRoutes } from "./libavoid-routing.js"; // copied from shared/
await AvoidLib.load(join(__dirname, "vendor", "libavoid", "libavoid.wasm"));
const Avoid = AvoidLib.getInstance();
const routes = computeLibavoidRoutes(Avoid, vertices, edges); // edgeId -> waypoints
```

The routing math lives in `shared/libavoid-routing.js` (copied into `src/` by
the `copy-shared` npm script), shared verbatim with the app server.

## Versioning

Vendored from `libavoid-js@0.5.0-beta.5`.

## Refreshing

```sh
npm pack libavoid-js && tar -xzf libavoid-js-*.tgz
cp package/dist/index-node.mjs  vendor/libavoid/libavoid-node.mjs
cp package/dist/libavoid.wasm   vendor/libavoid/libavoid.wasm
cp package/dist/index-node.d.ts vendor/libavoid/libavoid.d.ts
cp package/LICENSE              vendor/libavoid/LICENSE
```
