dis
Version:
Tiny tiny duck typing utility
544 lines (445 loc) • 14.2 kB
JavaScript
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
var test = __webpack_require__(16);
var testMultiple = __webpack_require__(2);
var getType = __webpack_require__(3);
var tests = __webpack_require__(4);
function is(obj,type){
var l = arguments.length;
if(l>2){
var args = new Array(l);
while(l--){args[l] = arguments[l];}
return testMultiple.apply(null,args);
}
if(l == 2){
return test(obj,type);
}
if(l == 1){
return getType(obj);
}
return is;
};
for(var n in tests){
is[n] = tests[n];
}
is.test = test;
is.testMultiple = testMultiple;
is.same = is.sameType = __webpack_require__(5);
is.type = __webpack_require__(3)
is.checkType = __webpack_require__(6);
module.exports = is;
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
var hasOwnProperty = __webpack_require__(7);
module.exports = function isHTMLCollection(obj){
var result = toString.call(obj);
if (
typeof nodes === 'object' &&
/^\[object (HTMLCollection|NodeList|Object)\]$/.test(result) &&
hasOwnProperty.call(nodes,'length') &&
(nodes.length === 0 || (typeof nodes[0] === "object" && nodes[0].nodeType > 0))
) {
return true;
}
return false;
};
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
var test = __webpack_require__(16);
module.exports = function testMultiple(){
var l = arguments.length;
var last = l-1;
var type;
var obj;
while(l--){
if(l==last){
type = arguments[l];
}else{
obj = arguments[l];
if(!test(obj,type)){return false;}
}
}
return true;
}
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
/**
* Returns the type of the object.
* May return any of:
* - arguments
* - array
* - boolean
* - date
* - error
* - function
* - html collection (depending on the browser)
* - null
* - number
* - object
* - regexp
* - string
* - undefined
* @param {*} obj Object to get the type of
* @return {string} the type
*/
module.exports = function getType(obj){
if(typeof obj === 'undefined'){return 'undefined';}
return toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
};
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
var tests = {
null: __webpack_require__(9),
arguments: __webpack_require__(10),
array: __webpack_require__(11),
boolean: __webpack_require__(12),
date: __webpack_require__(13),
error: __webpack_require__(14),
function: __webpack_require__(15),
htmlcollection: __webpack_require__(1),
integer: __webpack_require__(17),
native:__webpack_require__(18),
node: __webpack_require__(19),
number: __webpack_require__(20),
numeric: __webpack_require__(21),
object: __webpack_require__(22),
regexp: __webpack_require__(23),
string: __webpack_require__(24),
arraylike:__webpack_require__(25),
reference: __webpack_require__(26),
true: __webpack_require__(27),
undefined: __webpack_require__(28),
empty: __webpack_require__(29),
false: __webpack_require__(30),
defined: __webpack_require__(31)
}
tests.args = tests.arguments;
tests.arr = tests.array;
tests.arrayLike = tests.arraylike;
tests.bool = tests.boolean;
tests.def = tests.defined;
tests.err = tests.error;
tests.falsy = tests.false;
tests.fun = tests.func = tests.fn = tests.function;
tests.HTMLCollection = tests.htmlCollection = tests.htmlcollection;
tests.int = tests.integer;
tests.obj = tests.object;
tests.ref = tests.reference;
tests.regExp = tests.regularExpression = tests.regex = tests.regexp;
tests.str = tests.string;
tests.truthy = tests.true;
tests.undef = tests.undefined;
module.exports = tests;
/***/ },
/* 5 */
/***/ function(module, exports, __webpack_require__) {
var getType = __webpack_require__(3);
module.exports = function isSameType(){
var oldType,newType,curr;
for(var i = 0; i < arguments.length; i++){
curr = arguments[i];
newType = getType(curr);
if(i && oldType != newType){return false;}
oldType = newType;
}
return newType;
};
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
var tests = __webpack_require__(4);
var equivs = {
args:'arguments'
, arr:'array'
, arrayLike:'arraylike'
, bool:'boolean'
, def:'defined'
, err:'error'
, falsy:'false'
, fun:'function'
, func:'function'
, fn:'function'
, HTMLCollection:'htmlcollection'
, htmlCollection:'htmlcollection'
, int:'integer'
, obj:'object'
, ref:'reference'
, regExp:'regexp'
, regularExpression:'regexp'
, regex:'regexp'
, str:'string'
, truthy:'true'
, undef:'undefined'
};
var skip = /^(empty|ref(erence)?|tru(e|thy)|fals[ye]|def(ined)?|undef(ined)?)$/i;
function getType(obj){
if(typeof obj === 'undefined'){return 'undefined';}
for(var n in tests){
if(skip.test(n)){continue;}
if(tests[n](obj)){
if(equivs[n]){return equivs[n];}
return n;
}
}
return 'unknown';
}
function checkType(obj,type){
if(type === null){type = 'null';}
else if(type === true){type = 'true';}
else if(type === false){type = 'false';}
else if(tests.function(type)){type = type.name.toLowerCase();}
else{type = type.toLowerCase();}
if(!type){
throw new Error('no type provided');
}
if(tests[type]){
return tests[type](obj);
}
throw new Error('unknown object type `'+type+'`');
}
function getTypeAdvanced(obj,type){
if(arguments.length>1){
return checkType(obj,type);
}
return getType(obj);
}
getTypeAdvanced.tests = tests;
getTypeAdvanced.aliases = equivs;
module.exports = getTypeAdvanced;
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
module.exports = Object.prototype.hasOwnProperty;
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
module.exports = Object.prototype.toString;
/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isNull(obj){return obj === null;}
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
module.exports = function isArguments(obj){return toString.call(obj) == '[object Arguments]';};
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
module.exports = function isArray(obj){return toString.call(obj) == '[object Array]';};
/***/ },
/* 12 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
module.exports = function isBoolean(obj){return obj === true || obj === false || toString.call(obj) == '[object Boolean]';};
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isDate(obj){return obj instanceof Date;}
/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
module.exports = function isError(obj){return toString.call(obj) === '[object Error]';};
/***/ },
/* 15 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
module.exports = function isFunction(obj){
return toString.call(obj) == '[object Function]';
};
/***/ },
/* 16 */
/***/ function(module, exports, __webpack_require__) {
var tests = __webpack_require__(4);
var hasOwnProperty = __webpack_require__(7);
module.exports = function test(obj,type){
if(type === null){type = 'null';}
else if(type === true){type = 'true';}
else if(type === false){type = 'false';}
else if(tests.function(type)){type = type.name.toLowerCase();}
else{type = type.toLowerCase();}
if(!type){
throw new Error('no type provided');
}
if(hasOwnProperty.call(tests,type)){
return tests[type](obj);
}
throw new Error('cannot check for unknown type `'+type+'`')
}
/***/ },
/* 17 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isInteger(obj){return !isNaN(obj) && parseInt(obj) == obj;};
/***/ },
/* 18 */
/***/ function(module, exports, __webpack_require__) {
/** courtesy of http://davidwalsh.name/detect-native-function **/
var toString = __webpack_require__(8);
// Used to resolve the decompiled source of functions
var fnToString = Function.prototype.toString;
// Used to detect host constructors (Safari > 4; really typed array specific)
var reHostCtor = /^\[object .+?Constructor\]$/;
// Compile a regexp using a common native method as a template.
// We chose `Object#toString` because there's a good chance it is not being mucked with.
var reNative = RegExp('^' +
// Coerce `Object#toString` to a string
String(toString)
// Escape any special regexp characters
.replace(/[.*+?^${}()|[\]\/\\]/g, '\\$&')
// Replace mentions of `toString` with `.*?` to keep the template generic.
// Replace thing like `for ...` to support environments like Rhino which add extra info
// such as method arity.
.replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);
module.exports = function isNative(value) {
var type = typeof value;
return type == 'function'
// Use `Function#toString` to bypass the value's own `toString` method
// and avoid being faked out.
? reNative.test(fnToString.call(value))
// Fallback to a host object check because some environments will represent
// things like typed arrays as DOM methods which may not conform to the
// normal native pattern.
: (value && type == 'object' && reHostCtor.test(toString.call(value))) || false;
}
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isNode(obj){return !!(obj && obj.nodeType == 1);};
/***/ },
/* 20 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isNumber(obj){
return typeof obj === 'number' && isNaN(obj) === false &&
obj !== Number.POSITIVE_INFINITY &&
obj !== Number.NEGATIVE_INFINITY;
};
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isNumeric(obj){return !isNaN(parseFloat(obj)) && isFinite(obj);};
/***/ },
/* 22 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isObject(obj){return typeof obj=='object' && obj.constructor == Object;};
/***/ },
/* 23 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isRegExp(obj){return obj instanceof RegExp;};
/***/ },
/* 24 */
/***/ function(module, exports, __webpack_require__) {
var toString = __webpack_require__(8);
module.exports = function isString(obj){return toString.call(obj) == '[object String]';};
/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {
var isNumber = __webpack_require__(20);
module.exports = function isArrayLike(obj){
if(typeof obj === 'undefined'){return false;}
return isNumber(obj.length) && (obj.length == 0 || (0 in obj))
}
/***/ },
/* 26 */
/***/ function(module, exports, __webpack_require__) {
var isString = __webpack_require__(24);
var isNumber = __webpack_require__(20);
var isInteger = __webpack_require__(17);
module.exports = function isReference(obj){
return (!isString(obj) && !isNumber(obj) && !isInteger(obj));
}
/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {
var isEmpty = __webpack_require__(29);
module.exports = function isTrue(obj){
return !isEmpty(obj);
}
/***/ },
/* 28 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isUndefined(obj){return (typeof obj === 'undefined');}
/***/ },
/* 29 */
/***/ function(module, exports, __webpack_require__) {
var isDefined = __webpack_require__(31);
var emptyString = '';
var hasOwnProperty = __webpack_require__(7);
var isNumber = __webpack_require__(20);
module.exports = function isEmpty(obj){
if((!isDefined(obj)) || obj == emptyString){return true;}
if(obj === false){return true;}
if(obj === true){return false;}
if(isNumber(obj)){return !!!(obj>0);}
if(typeof obj === 'string'){return !!!obj;}
if(typeof obj.length !=='undefined'){return !!!(obj.length > 0);}
for (var key in obj) {
if (hasOwnProperty.call(obj, key)){return false;}
}
return true;
};
/***/ },
/* 30 */
/***/ function(module, exports, __webpack_require__) {
var isEmpty = __webpack_require__(29);
module.exports = function isFalse(obj){
return isEmpty(obj);
}
/***/ },
/* 31 */
/***/ function(module, exports, __webpack_require__) {
module.exports = function isDefined(obj){return !(obj===null || typeof obj === 'undefined');};
/***/ }
/******/ ]);
//# sourceMappingURL=dis.js.map