'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _typeof = require('@babel/runtime/helpers/typeof');

function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);

/**
 * 判断数据是不是正则对象
 * @param {any} value - 输入数据
 * @returns {boolean} 是否是正则对象
 *
 * @example
 *
 * isRegExp(1)
 *
 * // => false
 *
 * isRegExp(/\d/)
 *
 * // => true
 */
function isRegExp(value) {
  return Object.prototype.toString.call(value) === '[object RegExp]';
}
/**
 * 判断数据是不是时间对象
 * @param {any} value - 输入数据
 * @returns {boolean} 是否是时间对象
 *
 * @example
 *
 * isDate(1)
 *
 * // => false
 *
 * isDate(new Date())
 *
 * // => true
 */
function isDate(value) {
  return Object.prototype.toString.call(value) === '[object Date]';
}
/**
 * 判断数据是不是函数
 * @param {any} value - 输入数据
 * @returns {boolean} 是否是函数
 *
 * @example
 *
 * isFunction(1)
 *
 * // => false
 *
 * isFunction(()=>{})
 *
 * // => true
 */
function isFunction(value) {
  // typeof val === 'function' // 也可以
  return Object.prototype.toString.call(value) === '[object Function]';
}
/**
 * 判断数据是否为普通对象
 * 排除 null 和数组，只返回纯对象
 * @param val - 输入数据
 * @returns 是否为普通对象
 * @example
 * ```ts
 * isPlainObject({}); // true
 * isPlainObject([]); // false
 * isPlainObject(null); // false
 * ```
 */
function isPlainObject(val) {
  return val !== null && _typeof__default["default"](val) === 'object' && !Array.isArray(val);
}
/**
 * 判断数据是否为 Promise 对象
 * 检查对象是否有 then 和 catch 方法
 * @param val - 输入数据
 * @returns 是否为 Promise 对象
 * @example
 * ```ts
 * isPromise(Promise.resolve()); // true
 * isPromise({}); // false
 * ```
 */
function isPromise(val) {
  return isPlainObject(val) && isFunction(val.then) && isFunction(val["catch"]);
}
/**
 * 判断值是否已定义（不为 undefined 和 null）
 * @param value - 输入数据
 * @returns 是否已定义
 * @example
 * ```ts
 * isDef(0); // true
 * isDef(''); // true
 * isDef(null); // false
 * isDef(undefined); // false
 * ```
 */
function isDef(value) {
  return value !== undefined && value !== null;
}
/**
 * 判断是否为对象或函数
 * @param x - 输入数据
 * @returns 是否为对象或函数
 * @example
 * ```ts
 * isObj({}); // true
 * isObj(() => {}); // true
 * isObj(null); // false
 * ```
 */
function isObj(x) {
  var type = _typeof__default["default"](x);
  return x !== null && (type === 'object' || type === 'function');
}
/**
 * 判断是否为对象类型
 * @param val - 输入数据
 * @returns 是否为对象
 * @example
 * ```ts
 * isObject({}); // true
 * isObject([]); // true
 * isObject(null); // false
 * ```
 */
function isObject(val) {
  return val !== null && _typeof__default["default"](val) === 'object';
}
var IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
var VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv)/i;
/**
 * 判断 URL 是否为图片地址
 * 根据文件扩展名判断（jpeg、jpg、gif、png、svg、webp、jfif、bmp、dpg）
 * @param url - URL 地址
 * @returns 是否为图片 URL
 * @example
 * ```ts
 * isImageUrl('https://example.com/image.jpg'); // true
 * isImageUrl('https://example.com/video.mp4'); // false
 * ```
 */
function isImageUrl(url) {
  return IMAGE_REGEXP.test(url);
}
/**
 * 判断 URL 是否为视频地址
 * 根据文件扩展名判断（mp4、mpg、mpeg、dat、asf、avi、rm、rmvb、mov、wmv、flv、mkv）
 * @param url - URL 地址
 * @returns 是否为视频 URL
 * @example
 * ```ts
 * isVideoUrl('https://example.com/video.mp4'); // true
 * isVideoUrl('https://example.com/image.jpg'); // false
 * ```
 */
function isVideoUrl(url) {
  return VIDEO_REGEXP.test(url);
}
/**
 * 判断字符串是否为数字格式
 * 支持整数和小数
 * @param value - 输入值
 * @returns 是否为数字格式
 * @example
 * ```ts
 * isNumber('123'); // true
 * isNumber('123.45'); // true
 * isNumber('abc'); // false
 * ```
 */
function isNumber(value) {
  return /^\d+(\.\d+)?$/.test(value);
}

exports.isDate = isDate;
exports.isDef = isDef;
exports.isFunction = isFunction;
exports.isImageUrl = isImageUrl;
exports.isNumber = isNumber;
exports.isObj = isObj;
exports.isObject = isObject;
exports.isPlainObject = isPlainObject;
exports.isPromise = isPromise;
exports.isRegExp = isRegExp;
exports.isVideoUrl = isVideoUrl;
