UNPKG

serverless-spy

Version:

CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.

322 lines (222 loc) 6.44 kB
[![Build Status](https://travis-ci.org/Yomguithereal/obliterator.svg)](https://travis-ci.org/Yomguithereal/obliterator) # Obliterator Obliterator is a dead simple JavaScript/TypeScript library providing miscellaneous higher-order iterator functions such as combining two or more iterators into a single one. # Installation ``` npm install --save obliterator ``` Note `obliterator` comes along with its TypeScript declarations. # Usage ## Summary *Classes* * [Iterator](#iterator) *Functions* * [chain](#chain) * [combinations](#combinations) * [consume](#consume) * [filter](#filter) * [forEach](#foreach) * [map](#map) * [match](#match) * [permutations](#permutations) * [powerSet](#powerSet) * [split](#split) * [take](#take) ## Iterator A handy Iterator class with safeguards and usable with ES2015's `for ... of` loop constructs & spread operator. ```js import Iterator from 'obliterator/iterator'; // Or import {Iterator} from 'obliterator'; const iterator = new Iterator(function() { // Define what the `next` function does }); // Checking that the given value is an iterator (native or else) Iterator.is(value); // Creating an empty iterator const emptyIterator = Iterator.empty(); // Creating a simple iterator from a single value const simpleIterator = Iterator.of(34); // Creating a simple iterator from multiple values const multipleIterator = Iterator.of(1, 2, 3); ``` ## chain Variadic function chaining all the given iterators. ```js import chain from 'obliterator/chain'; // Or import {chain} from 'obliterator'; const set1 = new Set('a'); const set2 = new Set('bc'); const chained = chain(set1.values(), set2.values()); chained.next(); >>> {done: false, value: 'a'} chained.next(); >>> {done: false, value: 'b'} ``` ## combinations Returns an iterator of combinations of the given array and of the given size. Note that for performance reasons, the yielded combination is always the same object. ```js import combinations from 'obliterator/combinations'; // Or import {combinations} from 'obliterator'; const iterator = combinations(['A', 'B', 'C', 'D'], 2); iterator.next().value; >>> ['A', 'B'] iterator.next().value; >>> ['A', 'C'] ``` ## consume Function consuming the given iterator fully or for n steps. ```js import consume from 'obliterator/consume'; // Or import {consume} from 'obliterator'; const set = new Set([1, 2, 3]); // Consuming the whole iterator let iterator = set.values(); consume(iterator); iterator.next().done >>> true // Consuming n steps let iterator = set.values(); consume(iterator, 2); iterator.next().value >>> 3 ``` ## filter Function returning an iterator filtering another one's values using the given predicate. ```js import filter from 'obliterator/filter'; // Or import {filter} from 'obliterator'; const set = new Set([1, 2, 3, 4, 5]); const even = x => x % 2 === 0; const iterator = filter(even, set.values()); iterator.next().value >>> 2 iterator.next().value >>> 4 ``` ## forEach Function able to iterate over almost any JavaScript iterable value using a callback. Supported values range from arrays, typed arrays, sets, maps, objects, strings, arguments, iterators, arbitrary iterables etc. ```js import forEach from 'obliterator/foreach'; // Or import {forEach} from 'obliterator'; const set = new Set(['apple', 'banana']); forEach(set.values(), (value, i) => { console.log(i, value); }); // Iterating over a string forEach('abc', (char, i) => ...); // Iterating over a map forEach(map, (value, key) => ...); ``` Optionally, one can use the `forEachWithNullKeys` function to iterate over mixed values but with the twist that iterables without proper keys (lists, sets etc.), will yield `null` instead of an index key. ```js import {forEachWithNullKeys} from 'obliterator/foreach'; const set = new Set(['apple', 'banana']); forEach(set, (value, key) => { console.log(key, value); }); >>> null, 'apple' >>> null, 'banana' ``` ## map Function returning an iterator mapping another one's values using the given function. ```js import map from 'obliterator/map'; // Or import {map} from 'obliterator'; const set = new Set([1, 2, 3, 4, 5]); const triple = x => x * 3; const iterator = map(triple, set.values()); iterator.next().value >>> 3 iterator.next().value >>> 6 ``` ## match Function returning an iterator over the matches of a given regex applied to the target string. ```js import match from 'obliterator/match'; // Or import {match} from 'obliterator'; const iterator = match(/t/, 'test'); iterator.next().value.index >>> 0 iterator.next().value.index >>> 3 ``` ## permutations Returns an iterator of permutations of the given array and of the given size. Note that for performance reasons, the yielded permutation is always the same object. ```js import permutations from 'obliterator/permutations'; // Or import {permutations} from 'obliterator'; let iterator = permutations([1, 2, 3]); iterator.next().value >>> [1, 2, 3] iterator.next().value >>> [1, 3, 2] iterator = permutations(['A', 'B', 'C', 'D'], 2); iterator.next().value; >>> ['A', 'B'] iterator.next().value; >>> ['A', 'C'] ``` ## powerSet Returns an iterator of sets composing the power set of the given array. ```js import powerSet from 'obliterator/power-set'; // Or import {powerSet} from 'obliterator'; const iterator = powerSet(['A', 'B', 'C']); iterator.next().value; >>> [] iterator.next().value; >>> ['A'] ``` ## split Returns an iterator over the splits of the target string, according to the given RegExp pattern. ```js import split from 'obliterator/split'; // Or import {split} from 'obliterator'; const iterator = split(/;/g, 'hello;world;super'); iterator.next().value; >>> 'hello' iterator.next().value; >>> 'world' ``` ## take Function taking values from given iterator and returning them in an array. ```js import take from 'obliterator/take'; // Or import {take} from 'obliterator'; const set = new Set([1, 2, 3]); // To take n values from the iterator take(set.values(), 2); >>> [1, 2] // To convert the full iterator into an array take(set.values()); >>> [1, 2, 3] ``` # Contribution Contributions are obviously welcome. Please be sure to lint the code & add the relevant unit tests before submitting any PR. ``` git clone git@github.com:Yomguithereal/obliterator.git cd obliterator npm install # To lint the code npm run lint # To run the unit tests npm test ``` # License [MIT](LICENSE.txt)