code: function takeUntil(predicate) {
      return function* (iterable) {
          let i = 0;
          for (const item of iterable) {
              if (predicate(item, i)) {
                  return;
              }
              yield item;
              i = i + 1;
          }
      };
  }
docs: Take and yield items in an iterable until the passed predicate passes, then abort the sequence