
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
@zzzzbov/gen
Advanced tools
@zzzzbov/gen is a package of generator utility functions to make working with collections easier. It is specifically designed to be used with the proposed pipeline operator (|>). If the pipeline operator isn't available, gen includes a pipe function which can be used instead.
npm i @zzzzbov/gen
allanyappendconcatcountfilterintegersmapmapManypipeprependreduceskipskipWhilesplicetaketakeWhileuniqueallgen.all([test(value, index)])(iterator)
const {all} = require('@zzzzbov/gen')
// or
const all = require('@zzzzbov/gen/all')
The all function takes an optional test function as a parameter and produces a new function. The new function accepts an iterator as a parameter and returns true if every member of iterator passes the test and false if any member of iterator does not pass the test.
const all = require('@zzzzbov/gen/all')
const odd = n => n % 2
const example1 = [1, 2, 3] |> all(odd) // false
const example2 = [1, 3, 5] |> all(odd) // true
If no test is passed, a false function is used (_ => false). This allows all to be used to check for empty collections in parity with any.
const all = require('@zzzzbov/gen/all')
const example1 = [] |> all() // true
const example2 = [1, 2, 3] |> all() // false
anygen.any([test(value, index)])(iterator)
const {any} = require('@zzzzbov/gen')
// or
const any = require('@zzzzbov/gen/any')
The any function takes an optional test function as a parameter and produces a new function. The new function accepts an iterator as a parameter and returns true if any member of iterator passes the test and false if every member of iterator fails the test.
const any = require('@zzzzbov/gen/any')
const odd = n => n % 2
const example1 = [1, 2, 3] |> any(odd) // true
const example2 = [2, 4, 6] |> any(odd) // false
If no test is passed, a true function is used (_ => true). This allows any to be used to check if the collection is empty.
const any = require('@zzzzbov/gen/any')
const example1 = [] |> any() // false
const example2 = [1, 2, 3] |> any() // true
appendgen.append(...items)(iterator)
const {append} = require('@zzzzbov/gen')
// or
const append = require('@zzzzbov/gen/append')
The append function takes a collection of items as parameters and produces a new generator function. The new function accepts an iterator as a parameter and yields the entire iterator followed by all the items.
const append = require('@zzzzbov/gen/append')
const example = [1, 2, 3] |> append(4, 5, 6)
;[...example] // [1, 2, 3, 4, 5, 6]
concatgen.concat(...collections)(iterator)
const {concat} = require('@zzzzbov/gen')
// or
const concat = require('@zzzzbov/gen/concat')
The concat function takes a collection of collection as parameters and produces a new generator function. The new function accepts an iterator as a parameter and yields the entire iterator followed by the contents of each of the collections.
const concat = require('@zzzzbov/gen/concat')
const example = [1, 2, 3] |> concat([4, 5, 6], [7, 8, 9])
;[...example] // [1, 2, 3, 4, 5, 6, 7, 8, 9]
countgen.count(iterator)
const {count} = require('@zzzzbov/gen')
// or
const count = require('@zzzzbov/gen/count')
The count function takes an iterator as a parameter and returns the count of how many items are contained in the iterator.
const count = require('@zzzzbov/gen/count')
;[1, 2, 3] |> count // 3
filtergen.filter(test(value, index))(iterator)
The filter function takes a test function as a parameter and produces a new generator function. The new function accepts an iterator as a parameter and yields every item in the iterator that passes the test.
const filter = require('@zzzzbov/gen/filter')
const odd = n => n % 2
const example = [1, 2, 3] |> filter(odd)
;[...example] // [1, 3]
integersgen.integers([start], [end])
const {integers} = require('@zzzzbov/gen')
// or
const integers = require('@zzzzbov/gen/integers')
The integers generator function takes optional start and end parameters. integers yields the integers from start to end inclusive.
const integers = require('@zzzzbov/gen/integers')
const example = integers(1, 5)
;[...example] // [1, 2, 3, 4, 5]
start defaults to 0
end defaults to Number.MAX_SAFE_INTEGER
Given that Number.MAX_SAFE_INTEGER is exceptionally large, iterating over integers without an explicit end may result in an, effectively, endless loop.
For generating a specific number of integers, pair the integers function with the take function:
const {integers, take} = require('@zzzzbov/gen')
const example = integers() |> take(5)
;[...example] // [0, 1, 2, 3, 4]
mapgen.map(transform(value, index))(iterator)
const {map} = require('@zzzzbov/gen')
// or
const map = require('@zzzzbov/gen/map')
The map function takes a transform function as a parameter and produces a new generator function. The new function accepts an iterator as a parameter and yields each item produced by the transform.
const map = require('@zzzzbov/gen/map')
const double = n => n * 2
const example = [1, 2, 3] |> map(double)
;[...example] // [2, 4, 6]
mapManygen.mapMany(transform(value, index))(iterator)
const {mapMany} = require('@zzzzbov/gen')
// or
const mapMany = require('@zzzzbov/gen/mapMany')
The mapMany function takes a transform function as a parameter and produces a new generator function. The new function accepts an iterator as a parameter and yields each item in each collection produced by the transform.
const mapMany = require('@zzzzbov/gen/mapMany')
const pair = n => [n, -n]
const example = [1, 2, 3] |> mapMany(pair)
;[...example] // [1, -1, 2, -2, 3, -3]
pipegen.pipe(input, ...functions)
const {pipe} = require('@zzzzbov/gen')
// or
const pipe = require('@zzzzbov/gen/pipe')
The pipe function is a utility to act as a stand-in for the pipe operator (|>).
The pipe function takes an input value and a collection of functions and produces the resultant value of passing the output of each function as the input of the subsequent function.
const pipe = require('@zzzzbov/gen/pipe')
const addOne = n => n + 1
const double = n => n * 2
const example = pipe(
5,
addOne,
double
) // 12
prependgen.prepend(...items)(iterator)
const {prepend} = require('@zzzzbov/gen')
// or
const prepend = require('@zzzzbov/gen/prepend')
The prepend function takes a collection of items as parameters and produces a new generator function. The new function accepts an iterator as a parameter and yields the items followed by the iterator.
const prepend = require('@zzzzbov/gen/prepend')
const example = [4, 5, 6] |> prepend(1, 2, 3)
;[...example] // [1, 2, 3, 4, 5, 6]
reducegen.reduce(reducer(reduction, value, index), initial)(iterator)
The reduce function takes a reducer function and initial value as parameters and produces a new function. The new function accepts an iterator as a parameter and returns the resultant reduction after having passed each value through the reducer along with the output from the previous value.
const reduce = require('@zzzzbov/gen/reduce')
const add = (a, b) => a + b
const example = [1, 2, 3] |> reduce(add, 0) // 6
skipgen.skip(count)(iterator)
const {skip} = require('@zzzzbov/gen')
// or
const skip = require('@zzzzbov/gen/skip')
The skip function takes a count parameter and produces a new generator function. The new function accepts an iterator as a parameter and skips the first count items in the iterator before yielding the rest of the items in iterator.
const skip = require('@zzzzbov/gen/skip')
const example = [1, 2, 3, 4, 5] |> skip(2)
;[...example] // [3, 4, 5]
skipWhilegen.skipWhile(test(value, index))(iterator)
const {skipWhile} = require('@zzzzbov/gen')
// or
const skipWhile = require('@zzzzbov/gen/skipWhile')
The skipWhile function takes a test function as a parameter and produces a new generator function. The new function accepts an iterator as a parameter and skips items in the iterator until the test is failed.
const skipWhile = require('@zzzzbov/gen/skipWhile')
const lessThanThree = n => n < 3
const example = [1, 2, 3, 4, 5] |> skipWhile(lessThanThree)
;[...example] // [3, 4, 5]
splicegen.splice(start, deleteCount, ...items)(iterator)
const {splice} = require('@zzzzbov/gen')
// or
const splice = require('@zzzzbov/gen/splice')
The splice function takes a start index, deleteCount, and optional additional items as parameters and produces a new generator function. The new function accepts an iterator as a parameter and splices in any new items at the start index. The generator will then skip over the number of items specified by deleteCount before yielding the rest of the collection from the iterator.
const splice = require('@zzzzbov/gen/splice')
const example = [1, 2, 3] |> splice(1, 1, 2.1, 2.2, 2.3)
;[...example] // [1, 2.1, 2.2, 2.3, 3]
takegen.take(count)(iterator)
const {take} = require('@zzzzbov/gen')
// or
const take = require('@zzzzbov/gen/take')
The take function takes a count parameter and produces a new generator function. The new function accepts an iterator as a parameter and yields the first count items in the iterator.
const take = require('@zzzzbov/gen/take')
const example = [1, 2, 3, 4, 5] |> take(3)
;[...example] // [1, 2, 3]
takeWhilegen.takeWhile(test(value, index))(iterator)
const {takeWhile} = require('@zzzzbov/gen')
// or
const takeWhile = require('@zzzzbov/gen/takeWhile')
The takeWhile function takes a test function as a parameter and produces a new generator function. The new function accepts an iterator as a parameter and yields items in the iterator until the test is failed.
const takeWhile = require('@zzzzbov/gen/takeWhile')
const lessThanThree = n => n < 3
const example = [1, 2, 3, 4, 5] |> takeWhile(lessThanThree)
;[...example] // [1, 2]
uniquegen.unique(iterator)
const {unique} = require('@zzzzbov/gen')
// or
const unique = require('@zzzzbov/gen/unique')
The unique generator function takes an iterator and yields each unique value in the order they appear in the iterator.
const unique = require('@zzzzbov/gen/unique')
const example = [1, 2, 1, 3, 1] |> unique
;[...example] // [1, 2, 3]
FAQs
@zzzzbov/gen is a package of generator utility functions.
We found that @zzzzbov/gen demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

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.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.