Files
tolaria/src/components/blockNoteRenderRecovery.ts

34 lines
1.2 KiB
TypeScript
Raw Normal View History

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)
)
}