immutable-class
Version:
A template for creating immutable classes
83 lines (82 loc) • 2.24 kB
JavaScript
export function generalEqual(a, b) {
if (a === b)
return true;
if (a && b) {
if (typeof a.toISOString === 'function' &&
typeof b.toISOString === 'function') {
return a.valueOf() === b.valueOf();
}
if (Array.isArray(a) && Array.isArray(b)) {
return generalArraysEqual(a, b);
}
if (typeof a.equals === 'function') {
return a.equals(b);
}
}
return false;
}
export function immutableEqual(a, b) {
if (a === b)
return true;
if (!a)
return false;
return a.equals(b);
}
export function generalArraysEqual(arrayA, arrayB) {
if (arrayA === arrayB)
return true;
if (!arrayA || !arrayB)
return false;
const length = arrayA.length;
if (length !== arrayB.length)
return false;
for (let i = 0; i < length; i++) {
if (!generalEqual(arrayA[i], arrayB[i]))
return false;
}
return true;
}
export function immutableArraysEqual(arrayA, arrayB) {
if (arrayA === arrayB)
return true;
if (!arrayA || !arrayB)
return false;
const length = arrayA.length;
if (length !== arrayB.length)
return false;
for (let i = 0; i < length; i++) {
if (!immutableEqual(arrayA[i], arrayB[i]))
return false;
}
return true;
}
export function generalLookupsEqual(lookupA, lookupB) {
if (lookupA === lookupB)
return true;
if (!lookupA || !lookupB)
return false;
const keysA = Object.keys(lookupA);
const keysB = Object.keys(lookupB);
if (keysA.length !== keysB.length)
return false;
for (const k of keysA) {
if (!generalEqual(lookupA[k], lookupB[k]))
return false;
}
return true;
}
export function immutableLookupsEqual(lookupA, lookupB) {
if (lookupA === lookupB)
return true;
if (!lookupA || !lookupB)
return false;
const keysA = Object.keys(lookupA);
const keysB = Object.keys(lookupB);
if (keysA.length !== keysB.length)
return false;
for (const k of keysA) {
if (!immutableEqual(lookupA[k], lookupB[k]))
return false;
}
return true;
}