Files
lead/frontend/src/lib/components/grid/messages.ts
2025-09-11 18:47:45 +10:00

59 lines
1.0 KiB
TypeScript

import type { Position } from "./grid.svelte.ts";
interface LeadMsg {
msg_type: 'set' | 'get' | 'error' | 'bulk' | 'eval';
cell?: CellRef;
raw?: string;
eval?: Eval;
eval_config?: EvalConfig;
bulk_msgs?: Array<LeadMsg>;
}
interface CellRef {
row: number;
col: number;
}
type LiteralType = 'Number' | 'Boolean' | 'String';
type LiteralValue = number | string | boolean;
type EvalRange = Array<Eval>;
interface Literal {
type: LiteralType;
value: LiteralValue;
}
interface EvalCellRef {
eval: Eval;
reference: CellRef;
}
interface LeadErr {
code: 'DivZero' | 'TypeErr' | 'Syntax' | 'Server' | 'Unsupported';
desc: string;
title: string;
}
interface EvalConfig {
do_propagation: boolean;
force_propagation: boolean;
}
// Tagged union
type Eval =
| { literal: Literal }
| { cellref: EvalCellRef }
| { range: Range }
| { err: LeadErr }
| 'unset';
interface CellT {
raw: string;
temp_raw: string;
pos: Position;
temp_eval?: Eval;
eval?: Eval;
}
export type { Eval, LeadMsg, LeadErr, Literal, CellRef, LiteralValue, CellT };