{"ast":null,"code":"/**\r\n * Returns the object type of the given payload\r\n *\r\n * @param {*} payload\r\n * @returns {string}\r\n */\nfunction getType(payload) {\n  return Object.prototype.toString.call(payload).slice(8, -1);\n}\n/**\r\n * Returns whether the payload is undefined\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\n\n\nfunction isUndefined(payload) {\n  return getType(payload) === 'Undefined';\n}\n/**\r\n * Returns whether the payload is null\r\n *\r\n * @param {*} payload\r\n * @returns {payload is null}\r\n */\n\n\nfunction isNull(payload) {\n  return getType(payload) === 'Null';\n}\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\n\n\nfunction isPlainObject(payload) {\n  if (getType(payload) !== 'Object') return false;\n  return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;\n}\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\n\n\nfunction isObject(payload) {\n  return isPlainObject(payload);\n}\n/**\r\n * Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is {[key: string]: any}}\r\n */\n\n\nfunction isAnyObject(payload) {\n  return getType(payload) === 'Object';\n}\n/**\r\n * Returns whether the payload is an object like a type passed in < >\r\n *\r\n * Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop.\r\n *\r\n * @template T this must be passed in < >\r\n * @param {*} payload\r\n * @returns {payload is T}\r\n */\n\n\nfunction isObjectLike(payload) {\n  return isAnyObject(payload);\n}\n/**\r\n * Returns whether the payload is a function\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Function}\r\n */\n\n\nfunction isFunction(payload) {\n  return getType(payload) === 'Function';\n}\n/**\r\n * Returns whether the payload is an array\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\n\n\nfunction isArray(payload) {\n  return getType(payload) === 'Array';\n}\n/**\r\n * Returns whether the payload is a string\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\n\n\nfunction isString(payload) {\n  return getType(payload) === 'String';\n}\n/**\r\n * Returns whether the payload is a string, BUT returns false for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\n\n\nfunction isFullString(payload) {\n  return isString(payload) && payload !== '';\n}\n/**\r\n * Returns whether the payload is ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\n\n\nfunction isEmptyString(payload) {\n  return payload === '';\n}\n/**\r\n * Returns whether the payload is a number\r\n *\r\n * This will return false for NaN\r\n *\r\n * @param {*} payload\r\n * @returns {payload is number}\r\n */\n\n\nfunction isNumber(payload) {\n  return getType(payload) === 'Number' && !isNaN(payload);\n}\n/**\r\n * Returns whether the payload is a boolean\r\n *\r\n * @param {*} payload\r\n * @returns {payload is boolean}\r\n */\n\n\nfunction isBoolean(payload) {\n  return getType(payload) === 'Boolean';\n}\n/**\r\n * Returns whether the payload is a regular expression\r\n *\r\n * @param {*} payload\r\n * @returns {payload is RegExp}\r\n */\n\n\nfunction isRegExp(payload) {\n  return getType(payload) === 'RegExp';\n}\n/**\r\n * Returns whether the payload is a date, and that the date is Valid\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Date}\r\n */\n\n\nfunction isDate(payload) {\n  return getType(payload) === 'Date' && !isNaN(payload);\n}\n/**\r\n * Returns whether the payload is a Symbol\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Symbol}\r\n */\n\n\nfunction isSymbol(payload) {\n  return getType(payload) === 'Symbol';\n}\n/**\r\n * Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @returns {*}\r\n */\n\n\nfunction isPrimitive(payload) {\n  return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\n}\n/**\r\n * Does a generic check to check that the given payload is of a given type.\r\n * In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);\r\n * It will, however, differentiate between object and null\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {T} type\r\n * @throws {TypeError} Will throw type error if type is an invalid type\r\n * @returns {payload is T}\r\n */\n\n\nfunction isType(payload, type) {\n  if (!(type instanceof Function)) {\n    throw new TypeError('Type must be a function');\n  }\n\n  if (!type.hasOwnProperty('prototype')) {\n    throw new TypeError('Type is not a class');\n  } // Classes usually have names (as functions usually have names)\n\n\n  var name = type.name;\n  return getType(payload) === name || Boolean(payload && payload.constructor === type);\n}\n\nexport { getType, isUndefined, isNull, isPlainObject, isObject, isAnyObject, isObjectLike, isFunction, isArray, isString, isFullString, isEmptyString, isNumber, isBoolean, isRegExp, isDate, isSymbol, isPrimitive, isType };","map":null,"metadata":{},"sourceType":"module"}