UNPKG

voided-data

Version:

Proper DS for TS

46 lines (45 loc) 1.77 kB
"use strict"; // null, string, number, bigint, undefined, boolean Object.defineProperty(exports, "__esModule", { value: true }); const equals = (self, other) => { if (self === null || other === null) return self === other; if (typeof self !== typeof other) return false; if (Array.isArray(self) !== Array.isArray(other)) return false; if (Array.isArray(self)) { if (self.length !== other.length) return false; for (let i = 0; i < self.length; i++) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const left = self[i]; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const right = other[i]; if (!equals(left, right)) return false; } return true; } if (typeof self === 'object') { const selfValues = Object.entries(self); const otherValues = Object.entries(other); selfValues.sort(([l], [r]) => l.localeCompare(r)); otherValues.sort(([l], [r]) => l.localeCompare(r)); if (selfValues.length !== otherValues.length) return false; for (let i = 0; i < selfValues.length; i++) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const [, left] = selfValues[i]; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const [, right] = otherValues[i]; if (!equals(left, right)) return false; } return true; } if (Number.isNaN(self) && Number.isNaN(other)) return true; return self === other; }; exports.default = equals;