'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.stringContains = exports.objectContains = exports.arrayContains = exports.functionThrows = exports.isA = exports.isObject = exports.isArray = exports.isFunction = exports.isEqual = exports.whyNotEqual = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var _isRegex = require('is-regex');
var _isRegex2 = _interopRequireDefault(_isRegex);
var _why = require('is-equal/why');
var _why2 = _interopRequireDefault(_why);
var _objectKeys = require('object-keys');
var _objectKeys2 = _interopRequireDefault(_objectKeys);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var whyNotEqual = exports.whyNotEqual = function whyNotEqual(a, b) {
return a == b ? '' : (0, _why2.default)(a, b);
};
var isEqual = exports.isEqual = function isEqual(a, b) {
return whyNotEqual(a, b) === '';
};
var isFunction = exports.isFunction = function isFunction(object) {
return typeof object === 'function';
};
var isArray = exports.isArray = function isArray(object) {
return Array.isArray(object);
};
var isObject = exports.isObject = function isObject(object) {
return object && !isArray(object) && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object';
};
var isA = exports.isA = function isA(object, value) {
if (isFunction(value)) return object instanceof value;
if (value === 'array') return Array.isArray(object);
return (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === value;
};
var functionThrows = exports.functionThrows = function functionThrows(fn, context, args, value) {
try {
fn.apply(context, args);
} catch (error) {
if (value == null) return true;
if (isFunction(value) && error instanceof value) return true;
var message = error.message || error;
if (typeof message === 'string') {
if ((0, _isRegex2.default)(value) && value.test(error.message)) return true;
if (typeof value === 'string' && message.indexOf(value) !== -1) return true;
}
}
return false;
};
var arrayContains = exports.arrayContains = function arrayContains(array, value, compareValues) {
return array.some(function (item) {
return compareValues(item, value) !== false;
});
};
var ownEnumerableKeys = function ownEnumerableKeys(object) {
if ((typeof Reflect === 'undefined' ? 'undefined' : _typeof(Reflect)) === 'object' && typeof Reflect.ownKeys === 'function') {
return Reflect.ownKeys(object).filter(function (key) {
return Object.getOwnPropertyDescriptor(object, key).enumerable;
});
}
if (typeof Object.getOwnPropertySymbols === 'function') {
return Object.getOwnPropertySymbols(object).filter(function (key) {
return Object.getOwnPropertyDescriptor(object, key).enumerable;
}).concat((0, _objectKeys2.default)(object));
}
return (0, _objectKeys2.default)(object);
};
var objectContains = exports.objectContains = function objectContains(object, value, compareValues) {
return ownEnumerableKeys(value).every(function (k) {
if (isObject(object[k]) && isObject(value[k])) return objectContains(object[k], value[k], compareValues);
return compareValues(object[k], value[k]);
});
};
var stringContains = exports.stringContains = function stringContains(string, value) {
return string.indexOf(value) !== -1;
};