34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
|
|
const BLOCKNOTE_MISSING_ID_ERROR = "Block doesn't have id"
|
||
|
|
const BLOCKNOTE_RECOVERY_BOUNDARY_NAME = 'BlockNoteRenderRecoveryBoundary'
|
||
|
|
const RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK = '__tolariaRecoveredBlockNoteRenderError'
|
||
|
|
|
||
|
|
type MarkedRecoveredBlockNoteRenderError = Error & {
|
||
|
|
[RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK]?: true
|
||
|
|
}
|
||
|
|
|
||
|
|
function hasRecoveredRenderErrorMark(error: unknown): boolean {
|
||
|
|
if (!(error instanceof Error)) return false
|
||
|
|
return (error as MarkedRecoveredBlockNoteRenderError)[RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK] === true
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isRecoverableBlockNoteRenderError(error: unknown): boolean {
|
||
|
|
return error instanceof Error && error.message.includes(BLOCKNOTE_MISSING_ID_ERROR)
|
||
|
|
}
|
||
|
|
|
||
|
|
export function markRecoveredBlockNoteRenderError(error: unknown): void {
|
||
|
|
if (!isRecoverableBlockNoteRenderError(error)) return
|
||
|
|
const markedError = error as MarkedRecoveredBlockNoteRenderError
|
||
|
|
markedError[RECOVERED_BLOCKNOTE_RENDER_ERROR_MARK] = true
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isRecoveredBlockNoteRenderError(
|
||
|
|
error: unknown,
|
||
|
|
componentStack: string,
|
||
|
|
): boolean {
|
||
|
|
return isRecoverableBlockNoteRenderError(error)
|
||
|
|
&& (
|
||
|
|
hasRecoveredRenderErrorMark(error)
|
||
|
|
|| componentStack.includes(BLOCKNOTE_RECOVERY_BOUNDARY_NAME)
|
||
|
|
)
|
||
|
|
}
|