import { instantiate, putString, takePacket } from "./abi.js";
let ex = null;
let context = 0;
self.onmessage = async ({ data }) => {
try {
if (data.cmd === "init") {
ex = await instantiate(data.module);
self.postMessage({ type: "ready" });
} else if (data.cmd === "prepare") {
if (context) {
ex.qs_worker_free(context);
context = 0;
}
const n = putString(ex, data.n);
context = ex.qs_worker_prepare(n.ptr, n.len);
ex.qs_dealloc(n.ptr, n.len, 1);
self.postMessage({ type: "prepared", ok: context !== 0, gen: data.gen });
} else if (data.cmd === "sieve") {
const handle = ex.qs_worker_sieve(context, data.family, data.count);
const payload = takePacket(ex, handle); if (payload) self.postMessage({ type: "relations", payload, gen: data.gen }, [payload.buffer]);
else self.postMessage({ type: "relations", payload: null, gen: data.gen });
}
} catch (error) {
self.postMessage({ type: "error", error: String(error?.message || error), gen: data.gen });
}
};