Value which implements iterable protocol
iterable/is
Confirms if given object is an iterable and is not a string (unless allowString
option is passed)
```javascript const isIterable = require("type/iterable/is");
isIterable([]); // true isIterable({}); // false isIterable("foo"); // false isIterable("foo", { allowString: true }); // true ```
Supports also denyEmpty
option
javascript
isIterable([], { denyEmpty: true }); // false
isIterable(["foo"], { denyEmpty: true }); // true
iterable/ensure
If given argument is an iterable, it is returned back. Otherwise TypeError
is thrown.
By default string primitives are rejected unless allowString
option is passed.
```javascript const ensureIterable = require("type/iterable/ensure");
ensureIterable([]); // [] ensureIterable("foo", { allowString: true }); // "foo" ensureIterable({}); // Thrown TypeError: null is not expected iterable ```
Pass denyEmpty
option to require non empty iterables
javascript
ensureIterable([], { denyEmpty: true }); // Thrown TypeError: [] is not expected iterable
Items can be validated by passing ensureItem
option. Note that in this case:
```javascript const ensureString = require("type/string/ensure");
ensureIterable(new Set(["foo", 12]), { ensureItem: ensureString }); // ["foo", "12"]
/ Below invocation with crash with: TypeError: [object Set] is not expected iterable value. Following items are invalid: - [object Object] / ensureIterable(new Set(["foo", {}]), { ensureItem: ensureString }); ```