SPB Git

Repository Public

state.ts 1.1 KB 23 lines typescript

1export const STATES = ['draft', 'pending_approval', 'approved', 'signed', 'broadcast', 'confirming', 'finalized',2  'rejected', 'expired', 'failed', 'replaced', 'reorged'] as const;3export type ProposalState = (typeof STATES)[number];45const NEXT: Record<ProposalState, ProposalState[]> = {6  draft: ['pending_approval', 'rejected', 'expired', 'failed'],7  pending_approval: ['approved', 'rejected', 'expired', 'failed'],8  approved: ['signed', 'failed', 'expired'],9  signed: ['broadcast', 'failed'],10  broadcast: ['confirming', 'finalized', 'failed', 'replaced'],11  confirming: ['finalized', 'failed', 'reorged', 'replaced'],12  reorged: ['confirming', 'finalized', 'failed'],13  finalized: [], rejected: [], expired: [], failed: [], replaced: [],14};1516export function canTransition(from: ProposalState, to: ProposalState): boolean {17  return NEXT[from].includes(to);18}19export function assertTransition(from: ProposalState, to: ProposalState): void {20  if (!canTransition(from, to)) throw new Error(`illegal state transition ${from} -> ${to}`);21}22export const isTerminal = (s: ProposalState) => NEXT[s].length === 0;23
Files main
Menu

Theme