export type ParsedText = TransitionLabel | Comment | ParserError; export type TransitionLabel = { kind: "transitionLabel"; uid: string; // uid of the text node trigger: Trigger; guard: Expression; actions: Action[]; } export type Comment = { kind: "comment"; uid: string; // uid of the text node text: string; } export type ParserError = { kind: "parserError"; uid: string; // uid of the text node } export type Trigger = TriggerLess | EventTrigger | AfterTrigger | EntryTrigger | ExitTrigger; export type TriggerLess = { kind: "triggerless"; } export type EventTrigger = { kind: "event"; event: string; paramName?: string; } export type AfterTrigger = { kind: "after"; durationMs: number; } export type EntryTrigger = { kind: "entry"; } export type ExitTrigger = { kind: "exit"; } export type Action = Assignment | RaiseEvent; export type Assignment = { kind: "assignment"; lhs: string; rhs: Expression; } export type RaiseEvent = { kind: "raise"; event: string; param?: Expression; } export type Expression = BinaryExpression | UnaryExpression | VarRef | Literal | FunctionCall; export type BinaryExpression = { kind: "binaryExpr"; operator: "+" | "-" | "*" | "/" | "&&" | "||"; lhs: Expression; rhs: Expression; } export type UnaryExpression = { kind: "unaryExpr"; operator: "!" | "-"; expr: Expression; } export type VarRef = { kind: "ref"; variable: string; } export type Literal = { kind: "literal"; value: any; } export type FunctionCall = { kind: "call", fn: VarRef, param: Expression, }