UNPKG

mobx-bonsai

Version:

A fast lightweight alternative to MobX-State-Tree + Y.js two-way binding

63 lines (62 loc) 1.74 kB
/** * Base interface for all undoable changes. * Contains the path from the tracked root to the changed node. */ export interface UndoableChangeBase { readonly path: readonly string[]; } /** * Represents adding a new property to an object. */ export type UndoableObjectAddChange = Readonly<UndoableChangeBase & { operation: "object-add"; propertyName: string; newValue: unknown; }>; /** * Represents updating an existing property on an object. */ export type UndoableObjectUpdateChange = Readonly<UndoableChangeBase & { operation: "object-update"; propertyName: string; oldValue: unknown; newValue: unknown; }>; /** * Represents removing a property from an object. */ export type UndoableObjectRemoveChange = Readonly<UndoableChangeBase & { operation: "object-remove"; propertyName: string; oldValue: unknown; }>; /** * Union of all object change types. */ export type UndoableObjectChange = UndoableObjectAddChange | UndoableObjectUpdateChange | UndoableObjectRemoveChange; /** * Represents splicing elements into/from an array. */ export type UndoableArraySpliceChange = Readonly<UndoableChangeBase & { operation: "array-splice"; index: number; added: unknown[]; removed: unknown[]; }>; /** * Represents updating an element in an array. */ export type UndoableArrayUpdateChange = Readonly<UndoableChangeBase & { operation: "array-update"; index: number; oldValue: unknown; newValue: unknown; }>; /** * Union of all array change types. */ export type UndoableArrayChange = UndoableArraySpliceChange | UndoableArrayUpdateChange; /** * Union of all undoable change types. */ export type UndoableChange = UndoableObjectChange | UndoableArrayChange;