Source: emitters/AdvancedEvent.js

'use strict';

/**
 * @module emitters/AdvancedEvent
 */

/**
 * Defines an AdvancedEvent to work with an AdvancedEmitter.
 *
 * It duplicates the name argument to have twice the event's name
 * as first and second arguments.
 *
 * @class AdvancedEvent
 * @constructor
 * @param {String} name The event's name
 * @param {...*} [args] Any number of arguments
 */
function AdvancedEvent() {

  // Transform arguments into an array
  var args = Array.prototype.slice.call(arguments);

  // Duplicate "name" argument to have twice the event's name
  // as first and second arguments
  args.unshift(arguments[0]);

  Object.defineProperties(this,

    /** @lends module:emitters/AdvancedEvent~AdvancedEvent */
    {

      /**
       * The list of event's arguments.
       *
       * @type {Array}
       * @instance
       * @readonly
       */
      arguments: {value: args}

    }

  );
}

module.exports = AdvancedEvent;