New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

indexed-iterable

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

indexed-iterable

An implementation of an iterable wrapper which implements caching and indexing of other iterables (such as generators) to make them array-like and re-usable.

latest
Source
npmnpm
Version
1.0.2
Version published
Weekly downloads
1
Maintainers
1
Weekly downloads
 
Created
Source

indexed-iterable

A suite of iterable wrappers which implement caching and indexing of other iterables (such as generators) to make them re-usable and multi-consumable.

Provided are four classes:

  • CachedAsyncIterable - Implements an async wrapper around sync and async iterators with caching, allowing multiple consumers to iterate over the same data set.
  • CachedIterable - Implements a wrapper around sync iterators with caching, allowing multiple consumers to iterate over the same data set.
  • CachedMap - Extends CachedIterable with a complete JavaScript Map implementation.
  • IndexedIterable - Extends CachedIterable with an Array-like implementation.

Could you do a new Map(someKeyValues) or Array.from(someIterable)? Sure you could, but you would incur a performance hit since the iterable would have to be fully-consumed, blocking the event loop. With caching these class-wrappers, the iterable can be depleted as values are called-for/yielded and cached on-the-fly, allowing other asynchronous callers of the same class instance access to the values in the cache. This means the calling code is able to continue processing in-between turns of the iteration, without depleting the values or blocking other code.

Usage

Install from npm and then:

import { IndexedIterable } from 'indexed-iterable'

function * helloWorld () {
  for (let i = 0; i < 10; i++) yield { hello: 'world' }
}

const helloWorldIterable = new IndexedIterable(helloWorld())

for (const [index, value] of helloWorldIterable.entries()) {
  console.log(value)

  if (index === 3) {
    // Arbitrarily try iterating in reverse in the middle of iterating.
    for (let i = index; i > -1; i--) {
      console.log(helloWorldIterable[i])
    }
  }

  if (index === 5) {
    // Arbitrarily try iterating fast-forward in the middle of iterating.
    for (let i = index; i < 8; i++) {
      console.log(helloWorldIterable[i])
    }
  }
}

For more examples, take a look at the tests, which cover many scenarios and fully cover the code.

Keywords

iterator

FAQs

Package last updated on 15 Apr 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts