1 | ;
|
2 |
|
3 | var 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 | */
|
30 | module.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 | };
|