import { Build } from "./utils";

declare global {
  interface Generator<T = unknown, TReturn = any, TNext = unknown> {
    reverse(): Generator<T, TReturn, TNext>;
  }

  interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> {
    reverse(): AsyncGenerator<T, TReturn, TNext>;
  }
}

Build(
  "reverse",
  function* () {
    const array = this.array();
    for (let i = array.length - 1; i >= 0; i--) {
      yield array[i];
    }
  },
  async function* () {
    const array = await this.array();
    for (let i = array.length - 1; i >= 0; i--) {
      yield array[i];
    }
  }
);
