// Сборка WASM-модуля фильтров «Свет». // // Модуль лежит в wasm/light (Rust, no_std) и копируется в static/light.wasm, // откуда его забирает браузер. Если cargo недоступен, используется уже // собранный модуль из репозитория. import { execFileSync } from 'node:child_process'; import { copyFileSync, existsSync } from 'node:fs'; import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; const root = resolve(dirname(fileURLToPath(import.meta.url)), '..'); const wasmDir = resolve(root, 'wasm/light'); const target = resolve(wasmDir, 'target/wasm32-unknown-unknown/release/light.wasm'); const out = resolve(root, 'static/light.wasm'); try { execFileSync('cargo', ['build', '--release', '--target', 'wasm32-unknown-unknown'], { cwd: wasmDir, stdio: 'inherit' }); copyFileSync(target, out); console.log('wasm: static/light.wasm собран'); } catch (err) { if (!existsSync(out)) { console.error('wasm: не удалось собрать модуль и нет готового static/light.wasm'); process.exit(1); } console.warn('wasm: cargo недоступен, используется готовый static/light.wasm'); }