import { Effect, HashMap, HashSet, Option, SubscriptionRef } from 'effect'; export declare const INIT_INDEX = -1; export type DiffResult = Readonly<{ changedPaths: HashSet.HashSet; affectedPaths: HashSet.HashSet; }>; export declare const emptyDiff: DiffResult; export declare const computeDiff: (previous: unknown, current: unknown) => DiffResult; export type CommandRecord = Readonly<{ name: string; args?: Record; }>; export type MountRecord = Readonly<{ name: string; args?: Record; }>; export type HistoryEntry = Readonly<{ tag: string; message: unknown; commands: ReadonlyArray; mountStarts: ReadonlyArray; mountEnds: ReadonlyArray; timestamp: number; isModelChanged: boolean; diff: DiffResult; }>; export type StoreState = Readonly<{ entries: ReadonlyArray; keyframes: HashMap.HashMap; maybeInitModel: Option.Option; initCommands: ReadonlyArray; initMountStarts: ReadonlyArray; startIndex: number; isPaused: boolean; pausedAtIndex: number; maybeLatestModel: Option.Option; }>; export type Bridge = Readonly<{ replay: (model: unknown, message: unknown) => unknown; render: (model: unknown) => Effect.Effect; markRenderPending: Effect.Effect; }>; /** * The absolute index of the most recently recorded entry, or `INIT_INDEX` * when no Messages have been recorded yet. */ export declare const latestEntryIndex: (state: StoreState) => number; /** * Options for `createDevToolsStore`. * * - `maxEntries`: Maximum number of history entries to retain before evicting the oldest segment. Defaults to 100. * - `keyframeInterval`: Number of recorded entries between full model snapshots. Smaller values use more memory but make time-travel a constant-time lookup instead of a replay. Set to `1` to snapshot every entry, which keeps time-travel correct under exclusion-from-history (since excluded Messages are never replayed). Defaults to 31. */ export type CreateDevToolsStoreOptions = Readonly<{ maxEntries?: number; keyframeInterval?: number; }>; export declare const createDevToolsStore: (bridge: Bridge, options?: CreateDevToolsStoreOptions) => Effect.Effect; export type DevToolsStore = Readonly<{ recordInit: (model: unknown, commands: ReadonlyArray, mountStarts?: ReadonlyArray) => Effect.Effect; recordMessage: (message: Readonly<{ _tag: string; }>, modelBeforeUpdate: unknown, modelAfterUpdate: unknown, commands: ReadonlyArray, isModelChanged: boolean) => Effect.Effect; updateLatestModel: (model: unknown) => Effect.Effect; attachRenderedMounts: (mountStarts: ReadonlyArray, mountEnds: ReadonlyArray) => Effect.Effect; getModelAtIndex: (index: number) => Effect.Effect; getMessageAtIndex: (index: number) => Effect.Effect>; getDiffAtIndex: (index: number) => Effect.Effect; jumpTo: (index: number) => Effect.Effect; resume: Effect.Effect; clear: Effect.Effect; stateRef: SubscriptionRef.SubscriptionRef; }>; //# sourceMappingURL=store.d.ts.map