UNPKG

@rzl-zone/utils-js

Version:

A modern, lightweight set of JavaScript utility functions with TypeScript support for everyday development, crafted to enhance code readability and maintainability.

102 lines (96 loc) 3.54 kB
/*! * ==================================================== * Rzl Utils-JS. * ---------------------------------------------------- * Version: 3.11.0. * Author: Rizalvin Dwiky. * Repository: https://github.com/rzl-zone/utils-js. * ==================================================== */ import { isDate, isMap } from './chunk-AXDYWO67.js'; import { isObjectOrArray, isError, isSet, isArray, isUndefined } from './chunk-MSUW5VHZ.js'; var isRegExp = (value) => { return value instanceof RegExp; }; function isArrayBuffer(value) { return value instanceof ArrayBuffer; } function baseDeepEqual(value, other, customizer, seen = /* @__PURE__ */ new WeakMap()) { if (value === other) return true; if (value !== value && other !== other) return true; if (!isObjectOrArray(value) || !isObjectOrArray(other)) { return false; } if (seen.get(value) === other) return true; seen.set(value, other); const callCustomizer = (v, o, key, valObj, othObj) => { if (customizer) { const result = customizer(v, o, key, valObj, othObj, seen); if (!isUndefined(result)) return result; } return baseDeepEqual(v, o, customizer, seen); }; if (isDate(value) && isDate(other)) return value.getTime() === other.getTime(); if (isRegExp(value) && isRegExp(other)) return value.source === other.source && value.flags === other.flags; if (isError(value) && isError(other)) return value.name === other.name && value.message === other.message; if (ArrayBuffer.isView(value) && ArrayBuffer.isView(other)) { const v = new Uint8Array(value.buffer, value.byteOffset, value.byteLength); const o = new Uint8Array(other.buffer, other.byteOffset, other.byteLength); if (v.length !== o.length) return false; for (let i = 0; i < v.length; i++) if (v[i] !== o[i]) return false; return true; } if (isArrayBuffer(value) && isArrayBuffer(other)) { if (value.byteLength !== other.byteLength) return false; const v = new Uint8Array(value), o = new Uint8Array(other); for (let i = 0; i < v.length; i++) if (v[i] !== o[i]) return false; return true; } if (isMap(value) && isMap(other)) { if (value.size !== other.size) return false; for (const [k, v] of value) { if (!other.has(k)) return false; if (!baseDeepEqual(v, other.get(k), customizer, seen)) return false; } return true; } if (isSet(value) && isSet(other)) { if (value.size !== other.size) return false; for (const v of value) { let matched = false; for (const o of other) { if (baseDeepEqual(v, o, customizer, seen)) { matched = true; break; } } if (!matched) return false; } return true; } if (isArray(value) && isArray(other)) { if (value.length !== other.length) return false; for (let i = 0; i < value.length; i++) { if (!callCustomizer(value[i], other[i], i, value, other)) return false; } return true; } if (Object.getPrototypeOf(value) !== Object.getPrototypeOf(other)) { return false; } const vKeys = Reflect.ownKeys(value); const oKeys = Reflect.ownKeys(other); if (vKeys.length !== oKeys.length) return false; for (const key of vKeys) { const vVal = value[key]; const oVal = other[key]; if (!callCustomizer(vVal, oVal, key, value, other)) return false; } return true; } function isEqual(value, other) { return baseDeepEqual(value, other, void 0, /* @__PURE__ */ new WeakMap()); } export { baseDeepEqual, isArrayBuffer, isEqual, isRegExp };