// engine-worker.mjs -- Web Worker qui fait tourner le moteur WebAssembly. // // Copyright (C) 2026 les auteurs d'Ustagammon. // Licence : GPLv3 ou ultérieure (voir LICENSE). // // Le moteur calcule ici, jamais sur le fil d'affichage de la page. Messages : // - envoyé une fois au chargement : { type: "ready", loadMs, memoryBytes } // ou { type: "failed", message } ; // - reçu : { id, args }, les arguments d'une commande engine-cli ; // - répondu : { id, result, ms, memoryBytes } ou { id, error }. // Les commandes sont traitées une à une, dans l'ordre d'arrivée. import createEngineModule from "./wasm/engine.mjs"; import { loadEngine } from "./engine-wasm.mjs"; const start = performance.now(); const wasmDir = new URL("wasm/", import.meta.url).href; const ready = loadEngine(createEngineModule, wasmDir); ready.then( (engine) => postMessage({ type: "ready", loadMs: performance.now() - start, memoryBytes: engine.memoryBytes(), }), (error) => postMessage({ type: "failed", message: String(error.message || error) }), ); onmessage = async (event) => { const { id, args } = event.data; try { const engine = await ready; const { result, ms } = engine.run(args); postMessage({ id, result, ms, memoryBytes: engine.memoryBytes() }); } catch (error) { postMessage({ id, error: String(error.message || error) }); } };