import allKeys from './allKeys';
import { nativeUndefined } from './internals/native';
import isNil from './isNil';
/**
* 通过调用断言 `source` 的属性与 `object` 的相应属性值,检查 `object` 是否符合 `source`。
*
* @function
* @alias module:Util.conformsTo
* @since 1.0.0
* @param {Object} object 要检查的对象。
* @param {Object} source 要断言属性是否符合的对象。
* @returns {boolean} 如果 `object` 符合,返回 `true`,否则返回 `false`。
* @example
*
* const object = { a: 1, b: 2 }
*
* conformsTo(object, { b: value => value > 1 }); // true
*
* conformsTo(object, { b: value => value > 2 }); // false
*
*/
const conformsTo = function (object, source) {
const props = allKeys(source);
const length = props.length;
if (isNil(object)) {
return !length;
}
if (length === 0) {
return true;
}
for (let i = 0; i < length; i++) {
const key = props[i];
const predicate = source[key];
const value = object[key];
if ((value === nativeUndefined && !(key in object)) || !predicate(value)) {
return false;
}
}
return true;
};
export default conformsTo;