import { ServerErrorBase } from '../errors'
import { toCamelCaseDeep } from '../utils/case_converter'
/**
* Generic JSON API error response.
*/
export class JsonApiError extends ServerErrorBase {
/**
* Wrap a raw JsonApi error response.
*
* @constructor
*
* @param {Error} originalError Original error response.
* @param {axios} axios Axios instance used for the request.
*/
constructor (originalError, axios) {
super(originalError, axios)
let unwrappedError = originalError.response.data.errors[0]
this._title = unwrappedError.title
this._detail = unwrappedError.detail
this._code = unwrappedError.code
this._meta = toCamelCaseDeep(unwrappedError.meta || {})
}
get code () {
return this._code
}
}
/**
* "Bad Request" error.
* `error.nestedErrors` may contain per-field errors.
*
* @export
* @class
*/
export class JsonApiBadRequestError extends JsonApiError {
/**
* Wrap a raw JsonApi error response.
*
* @constructor
*
* @param {Error} originalError Original error response.
* @param {axios} axios Axios instance used for the request.
*/
constructor (originalError, axios) {
super(originalError, axios)
let errors = originalError.response.data.errors
if (errors.length > 1) {
this._title = 'Request contains some errors.'
this._detail = 'Request contains some errors. Check "nestedErrors"'
this._nestedErrors = errors.map(err => ({
title: err.title,
detail: err.detail,
meta: toCamelCaseDeep(err.meta)
}))
}
}
/**
* Errors for every invalid field.
*/
get nestedErrors () {
return this._nestedErrors
}
}
/**
* User is not allowed to perform this action.
*
* @export
* @class
*/
export class JsonApiNotAllowedError extends JsonApiError {}
/**
* Forbidden.
*
* @export
* @class
*/
export class JsonApiForbiddenRequestError extends JsonApiError {}
/**
* The requested resource was not found.
*
* @export
* @class
*/
export class JsonApiNotFoundError extends JsonApiError {}
/**
* The request could not be completed due to a conflict with the current state of the target resource.
*
* @export
* @class
*/
export class JsonApiConflictError extends JsonApiError {}
/**
* Internal server error.
*
* @export
* @class
*/
export class JsonApiInternalServerError extends JsonApiError {}