Source: Error/ArgumentsString.js

'use strict';

var Same = require('../Same.js');

/**
 * Converts arguments into a human readable string
 * @memberof Errors
 */
class ArgumentsString {
  /**
   * Default constructor
   * @param {Object[]} args Function arguments to stringify.
   */
  constructor(args) {
    this._string = this._convertArgsToString(args);
  }

  /**
   * Recursively converts arguments array into string.
   * @param {Object[]} args Function arguments to stringify
   * @returns {string} Function arguments as string.
   */
  _convertArgsToString(args) {
    var strings = [];

    for (var arg of args) {
      if (arg instanceof Same) {
        arg = arg.value;
      }

      if (typeof arg === 'string' || arg instanceof String) {
        strings.push('\'' + arg + '\'');
      }
      else if (arg instanceof Array) {
        strings.push('[' + this._convertArgsToString(arg) + ']');
      }
      else {
        strings.push(String(arg));
      }
    }

    return strings.join(', ');
  }

  /**
   * Returns arguments string.
   * @returns {string} Function arguments as string.
   */
  toString() {
    return this._string;
  }
}

module.exports = ArgumentsString;