UNPKG

1.31 kBJavaScriptView Raw
1'use strict';
2
3var 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 */
31module.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};