UNPKG

@logseq/diff-merge

Version:

Block level diff and merge for Logseq

50 lines (45 loc) 1.72 kB
# Logseq Diff & Merge: Block level diff and merge for Logseq ## Progress: - [x] Merge - [x] Tests - [x] Consider `id::` - [x] Finalize language choice & rewrite - Typescript - [x] Mldoc port in - [x] Org-mode support - via Mldoc ## Usage: - Refer to the demo at entry `src`. `yarn dev` to run it. - Returning operations are indexed by the "original block position". For Diff, it's defined by the first (base) branch to diff; For Merge, it's defined by the base branch of the branches to merge. - The 0 index is reserved for the ops to be inserted before the first base block. - Ex. the following case would generate an empty `[]` at 0 index: base: ``` ## hello - world - nice - nice - bingo - world ``` branch: ``` ## Halooooo - world - nice - nice - bingo - world ``` result (notice the empty array at 0 index): ``` Array(7) [ [], (2) […], (1) […], (1) […], (1) […], (1) […], (1) […] ] ``` Reason: no insertion is needed before the first base block. - The op (DELETE/EQUAL/INSERT) represents the one-to-one correspondence between blocks before and after diff-merge. Equal doesn't mean equal in content, it means that the block is the same block as it was before (e.g., same block UUID) ## Strategy: - Resolve inner block conflict by line if block are shipped with uuid (e.g., `id::` in Logseq Markdown) - Do not execute delete operation if there is any "modified" equal block in the same position from other branches. This is to avoid deleting a block that is modified by other branches. ## Dev: - Experiments: `yarn dev` - Build dist: `yarn build` - Publish to NPM: `yarn publish`