# sequency

> Functional sequences for processing iterable data in JavaScript

Latest version **0.20.0** (published 2022-03-06) · MIT license · 0 weekly downloads

## Install

```sh
npm install sequency
pnpm add sequency
yarn add sequency
bun add sequency
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.20.0 |
| Published | 2022-03-06 |
| First published | 2017-08-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=6.0.0 |
| Dependencies | 0 |
| Unpacked size | 385.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Benjamin Winterberg |
| Maintainers | winterbe |
| Keywords | functional, sequence, processing, lazy, iterable, iterator, array, map, set |

## Links

- npm: https://www.npmjs.com/package/sequency
- Repository: https://github.com/winterbe/sequency
- Homepage: https://winterbe.com
- Issues: https://github.com/winterbe/sequency/issues
- npm.io page: https://npm.io/package/sequency

## Alternatives

- [jsforce](https://npm.io/package/jsforce.md) — 851.2K weekly downloads
- [react-native-qrcode-svg](https://npm.io/package/react-native-qrcode-svg.md) — 693.5K weekly downloads
- [@salesforce/plugin-data](https://npm.io/package/@salesforce/plugin-data.md) — 394.9K weekly downloads
- [@backstage/plugin-search-common](https://npm.io/package/@backstage/plugin-search-common.md) — 308.5K weekly downloads
- [@chain-registry/types](https://npm.io/package/@chain-registry/types.md) — 38.4K weekly downloads

## Recent versions

- 0.20.0 (latest) — 2022-03-06
- 0.19.2 — 2018-07-31
- 0.19.1 — 2018-07-31
- 0.19.0 — 2018-07-30
- 0.18.0 — 2017-11-20
- 0.17.0 — 2017-10-18
- 0.16.0 — 2017-10-17
- 0.15.0 — 2017-10-16
- 0.14.0 — 2017-09-28
- 0.13.0 — 2017-09-22
- 0.12.0 — 2017-09-19
- 0.11.0 — 2017-09-13
- 0.10.0 — 2017-09-07
- 0.9.0 — 2017-08-31
- 0.8.0 — 2017-08-28
- … 3 more at https://npm.io/package/sequency/versions

## README

# ![Sequencey](/sequency.png) [![Travic CI](https://travis-ci.org/winterbe/sequency.svg?branch=master)](https://travis-ci.org/winterbe/sequency)

> Type-safe functional sequences for processing iterable data in TypeScript and JavaScript.

![Sequencey](/sequency.gif)

---

<p align="center">
<strong>★★★ Like this project? <a href="https://github.com/winterbe/sequency/stargazers">Leave a star</a>, <a href="https://twitter.com/winterbe_">follow on Twitter</a> or <a href="https://www.paypal.me/winterbe">donate</a> to support my work! Thanks. ★★★</strong>
</p>

## About Sequency

Sequency is a lightweight (**5 KB minified**), intensely tested (**200+ tests, 99% coverage**), type-safe functional programming library for processing iterable data such as arrays, sets and maps. It's written in TypeScript, compiles to ES5-compatible JavaScript and works in all current browsers and Node applications. The API is inspired by [Sequences](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/-sequence/) from the programming language [Kotlin](https://kotlinlang.org/).

> Not convinced? [Try Sequency](https://npm.runkit.com/sequency) right in your browser.

## Getting started

Download the [latest release](https://github.com/winterbe/sequency/releases) from GitHub or install Sequency from [NPM](https://www.npmjs.com/package/sequency):

```bash
npm install --save sequency
```

Alternatively use Sequency from [CDN](https://unpkg.com/sequency/) by adding this to your HTML:

```html
<script src="https://unpkg.com/sequency"></script>
```

## How Sequency works

Sequency is centered around a single class called `Sequence` to process any kind of iterable data such as arrays, sets or maps. The API is inspired by [Kotlin](https://kotlinlang.org/) [Sequences](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/-sequence/index.html). 

Sequences can be created by utilizing one of the following functions:

```js
import {
    asSequence,
    sequenceOf, 
    emptySequence, 
    range,
    generateSequence,
    extendSequence
} from 'sequency';
```

- `sequenceOf` accepts one or many values and returns a new sequence.
- `asSequence` accepts an iterable (e.g. an array, set or map) and returns a new sequence.
- `emptySequence` returns a new empty sequence.
- `range` returns as number sequence consisting of all numbers between `startInclusive` and `endExclusive`.
- `generateSequence` returns a sequence generated from the given generator function.
- `extendSequence` allows extending sequences with user-defined operations (see [example](https://github.com/winterbe/sequency/blob/ac3dbb0f212bb08783d970472c7a76dc921b60ba/test/extendSequence.test.ts)).

Each `Sequence` provides a fluent functional API consisting of intermediate and terminal operations. Intermediate functions (e.g. `filter`, `map`, `sorted`) return a new sequence, thus enabling method chaining. Terminal functions (e.g. `toArray`, `groupBy`, `findLast`) return an arbitrary result. Detailed descriptions of all operations are available in the [API docs](https://winterbe.github.io/sequency/).

Sequences are **lazily evaluated** to avoid examining all of the input data when it's not necessary. Sequences always perform the minimal amount of operations to gain results. E.g. in a `filter - map - find` sequence both `map` and `find` are executed just one time before returning the single result.

## [API documentation](https://winterbe.github.io/sequency/interfaces/_sequence_.sequence.html)

Sequency is fully documented via inline JSDoc comments. [The docs are also available online](https://winterbe.github.io/sequency/interfaces/_sequence_.sequence.html). When using an IDE like Intellij IDEA or Webstorm the docs are available inline right inside your editor.

## Why Sequency?

I've built Sequency because I'm using Kotlin for server-side code but for some reasons still use TypeScript and JavaScript for client-side browser code. I find that using the same APIs for collection processing both on client and server is a huge gain in productivity for me.

## License

MIT © [Benjamin Winterberg](https://twitter.com/winterbe_)

---
_Source: https://npm.io/package/sequency · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
