@doubco/wtf
Version:
Type checker for JS
124 lines (120 loc) • 3.83 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
/*
globals
Symbol
*/
var isString = function (i) {
return typeof i === "string" || i instanceof String;
};
var isArray = function (i) {
return Array.isArray(i);
};
var isObject = function (i) {
if (i === null || isArray(i)) {
return false;
}
return typeof i === "function" || typeof i === "object";
};
var isDate = function (value) {
var getDay = Date.prototype.getDay;
var tryDateObject = function tryDateGetDayCall(value) {
try {
getDay.call(value);
return true;
}
catch (e) {
return false;
}
};
var toStr = Object.prototype.toString;
var dateClass = "[object Date]";
var hasToStringTag = typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol";
if (typeof value !== "object" || value === null) {
return false;
}
return hasToStringTag
? tryDateObject(value)
: toStr.call(value) === dateClass;
};
var isFunction = function (i) {
return i && {}.toString.call(i) === "[object Function]";
};
var isFloat = function (n) {
return Number(n) === n && n % 1 !== 0;
};
var isInteger = function (n) {
return Number(n) === n && n % 1 === 0;
};
var isNumber = function (n) {
return isFloat(n) || isInteger(n);
};
var isEmpty = function (value) {
if (value === null)
return true;
if (value === undefined)
return true;
if (isObject(value) && !Object.keys(value).length)
return true;
if (!value.length)
return true;
};
var isRegExp = function (input) {
return Object.prototype.toString.call(input) === "[object RegExp]";
};
var isBoolean = function (input) {
return input === true || input === false;
};
var isISO8601 = function (input) {
var re = /^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$/;
return re.test(input);
};
var isNull = function (i) {
return i == null || i == undefined;
};
var isColor = function (input) {
if (isString(input)) {
var re = /#(?:[a-f\d]{3}){1,2}\b|rgb\((?:(?:\s*0*(?:25[0-5]|2[0-4]\d|1?\d?\d)\s*,){2}\s*0*(?:25[0-5]|2[0-4]\d|1?\d?\d)|\s*0*(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%(?:\s*,\s*0*(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%){2})\s*\)|hsl\(\s*0*(?:360|3[0-5]\d|[12]?\d?\d)\s*(?:,\s*0*(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%\s*){2}\)|(?:rgba\((?:(?:\s*0*(?:25[0-5]|2[0-4]\d|1?\d?\d)\s*,){3}|(?:\s*0*(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%\s*,){3})|hsla\(\s*0*(?:360|3[0-5]\d|[12]?\d?\d)\s*(?:,\s*0*(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%\s*){2},)\s*0*(?:1(?:\.0+)?|0(?:\.\d+)?)\s*\)/gi;
var results = input.match(re);
if (results) {
if (results.length == 1) {
if (results[0] == input) {
return true;
}
}
}
}
return false;
};
var WTF = {
string: isString,
object: isObject,
date: isDate,
fn: isFunction,
array: isArray,
float: isFloat,
integer: isInteger,
number: isNumber,
regexp: isRegExp,
boolean: isBoolean,
empty: isEmpty,
ISO8601: isISO8601,
color: isColor,
null: isNull,
};
exports['default'] = WTF;
exports.isArray = isArray;
exports.isBoolean = isBoolean;
exports.isColor = isColor;
exports.isDate = isDate;
exports.isEmpty = isEmpty;
exports.isFloat = isFloat;
exports.isFunction = isFunction;
exports.isISO8601 = isISO8601;
exports.isInteger = isInteger;
exports.isNull = isNull;
exports.isNumber = isNumber;
exports.isObject = isObject;
exports.isRegExp = isRegExp;
exports.isString = isString;
//# sourceMappingURL=index.js.map