export class PrismicError extends Error { url?: string response: Response constructor( message = "An invalid API response was returned", url: string | undefined, response: Response, ) { super(message) this.url = url this.response = response } } type ForbiddenErrorRepositoryAPIResponse = { type: string message: string } type ForbiddenErrorQueryAPIResponse = { error: string } export class ForbiddenError< TResponse = ForbiddenErrorRepositoryAPIResponse | ForbiddenErrorQueryAPIResponse, > extends PrismicError {} export class NotFoundError extends PrismicError {} export class RepositoryNotFoundError extends NotFoundError {} type ParsingErrorAPIResponse = { type: "parsing-error" message: string pos: { line: number column: number id: number location: string } } export class ParsingError extends PrismicError {} export class InvalidDataError extends PrismicError {} type RefExpiredErrorAPIResponse = { type: "api_validation_error" message: string } // This error extends `ForbiddenError` for backwards compatibility. Before the // API started returning 410 for expired refs, it returned 403, which threw a // `ForbiddenError`. // TODO: Extend this error from `PrismicError` in v8. export class RefExpiredError< TResponse = RefExpiredErrorAPIResponse, > extends ForbiddenError {} type RefNotFoundErrorAPIResponse = { type: "api_notfound_error" message: string } // This error extends `ForbiddenError` for backwards compatibility. Before the // API started returning 404 for not found refs, it returned 403, which threw a // `ForbiddenError`. // TODO: Extend this error from `PrismicError` in v8. export class RefNotFoundError< TResponse = RefNotFoundErrorAPIResponse, > extends ForbiddenError {} type PreviewTokenExpiredErrorAPIResponse = { type: "api_security_error" message: string } // This error extends `ForbiddenError` for backwards compatibility. // TODO: Extend this error from `PrismicError` in v8. export class PreviewTokenExpiredError< TResponse = PreviewTokenExpiredErrorAPIResponse, > extends ForbiddenError {}