/* ============================================================================= * spreadsheet_history.ts (주인 A) * 되돌리기 · 다시 — 명령과 되돌림 짝을 쌓음(메모리만 · 캐시에 안 넣음). * undo() 는 되돌림 짝을 · redo() 는 원래 명령을 돌려줌 — 적용은 부른 쪽(`applyCommand`). * ========================================================================== */ import type { Command, History } from "./spreadsheet_types"; /** `limit` = 쌓을 수(넘으면 오래된 것부터 버림) */ export function createHistory(limit = 100): History { let done: [Command, Command][] = []; let undone: [Command, Command][] = []; return { push(command, undo) { done.push([command, undo]); if (done.length > limit) done.shift(); undone = []; }, undo() { const pair = done.pop(); if (!pair) return null; undone.push(pair); return pair[1]; }, redo() { const pair = undone.pop(); if (!pair) return null; done.push(pair); return pair[0]; }, canUndo: () => done.length > 0, canRedo: () => undone.length > 0, clear() { done = []; undone = []; }, }; }