mergeTTNodes function

TTNode? mergeTTNodes(
  1. TTNode? existing,
  2. TTNode? updates, {
  3. MutableEnum mut = MutableEnum.immutable,
})

Implementation

TTNode? mergeTTNodes(TTNode? existing, TTNode? updates,
    {MutableEnum mut = MutableEnum.immutable}) {
  if (existing == null) {
    return updates;
  }
  if (updates == null) {
    return existing;
  }
  final existingMeta = existing.nodeMetaData ?? TTNodeMeta();
  final existingState = existingMeta.forward ?? TTNodeState();
  final updatedMeta = updates.nodeMetaData ?? TTNodeMeta();
  final updatedState = updatedMeta.forward ?? TTNodeState();

  if (mut == MutableEnum.mutable) {
    existingMeta.forward = existingState;
    existing.nodeMetaData = existingMeta;

    for (final key in updatedState.keys) {
      existing[key] = updates[key];
      existingState[key] = updatedState[key]!;
    }

    return existing;
  }

  return TTNode.fromJson({
    ...existing,
    ...updates,
    "_": {
      "#": existingMeta.key,
      ">": {...?existingMeta.forward, ...?updates.nodeMetaData?.forward}
    }
  });
}