ts-predicate
Version:
TypeScript predicates and assertions library
51 lines (50 loc) • 1.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValueGuard = void 0;
const TypeGuard_js_1 = require("./TypeGuard.cjs");
/**
* ValueGuard
*
* @class
*/
class ValueGuard {
/**
* IsSimilar
*
* @description check if two value are similar (same key and values)
* @public
* @static
* @param {unknown} a first argument
* @param {unknown} b second argument
* @return {boolean} a boolean
*/
static IsSimilar(a, b) {
if (a === b) {
return true;
}
if (Number.isNaN(a) && Number.isNaN(b)) {
return true;
}
if (TypeGuard_js_1.TypeGuard.IsRecord(a) && TypeGuard_js_1.TypeGuard.IsRecord(b)) {
const KEYS_A = Object.keys(a);
const KEYS_B = Object.keys(b);
if (!ValueGuard.IsSimilar(KEYS_A, KEYS_B)) {
return false;
}
return KEYS_A.every((key) => {
return ValueGuard.IsSimilar(a[key], b[key]);
});
}
if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {
// Stryker disable next-line EqualityOperator: Accessing out of bound values on both arrays
for (let i = 0; i < a.length; ++i) {
if (!ValueGuard.IsSimilar(a[i], b[i])) {
return false;
}
}
return true;
}
return false;
}
}
exports.ValueGuard = ValueGuard;