OperationsCompressor.js 710 B

1234567891011121314151617181920
  1. export function compressOperations(operations) {
  2. if (!operations.length) return []
  3. const newOperations = []
  4. let currentOperation = operations[0]
  5. for (let operationId = 1; operationId < operations.length; operationId++) {
  6. const nextOperation = operations[operationId]
  7. if (currentOperation.canBeComposedWith(nextOperation)) {
  8. currentOperation = currentOperation.compose(nextOperation)
  9. } else {
  10. // currentOperation and nextOperation cannot be composed. Push the
  11. // currentOperation and start over with nextOperation.
  12. newOperations.push(currentOperation)
  13. currentOperation = nextOperation
  14. }
  15. }
  16. newOperations.push(currentOperation)
  17. return newOperations
  18. }