UNPKG

1.16 kBJavaScriptView Raw
1'use strict';
2
3var isFunction = require('./function'),
4 isUndefined = require('./undefined'),
5 handleCurry = require('./utils/handleCurry');
6
7/**
8 * Checks whether a value is undefined or satisfies given predicate
9 * Very useful to check optional arguments of function.
10 *
11 * @function undefinedOr
12 *
13 * @example
14 * var is = require('predicates');
15 *
16 * var isUndefinedOrString = is.undefinedOr(is.string);
17 *
18 * isUndefinedOrString(undefined); // true
19 * isUndefinedOrString('test'); // true
20 * // same as
21 * is.undefinedOr(is.string, undefined); // true
22 * is.undefinedOr(is.string, 'test'); // true
23 *
24 * isUndefinedOrString({}); // false
25 *
26 * @param {Predicate} predicate
27 * @param {*} [value]
28 * @returns {(Boolean|Predicate)} returns bool if more than 1 argument provided, otherwise a predicate
29 */
30module.exports = function isUndefinedOrSatisfiesPredicate(predicate) {
31 if (!isFunction(predicate)) {
32 throw new TypeError('Predicate must be a function');
33 }
34
35 return handleCurry.call(this, arguments, function isUndefinedOrSatisfiedPredicate(value) {
36 return isUndefined(value) || predicate.apply(this, arguments);
37 });
38};