phadej/typify

View on GitHub
lib/predicates.js

Summary

Maintainability
A
0 mins
Test Coverage
"use strict";

// Type predicates
var toString = Object.prototype.toString;

// :: any -> boolean
function isBoolean(val) {
  return typeof val === "boolean";
}

// :: any -> boolean
function isNumber(val) {
  return typeof val === "number";
}

// :: any -> boolean
function isInteger(val) {
  return val === (val | 0);
}

// :: any -> boolean
function isPositive(val) {
  return typeof val === "number" && val > 0;
}

// :: any -> boolean
function isNonNegative(val) {
  return typeof val === "number" && val >= 0;
}

// :: any -> boolean
function isFinite(val) {
  return typeof val === "number" && val !== Infinity && val !== -Infinity && val === +val;
}

// :: any -> boolean
function isString(val) {
  return typeof val === "string";
}

// :: any -> boolean
function isFunction(val) {
  return typeof val === "function";
}

// :: any -> boolean
function isDate(val) {
  return toString.call(val) === "[object Date]";
}

// :: any -> boolean
function isRegExp(val) {
  return toString.call(val) === "[object RegExp]";
}

// :: any -> boolean
function isArray(val) {
  return Array.isArray(val);
}

// :: any -> boolean
function isObject(val) {
  return Object(val) === val;
}

// :: any -> boolean
function isArguments(val) {
  return val && isObject(arguments) && isInteger(val.length) && Object.prototype.toString.call(val) === "[object Arguments]" || false;
}

// :: *... -> true
function constTrue() {
  return true;
}

module.exports = {
  isBoolean: isBoolean,
  isNumber: isNumber,
  isInteger: isInteger,
  isPositive: isPositive,
  isNonNegative: isNonNegative,
  isFinite: isFinite,
  isString: isString,
  isFunction: isFunction,
  isDate: isDate,
  isRegExp: isRegExp,
  isArray: isArray,
  isObject: isObject,
  isArguments: isArguments,
  constTrue: constTrue,
};