DanielaValero/fit-commit-js

View on GitHub
lib/message/error.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

const log = require( 'npmlog' );

/*
   Private
   ========================================================================== */

/**
 * Error map with shape:
 * {lineLenght: ['error message 1', 'error message 2']}
 * @private
 */
const errorsMap = new Map();

/**
 * Prints an error message
 * @param  {String} errorMessage A single error message
 * @private
 */
function printSingleError( errorMessage ) {
  log.error( errorMessage );
}

/**
 * Empties the error map
 * @private
 */
function clearErrorsMap() {
  errorsMap.clear();
}

/*
   Public
   ========================================================================== */

/**
 * Retrieves the array of messages of a given validator
 * @param  {String} validator Validator key name
 * @return {Array}            The array of messages of a given validator
 */
function getErrorsMapEntry( validator ) {
  return errorsMap.get( validator );
}

/**
 * Checks if the errorsMap contains errors
 * @param  {String} validator  Optional parameter. If defined will check if a
 *                             given validator has an error
 * @return {Boolean} Returns true if the errors Map contains errors
 */
function hasErrors( validator ) {
  let errors;

  if ( validator ) {
    errors = getErrorsMapEntry( validator );
  } else {
    const mapIter = errorsMap.keys();
    errors = mapIter.next().value;
  }

  return ( errors !== undefined );
}

/**
 * Prints all the errors registered in the errorsMap
 */
function printErrors() {
  if ( hasErrors() ) {
    log.error( 'Error', 'Commit message invalid' );
    errorsMap.forEach( printSingleError );
  }
}

/**
 * Adds the error message to the errorsMapMap.
 * @param {String}  validator  The name of the validator
 * @param {Integer} lineNo     The line number of the error
 * @param {String}  message    The error message
 */
function addError( validator, message ) {
  const tmpMsg = `Error[${validator}]: ${message}`;
  let msg = [];

  if ( errorsMap.has( validator ) ) {
    msg = getErrorsMapEntry( validator );
  }

  msg.push( tmpMsg );
  errorsMap.set( validator, msg );
}

module.exports = {
  addError,
  printErrors,
  hasErrors,

  // For testing
  clearErrorsMap,
  getErrorsMapEntry,
};