UNPKG

1.37 kBJavaScriptView Raw
1'use strict';
2
3var isObject = require('./object'),
4 isFunction = require('./function'),
5 handleCurry = require('./utils/handleCurry');
6
7/**
8 * Checks whether every enumerable property of object satisfies a predicate
9 *
10 * **Aliases** _objOf_
11 *
12 * @function objectOf
13 *
14 * @example
15 * var is = require('predicates');
16 *
17 * var isObjectOfStrings = is.objectOf(is.string);
18 *
19 * isObjectOfStrings({key: 'value', key1: 'value'}); // true
20 * // same as
21 * is.objectOf(is.string, {key: 'value', key1: 'value'}); // true
22 *
23 * isObjectOfStrings({key: 1, key1: 'value'}); // false
24 *
25 * @param {Predicate} predicate
26 * @param {Object} [object]
27 * @param {...*} [additionalArgs] additional arguments passed to the predicate
28 * @returns {(Boolean|Predicate)} returns bool if at least two arguments provided, otherwise a predicate
29 */
30module.exports = function isObjectOf(predicate) {
31 if (!isFunction(predicate)) {
32 throw new TypeError('Predicate must be a function');
33 }
34
35 return handleCurry.call(this, arguments, function isObjectOfPredicate(object) {
36 var args = Array.prototype.slice.call(arguments, 1);
37 return isObject(object) && Object
38 .keys(object)
39 .every(function isObjectOfPredicateTestingProperty(key) {
40 return predicate.apply(this, [object[key]].concat(args));
41 }, this);
42 });
43};