annotations-design-patterns
    Preparing search index...

    Function Revertible

    • Convierte cada llamada al método en un comando desechable: se ejecuta normalmente y se apunta en el historial junto con su inversa (undoMethod, otro método de la misma clase que recibe los MISMOS argumentos y revierte el efecto). Las operaciones async se registran al resolverse, en orden de finalización; si rechazan, no se registran. El método de deshacer debe ser síncrono.

      Parameters

      Returns <This extends object, Args extends unknown[], Return>(
          target: (this: This, ...args: Args) => Return,
          context: ClassMethodDecoratorContext<
              This,
              (this: This, ...args: Args) => Return,
          >,
      ) => (this: This, ...args: Args) => Return

      const history = new CommandHistory();
      class Counter {
      @Revertible(history, 'decrement')
      increment(n: number): void { this.value += n; }
      decrement(n: number): void { this.value -= n; }
      }
      history.undoLast(); // revierte el último increment