Skip items in an iterable until the passed predicate matches, then yioeld all items in the iterable
function skipUntil(predicate) {
    return function* (iterable) {
        let i = 0;
        let canReturn = false;
        for (const item of iterable) {
            if (!canReturn) {
                canReturn = predicate(item, i);
                if (canReturn) {
                    yield item;
                }
                i = i + 1;
            }
            else {
                yield item;
            }
        }
    };
}