All files / src StateManager.ts

100% Statements 6/6
100% Branches 0/0
100% Functions 2/2
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23              12x             12x 87x 87x   87x 87x      
export default class StateManager<
  StateType,
  AppliedActionResultType,
  ActionName extends string = never
> {
  constructor(public state: StateType) {}
  // @ts-ignore
  appliedActions: { [K in ActionName]: AppliedActionResultType } = {};
  // @ts-ignore
  applyAction: <NewActionName extends string>(
    action: (
      content: StateType,
      actions: { [K in ActionName]: AppliedActionResultType }
    ) => [StateType, NewActionName, AppliedActionResultType]
  ) => StateManager<StateType, AppliedActionResultType, ActionName | NewActionName> = action => {
    const [state, actionName, appliedAction] = action(this.state, this.appliedActions);
    this.state = state;
    // @ts-ignore
    this.appliedActions[actionName] = appliedAction;
    return this;
  };
}