cqi.errors = {};


/**
 * A base class from which all other errors inherit.
 * If you want to catch all errors that the CQi package might throw,
 * catch this base error.
 */
cqi.errors.CQiError = class CQiError extends Error {
  constructor(message) {
    super(message);
    this.code = undefined;
    this.description = undefined;
  }
};


cqi.errors.Error = class Error extends cqi.errors.CQiError {
  constructor(message) {
    super(message);
    this.code = 2;
  }
};


cqi.errors.ErrorGeneralError = class ErrorGeneralError extends cqi.errors.Error {
  constructor(message) {
    super(message);
    this.code = 513;
  }
};


cqi.errors.ErrorConnectRefused = class ErrorConnectRefused extends cqi.errors.Error {
  constructor(message) {
    super(message);
    this.code = 514;
  }
};


cqi.errors.ErrorUserAbort = class ErrorUserAbort extends cqi.errors.Error {
  constructor(message) {
    super(message);
    this.code = 515;
  }
};


cqi.errors.ErrorSyntaxError = class ErrorSyntaxError extends cqi.errors.Error {
  constructor(message) {
    super(message);
    this.code = 516;
  }
};


cqi.errors.CLError = class Error extends cqi.errors.CQiError {
  constructor(message) {
    super(message);
    this.code = 4;
  }
};


cqi.errors.CLErrorNoSuchAttribute = class CLErrorNoSuchAttribute extends cqi.errors.CLError {
  constructor(message) {
    super(message);
    this.code = 1025;
    this.description = "CQi server couldn't open attribute";
  }
};


cqi.errors.CLErrorWrongAttributeType = class CLErrorWrongAttributeType extends cqi.errors.CLError {
  constructor(message) {
    super(message);
    this.code = 1026;
  }
};


cqi.errors.CLErrorOutOfRange = class CLErrorOutOfRange extends cqi.errors.CLError {
  constructor(message) {
    super(message);
    this.code = 1027;
  }
};


cqi.errors.CLErrorRegex = class CLErrorRegex extends cqi.errors.CLError {
  constructor(message) {
    super(message);
    this.code = 1028;
  }
};


cqi.errors.CLErrorCorpusAccess = class CLErrorCorpusAccess extends cqi.errors.CLError {
  constructor(message) {
    super(message);
    this.code = 1029;
  }
};


cqi.errors.CLErrorOutOfMemory = class CLErrorOutOfMemory extends cqi.errors.CLError {
  constructor(message) {
    super(message);
    this.code = 1030;
    this.description = 'CQi server has run out of memory; try discarding some other corpora and/or subcorpora';
  }
};


cqi.errors.CLErrorInternal = class CLErrorInternal extends cqi.errors.CLError {
  constructor(message) {
    super(message);
    this.code = 1031;
    this.description = "The classical 'please contact technical support' error";
  }
};


cqi.errors.CQPError = class Error extends cqi.errors.CQiError {
  constructor(message) {
    super(message);
    this.code = 5;
  }
};


cqi.errors.CQPErrorGeneral = class CQPErrorGeneral extends cqi.errors.CQPError {
  constructor(message) {
    super(message);
    this.code = 1281;
  }
};


cqi.errors.CQPErrorNoSuchCorpus = class CQPErrorNoSuchCorpus extends cqi.errors.CQPError {
  constructor(message) {
    super(message);
    this.code = 1282;
  }
};


cqi.errors.CQPErrorInvalidField = class CQPErrorInvalidField extends cqi.errors.CQPError {
  constructor(message) {
    super(message);
    this.code = 1283;
  }
};


cqi.errors.CQPErrorOutOfRange = class CQPErrorOutOfRange extends cqi.errors.CQPError {
  constructor(message) {
    super(message);
    this.code = 1284;
    this.description = 'A number is out of range';
  }
};


cqi.errors.lookup = {
  2: cqi.errors.Error,
  513: cqi.errors.ErrorGeneralError,
  514: cqi.errors.ErrorConnectRefused,
  515: cqi.errors.ErrorUserAbort,
  516: cqi.errors.ErrorSyntaxError,
  4: cqi.errors.CLError,
  1025: cqi.errors.CLErrorNoSuchAttribute,
  1026: cqi.errors.CLErrorWrongAttributeType,
  1027: cqi.errors.CLErrorOutOfRange,
  1028: cqi.errors.CLErrorRegex,
  1029: cqi.errors.CLErrorCorpusAccess,
  1030: cqi.errors.CLErrorOutOfMemory,
  1031: cqi.errors.CLErrorInternal,
  5: cqi.errors.CQPError,
  1281: cqi.errors.CQPErrorGeneral,
  1282: cqi.errors.CQPErrorNoSuchCorpus,
  1283: cqi.errors.CQPErrorInvalidField,
  1284: cqi.errors.CQPErrorOutOfRange
};