Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/joeltg/ziterable
Generic, variadic, iterable zip
https://github.com/joeltg/ziterable
functional-programming iterable iterator typescript zip
Last synced: 3 months ago
JSON representation
Generic, variadic, iterable zip
- Host: GitHub
- URL: https://github.com/joeltg/ziterable
- Owner: joeltg
- License: mit
- Created: 2020-11-13T01:37:21.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-08-26T16:53:07.000Z (over 3 years ago)
- Last Synced: 2024-02-04T19:01:43.175Z (11 months ago)
- Topics: functional-programming, iterable, iterator, typescript, zip
- Language: TypeScript
- Homepage:
- Size: 18.6 KB
- Stars: 2
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ziterable
[![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg)](https://github.com/RichardLitt/standard-readme) [![license](https://img.shields.io/github/license/joeltg/ziterable)](https://opensource.org/licenses/MIT) [![NPM version](https://img.shields.io/npm/v/big-varint)](https://www.npmjs.com/package/ziterable) ![TypeScript types](https://img.shields.io/npm/types/ziterable) ![lines of code](https://img.shields.io/tokei/lines/github/joeltg/ziterable)
Generic, variadic, iterable zip.
Sometimes you want to iterate over several ES6 Iterables at once, but writing your own `zip` function can be annoying and it's hard to get it to work with TypeScript well. `ziterable` is a tiny package that does exactly this so that you don't have to think about it.
The source code is 25 lines of code and the package has no dependencies. You need TypeScript 4.0+ and `downlevelIteration` must be enabled if your target is ES5 or earlier.
## Table of Contents
- [Install](#install)
- [Usage](#usage)
- [Contributing](#contributing)
- [License](#license)## Install
```
npm i ziterable
```## Usage
`ziterable` default exports a function `zip` that takes as many Iterables as you want to pass it, and it returns an iterable of tuples that are typed like you'd hope. The iterable that `zip` returns yields iterators that terminate when the **first** of its component iterators terminates.
For example, if you pass `zip` three arguments of type `Iterable`, `Iterable`, and `Iterable`, it will return an iterable of type `Iterable<[string, number, boolean, number]>`. The last tuple slot is the iteration index.
```typescript
import zip from "ziterable"const A = [4, 5, 1, 9]
const B = ["foo", "bar", "baz"]
const C = [true, true, false]const print = (a: number, b: string, c: boolean) =>
console.log(a, b, c)for (const [a, b, c, i] of zip(A, B, C)) {
console.log("index", i)
print(a, b, c)
}
```## Contributing
PRs accepted!
## License
MIT © 2020 Joel Gustafson