| 1 | export const PAGE_MERGE_ERROR_CODES = [ |
| 2 | 'PAGE_MERGE_INVALID_REQUEST', |
| 3 | 'PAGE_MERGE_SAME_SESSION', |
| 4 | 'PAGE_MERGE_NO_PAGE_SELECTED', |
| 5 | 'PAGE_MERGE_PAGE_LIMIT_EXCEEDED', |
| 6 | 'PAGE_MERGE_SESSION_NOT_FOUND', |
| 7 | 'PAGE_MERGE_SESSION_BUSY', |
| 8 | 'PAGE_MERGE_SLIDE_SIZE_MISMATCH', |
| 9 | 'PAGE_MERGE_SOURCE_PAGE_NOT_FOUND', |
| 10 | 'PAGE_MERGE_SOURCE_PAGE_UNAVAILABLE', |
| 11 | 'PAGE_MERGE_TARGET_FONT_UNAVAILABLE', |
| 12 | 'PAGE_MERGE_PAGE_COPY_FAILED', |
| 13 | 'PAGE_MERGE_INTERNAL_ERROR' |
| 14 | ] as const |
| 15 | |
| 16 | export type PageMergeErrorCode = (typeof PAGE_MERGE_ERROR_CODES)[number] |
| 17 | |
| 18 | export const PAGE_MERGE_DISABLED_REASONS = [ |
| 19 | 'PAGE_MERGE_SESSION_BUSY', |
| 20 | 'PAGE_MERGE_SESSION_EMPTY', |
| 21 | 'PAGE_MERGE_SLIDE_SIZE_MISMATCH', |
| 22 | 'PAGE_MERGE_PAGE_INCOMPLETE', |
| 23 | 'PAGE_MERGE_PAGE_FILE_MISSING' |
| 24 | ] as const |
| 25 | |
| 26 | export type PageMergeDisabledReason = (typeof PAGE_MERGE_DISABLED_REASONS)[number] |
| 27 | |
| 28 | export class PageMergeError extends Error { |
| 29 | constructor( |
| 30 | readonly code: PageMergeErrorCode, |
| 31 | message: string |
| 32 | ) { |
| 33 | super(message) |
| 34 | this.name = 'PageMergeError' |
| 35 | } |
| 36 | } |
| 37 | |
| 38 | export const readPageMergeErrorCode = (error: unknown): PageMergeErrorCode | null => { |
| 39 | const message = error instanceof Error ? error.message : String(error ?? '') |
| 40 | return PAGE_MERGE_ERROR_CODES.find((code) => message.includes(code)) || null |
| 41 | } |
| 42 |