fuzzyworld

basin / files / src / model / puzzle.worker.ts

puzzle.worker.ts

Blame: the commit that last changed each line · file · history

b9acd697 2026-07-01 Pavel Safronov1import { generatePuzzle } from './puzzle';
2import type { Config, Puzzle } from './puzzle';
3
4export type WorkerRequest = { type: 'generate'; seq: number; config: Config };
5export type WorkerResponse =
6 | { type: 'progress'; seq: number; value: number }
7 | { type: 'done'; seq: number; puzzle: Puzzle };
8
9self.addEventListener('message', (e: MessageEvent<WorkerRequest>) => {
10 const { type, seq, config } = e.data;
11 if (type !== 'generate') return;
12
13 const puzzle = generatePuzzle(config, (value) => {
14 (self as unknown as Worker).postMessage({ type: 'progress', seq, value } satisfies WorkerResponse);
15 });
16
17 (self as unknown as Worker).postMessage(
18 { type: 'done', seq, puzzle } satisfies WorkerResponse,
19 [puzzle.hm.data.buffer, puzzle.target.buffer],
20 );
21});