UNPKG

50.2 kBJavaScriptView Raw
1!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.predicates=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2'use strict';
3
4exports.all = exports.and = require('./src/all');
5exports.any = exports.or = require('./src/any');
6exports.array = exports.arr = require('./src/array');
7exports.arrayLike = exports.arrLike = require('./src/arrayLike');
8exports.arrayOf = exports.arrOf = require('./src/arrayOf');
9exports.blank = require('./src/blank');
10exports.boolean = exports.bool = require('./src/boolean');
11exports.date = require('./src/date');
12exports.defined = require('./src/defined');
13exports.divisible = exports.divisibleBy = exports.divBy = require('./src/divisible');
14exports.divisibleWithRemainder = exports.divisibleByWithRemainder = exports.divByWithRemainder = require('./src/divisibleWithRemainder');
15exports.empty = require('./src/empty');
16exports.endsWith = require('./src/endsWith');
17exports.equal = exports.equalTo = exports.eq = require('./src/equal');
18exports.false = require('./src/false');
19exports.falsy = exports.falsey = require('./src/falsy');
20exports.finite = require('./src/finite');
21exports.function = exports.fn = exports.func = require('./src/function');
22exports.greaterThan = exports.greater = exports.gt = require('./src/greaterThan');
23exports.greaterThanOrEqual = exports.greaterOrEqual = exports.greaterEq = exports.gtEq = require('./src/greaterThanOrEqual');
24exports.hasOwnProperty = exports.hasOwn = require('./src/hasOwnProperty');
25exports.hasProperty = exports.has = require('./src/hasProperty');
26exports.in = require('./src/in');
27exports.instanceOf = exports.instance = require('./src/instanceOf');
28exports.integer = exports.int = require('./src/integer');
29exports.lessThan = exports.less = exports.lt = require('./src/lessThan');
30exports.lessThanOrEqual = exports.lessOrEqual = exports.lessEq = exports.ltEq = require('./src/lessThanOrEqual');
31exports.matches = exports.match = require('./src/matches');
32exports.notANumber = exports.nan = exports.NaN = require('./src/nan');
33exports.negative = require('./src/negative');
34exports.not = exports.negate = require('./src/not');
35exports.notBlank = require('./src/notBlank');
36exports.notEmpty = require('./src/notEmpty');
37exports.null = require('./src/null');
38exports.number = exports.num = require('./src/number');
39exports.object = exports.obj = require('./src/object');
40exports.objectOf = exports.objOf = require('./src/objectOf');
41exports.oneOf = require('./src/oneOf');
42exports.plainObject = require('./src/plainObject');
43exports.positive = require('./src/positive');
44exports.primitive = require('./src/primitive');
45exports.property = exports.prop = require('./src/property');
46exports.regexp = exports.regExp = require('./src/regexp');
47exports.startsWith = require('./src/startsWith');
48exports.strictEqual = exports.strictEqualTo = require('./src/strictEqual');
49exports.string = exports.str = require('./src/string');
50exports.structure = require('./src/structure');
51exports.true = require('./src/true');
52exports.truthy = require('./src/truthy');
53exports.undefined = require('./src/undefined');
54exports.undefinedOr = require('./src/undefinedOr');
55
56},{"./src/all":2,"./src/any":3,"./src/array":4,"./src/arrayLike":5,"./src/arrayOf":6,"./src/blank":7,"./src/boolean":8,"./src/date":9,"./src/defined":10,"./src/divisible":11,"./src/divisibleWithRemainder":12,"./src/empty":13,"./src/endsWith":14,"./src/equal":15,"./src/false":16,"./src/falsy":17,"./src/finite":18,"./src/function":21,"./src/greaterThan":22,"./src/greaterThanOrEqual":23,"./src/hasOwnProperty":24,"./src/hasProperty":25,"./src/in":26,"./src/instanceOf":27,"./src/integer":28,"./src/lessThan":31,"./src/lessThanOrEqual":32,"./src/matches":33,"./src/nan":34,"./src/negative":35,"./src/not":36,"./src/notBlank":37,"./src/notEmpty":38,"./src/null":39,"./src/number":40,"./src/object":41,"./src/objectOf":42,"./src/oneOf":43,"./src/plainObject":44,"./src/positive":45,"./src/primitive":46,"./src/property":47,"./src/regexp":48,"./src/startsWith":49,"./src/strictEqual":50,"./src/string":51,"./src/structure":52,"./src/true":53,"./src/truthy":54,"./src/undefined":55,"./src/undefinedOr":56}],2:[function(require,module,exports){
57'use strict';
58
59var assertPredicates = require('./utils/assertPredicates');
60
61/**
62 * Returns a function that calls predicates and returns true if all of them are satisfied, otherwise returns false
63 *
64 * **Aliases** _and_
65 *
66 * @function all
67 *
68 * @example
69 * var is = require('predicates');
70 * var isNumberGreaterThan10 = is.all(is.number, is.greaterThan(10));
71 *
72 * isNumberGreaterThan10(0); // false
73 * isNumberGreaterThan10(11); // true
74 * isNumberGreaterThan10('11'); // false
75 *
76 * @param {...Predicate} predicate
77 * @throws {TypeError} if not every predicate is a function
78 * @returns {Predicate}
79 */
80module.exports = function all() {
81 var predicates = Array.prototype.slice.call(arguments);
82 assertPredicates(predicates);
83
84 return function allPredicate() {
85 var args = Array.prototype.slice.call(arguments);
86 return predicates.every(function allPredicateTestingPredicate(predicate) {
87 return predicate.apply(this, args);
88 }, this);
89 };
90};
91
92},{"./utils/assertPredicates":57}],3:[function(require,module,exports){
93'use strict';
94
95var assertPredicates = require('./utils/assertPredicates');
96
97/**
98 * Returns a function that calls predicates in the order until one of them will be satisfied, otherwise returns false.
99 *
100 * **Aliases** _or_
101 *
102 * @function any
103 *
104 * @example
105 * var is = require('predicates');
106 *
107 * var isStringOrNumber = is.any(is.string, is.number);
108 *
109 * isStringOrNumber(0); // true
110 * isStringOrNumber('string'); // true
111 * isStringOrNumber(undefined); // false
112 *
113 * @param {...Predicate} predicate
114 * @throws {TypeError} if not every predicate is a function
115 * @returns {Predicate}
116 */
117module.exports = function any() {
118 var predicates = Array.prototype.slice.call(arguments);
119 assertPredicates(predicates);
120
121 return function anyPredicate() {
122 var args = Array.prototype.slice.call(arguments);
123 return predicates.some(function anyPredicateTestingPredicate(predicate) {
124 return predicate.apply(this, args);
125 }, this);
126 };
127};
128
129},{"./utils/assertPredicates":57}],4:[function(require,module,exports){
130'use strict';
131
132/**
133 * Checks whether a value is an array
134 *
135 * **Aliases** _arr_
136 *
137 * @function array
138 *
139 * @example
140 * var is = require('predicates');
141 *
142 * is.array([]); // true
143 * is.array({}); // false
144 *
145 * @param {*} value
146 * @returns {Boolean}
147 */
148module.exports = Array.isArray;
149
150},{}],5:[function(require,module,exports){
151'use strict';
152
153var isObject = require('./object'),
154 isNumber = require('./number');
155
156/**
157 * Checks whether a value looks like an array
158 * That means:
159 * * is an object
160 * * has 'length' property
161 * * 'length' property is a number greater or equal 0
162 *
163 * **Aliases** _arrLike_
164 *
165 * @function arrayLike
166 *
167 * @example
168 * var is = require('predicates');
169 *
170 * is.arrayLike(arguments); // true
171 * is.arrayLike(document.querySelectorAll('div')); // true
172 * is.arrayLike([1, 2, 3]); // true
173 * is.arrayLike({}); // false
174 *
175 * @param {*} value
176 * @returns {Boolean}
177 */
178module.exports = function isArrayLike(value) {
179 return isObject(value) && isNumber(value.length) && value.length >= 0;
180};
181
182},{"./number":40,"./object":41}],6:[function(require,module,exports){
183'use strict';
184
185var isArray = require('./array'),
186 isFunction = require('./function'),
187 handleCurry = require('./utils/handleCurry');
188
189/**
190 * Checks whether every element of an array passes the predicate
191 *
192 * **Aliases** _arrOf_
193 *
194 * @function arrayOf
195 *
196 * @example
197 * var is = require('predicates');
198 *
199 * var isArrayOfStrings = is.arrayOf(is.string);
200 *
201 * isArrayOfStrings(['1', '2']); // true
202 * // same as
203 * is.arrayOf(is.string, ['1', '2']); // true
204 *
205 * isArrayOfStrings([1, 2]); // false
206 *
207 * @param {Predicate} predicate
208 * @param {Array} [value]
209 * @param {...*} [additionalArgs] additional arguments passed to the predicate
210 * @throws {TypeError} if predicate is not a function
211 * @returns {(Boolean|Predicate)} returns bool if at least two arguments provided, otherwise a predicate
212 */
213module.exports = function isArrayOf(predicate) {
214 if (!isFunction(predicate)) {
215 throw new TypeError('Predicate must be a function');
216 }
217 return handleCurry.call(this, arguments, function isArrayOfPredicate(value) {
218 var additionalArgs = Array.prototype.slice.call(arguments, 1);
219 return isArray(value) && value.every(function isArrayOfPredicateTestingArrayItem(value) {
220 return predicate.apply(this, [value].concat(additionalArgs));
221 }, this);
222 });
223};
224
225},{"./array":4,"./function":21,"./utils/handleCurry":58}],7:[function(require,module,exports){
226'use strict';
227
228var isString = require('./string');
229
230var CONTAINS_ONLY_WHITESPACES = /^\s*$/;
231
232/**
233 * Checks whether a value is empty string or contains only whitespaces
234 *
235 * @function blank
236 *
237 * @example
238 * var is = require('predicates');
239 *
240 * is.blank(''); // true
241 * is.blank(' '); // true
242 * is.blank('test'); // false
243 *
244 * @param {String} value
245 * @returns {Boolean}
246 */
247module.exports = function isBlank(value) {
248 return isString(value) && (value === '' || CONTAINS_ONLY_WHITESPACES.test(value));
249};
250
251},{"./string":51}],8:[function(require,module,exports){
252'use strict';
253
254/**
255 * Checks whether a value is a boolean
256 *
257 * **Aliases** _bool_
258 *
259 * @function boolean
260 *
261 * @example
262 * var is = require('predicates');
263 *
264 * is.boolean(true); // true
265 * is.boolean(false);; // true
266 * is.boolean(0); // false
267 *
268 * @param {*} value
269 * @returns {Boolean}
270 */
271module.exports = function isBoolean(value) {
272 return typeof value === 'boolean' || Object.prototype.toString.call(value) === '[object Boolean]';
273};
274
275},{}],9:[function(require,module,exports){
276'use strict';
277
278/**
279 * Checks whether a value is a Date object
280 *
281 * @function date
282 *
283 * @example
284 * var is = require('predicates');
285 *
286 * is.date(new Date()); true
287 * is.date(1415402574000); // false
288 *
289 * @param {*} value
290 * @returns {Boolean}
291 */
292module.exports = function isDate(value) {
293 return Object.prototype.toString.call(value) === '[object Date]';
294};
295
296},{}],10:[function(require,module,exports){
297'use strict';
298
299var isUndefined = require('./undefined');
300
301/**
302 * Checks whether a value is not undefined - in other words, is defined
303 *
304 * @function defined
305 *
306 * @example
307 * var is = require('predicates');
308 *
309 * is.defined(''); // true
310 * is.defined(1); // true
311 * is.defined(undefined); // false
312 *
313 * @param {*} value
314 * @returns {Boolean}
315 */
316module.exports = function isDefined(value) {
317 return !isUndefined(value);
318};
319
320},{"./undefined":55}],11:[function(require,module,exports){
321'use strict';
322
323var divisibleWithRemainder = require('./divisibleWithRemainder');
324
325/**
326 * Checks whether a value is a number and it's divisible by divisor
327 *
328 * **Aliases** _divisibleBy_, _divBy_
329 *
330 * @function divisible
331 *
332 * @example
333 * var is = require('predicates');
334 *
335 * is.divisible(7, 14); // true
336 * is.divisible(7)(14); // true
337 * is.divisible(7, 10); // false
338 *
339 * @param {Number} divisor
340 * @param {Number} [value]
341 * @throws {Error} if the divisor is 0
342 * @throws {TypeError} if the divisor is not a finite number
343 * @returns {(Boolean|Predicate)} returns bool if at least 2 arguments provided, otherwise a predicate
344 */
345module.exports = function divisible() {
346 var args = Array.prototype.slice.call(arguments);
347 args.splice(1, 0, 0);
348 return divisibleWithRemainder.apply(this, args);
349};
350},{"./divisibleWithRemainder":12}],12:[function(require,module,exports){
351'use strict';
352
353var handleCurry = require('./utils/handleCurry'),
354 isFinitePredicate = require('./finite'),
355 isNumber = require('./number');
356
357/**
358 * Checks whether a value is a number and it's divisible by divisor with given remainder
359 * In other words value % div === remainder
360 *
361 * **Aliases** _divisibleByWithRemainder_, _divByWithRemainder_
362 *
363 * @function divisibleWithRemainder
364 *
365 * @example
366 * var is = require('predicates');
367 *
368 * is.divisibleWithRemainder(3, 2, 5); // true since 5%3 === 2
369 * is.divisibleWithRemainder(3, 2)(5); // true
370 * is.divisibleWithRemainder(3, 1, 5); // false since 5%3 !== 1
371 *
372 * var isEven = is.divisibleWithRemainder(2, 1);
373 *
374 * isEven(1); // true
375 * isEven(2); // false
376 * isEven(3); // true
377 *
378 * *
379 * @param {Number} divisor
380 * @param {Number} remainder
381 * @param {Number} [value]
382 * @throws {Error} if less than 2 arguments provided
383 * @throws {Error} if the divisor is 0
384 * @throws {Error} if the remainder is greater than the divisor
385 * @throws {TypeError} if the divisor is not a finite number
386 * @throws {TypeError} if the remainder is not a finite number
387 * @returns {(Boolean|Predicate)} returns bool if at least 3 arguments provided, otherwise a predicate
388 */
389module.exports = function divisibleWithRemainder(divisor, remainder) {
390 if (arguments.length < 2) {
391 throw new Error('Missing remainder');
392 }
393
394 if (!isFinitePredicate(divisor)) {
395 throw new TypeError('Divisor is not a finite number');
396 }
397
398 if (divisor === 0) {
399 throw new Error('Divisor cannot be 0');
400 }
401
402 if (!isFinitePredicate(remainder)) {
403 throw new TypeError('Remainder is not a finite number');
404 }
405
406 if (remainder >= divisor) {
407 throw new Error('Remainder cannot be greater than divisor');
408 }
409
410 return handleCurry.call(this, arguments, function isDivisibleByWithRemainderTest(value) {
411 return isNumber(value) && value % divisor === remainder;
412 }, 2);
413};
414},{"./finite":18,"./number":40,"./utils/handleCurry":58}],13:[function(require,module,exports){
415/*eslint eqeqeq: 0*/
416'use strict';
417
418var isArrayLike = require('./arrayLike'),
419 isObject = require('./object'),
420 isString = require('./string');
421
422/**
423 * Checks whether a value is empty
424 * Value is empty when:
425 * * is an array like object with length === 0
426 * * is an object without enumerable properties
427 * * is an empty string
428 *
429 * @function empty
430 *
431 * @example
432 * var is = require('predicates');
433 *
434 * is.empty(''); // true
435 * is.empty([]); // true
436 * is.empty({}); // true
437 * is.empty([1]); // false
438 * is.empty('test'); // false
439 *
440 * @param {*} value
441 * @returns {Boolean}
442 */
443module.exports = function isEmpty(value) {
444 if (isArrayLike(value)) {
445 return value.length === 0;
446 } else if (isObject(value)) {
447 return Object.keys(value).length === 0;
448 } else if (isString(value)) {
449 return value == '';
450 }
451 return false;
452};
453
454},{"./arrayLike":5,"./object":41,"./string":51}],14:[function(require,module,exports){
455'use strict';
456
457var isString = require('./string'),
458 handleCurry = require('./utils/handleCurry');
459
460/**
461 * Checks whether a string ends with a given suffix
462 *
463 * @function endsWith
464 *
465 * @example
466 * var is = require('predicates');
467 *
468 * var isYelling = is.endsWith('!');
469 *
470 * isYelling('shut up!'); // true
471 * // same as
472 * is.endsWith('!', 'shut up!'); // true
473 * isYelling('be quiet please'); // false
474 *
475 * @param {String} suffix
476 * @param {String} [value]
477 * @throws {TypeError} if suffix is not a string
478 * @throws {Error} if suffix is empty
479 * @returns {(Boolean|Predicate)} returns bool if at least two arguments provided, otherwise a predicate
480 */
481module.exports = function endsWith(suffix) {
482 if (!isString(suffix)) {
483 throw new TypeError('Suffix must be a string');
484 }
485 if (suffix === '') {
486 throw new Error('Suffix cannot be empty');
487 }
488
489 return handleCurry.call(this, arguments, function endsWithPredicate(value) {
490 return isString(value) && value.indexOf(suffix) === value.length - suffix.length;
491 });
492};
493},{"./string":51,"./utils/handleCurry":58}],15:[function(require,module,exports){
494/*eslint eqeqeq: 0*/
495'use strict';
496
497var handleCurry = require('./utils/handleCurry');
498
499/**
500 * Checks whether values are equal (using == operator)
501 *
502 * **Aliases** _equalTo_, _eq_
503 * @function equal
504 *
505 * @example
506 * var is = require('predicates');
507 *
508 * var isTimmy = is.equal('Timmy');
509 *
510 * isTimmy('Timmy'); // true
511 * // same as
512 * is.equal('Timmy', 'Timmy'); // true
513 * is.equal(1, '1'); // true
514 * isTimmy('Franko'); // false
515 *
516 * @param {*} expected
517 * @param {*} [value]
518 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
519 */
520module.exports = function isEqual(expected) {
521 return handleCurry.call(this, arguments, function isEqualPredicate(value) {
522 return expected == value;
523 });
524};
525
526},{"./utils/handleCurry":58}],16:[function(require,module,exports){
527/*eslint eqeqeq: 0*/
528'use strict';
529
530var isBoolean = require('./boolean');
531/**
532 * Checks whether a value is false a boolean false
533 *
534 * @function false
535 *
536 * @example
537 * var is = require('predicates');
538 *
539 * is.false(false); // true
540 * is.false(0); // false
541 *
542 * @param {*} value
543 * @returns {Boolean}
544 * @name false
545 */
546module.exports = function isFalse(value) {
547 return value === false || (isBoolean(value) && value == false);
548};
549
550},{"./boolean":8}],17:[function(require,module,exports){
551'use strict';
552
553/**
554 * Checks whether a value is falsy
555 *
556 * **Aliases** _falsey_
557 *
558 * @function falsy
559 *
560 * @example
561 * var is = require('predicates');
562 *
563 * is.falsy(0); // true
564 * is.falsy(false); // true
565 * is.falsy(1); // false
566 *
567 * @param {*} value
568 * @returns {Boolean}
569 *
570 */
571module.exports = function isFalsy(value) {
572 return !value;
573};
574
575},{}],18:[function(require,module,exports){
576'use strict';
577
578/**
579 * Checks whether a value is a number and it's finite
580 *
581 * @function finite
582 *
583 * @example
584 * var is = require('predicates');
585 *
586 * is.finite(1); // false
587 * is.finite(Infinity); // false
588 *
589 * @param {*} value
590 * @returns {Boolean}
591 */
592module.exports = require('./finite/native') || require('./finite/polyfill');
593
594},{"./finite/native":19,"./finite/polyfill":20}],19:[function(require,module,exports){
595'use strict';
596
597module.exports = Number.isFinite;
598
599},{}],20:[function(require,module,exports){
600'use strict';
601
602var isNumber = require('../number');
603
604module.exports = function isFinitePolyfill(value) {
605 return isNumber(value) && value !== Infinity && value !== -Infinity && !isNaN(value);
606};
607
608},{"../number":40}],21:[function(require,module,exports){
609'use strict';
610
611/**
612 * Checks whether a value is a function
613 *
614 * **Aliases** _func_, _fn_
615 * @function function
616 *
617 * @example
618 * var is = require('predicates');
619 *
620 * is.function(function() {}); // true
621 * is.function(alert); // true
622 * is.function('alert'); // false
623 *
624 * @param {*} value
625 * @returns {Boolean}
626 */
627module.exports = function isFunction(value) {
628 return Object.prototype.toString.call(value) === '[object Function]';
629};
630
631
632},{}],22:[function(require,module,exports){
633'use strict';
634
635var handleCurry = require('./utils/handleCurry');
636
637/**
638 * Checks whether a value is greater than expected number
639 *
640 * **Aliases** _greater_, _gt_
641 * @function greaterThan
642 *
643 * @example
644 * var is = require('predicates');
645 *
646 * var isGreaterThan0 = is.greaterThan(0);
647 *
648 * isGreaterThan0(10); // true
649 * // same as
650 * is.greaterThan(0, 10); // true
651 * isGreaterThan0(-1); // false
652 *
653 * @param {Number} expected
654 * @param {Number} [value]
655 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
656 */
657module.exports = function isGreaterThan(expected) {
658 return handleCurry.call(this, arguments, function isGreaterThanPredicate(value) {
659 return value > expected;
660 });
661};
662
663},{"./utils/handleCurry":58}],23:[function(require,module,exports){
664'use strict';
665
666var handleCurry = require('./utils/handleCurry');
667
668/**
669 * Checks whether a value is greater or equal to expected number
670 *
671 * **Aliases** _greaterOrEqual_, _greaterEq_, _gtEq_
672 *
673 * @function greaterThanOrEqual
674 *
675 * @example
676 * var is = require('predicates');
677 *
678 * var isAdultAge = is.greaterThanOrEqual(18);
679 *
680 * isAdultAge(22); // true
681 * // same as
682 * is.greaterThanOrEqual(18, 22);
683 *
684 * isAdultAge(16); // false
685 *
686 * @param {Number} expected
687 * @param {Number} [value]
688 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
689 */
690module.exports = function isGreaterThanOrEqual(expected) {
691 return handleCurry.call(this, arguments, function isGreaterThanOrEqualPredicate(value) {
692 return value >= expected;
693 });
694};
695
696},{"./utils/handleCurry":58}],24:[function(require,module,exports){
697'use strict';
698
699var isObject = require('./object'),
700 isString = require('./string'),
701 handleCurry = require('./utils/handleCurry');
702
703/**
704 * Checks whether an object has own property
705 *
706 * **Aliases** _hasOwn_
707 *
708 * @function hasOwnProperty
709 *
710 * @example
711 * var is = require('predicates');
712 *
713 * var isCustomized = is.hasOwnProperty('delay');
714 *
715 * var Timer = function() {};
716 * Timer.prototype.delay = 100;
717 *
718 * var timer1 = new Timer();
719 * var timer2 = new Timer();
720 * timer1.delay = 1000;
721 *
722 * isCustomized(timer1) // true
723 * // same as
724 * is.hasOwnProperty('delay', timer1); // true
725 *
726 * isCustomized(timer2); // false
727 *
728 * @param {String} property
729 * @param {Object} [object]
730 * @throws {TypeError} if property is not a string
731 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
732 */
733module.exports = function hasOwnProperty(property) {
734 if (!isString(property)) {
735 throw new TypeError('Property name must be a string');
736 }
737 return handleCurry.call(this, arguments, function hasOwnPropertyPredicate(object) {
738 return isObject(object) && Object.prototype.hasOwnProperty.call(object, property);
739 });
740};
741},{"./object":41,"./string":51,"./utils/handleCurry":58}],25:[function(require,module,exports){
742'use strict';
743
744var isObject = require('./object'),
745 isString = require('./string'),
746 handleCurry = require('./utils/handleCurry');
747
748/**
749 * Checks whether an object has a given property
750 *
751 * **Aliases** _has_
752 *
753 * @function hasProperty
754 *
755 * @example
756 * var is = require('predicates');
757 *
758 * var isDuck = is.hasProperty('quack');
759 *
760 * isDuck({quack: ':)'}); // true
761 * // same as
762 * is.hasProperty('quack', {quack: ':)'}); // true
763 *
764 * isDuck({type: 'car'}); // false
765 *
766 * @param {String} property
767 * @param {Object} [object]
768 * @throws {TypeError} if property is not a string
769 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
770 */
771module.exports = function hasProperty(property) {
772 if (!isString(property)) {
773 throw new TypeError('Property name must be a string');
774 }
775 return handleCurry.call(this, arguments, function hasPropertyPredicate(object) {
776 return isObject(object) && property in object;
777 });
778};
779
780},{"./object":41,"./string":51,"./utils/handleCurry":58}],26:[function(require,module,exports){
781'use strict';
782
783var isArray = require('./array'),
784 handleCurry = require('./utils/handleCurry');
785
786/**
787 * Checks whether a value exists in collection
788 * Values are compared using === operator
789 *
790 * @function in
791 *
792 * @example
793 * var is = require('predicates');
794 *
795 * var isImage = is.in(['image/gif', 'image/jpeg']);
796 * // same as
797 * // var isImage = is.oneOf('image/gif', 'image/jpeg');
798 *
799 * isImage('image/jpeg'); // true
800 * // same as
801 * is.in(['image/gif', 'image/jpeg'], 'image/jpeg'); // true
802 *
803 * isImage('text/html'); // false
804 *
805 * @param {Array} collection of allowed values
806 * @param {*} [value]
807 * @throws {TypeError} if collection is not an array
808 * @throws {Error} if collection is empty
809 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
810 */
811module.exports = function isIn(collection) {
812 if (!isArray(collection)) {
813 throw new TypeError('Collection must be an array');
814 }
815
816 if (collection.length === 0) {
817 throw new Error('Collection cannot be empty');
818 }
819
820 return handleCurry.call(this, arguments, function isInPredicate(value) {
821 return collection.indexOf(value) !== -1;
822 });
823};
824
825},{"./array":4,"./utils/handleCurry":58}],27:[function(require,module,exports){
826'use strict';
827
828var handleCurry = require('./utils/handleCurry'),
829 isFunction = require('./function');
830
831/**
832 * Checks whether a value is an instance of given "class"
833 *
834 * **Aliases** _instance_
835 *
836 * @function instanceOf
837 *
838 * @example
839 * var is = require('predicates');
840 *
841 * var Duck = function() {};
842 * var Car = function() {};
843 *
844 * var isDuck = is.instanceOf(Duck);
845 *
846 * isDuck(new Duck); // true
847 * // same as
848 * is.instanceOf(Duck, new Duck); // true
849 *
850 * isDuck(new Car); // false
851 *
852 *
853 * @param {Function} clazz
854 * @param {*} [value]
855 * @throws {TypeError} if class is not a function
856 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
857 */
858module.exports = function isInstanceOf(clazz) {
859 if (!isFunction(clazz)) {
860 throw new TypeError('Class must be a function');
861 }
862 return handleCurry.call(this, arguments, function isInstanceOfPredicate(value) {
863 return value instanceof clazz;
864 });
865};
866
867},{"./function":21,"./utils/handleCurry":58}],28:[function(require,module,exports){
868'use strict';
869
870/**
871 * Checks whether a value is an integer
872 *
873 * **Aliases** _int_
874 *
875 * @function integer
876 *
877 * @example
878 * var is = require('predicates');
879 *
880 * is.integer(10); // true
881 * is.integer(10.4); // false
882 *
883 * @param {*} value
884 * @returns {Boolean}
885 */
886module.exports = require('./integer/native') || require('./integer/polyfill');
887
888},{"./integer/native":29,"./integer/polyfill":30}],29:[function(require,module,exports){
889'use strict';
890
891module.exports = Number.isInteger;
892
893},{}],30:[function(require,module,exports){
894'use strict';
895
896var isFinitePredicate = require('../finite');
897
898// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
899module.exports = function isIntegerPolyfill(value) {
900 return isFinitePredicate(value) && value > -9007199254740992 && value < 9007199254740992 && Math.floor(value) === value;
901};
902
903},{"../finite":18}],31:[function(require,module,exports){
904'use strict';
905
906var handleCurry = require('./utils/handleCurry');
907
908/**
909 * Checks whether a value is less than expected number
910 *
911 * **Aliases** _less_, _lt_
912 *
913 * @function lessThan
914 *
915 * @example
916 *
917 * var isChildAge = is.lessThan(18);
918 *
919 * isChildAge(10); // true
920 * // same as
921 * is.lessThan(18, 10); // true
922 * isChildAge(18); // false
923 * isChildAge(22); // false
924 *
925 * @param {Number} expected
926 * @param {Number} [value]
927 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
928 */
929module.exports = function isLessThan(expected) {
930 return handleCurry.call(this, arguments, function isLessThanPredicate(value) {
931 return value < expected;
932 });
933};
934
935},{"./utils/handleCurry":58}],32:[function(require,module,exports){
936'use strict';
937
938var handleCurry = require('./utils/handleCurry');
939
940/**
941 * Checks whether a value is less or equal to expected number
942 *
943 * **Aliases** _lessOrEqual_, _lessEq_, _ltEq_
944 *
945 * @function lessThanOrEqual
946 *
947 * @example
948 * var is = require('predicates');
949 *
950 * var isChildAge = is.lessThanOrEqual(17);
951 *
952 * isChildAge(10); // true
953 * // same as
954 * is.lessThanOrEqual(17, 10); // true
955 *
956 * isChildAge(18); // false
957 *
958 * @param {Number} expected
959 * @param {Number} [value]
960 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
961 */
962module.exports = function isLessThanOrEqual(expected) {
963 return handleCurry.call(this, arguments, function isLessThanOrEqualPredicate(value) {
964 return value <= expected;
965 });
966};
967
968},{"./utils/handleCurry":58}],33:[function(require,module,exports){
969'use strict';
970
971var isRegexp = require('./regexp'),
972 handleCurry = require('./utils/handleCurry');
973
974/**
975 * Checks whether a value matches a regexp
976 *
977 * **Aliases** _match_
978 *
979 * @function matches
980 *
981 * @example
982 * var is = require('predicates');
983 *
984 * var isWindows9x = is.matches(/^Windows 9/);
985 *
986 * isWindows9x('Windows 9'); // true - :D
987 * // same as
988 * is.matches(/^Windows 9/, 'Windows 9'); // also true - hue hue
989 *
990 * isWindows9x('Windows 10); // false
991 *
992 * @param {RegExp} regexp
993 * @param {String} [value]
994 * @throws {TypeError} if regexp is not a regexp
995 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
996 */
997module.exports = function matches(regexp) {
998 if (!isRegexp(regexp)) {
999 throw new TypeError('Regexp must be a RegExp object');
1000 }
1001
1002 return handleCurry.call(this, arguments, function matchesPredicate(value) {
1003 return regexp.test(value);
1004 });
1005};
1006
1007},{"./regexp":48,"./utils/handleCurry":58}],34:[function(require,module,exports){
1008'use strict';
1009
1010var isNumber = require('./number');
1011/**
1012 * Checks whether a value is a NaN number
1013 *
1014 * **Aliases** _nan_
1015 * @function NaN
1016 *
1017 * @example
1018 * var is = require('predicates');
1019 *
1020 * is.NaN(NaN); // true
1021 * is.NaN(10); // false
1022 *
1023 * @param {*} value
1024 * @returns {Boolean}
1025 */
1026module.exports = function isNotANumber(value) {
1027 return isNumber(value) && isNaN(value);
1028};
1029},{"./number":40}],35:[function(require,module,exports){
1030'use strict';
1031
1032var isNumber = require('./number');
1033
1034/**
1035 * Checks whether a value is a negative number
1036 *
1037 * @function negative
1038 *
1039 * @example
1040 * var is = require('predicates');
1041 *
1042 * is.negative(-1); // true
1043 * is.negative(0); // false
1044 *
1045 * @param {Number} value
1046 * @returns {Boolean}
1047 */
1048module.exports = function isNegativeNumber(value) {
1049 return isNumber(value) && value < 0;
1050};
1051
1052},{"./number":40}],36:[function(require,module,exports){
1053'use strict';
1054
1055var isFunction = require('./function'),
1056 handleCurry = require('./utils/handleCurry');
1057
1058/**
1059 * Negates result of a predicate
1060 *
1061 * **Aliases** _negate_
1062 *
1063 * @function not
1064 *
1065 * @example
1066 * var is = require('predicates');
1067 *
1068 * var isNotEmpty = is.not(is.empty);
1069 * isNotEmpty([1, 2]);// true
1070 * // same as
1071 * is.not(is.empty, [1, 2]); // true
1072 * isNotEmpty(''); // false
1073 *
1074 * @param {Predicate} predicate
1075 * @param {*} [value]
1076 * @param {...*} [additionalArgs] additional arguments passed to the predicate
1077 * @returns {(Boolean|Predicate)} returns bool if at least two arguments provided, otherwise a predicate
1078 */
1079module.exports = function isNot(predicate) {
1080 if (!isFunction(predicate)) {
1081 throw new TypeError('Predicate must be a function');
1082 }
1083
1084 return handleCurry.call(this, arguments, function isNotPredicateNegation() {
1085 return !predicate.apply(this, arguments);
1086 });
1087};
1088
1089},{"./function":21,"./utils/handleCurry":58}],37:[function(require,module,exports){
1090'use strict';
1091
1092var isString = require('./string');
1093
1094var CONTAINS_AT_LEAST_ONE_NON_WHITESPACE = /\S/;
1095
1096/**
1097 * Checks whether a value is a string and contains at least one non-whitespace character
1098 *
1099 * @function notBlank
1100 *
1101 * @example
1102 * var is = require('predicates');
1103 *
1104 * is.notBlank(''); // false
1105 * is.notBlank(' '); // false
1106 * is.notBlank('test'); // true
1107 * is.notBlank({toString: function() { return 'test'; }}); // false - since it's not a string
1108 *
1109 * @param {String} value
1110 * @returns {Boolean}
1111 */
1112module.exports = function notBlank(value) {
1113 return isString(value) && CONTAINS_AT_LEAST_ONE_NON_WHITESPACE.test(value);
1114};
1115},{"./string":51}],38:[function(require,module,exports){
1116'use strict';
1117var isEmpty = require('./empty'),
1118 not = require('./not');
1119
1120/**
1121 * Checks whether value is not empty.
1122 *
1123 * See [empty](#empty) for list of conditions that determine when a value is empty
1124 *
1125 * @function notEmpty
1126 *
1127 * @example
1128 * var is = require('predicates');
1129 *
1130 * is.notEmpty([1]); // true
1131 * is.notEmpty('value'); // true
1132 * is.notEmpty([]); // false
1133 * is.notEmpty(''); // false
1134 * @param {*} value
1135 * @returns {Boolean}
1136 */
1137module.exports = not(isEmpty);
1138},{"./empty":13,"./not":36}],39:[function(require,module,exports){
1139'use strict';
1140
1141/**
1142 * Checks whether a value is null
1143 *
1144 * @function null
1145 *
1146 * @example
1147 * var is = require('predicates');
1148 *
1149 * is.null(null); // true
1150 * is.null({}); // false
1151 *
1152 * @param {*} value
1153 * @returns {Boolean}
1154 */
1155module.exports = function isNull(value) {
1156 return value === null;
1157};
1158
1159},{}],40:[function(require,module,exports){
1160'use strict';
1161
1162/**
1163 * Checks whether a value is a number
1164 *
1165 * **Aliases** _num_
1166 *
1167 * @function number
1168 *
1169 * @example
1170 * var is = require('predicates');
1171 *
1172 * is.number(10); // true
1173 * is.number('10'); // false
1174 * @param {*} value
1175 * @returns {Boolean}
1176 */
1177module.exports = function isNumber(value) {
1178 return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';
1179};
1180
1181},{}],41:[function(require,module,exports){
1182'use strict';
1183
1184/**
1185 * Checks whether a value is an object
1186 *
1187 * **Aliases** _obj_
1188 *
1189 * @function object
1190 *
1191 * @example
1192 * var is = require('predicates');
1193 *
1194 * is.object({}); // true
1195 * is.object('object'); // false
1196 *
1197 * @param {*} value
1198 * @returns {Boolean}
1199 */
1200module.exports = function isObject(value) {
1201 return value instanceof Object || (typeof value === 'object' && value !== null);
1202};
1203},{}],42:[function(require,module,exports){
1204'use strict';
1205
1206var isObject = require('./object'),
1207 isFunction = require('./function'),
1208 handleCurry = require('./utils/handleCurry');
1209
1210/**
1211 * Checks whether every enumerable property of object satisfies a predicate
1212 *
1213 * **Aliases** _objOf_
1214 *
1215 * @function objectOf
1216 *
1217 * @example
1218 * var is = require('predicates');
1219 *
1220 * var isObjectOfStrings = is.objectOf(is.string);
1221 *
1222 * isObjectOfStrings({key: 'value', key1: 'value'}); // true
1223 * // same as
1224 * is.objectOf(is.string, {key: 'value', key1: 'value'}); // true
1225 *
1226 * isObjectOfStrings({key: 1, key1: 'value'}); // false
1227 *
1228 * @param {Predicate} predicate
1229 * @param {Object} [object]
1230 * @param {...*} [additionalArgs] additional arguments passed to the predicate
1231 * @returns {(Boolean|Predicate)} returns bool if at least two arguments provided, otherwise a predicate
1232 */
1233module.exports = function isObjectOf(predicate) {
1234 if (!isFunction(predicate)) {
1235 throw new TypeError('Predicate must be a function');
1236 }
1237
1238 return handleCurry.call(this, arguments, function isObjectOfPredicate(object) {
1239 var args = Array.prototype.slice.call(arguments, 1);
1240 return isObject(object) && Object
1241 .keys(object)
1242 .every(function isObjectOfPredicateTestingProperty(key) {
1243 return predicate.apply(this, [object[key]].concat(args));
1244 }, this);
1245 });
1246};
1247
1248},{"./function":21,"./object":41,"./utils/handleCurry":58}],43:[function(require,module,exports){
1249'use strict';
1250/**
1251 * Returns a function that checks whether a value is equal to one of allowed values
1252 * Function compares values using === operator
1253 *
1254 * @function oneOf
1255 *
1256 * @example
1257 * var is = require('predicates');
1258 *
1259 * var isAllowedToAccess = is.oneOf('ROLE_ADMIN', 'ROLE_USER');
1260 * // same as
1261 * // var isAllowedToAccess = is.in(['ROLE_ADMIN', 'ROLE_USER']);
1262 *
1263 * isAllowedToAccess('ROLE_ADMIN'); // true
1264 * isAllowedToAccess('ROLE_ANONYMOUS'); // false
1265 *
1266 * @param {...*} allowedValue
1267 * @throws {Error} if 0 or 1 allowed value provided
1268 * @returns {Predicate}
1269 */
1270module.exports = function isOneOf() {
1271 var allowedValues = Array.prototype.slice.call(arguments);
1272
1273 if (allowedValues.length < 2) {
1274 throw new Error('At least 2 allowed values are required');
1275 }
1276
1277 return function isOneOfPredicate(value) {
1278 return allowedValues.indexOf(value) !== -1;
1279 };
1280};
1281
1282},{}],44:[function(require,module,exports){
1283'use strict';
1284
1285var isObject = require('./object');
1286
1287/**
1288 * Checks whether a value is a plain object.
1289 * Plain object is an object which prototype is Object.prototype or null
1290 *
1291 * @function plainObject
1292 *
1293 * @example
1294 * var is = require('predicates');
1295 *
1296 * is.plainObject({property: 'value'}); // true
1297 * is.plainObject(new Object); // true
1298 * is.plainObject(Object.create(null)); // true
1299 * is.plainObject(new String('test')); // false
1300 *
1301 * var Foo = function() {};
1302 * is.plainObject(new Foo); // false
1303 *
1304 * @param {*} value
1305 * @returns {boolean}
1306 */
1307module.exports = function isPlainObject(value) {
1308 if (!isObject(value)) {
1309 return false;
1310 }
1311 var proto = Object.getPrototypeOf(value);
1312 return proto === Object.prototype || proto === null;
1313};
1314},{"./object":41}],45:[function(require,module,exports){
1315'use strict';
1316
1317var isNumber = require('./number');
1318
1319/**
1320 * Checks whether a value is a positive number
1321 *
1322 * @function positive
1323 *
1324 * @example
1325 * var is = require('predicates');
1326 *
1327 * is.positive(10); // true
1328 * is.positive(-1); // false
1329 *
1330 * @param {Number} value
1331 * @returns {Boolean}
1332 */
1333module.exports = function isPositiveNumber(value) {
1334 return isNumber(value) && value > 0;
1335};
1336
1337},{"./number":40}],46:[function(require,module,exports){
1338'use strict';
1339
1340var isString = require('./string'),
1341 isNumber = require('./number'),
1342 isBoolean = require('./boolean'),
1343 isUndefined = require('./undefined'),
1344 isNull = require('./null'),
1345 isObject = require('./object');
1346
1347/**
1348 * Checks whether a value is a primitive.
1349 *
1350 * Helpful links:
1351 * * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures
1352 * * http://javascriptweblog.wordpress.com/2010/09/27/the-secret-life-of-javascript-primitives/
1353 *
1354 * NOTE! A primitive value wrapped by a corresponding object is not a primitive anymore
1355 * ```js
1356 * var a = 'test' // this is a primitive
1357 * a = new String('test'); // and this is not a primitive
1358 * ```
1359 *
1360 * @function primitive
1361 *
1362 * @example
1363 * var is = require('predicates');
1364 *
1365 * is.primitive('test'); // true
1366 * is.primitive(undefined); // true
1367 * is.primitive(10); // true
1368 * is.primitive(null); // true
1369 * is.primitive(false); // true
1370 *
1371 * is.primitive(new Number(10)); // false
1372 * is.primitive(new String('test')); // false
1373 * is.primitive(new Boolean(true)); // false
1374 * is.primitive({}); // false
1375 *
1376 * @param {*} value
1377 * @returns {Boolean}
1378 */
1379module.exports = function isPrimitive(value) {
1380 return !isObject(value) && (isString(value) || isNumber(value) || isBoolean(value) || isUndefined(value) || isNull(value));
1381};
1382},{"./boolean":8,"./null":39,"./number":40,"./object":41,"./string":51,"./undefined":55}],47:[function(require,module,exports){
1383'use strict';
1384
1385var isObject = require('./object'),
1386 isFunction = require('./function'),
1387 handleCurry = require('./utils/handleCurry');
1388
1389/**
1390 * Checks whether a value of given property of an object satisfies a predicate
1391 *
1392 * If you need to check more properties at a time use {@link structure}.
1393 *
1394 * NOTE! Provided predicate will be called ALWAYS if a provided value is an object.
1395 *
1396 * **Aliases** _prop_
1397 *
1398 * @function property
1399 *
1400 * @example
1401 * var is = require('predicates');
1402 *
1403 * is.property('name', is.string, {name: 'Tommy'}); // true
1404 * is.property('name', is.string)({name: 'Tommy'}); // true
1405 * is.property('name', is.string, {name: 2}); // false - since 2 is not a string
1406 * is.property('name', is.string, {}); // false - since undefined is not a string
1407 *
1408 * @param {*} propertyName
1409 * @param {Predicate} predicate
1410 * @param {Object} [value]
1411 * @param {...*} [additionalArgs] additional arguments passed to the predicate
1412 * @throws {TypeError} if predicate is not a function
1413 * @throws {Error} if too few arguments provided
1414 * @return {(Boolean|Predicate)} boolean if at least 3 arguments provided, otherwise a predicate
1415 */
1416module.exports = function property(propertyName, predicate) {
1417 if (arguments.length < 2) {
1418 throw new Error('Too few arguments - 2 required');
1419 }
1420
1421 if (!isFunction(predicate)) {
1422 throw new TypeError('Predicate is not a function');
1423 }
1424
1425 return handleCurry.call(this, arguments, function isPropertySatisfiesPredicateTest(value) {
1426 var args = Array.prototype.slice.call(arguments);
1427 args.splice(0, 1, isObject(value) ? value[propertyName] : undefined);
1428 return isObject(value) && predicate.apply(this, args);
1429 }, 2);
1430};
1431},{"./function":21,"./object":41,"./utils/handleCurry":58}],48:[function(require,module,exports){
1432'use strict';
1433
1434/**
1435 * Checks whether a value is a regexp
1436 *
1437 * **Aliases** _regexp_
1438 *
1439 * @function regExp
1440 *
1441 * @example
1442 * var is = require('predicates');
1443 *
1444 * is.regExp(/t/); // true
1445 * is.regExp(new RegExp(/t/)); // true
1446 * is.regExp('.*'); // false
1447 *
1448 * @param {*} value
1449 * @returns {Boolean}
1450 */
1451module.exports = function isRegexp(value) {
1452 return Object.prototype.toString.call(value) === '[object RegExp]';
1453};
1454
1455},{}],49:[function(require,module,exports){
1456'use strict';
1457var isString = require('./string'),
1458 handleCurry = require('./utils/handleCurry');
1459
1460/**
1461 * Checks whether a string starts with a given prefix
1462 *
1463 * @function startsWith
1464 *
1465 * @example
1466 * var is = require('predicates');
1467 *
1468 * var isProfessor = is.startsWith('Prof. ');
1469 * isProfessor('Prof. Bend Ovah'); // true
1470 * // same as
1471 * is.startsWith('Prof. ', 'Prof. Bend Ovah'); // true
1472 *
1473 * isProfessor('Dr. Here U\' Are'); // false
1474 *
1475 * @param {String} prefix
1476 * @param {String} [value]
1477 * @throws {TypeError} if prefix is not a string
1478 * @throws {Error} if prefix is empty
1479 * @returns {(Boolean|Predicate)} returns bool if at least two arguments provided, otherwise a predicate
1480 */
1481module.exports = function startsWith(prefix) {
1482 if (!isString(prefix)) {
1483 throw new TypeError('Prefix must be a string');
1484 }
1485 if (prefix === '') {
1486 throw new Error('Prefix cannot be empty');
1487 }
1488
1489 return handleCurry.call(this, arguments, function startsWithPredicate(value) {
1490 return isString(value) && value.indexOf(prefix) === 0;
1491 });
1492};
1493
1494},{"./string":51,"./utils/handleCurry":58}],50:[function(require,module,exports){
1495'use strict';
1496
1497var handleCurry = require('./utils/handleCurry');
1498
1499/**
1500 * Checks whether a value is strictly equal to expected value (uses === operator)
1501 *
1502 * **Aliases** _strictEqualTo_
1503 *
1504 * @function strictEqual
1505 *
1506 * @example
1507 * var is = require('predicates');
1508 *
1509 * var mom = {};
1510 * var isMyMom = is.strictEqual(mom);
1511 *
1512 * isMyMom(mom); // true - mom is only one. Remember about it...
1513 * // same as
1514 * is.strictEqual(mom, mom); // true
1515 * isMyMom({}); // false
1516 *
1517 *
1518 * @param {*} expected
1519 * @param {*} [value]
1520 * @returns {(Boolean|Predicate)} bool if at least two arguments provided, otherwise a predicate
1521 */
1522module.exports = function isStrictEqual(expected) {
1523 return handleCurry.call(this, arguments, function isStrictEqualPredicate(value) {
1524 return expected === value;
1525 });
1526};
1527
1528},{"./utils/handleCurry":58}],51:[function(require,module,exports){
1529'use strict';
1530
1531/**
1532 * Checks whether a value is a function
1533 *
1534 * **Aliases** _str_
1535 *
1536 * @function string
1537 *
1538 * @example
1539 * var is = require('predicates');
1540 *
1541 * is.string('test'); // true
1542 * is.string({}); // false
1543 *
1544 * @param {*} value
1545 * @returns {Boolean}
1546 */
1547module.exports = function isString(value) {
1548 return typeof value === 'string' || Object.prototype.toString.call(value) === '[object String]';
1549};
1550
1551},{}],52:[function(require,module,exports){
1552'use strict';
1553
1554var isObject = require('./object'),
1555 handleCurry = require('./utils/handleCurry'),
1556 objectOf = require('./objectOf'),
1557 isFunction = require('./function');
1558
1559var isObjectOfPredicates = objectOf(isFunction);
1560
1561/**
1562 * Checks whether an object satisfies predicates defined in structure
1563 *
1564 * NOTE: All predicates defined in structure must be satisfied.
1565 * If some of the properties are optional use [undefinedOr](#undefinedOr)
1566 *
1567 * You shouldn't use this function to validate input from the user and expect complex report "what's wrong with this is object".
1568 * There are few reasons for that:
1569 * * it's just a predicate (that returns only true or false)
1570 * * breaks [the design rule](design.md#user-content-defined-and-generated-predicates-will-not-throw-any-errors)
1571 *
1572 * See examples for inspiration how you can use _structure_
1573 *
1574 * @function structure
1575 *
1576 * @example
1577 * // simple object matching
1578 * var is = require('predicates');
1579 *
1580 * var schema = {
1581 * name: is.string, // only string
1582 * phone: is.or(is.string, is.number), // string or number
1583 * surname: is.undefinedOr(is.string) // optional
1584 * },
1585 * isPerson = is.structure(schema);
1586 *
1587 * var person = {name: 'Tommy', phone: 80129292};
1588 * isPerson(person); // true
1589 * // same as
1590 * is.structure(schema, person); // true
1591 * isPerson({name: 'Tommy'});
1592 *
1593 * @example
1594 * // filtering
1595 * var is = require('predicates');
1596 *
1597 * var people = [
1598 * {name: 'Prof. Bend Ovah', age: 55, sex: 'male'},
1599 * {name: 'Dr. Supa Kaki', age: 34, sex: 'female'},
1600 * {name: 'Prof. Anti Santy', age: 46, sex: 'male'}
1601 * ];
1602 *
1603 * var professors = people.filter(is.structure({
1604 * name: is.startsWith('Prof.')
1605 * }));
1606 *
1607 * // [
1608 * // {name: 'Prof. Bend Ovah', age: 55, sex: 'male'},
1609 * // {name: 'Prof. Anti Santy', age: 46, sex: 'male'}
1610 * // ]
1611 *
1612 * @example
1613 * // duck typing
1614 *
1615 * var isDuck = is.structure({
1616 * quack: is.function,
1617 * walk: is.function
1618 * });
1619 *
1620 * isDuck({
1621 * say: function() { return 'woof! woof!';
1622 * }}); // not a duck
1623 *
1624 * isDuck({
1625 * quack: function() { return 'quack!'; },
1626 * walk: function() { return 'tup tup tup'; }
1627 * }); // yep, it's a duck
1628 *
1629 * @param {Object} structure
1630 * @param {Object} [value]
1631 * @param {...*} [additionalArgs] additional arguments passed to the predicates
1632 * @return {(Boolean|Predicate)} returns bool if more than 1 argument provided, otherwise a predicate
1633 */
1634module.exports = function isStructure(structure) {
1635 if (!isObject(structure)) {
1636 throw new TypeError('Structure must be an object');
1637 }
1638
1639 var keys = Object.keys(structure);
1640 if (keys.length === 0) {
1641 throw new Error('Structure object cannot be empty. No enumerable properties found');
1642 }
1643
1644 if (!isObjectOfPredicates(structure)) {
1645 throw new TypeError('Structure object must consist of predicates');
1646 }
1647
1648 return handleCurry.call(this, arguments, function isStructurePredicate(value) {
1649 var args = Array.prototype.slice.call(arguments, 1);
1650 return isObject(value) && keys.every(function structurePredicateTestingProperty(key) {
1651 return structure[key].apply(this, [value[key]].concat(args));
1652 }, this);
1653 });
1654};
1655
1656},{"./function":21,"./object":41,"./objectOf":42,"./utils/handleCurry":58}],53:[function(require,module,exports){
1657/*eslint eqeqeq:0*/
1658'use strict';
1659
1660var isBoolean = require('./boolean');
1661/**
1662 * Checks whether a value is a boolean true
1663 *
1664 * @function true
1665 *
1666 * @example
1667 * var is = require('predicates');
1668 *
1669 * is.true(true); // true
1670 * is.true('true'); // false
1671 *
1672 * @param {Boolean} value
1673 * @returns {Boolean}
1674 */
1675module.exports = function isTrue(value) {
1676 return value === true || (isBoolean(value) && value == true);
1677};
1678},{"./boolean":8}],54:[function(require,module,exports){
1679'use strict';
1680
1681/**
1682 * Checks whether a value is truthy
1683 *
1684 * @function truthy
1685 *
1686 * @example
1687 * var is = require('predicates');
1688 *
1689 * is.truthy(true); // true
1690 * is.truthy(1); // true
1691 * is.truthy(0); // false
1692 *
1693 * @param {*} value
1694 * @returns {Boolean}
1695 */
1696module.exports = function isTruthy(value) {
1697 return !!value;
1698};
1699
1700},{}],55:[function(require,module,exports){
1701'use strict';
1702
1703/**
1704 * Checks whether a value is undefined
1705 *
1706 * @function undefined
1707 *
1708 * @example
1709 * var is = require('predicates');
1710 *
1711 * is.undefined(undefined); // true
1712 * is.undefined(0); // false
1713 *
1714 * @param {*} value
1715 * @returns {Boolean}
1716 */
1717module.exports = function isUndefined(value) {
1718 return typeof value === 'undefined';
1719};
1720
1721},{}],56:[function(require,module,exports){
1722'use strict';
1723
1724var isFunction = require('./function'),
1725 isUndefined = require('./undefined'),
1726 handleCurry = require('./utils/handleCurry');
1727
1728/**
1729 * Checks whether a value is undefined or satisfies given predicate
1730 * Very useful to check optional arguments of function.
1731 *
1732 * @function undefinedOr
1733 *
1734 * @example
1735 * var is = require('predicates');
1736 *
1737 * var isUndefinedOrString = is.undefinedOr(is.string);
1738 *
1739 * isUndefinedOrString(undefined); // true
1740 * isUndefinedOrString('test'); // true
1741 * // same as
1742 * is.undefinedOr(is.string, undefined); // true
1743 * is.undefinedOr(is.string, 'test'); // true
1744 *
1745 * isUndefinedOrString({}); // false
1746 *
1747 * @param {Predicate} predicate
1748 * @param {*} [value]
1749 * @returns {(Boolean|Predicate)} returns bool if more than 1 argument provided, otherwise a predicate
1750 */
1751module.exports = function isUndefinedOrSatisfiesPredicate(predicate) {
1752 if (!isFunction(predicate)) {
1753 throw new TypeError('Predicate must be a function');
1754 }
1755
1756 return handleCurry.call(this, arguments, function isUndefinedOrSatisfiedPredicate(value) {
1757 return isUndefined(value) || predicate.apply(this, arguments);
1758 });
1759};
1760
1761},{"./function":21,"./undefined":55,"./utils/handleCurry":58}],57:[function(require,module,exports){
1762'use strict';
1763
1764var isFunction = require('../function'),
1765 isArrayOf = require('../arrayOf');
1766
1767module.exports = function assertPredicates(predicates) {
1768 if (!isArrayOf(isFunction, predicates)) {
1769 throw new TypeError('Every predicate must be a function');
1770 }
1771 if (predicates.length < 2) {
1772 throw new Error('You need to provide at least two predicates');
1773 }
1774};
1775
1776},{"../arrayOf":6,"../function":21}],58:[function(require,module,exports){
1777'use strict';
1778
1779module.exports = function handleCurry(args, func, valueIndex) {
1780 valueIndex = valueIndex || 1;
1781 return args.length > valueIndex ? func.apply(this, Array.prototype.slice.call(args, valueIndex)) : func;
1782};
1783
1784},{}]},{},[1])(1)
1785});
\No newline at end of file