/** * An object that represents an entry of the command in the history * * @typedef CommandEntry * @property {string} id A unique ID generated for this entry * @property {string} title The title passed to the command being run * @property {() => void | Promise} undo A method to undo whatever the command did * @property {() => void | Promise} redo A method to redo whatever undo did * @property {() => any | Promise} export A method to export the command * @property {{[key: string]: any}} state The state of the current command instance */ /** * Extra command information * * @typedef CommandExtraParams * @property {boolean} recordHistory The title passed to the command being run * @property {any} importData Data to restore the command from * @property {Record} extra Extra information to be stored in the history entry */ /** * A command, which is run, then returns a CommandEntry object that can be used to manually undo/redo it * * @callback Command * @param {string} title The title passed to the command being run * @param {any} options A options object for the command * @param {CommandExtraParams} extra A options object for the command * @returns {Promise} */ /** * A method for running a command (or redoing it) * * @callback CommandDoCallback * @param {string} title The title passed to the command being run * @param {*} options A options object for the command * @param {{[key: string]: any}} state The state of the current command instance * @returns {void | Promise} */ /** * A method for undoing a command * * @callback CommandUndoCallback * @param {string} title The title passed to the command when it was run * @param {{[key: string]: any}} state The state of the current command instance * @returns {void | Promise} */