From 401087a8ef3868ef747aae612ad8551e3264e766 Mon Sep 17 00:00:00 2001 From: lucaronin Date: Fri, 5 Jun 2026 22:58:28 +0200 Subject: [PATCH] fix: recover plain table row index errors --- src/components/blockNoteRenderRecovery.test.ts | 9 +++++++++ src/components/blockNoteRenderRecovery.ts | 2 +- .../richEditorTransformErrorRecoveryExtension.test.ts | 10 ++++++++++ .../richEditorTransformErrorRecoveryExtension.ts | 2 +- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/components/blockNoteRenderRecovery.test.ts b/src/components/blockNoteRenderRecovery.test.ts index e8389755..4e76a994 100644 --- a/src/components/blockNoteRenderRecovery.test.ts +++ b/src/components/blockNoteRenderRecovery.test.ts @@ -32,6 +32,15 @@ describe('blockNoteRenderRecovery', () => { expect(isRecoveredBlockNoteRenderError(error, '')).toBe(true) }) + it('recognizes production table row index render errors that are plain Error instances', () => { + const error = new Error( + 'Index 1 out of range for ', + ) + + expect(blockNoteRenderRecoveryReason(error)).toBe('table_row_index_out_of_range') + expect(isRecoverableBlockNoteRenderError(error)).toBe(true) + }) + it('recognizes recovered BlockNote block type mismatch render errors', () => { const error = new Error('Block type does not match') diff --git a/src/components/blockNoteRenderRecovery.ts b/src/components/blockNoteRenderRecovery.ts index cbe675f6..36eea494 100644 --- a/src/components/blockNoteRenderRecovery.ts +++ b/src/components/blockNoteRenderRecovery.ts @@ -26,7 +26,7 @@ export function blockNoteRenderRecoveryReason(error: unknown): BlockNoteRenderRe if (!(error instanceof Error)) return null if (error.message === BLOCKNOTE_BLOCK_TYPE_MISMATCH_ERROR) return 'block_type_mismatch' if (error.message.includes(BLOCKNOTE_MISSING_ID_ERROR)) return 'block_missing_id' - if (error instanceof RangeError && BLOCKNOTE_TABLE_ROW_INDEX_ERROR.test(error.message)) { + if (BLOCKNOTE_TABLE_ROW_INDEX_ERROR.test(error.message)) { return 'table_row_index_out_of_range' } diff --git a/src/components/richEditorTransformErrorRecoveryExtension.test.ts b/src/components/richEditorTransformErrorRecoveryExtension.test.ts index 177cb0b5..e6aceec3 100644 --- a/src/components/richEditorTransformErrorRecoveryExtension.test.ts +++ b/src/components/richEditorTransformErrorRecoveryExtension.test.ts @@ -88,6 +88,9 @@ describe('isRecoverableEditorTransformError', () => { expect(isRecoverableEditorTransformError(new RangeError( 'Index 1 out of range for ', ))).toBe(true) + expect(isRecoverableEditorTransformError(new Error( + 'Index 1 out of range for ', + ))).toBe(true) expect(isRecoverableEditorTransformError(new Error( 'Block with ID 6c1c3bb4-e218-4f00-aaf5-40606852d286 not found', ))).toBe(true) @@ -196,6 +199,13 @@ describe('installRichEditorTransformErrorRecovery', () => { ) }) + it('recovers production table row index transactions reported as plain errors', () => { + expectDocumentRepairRecovery( + new Error('Index 1 out of range for '), + 'table_position_out_of_range', + ) + }) + it('recovers invalid insertion-depth transactions after note switching and saves', () => { expectDocumentRepairRecovery( new RangeError('Inserted content deeper than insertion position'), diff --git a/src/components/richEditorTransformErrorRecoveryExtension.ts b/src/components/richEditorTransformErrorRecoveryExtension.ts index 0dc04f9c..4b93c9e4 100644 --- a/src/components/richEditorTransformErrorRecoveryExtension.ts +++ b/src/components/richEditorTransformErrorRecoveryExtension.ts @@ -88,7 +88,7 @@ function isInvalidInsertionDepthError(error: unknown): boolean { } function isTablePositionOutOfRangeError(error: unknown): boolean { - return error instanceof RangeError && /^Index \d+ out of range for