Skip to content

JSON CRDT Patch manipulations #673

Open
@streamich

Description

@streamich

Ability to compute manipulate patches:

  • Un-committed patch compaction
    • Compact operations within a single patch.
      • String inserts.
    • Combine non-commited patches.
  • Patch exchange
    • Method for converting clock vector to a serializable object
    • Converting serializable vector clock back to a vector clock?
    • Method for retrieving all patches from Log which are logically more recent than the clock vector value.
  • Cherry-picking
    • Ability to extract operations from a Patch.
    • Given a Log, ability to find all causal ancestor Patches of a given set of operations.
  • Reverse cherry-picking
    • Find all future (forward) Log patches that depend on a given Patch
      • This is potentially useful in undo/redo, to find frontier operations which already causally depend on the Patch which is to be undone.
  • Compact deletions adjacent to inserts?
    • Note: Cannot change insert IDs, due to possible future causal events.
Patch ..4082.234!4
├─ ins_str ..4082.234!1, obj = ..6089.213 { ..6089.216 ← " " }
├─ ins_str ..4082.235!1, obj = ..6089.213 { ..4082.234 ← "2" }
├─ ins_str ..4082.236!1, obj = ..6089.213 { ..4082.235 ← "\n" }
└─ del ..4082.237, obj = ..6089.213 { ..4082.236!1 }
  • Compact adjacent string inserts right in the Builder as the Patch is being built?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions