Skip to content
This repository has been archived by the owner on Apr 10, 2024. It is now read-only.

hugoalh-studio/range-iterator-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

46 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Range Iterator (JavaScript)

βš–οΈ MIT

πŸ—‚οΈ GitHub: hugoalh-studio/range-iterator-js NPM: @hugoalh/range-iterator

πŸ†™ Latest Release Version (Latest Release Date)

A JavaScript module to iterate between range.

🎯 Target

  • Bun ^ v1.0.0
  • Cloudflare Workers
  • Deno >= v1.34.0

    πŸ›‘οΈ Require Permission

    N/A

  • NodeJS >= v16.13.0

πŸ”— Other Edition

πŸ”° Usage

Via Installation

🎯 Supported Target

  • Cloudflare Workers
  • NodeJS
  1. Install via console/shell/terminal:
    • Via NPM
      npm install @hugoalh/range-iterator[@<Tag>]
    • Via PNPM
      pnpm add @hugoalh/range-iterator[@<Tag>]
    • Via Yarn
      yarn add @hugoalh/range-iterator[@<Tag>]
  2. Import at the script (<ScriptName>.js):
    import ... from "@hugoalh/range-iterator";

    ℹ️ Note

    Although it is recommended to import the entire module, it is also able to import part of the module with sub path if available, please visit file package.json property exports for available sub paths.

Via NPM Specifier

🎯 Supported Target

  • Bun
  • Deno
  1. Import at the script (<ScriptName>.js):
    import ... from "npm:@hugoalh/range-iterator[@<Tag>]";

    ℹ️ Note

    Although it is recommended to import the entire module, it is also able to import part of the module with sub path if available, please visit file package.json property exports for available sub paths.

🧩 API

  • function rangeIterator(start: bigint, end: bigint, step?: RangeIteratorOptions<bigint>["step"]): Generator<bigint>;
    function rangeIterator(start: number, end: number, step?: RangeIteratorOptions<number>["step"]): Generator<number>;
    function rangeIterator(start: string, end: string, step?: RangeIteratorOptions<string>["step"]): Generator<string>;
    function rangeIterator(start: bigint, end: bigint, options?: RangeIteratorOptions<bigint>): Generator<bigint>;
    function rangeIterator(start: number, end: number, options?: RangeIteratorOptions<number>): Generator<number>;
    function rangeIterator(start: string, end: string, options?: RangeIteratorOptions<string>): Generator<string>;
  • interface RangeIteratorOptions<T extends RangeIteratorAcceptType> {
      /**
      * Whether to exclusive end.
      * @default false
      */
      endExclusive?: boolean;
      /**
      * Step of the decrement/increment of the iterate.
      * @default 1n // Big integer.
      * @default 1 // Number/String.
      */
      step?: RangeIteratorIndexType<T>;
    }
  • type RangeIteratorAcceptType = bigint | number | string;
  • type RangeIteratorIndexType<T extends RangeIteratorAcceptType> = T extends bigint ? bigint : number;

✍️ Example

  • Array.from(rangeIterator(1, 9));
    //=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • Array.from(rangeIterator(1n, 9n, { endExclusive: true }));
    //=> [1n, 2n, 3n, 4n, 5n, 6n, 7n, 8n]
  • Array.from(rangeIterator(1, 9, { step: 0.5 }));
    //=> [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9]
  • Array.from(rangeIterator("a", "z"));
    //=> ["a", "b", "c", ... +20 ..., "x", "y", "z"]
  • Array.from(rangeIterator(9, 1));
    //=> [9, 8, 7, 6, 5, 4, 3, 2, 1]
  • Array.from(rangeIterator(9n, 1n, { endExclusive: true }));
    //=> [9n, 8n, 7n, 6n, 5n, 4n, 3n, 2n]
  • Array.from(rangeIterator(9, 1, { step: 0.5 }));
    //=> [9, 8.5, 8, 7.5, 7, 6.5, 6, 5.5, 5, 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1]
  • Array.from(rangeIterator("z", "a"));
    //=> ["z", "y", "x", ... +20 ..., "c", "b", "a"]