all files / collab/ computeSnapshot.js

90% Statements 9/10
100% Branches 0/0
100% Functions 1/1
90% Lines 9/10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22              24× 24× 24×            
import { cloneDeep } from '../util'
import { ObjectOperation } from '../model'
 
/*
  Compute snapshot based on a given doc (JSON) and a set of changes
*/
export default function computeSnapshot(jsonDoc, changeset) {
  // Clone the doc to make sure we don't manipulate in-place
  jsonDoc = cloneDeep(jsonDoc)
  let nodes = jsonDoc.nodes
  changeset.forEach((change) => {
    change.ops.forEach((opData) => {
      try {
        let op = ObjectOperation.fromJSON(opData)
        op.apply(nodes)
      } catch (err) {
        console.error(err, opData)
      }
    })
  })
  return jsonDoc
}