UNPKG

@darwish/utils-core

Version:

93 lines (92 loc) 3.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deepEqualByObject = exports.deepEqualByArray = void 0; /* eslint-disable @typescript-eslint/no-use-before-define */ var utils_is_1 = require("@darwish/utils-is"); var utils_tools_1 = require("@darwish/utils-tools"); function deepEqualByArray(lfs, rfs, isSort) { if (isSort === void 0) { isSort = false; } if (lfs.length !== rfs.length) { return false; } if (isSort) { lfs.sort(); rfs.sort(); } for (var i = 0; i < lfs.length; i++) { if (!deepEqual(lfs[i], rfs[i])) { return false; } } return true; } exports.deepEqualByArray = deepEqualByArray; function deepEqualByObject(lfs, rfs) { var key1 = Object.keys(lfs); var value1 = Object.values(lfs); var key2 = Object.keys(rfs); var value2 = Object.values(rfs); if (key1.length !== key2.length || value1.length !== value2.length) { return false; } key1.sort(); key2.sort(); value1.sort(); value2.sort(); for (var i = 0; i < key1.length; i++) { if (!deepEqual(key1[i], key2[i])) { return false; } if (!deepEqual(value1[i], value2[i])) { return false; } } return true; } exports.deepEqualByObject = deepEqualByObject; function deepEqual(lfs, rfs) { if ((0, utils_tools_1.typeOfData)(lfs) !== (0, utils_tools_1.typeOfData)(rfs)) return false; var isEqual = lfs === rfs; if (typeof lfs === 'object' && typeof rfs === 'object') { if ((0, utils_is_1.isArray)(lfs) && (0, utils_is_1.isArray)(rfs)) { // array isEqual = deepEqualByArray(lfs, rfs); } else if (((0, utils_is_1.isSet)(lfs) && (0, utils_is_1.isSet)(rfs)) || ((0, utils_is_1.isMap)(lfs) && (0, utils_is_1.isMap)(rfs))) { // set var arrLfs = Array.from(lfs); var arrRfs = Array.from(rfs); isEqual = deepEqualByArray(arrLfs, arrRfs, true); } else if ((0, utils_is_1.isDate)(lfs) && (0, utils_is_1.isDate)(rfs)) { // date isEqual = lfs.getTime() === rfs.getTime(); } else if ((0, utils_is_1.isNull)(lfs) && (0, utils_is_1.isNull)(rfs)) { // null isEqual = true; } else { console.log((0, utils_tools_1.typeOfData)(lfs), (0, utils_tools_1.typeOfData)(rfs)); isEqual = deepEqualByObject(lfs, rfs); } } else if (typeof lfs === 'function' && typeof rfs === 'function') { // function isEqual = lfs.toString() === rfs.toString(); } else if (typeof lfs === 'symbol' && typeof rfs === 'symbol') { // symbol isEqual = lfs.toString() === rfs.toString(); } else { // others // number && NaN if ((0, utils_is_1.isNumber)(lfs) && (0, utils_is_1.isNumber)(rfs) && isNaN(lfs) && isNaN(rfs)) return true; isEqual = lfs === rfs; } return isEqual; } exports.default = deepEqual;