From 378475c3980d26f855d4e59d36c873857873f7d1 Mon Sep 17 00:00:00 2001 From: Brian Hung Date: Thu, 1 Aug 2024 15:19:35 -0700 Subject: [PATCH 1/3] fix removeMark --- src/amToPm.ts | 16 +++++++++++----- src/schema.ts | 3 +++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/amToPm.ts b/src/amToPm.ts index fa8d301..cdf9e30 100644 --- a/src/amToPm.ts +++ b/src/amToPm.ts @@ -111,11 +111,17 @@ function handleMark( const pmStart = amSpliceIdxToPmIdx(adapter, spans, mark.start) const pmEnd = amSpliceIdxToPmIdx(adapter, spans, mark.end) if (pmStart == null || pmEnd == null) throw new Error("Invalid index") - const pmMarks = pmMarksFromAmMarks(adapter, { - [mark.name]: mark.value, - }) - for (const pmMark of pmMarks) { - tx = tx.addMark(pmStart, pmEnd, pmMark) + if (mark.value == null) { + const markMapping = adapter.markMappings.find(m => m.automergeMarkName === mark.name); + const markType = markMapping ? markMapping.prosemirrorMark : adapter.unknownMark; + tx = tx.removeMark(pmStart, pmEnd, markType); + } else { + const pmMarks = pmMarksFromAmMarks(adapter, { + [mark.name]: mark.value, + }); + for (const pmMark of pmMarks) { + tx = tx.addMark(pmStart, pmEnd, pmMark); + } } } } diff --git a/src/schema.ts b/src/schema.ts index eabfd31..a8b714d 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -264,6 +264,9 @@ export function pmMarksFromAmMarks( const pmMarks = [] for (const [markName, markValue] of Object.entries(amMarks)) { + if (markValue == null) { + throw new Error("Cannot create pmMark from null markValue"); + } const mapping = adapter.markMappings.find( m => m.automergeMarkName === markName, ) From 6e25532f6401bdaabc15af5a3129c7451b03b683 Mon Sep 17 00:00:00 2001 From: BrianHung Date: Thu, 1 Aug 2024 15:58:03 -0700 Subject: [PATCH 2/3] fix null check --- src/schema.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/schema.ts b/src/schema.ts index a8b714d..997efb8 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -264,9 +264,8 @@ export function pmMarksFromAmMarks( const pmMarks = [] for (const [markName, markValue] of Object.entries(amMarks)) { - if (markValue == null) { - throw new Error("Cannot create pmMark from null markValue"); - } + // Filter tombstoned marks (https://github.com/automerge/automerge/issues/715). + if (markValue == null) continue; const mapping = adapter.markMappings.find( m => m.automergeMarkName === markName, ) From 1ce92dc82b8aa64961c27158b593c59622774784 Mon Sep 17 00:00:00 2001 From: BrianHung Date: Thu, 1 Aug 2024 15:58:15 -0700 Subject: [PATCH 3/3] prettier --- src/amToPm.ts | 14 +++++++++----- src/schema.ts | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/amToPm.ts b/src/amToPm.ts index cdf9e30..d6075ba 100644 --- a/src/amToPm.ts +++ b/src/amToPm.ts @@ -112,15 +112,19 @@ function handleMark( const pmEnd = amSpliceIdxToPmIdx(adapter, spans, mark.end) if (pmStart == null || pmEnd == null) throw new Error("Invalid index") if (mark.value == null) { - const markMapping = adapter.markMappings.find(m => m.automergeMarkName === mark.name); - const markType = markMapping ? markMapping.prosemirrorMark : adapter.unknownMark; - tx = tx.removeMark(pmStart, pmEnd, markType); + const markMapping = adapter.markMappings.find( + m => m.automergeMarkName === mark.name, + ) + const markType = markMapping + ? markMapping.prosemirrorMark + : adapter.unknownMark + tx = tx.removeMark(pmStart, pmEnd, markType) } else { const pmMarks = pmMarksFromAmMarks(adapter, { [mark.name]: mark.value, - }); + }) for (const pmMark of pmMarks) { - tx = tx.addMark(pmStart, pmEnd, pmMark); + tx = tx.addMark(pmStart, pmEnd, pmMark) } } } diff --git a/src/schema.ts b/src/schema.ts index 997efb8..05287ef 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -265,7 +265,7 @@ export function pmMarksFromAmMarks( for (const [markName, markValue] of Object.entries(amMarks)) { // Filter tombstoned marks (https://github.com/automerge/automerge/issues/715). - if (markValue == null) continue; + if (markValue == null) continue const mapping = adapter.markMappings.find( m => m.automergeMarkName === markName, )