packages/store/operators/src/compose.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { ExistingState, NoInfer, StateOperator } from './types';

export function compose<T>(...operators: NoInfer<StateOperator<T>[]>): StateOperator<T> {
  return function composeOperator(existing: ExistingState<T>): T {
    return operators.reduce(
      (accumulator, operator) => operator(accumulator as ExistingState<T>),
      existing as T
    );
  };
}