You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					286 lines
				
				5.6 KiB
			
		
		
			
		
	
	
					286 lines
				
				5.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var SafeString = require('./runtime').SafeString;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the object is a function, otherwise `false`.
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function callable(value) {
							 | 
						||
| 
								 | 
							
								  return typeof value === 'function';
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.callable = callable;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the object is strictly not `undefined`.
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function defined(value) {
							 | 
						||
| 
								 | 
							
								  return value !== undefined;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.defined = defined;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the operand (one) is divisble by the test's argument
							 | 
						||
| 
								 | 
							
								 * (two).
							 | 
						||
| 
								 | 
							
								 * @param { number } one
							 | 
						||
| 
								 | 
							
								 * @param { number } two
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function divisibleby(one, two) {
							 | 
						||
| 
								 | 
							
								  return one % two === 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.divisibleby = divisibleby;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns true if the string has been escaped (i.e., is a SafeString).
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function escaped(value) {
							 | 
						||
| 
								 | 
							
								  return value instanceof SafeString;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.escaped = escaped;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the arguments are strictly equal.
							 | 
						||
| 
								 | 
							
								 * @param { any } one
							 | 
						||
| 
								 | 
							
								 * @param { any } two
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function equalto(one, two) {
							 | 
						||
| 
								 | 
							
								  return one === two;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.equalto = equalto; // Aliases
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.eq = exports.equalto;
							 | 
						||
| 
								 | 
							
								exports.sameas = exports.equalto;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the value is evenly divisible by 2.
							 | 
						||
| 
								 | 
							
								 * @param { number } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function even(value) {
							 | 
						||
| 
								 | 
							
								  return value % 2 === 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.even = even;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the value is falsy - if I recall correctly, '', 0, false,
							 | 
						||
| 
								 | 
							
								 * undefined, NaN or null. I don't know if we should stick to the default JS
							 | 
						||
| 
								 | 
							
								 * behavior or attempt to replicate what Python believes should be falsy (i.e.,
							 | 
						||
| 
								 | 
							
								 * empty arrays, empty dicts, not 0...).
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function falsy(value) {
							 | 
						||
| 
								 | 
							
								  return !value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.falsy = falsy;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the operand (one) is greater or equal to the test's
							 | 
						||
| 
								 | 
							
								 * argument (two).
							 | 
						||
| 
								 | 
							
								 * @param { number } one
							 | 
						||
| 
								 | 
							
								 * @param { number } two
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function ge(one, two) {
							 | 
						||
| 
								 | 
							
								  return one >= two;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.ge = ge;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the operand (one) is greater than the test's argument
							 | 
						||
| 
								 | 
							
								 * (two).
							 | 
						||
| 
								 | 
							
								 * @param { number } one
							 | 
						||
| 
								 | 
							
								 * @param { number } two
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function greaterthan(one, two) {
							 | 
						||
| 
								 | 
							
								  return one > two;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.greaterthan = greaterthan; // alias
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.gt = exports.greaterthan;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the operand (one) is less than or equal to the test's
							 | 
						||
| 
								 | 
							
								 * argument (two).
							 | 
						||
| 
								 | 
							
								 * @param { number } one
							 | 
						||
| 
								 | 
							
								 * @param { number } two
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function le(one, two) {
							 | 
						||
| 
								 | 
							
								  return one <= two;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.le = le;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the operand (one) is less than the test's passed argument
							 | 
						||
| 
								 | 
							
								 * (two).
							 | 
						||
| 
								 | 
							
								 * @param { number } one
							 | 
						||
| 
								 | 
							
								 * @param { number } two
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function lessthan(one, two) {
							 | 
						||
| 
								 | 
							
								  return one < two;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.lessthan = lessthan; // alias
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.lt = exports.lessthan;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the string is lowercased.
							 | 
						||
| 
								 | 
							
								 * @param { string } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function lower(value) {
							 | 
						||
| 
								 | 
							
								  return value.toLowerCase() === value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.lower = lower;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the operand (one) is less than or equal to the test's
							 | 
						||
| 
								 | 
							
								 * argument (two).
							 | 
						||
| 
								 | 
							
								 * @param { number } one
							 | 
						||
| 
								 | 
							
								 * @param { number } two
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function ne(one, two) {
							 | 
						||
| 
								 | 
							
								  return one !== two;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.ne = ne;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns true if the value is strictly equal to `null`.
							 | 
						||
| 
								 | 
							
								 * @param { any }
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function nullTest(value) {
							 | 
						||
| 
								 | 
							
								  return value === null;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.null = nullTest;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns true if value is a number.
							 | 
						||
| 
								 | 
							
								 * @param { any }
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function number(value) {
							 | 
						||
| 
								 | 
							
								  return typeof value === 'number';
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.number = number;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the value is *not* evenly divisible by 2.
							 | 
						||
| 
								 | 
							
								 * @param { number } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function odd(value) {
							 | 
						||
| 
								 | 
							
								  return value % 2 === 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.odd = odd;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the value is a string, `false` if not.
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function string(value) {
							 | 
						||
| 
								 | 
							
								  return typeof value === 'string';
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.string = string;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the value is not in the list of things considered falsy:
							 | 
						||
| 
								 | 
							
								 * '', null, undefined, 0, NaN and false.
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function truthy(value) {
							 | 
						||
| 
								 | 
							
								  return !!value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.truthy = truthy;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the value is undefined.
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function undefinedTest(value) {
							 | 
						||
| 
								 | 
							
								  return value === undefined;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.undefined = undefinedTest;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns `true` if the string is uppercased.
							 | 
						||
| 
								 | 
							
								 * @param { string } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function upper(value) {
							 | 
						||
| 
								 | 
							
								  return value.toUpperCase() === value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.upper = upper;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * If ES6 features are available, returns `true` if the value implements the
							 | 
						||
| 
								 | 
							
								 * `Symbol.iterator` method. If not, it's a string or Array.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Could potentially cause issues if a browser exists that has Set and Map but
							 | 
						||
| 
								 | 
							
								 * not Symbol.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function iterable(value) {
							 | 
						||
| 
								 | 
							
								  if (typeof Symbol !== 'undefined') {
							 | 
						||
| 
								 | 
							
								    return !!value[Symbol.iterator];
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    return Array.isArray(value) || typeof value === 'string';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.iterable = iterable;
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * If ES6 features are available, returns `true` if the value is an object hash
							 | 
						||
| 
								 | 
							
								 * or an ES6 Map. Otherwise just return if it's an object hash.
							 | 
						||
| 
								 | 
							
								 * @param { any } value
							 | 
						||
| 
								 | 
							
								 * @returns { boolean }
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function mapping(value) {
							 | 
						||
| 
								 | 
							
								  // only maps and object hashes
							 | 
						||
| 
								 | 
							
								  var bool = value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (Set) {
							 | 
						||
| 
								 | 
							
								    return bool && !(value instanceof Set);
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    return bool;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.mapping = mapping;
							 |