import {mkdir, writeFile} from 'node:fs/promises'; import path from 'node:path'; import {renderWheelGif} from '../src/render/render-gif.js'; import {parseRenderLocalArgs} from './render-local-args.js'; const usage = `Usage: npm run render:local -- --option --option [options] Options: -o, --output Output file (default: wheel.gif) --option Wheel option; repeat at least twice --winner Zero-based winner index (random when omitted) --duration Spin duration, 3000-10000 (default: 6500) --hold Winner hold, 500-2500 (default: 1200) --fps 12, 15, or 20 (default: 15) --size 384, 480, or 512 (default: 512) --theme classic, festival, or mono --timeout Render timeout, minimum 7000 (default: 30000) -h, --help Show this help`; try { const parsed = parseRenderLocalArgs(process.argv.slice(2)); if (parsed.help) { console.log(usage); process.exitCode = 0; } else { const output = path.resolve(parsed.output); await mkdir(path.dirname(output), {recursive: true}); const result = await renderWheelGif(parsed.request, { timeoutInMilliseconds: parsed.timeoutInMilliseconds, }); await writeFile(output, result.buffer); console.log(`${output} ${result.byteLength} bytes ${result.durationMs}ms`); } } catch (error) { const message = error instanceof Error ? error.message : String(error); console.error(`Unable to render GIF: ${message}\n\n${usage}`); process.exitCode = 1; }