https://github.com/projectfluent/cached-iterable
Iterables which cache the values they yield
https://github.com/projectfluent/cached-iterable
Last synced: 12 months ago
JSON representation
Iterables which cache the values they yield
- Host: GitHub
- URL: https://github.com/projectfluent/cached-iterable
- Owner: projectfluent
- Created: 2018-05-31T08:38:21.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-09-26T21:49:59.000Z (over 1 year ago)
- Last Synced: 2025-04-17T02:46:37.160Z (about 1 year ago)
- Language: JavaScript
- Size: 235 KB
- Stars: 6
- Watchers: 8
- Forks: 2
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# cached-iterable
`cached-iterable` exposes two classes which implement the [iterable
protocol][]:
- `CachedSyncIterable`,
- `CachedAsyncIterable`.
You can wrap any iterable in these classes to create a new iterable which
caches the yielded elements. This is useful for iterating over an iterable many
times without depleting it.
[iterable protocol]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol
## Installation
`cached-iterable` can be used both on the client-side and the server-side. You
can install it from the npm registry or use it as a standalone script (as the
`CachedIterable` global).
npm install cached-iterable
## How to use
```js
import assert from "assert";
import {CachedSyncIterable} from "cached-iterable";
function * countdown(i) {
while (i--) {
yield i;
}
}
let numbers = new CachedSyncIterable(countdown(3));
// `numbers` can be iterated over multiple times.
assert.deepEqual([...numbers], [3, 2, 1, 0]);
assert.deepEqual([...numbers], [3, 2, 1, 0]);
```
## Compatibility
For legacy browsers, the `compat` build has been transpiled using Babel's [env
preset][]. It requires the regenerator runtime provided by [babel-polyfill][].
```javascript
import {CachedSyncIterable} from 'cached-iterable/compat';
```
[env preset]: https://babeljs.io/docs/plugins/preset-env/
[babel-polyfill]: https://babeljs.io/docs/usage/polyfill/