1 | ;
|
2 |
|
3 | var isArray = require('./array'),
|
4 | isFunction = require('./function'),
|
5 | handleCurry = require('./utils/handleCurry');
|
6 |
|
7 | /**
|
8 | * Checks whether every element of an array passes the predicate
|
9 | *
|
10 | * **Aliases** _arrOf_
|
11 | *
|
12 | * @function arrayOf
|
13 | *
|
14 | * @example
|
15 | * var is = require('predicates');
|
16 | *
|
17 | * var isArrayOfStrings = is.arrayOf(is.string);
|
18 | *
|
19 | * isArrayOfStrings(['1', '2']); // true
|
20 | * // same as
|
21 | * is.arrayOf(is.string, ['1', '2']); // true
|
22 | *
|
23 | * isArrayOfStrings([1, 2]); // false
|
24 | *
|
25 | * @param {Predicate} predicate
|
26 | * @param {Array} [value]
|
27 | * @param {...*} [additionalArgs] additional arguments passed to the predicate
|
28 | * @throws {TypeError} if predicate is not a function
|
29 | * @returns {(Boolean|Predicate)} returns bool if at least two arguments provided, otherwise a predicate
|
30 | */
|
31 | module.exports = function isArrayOf(predicate) {
|
32 | if (!isFunction(predicate)) {
|
33 | throw new TypeError('Predicate must be a function');
|
34 | }
|
35 | return handleCurry.call(this, arguments, function isArrayOfPredicate(value) {
|
36 | var additionalArgs = Array.prototype.slice.call(arguments, 1);
|
37 | return isArray(value) && value.every(function isArrayOfPredicateTestingArrayItem(value) {
|
38 | return predicate.apply(this, [value].concat(additionalArgs));
|
39 | }, this);
|
40 | });
|
41 | };
|