immutable-class
Version:
A template for creating immutable classes
92 lines (91 loc) • 2.74 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.immutableLookupsEqual = exports.generalLookupsEqual = exports.immutableArraysEqual = exports.generalArraysEqual = exports.immutableEqual = exports.generalEqual = void 0;
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;
}
exports.generalEqual = generalEqual;
function immutableEqual(a, b) {
if (a === b)
return true;
if (!a)
return false;
return a.equals(b);
}
exports.immutableEqual = immutableEqual;
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;
}
exports.generalArraysEqual = generalArraysEqual;
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;
}
exports.immutableArraysEqual = immutableArraysEqual;
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;
}
exports.generalLookupsEqual = generalLookupsEqual;
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;
}
exports.immutableLookupsEqual = immutableLookupsEqual;