64 lines
1.5 KiB
TypeScript
64 lines
1.5 KiB
TypeScript
import type { PuzzleDefinition } from "../domain";
|
|
import type {
|
|
ExactSolveOptions,
|
|
ExactSolveResult,
|
|
GenerateClassicOptions,
|
|
KillerCombinationOptions,
|
|
KillerCombinationResult,
|
|
LogicalSolveOptions,
|
|
LogicalSolveResult,
|
|
MinimizeOptions,
|
|
} from "../solver";
|
|
import type { NormalizedPuzzle, ValidationIssue } from "../domain";
|
|
|
|
export type SolverWorkerOperation =
|
|
| {
|
|
readonly kind: "solve";
|
|
readonly puzzle: PuzzleDefinition;
|
|
readonly options?: ExactSolveOptions;
|
|
}
|
|
| {
|
|
readonly kind: "logical";
|
|
readonly puzzle: PuzzleDefinition;
|
|
readonly options?: LogicalSolveOptions;
|
|
}
|
|
| { readonly kind: "generate"; readonly options?: GenerateClassicOptions }
|
|
| {
|
|
readonly kind: "minimize";
|
|
readonly puzzle: PuzzleDefinition;
|
|
readonly options?: MinimizeOptions;
|
|
}
|
|
| {
|
|
readonly kind: "killer-combinations";
|
|
readonly options: KillerCombinationOptions;
|
|
};
|
|
|
|
export interface SolverWorkerRequest {
|
|
readonly id: string;
|
|
readonly operation: SolverWorkerOperation;
|
|
}
|
|
|
|
export type SolverWorkerValue =
|
|
| ExactSolveResult
|
|
| LogicalSolveResult
|
|
| NormalizedPuzzle
|
|
| KillerCombinationResult;
|
|
|
|
export interface SolverWorkerError {
|
|
readonly name: string;
|
|
readonly message: string;
|
|
readonly issues?: readonly ValidationIssue[];
|
|
}
|
|
|
|
export type SolverWorkerResponse =
|
|
| {
|
|
readonly id: string;
|
|
readonly ok: true;
|
|
readonly value: SolverWorkerValue;
|
|
}
|
|
| {
|
|
readonly id: string;
|
|
readonly ok: false;
|
|
readonly error: SolverWorkerError;
|
|
};
|