"use strict";

var typeOf = require("@sinonjs/commons").typeOf;
var forEach = require("@sinonjs/commons").prototypes.array.forEach;

/**
 * This helper makes it convenient to create Set instances from a
 * collection, an overcomes the shortcoming that IE11 doesn't support
 * collection arguments
 *
 * @private
 * @param  {Array} array An array to create a set from
 * @returns {Set} A set (unique) containing the members from array
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
 */
function createSet(array) {
    if (arguments.length > 0 && !Array.isArray(array)) {
        throw new TypeError(
            "createSet can be called with either no arguments or an Array"
        );
    }

    var items = typeOf(array) === "array" ? array : [];
    var set = new Set();

    forEach(items, function (item) {
        set.add(item);
    });

    return set;
}

module.exports = createSet;
