import type { TimelineEvent, TransactionOutcomeEvent, TransactionToken, } from "atom.io" export const TIMELINE_TRANSACTION_GROUP: unique symbol = Symbol( `timelineTransactionGroup`, ) let nextTimelineTransactionGroupSequence = 0 const timelineTransactionGroups = new WeakMap< TransactionOutcomeEvent>, TimelineTransactionGroup >() export type TimelineTransactionGroup = { sequence: number timelineKeys: Set } export type GroupedTimelineTransactionEvent = TimelineEvent & TransactionOutcomeEvent> & { [TIMELINE_TRANSACTION_GROUP]: TimelineTransactionGroup } export function addTimelineToTransactionGroup( outcome: TransactionOutcomeEvent>, timelineKey: string, ): TimelineTransactionGroup { let group = timelineTransactionGroups.get(outcome) if (!group) { group = { sequence: nextTimelineTransactionGroupSequence++, timelineKeys: new Set(), } timelineTransactionGroups.set(outcome, group) } group.timelineKeys.add(timelineKey) return group } export function getTimelineTransactionGroup( event: TimelineEvent, ): TimelineTransactionGroup | undefined { return (event as Partial)[ TIMELINE_TRANSACTION_GROUP ] }