Source: sources/messages/http/AbstractHTTPError.js

/**
 * @module Messages/HTTP/AbstractHTTPError
 * @desc Export the AbstractHTTPError abstract class.
 *
 * @requires {@link https://github.com/Itee/itee-validators itee-validators}
 * @requires module:Messages/AbstractError~AbstractError
 *
 * @author [Tristan Valcke]{@link https://github.com/Itee}
 * @license [BSD-3-Clause]{@link https://opensource.org/licenses/BSD-3-Clause}
 */

import { isNotDefined }  from 'itee-validators'
import { AbstractError } from '../AbstractError'

/**
 * @class
 * @classdesc The AbstractHTTPError is the base class for all derived HTTPError.
 * It extend is AbstractError and agmente it with the status code notion.
 *
 * @extends module:Messages/AbstractError~AbstractError
 */
class AbstractHTTPError extends AbstractError {

    /**
     * A boolean based on classname that allow fast type checking, will ever be true
     * @constant
     * @default true
     * @type {boolean}
     */
    static get isAbstractHTTPError () { return true }

    /**
     * The abstract getter of http status code, internally it call the static getter statusCode that need to be reimplemented by extended class.
     * @readonly
     * @abstract
     * @type {number}
     * @throws {ReferenceError} In case the static statusCode getter is not redefined in class that inherit this class.
     */
    get statusCode () {
        if ( isNotDefined( this.constructor.statusCode ) ) {
            throw new ReferenceError( `${ this.name } class need to reimplement static statusCode getter.` )
        }
        return this.constructor.statusCode
    }

    set statusCode ( value ) {
        throw new SyntaxError( 'Try to assign a read only property.' )
    }
}

export { AbstractHTTPError }