68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
// ==========================================================================
|
|
// Type checking utils
|
|
// ==========================================================================
|
|
|
|
const getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);
|
|
|
|
const instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);
|
|
|
|
const is = {
|
|
object(input) {
|
|
return getConstructor(input) === Object;
|
|
},
|
|
number(input) {
|
|
return getConstructor(input) === Number && !Number.isNaN(input);
|
|
},
|
|
string(input) {
|
|
return getConstructor(input) === String;
|
|
},
|
|
boolean(input) {
|
|
return getConstructor(input) === Boolean;
|
|
},
|
|
function(input) {
|
|
return getConstructor(input) === Function;
|
|
},
|
|
array(input) {
|
|
return !is.nullOrUndefined(input) && Array.isArray(input);
|
|
},
|
|
weakMap(input) {
|
|
return instanceOf(input, WeakMap);
|
|
},
|
|
nodeList(input) {
|
|
return instanceOf(input, NodeList);
|
|
},
|
|
element(input) {
|
|
return instanceOf(input, Element);
|
|
},
|
|
textNode(input) {
|
|
return getConstructor(input) === Text;
|
|
},
|
|
event(input) {
|
|
return instanceOf(input, Event);
|
|
},
|
|
cue(input) {
|
|
return instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);
|
|
},
|
|
track(input) {
|
|
return instanceOf(input, TextTrack) || (!is.nullOrUndefined(input) && is.string(input.kind));
|
|
},
|
|
url(input) {
|
|
return (
|
|
!is.nullOrUndefined(input) &&
|
|
/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(input)
|
|
);
|
|
},
|
|
nullOrUndefined(input) {
|
|
return input === null || typeof input === 'undefined';
|
|
},
|
|
empty(input) {
|
|
return (
|
|
is.nullOrUndefined(input) ||
|
|
((is.string(input) || is.array(input) || is.nodeList(input)) && !input.length) ||
|
|
(is.object(input) && !Object.keys(input).length)
|
|
);
|
|
},
|
|
};
|
|
|
|
export default is;
|