Source: operators/distinct/distinct.js

const reusable = require("../../helpers/reusable/reusable");

/**
 * An operator that only returns values from the source iterable once
 * @function distinct
 * @template T
 * @type Operator<T, T>
 * @param source the source iterable
 */
function* distinct(source) {
    let previousValues = new Set();
    for (const value of source) {
        if (!previousValues.has(value)) {
            previousValues.add(value);
            yield value;
        }
    }
};

module.exports = reusable(distinct);