{"version":3,"file":"isDeepEqual.cjs","names":["isObject","value","getAreTypedArraysEqual","firstArray","secondArray","length","Array","prototype","every","call","element","index","getAreBytesEqual","firstView","secondView","ArrayBuffer","isView","Uint8Array","buffer","byteOffset","byteLength","getAreOwnKeysEqual","firstValue","secondValue","firstKeys","Object","keys","key","hasOwn","getAreValuesEqual","getAreEntriesPaired","candidateEntries","entries","getIsPair","reduce","unpairedCandidateEntries","entry","pairIndex","findIndex","candidateEntry","undefined","filter","_","getAreObjectsEqual","constructor","isArray","Date","getTime","RegExp","toString","Set","size","from","has","Map","entryValue","get","candidateKey","candidateValue","DataView","Number","isNaN","isDeepEqual","exports"],"sources":["../../src/isDeepEqual.ts"],"sourcesContent":["/*!\n * Copyright (c) 2026-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nexport type IsDeepEqualArgs = {\n  firstValue: unknown;\n  secondValue: unknown;\n};\n\nconst isObject = (value: unknown): value is object =>\n  value !== null && typeof value === \"object\";\n\nconst getAreTypedArraysEqual = ({\n  firstArray,\n  secondArray,\n}: {\n  firstArray: ArrayLike<unknown>;\n  secondArray: ArrayLike<unknown>;\n}) =>\n  firstArray.length === secondArray.length &&\n  Array.prototype.every.call(\n    firstArray,\n    (element, index) => element === secondArray[index],\n  );\n\nconst getAreBytesEqual = ({\n  firstView,\n  secondView,\n}: {\n  firstView: ArrayBufferView | ArrayBuffer;\n  secondView: ArrayBufferView | ArrayBuffer;\n}) =>\n  getAreTypedArraysEqual({\n    firstArray: ArrayBuffer.isView(firstView)\n      ? new Uint8Array(\n          firstView.buffer,\n          firstView.byteOffset,\n          firstView.byteLength,\n        )\n      : new Uint8Array(firstView),\n    secondArray: ArrayBuffer.isView(secondView)\n      ? new Uint8Array(\n          secondView.buffer,\n          secondView.byteOffset,\n          secondView.byteLength,\n        )\n      : new Uint8Array(secondView),\n  });\n\nconst getAreOwnKeysEqual = (firstValue: object, secondValue: object) => {\n  const firstKeys = Object.keys(firstValue);\n\n  return (\n    firstKeys.length === Object.keys(secondValue).length &&\n    firstKeys.every(\n      (key) =>\n        Object.hasOwn(secondValue, key) &&\n        getAreValuesEqual(\n          (firstValue as Record<string, unknown>)[key],\n          (secondValue as Record<string, unknown>)[key],\n        ),\n    )\n  );\n};\n\nconst getAreEntriesPaired = <EntryType>({\n  candidateEntries,\n  entries,\n  getIsPair,\n}: {\n  candidateEntries: EntryType[];\n  entries: EntryType[];\n  getIsPair: (entry: EntryType, candidateEntry: EntryType) => boolean;\n}) =>\n  entries.reduce<EntryType[] | undefined>((unpairedCandidateEntries, entry) => {\n    const pairIndex =\n      unpairedCandidateEntries?.findIndex((candidateEntry) =>\n        getIsPair(entry, candidateEntry),\n      ) ?? -1;\n\n    return pairIndex === -1\n      ? undefined\n      : unpairedCandidateEntries?.filter((_, index) => index !== pairIndex);\n  }, candidateEntries) !== undefined;\n\nconst getAreObjectsEqual = (firstValue: object, secondValue: object) => {\n  if (firstValue.constructor !== secondValue.constructor) {\n    return false;\n  }\n\n  if (firstValue.constructor === Object) {\n    return getAreOwnKeysEqual(firstValue, secondValue);\n  }\n\n  if (Array.isArray(firstValue) && Array.isArray(secondValue)) {\n    return (\n      firstValue.length === secondValue.length &&\n      // `every` skips holes. `findIndex` visits each index, holes included.\n      firstValue.findIndex(\n        (element, index) =>\n          !(\n            index in firstValue === index in secondValue &&\n            getAreValuesEqual(element, secondValue[index])\n          ),\n      ) === -1\n    );\n  }\n\n  if (firstValue instanceof Date && secondValue instanceof Date) {\n    return firstValue.getTime() === secondValue.getTime();\n  }\n\n  if (firstValue instanceof RegExp && secondValue instanceof RegExp) {\n    return firstValue.toString() === secondValue.toString();\n  }\n\n  if (firstValue instanceof Set && secondValue instanceof Set) {\n    return (\n      firstValue.size === secondValue.size &&\n      Array.from(firstValue).every(\n        (entry) => isObject(entry) || secondValue.has(entry),\n      ) &&\n      getAreEntriesPaired({\n        candidateEntries: Array.from(secondValue).filter(isObject),\n        entries: Array.from(firstValue).filter(isObject),\n        getIsPair: getAreValuesEqual,\n      })\n    );\n  }\n\n  if (firstValue instanceof Map && secondValue instanceof Map) {\n    return (\n      firstValue.size === secondValue.size &&\n      Array.from(firstValue).every(\n        ([key, entryValue]) =>\n          isObject(key) ||\n          (secondValue.has(key) &&\n            getAreValuesEqual(entryValue, secondValue.get(key))),\n      ) &&\n      getAreEntriesPaired({\n        candidateEntries: Array.from(secondValue).filter(([key]) =>\n          isObject(key),\n        ),\n        entries: Array.from(firstValue).filter(([key]) => isObject(key)),\n        getIsPair: ([key, entryValue], [candidateKey, candidateValue]) =>\n          getAreValuesEqual(key, candidateKey) &&\n          getAreValuesEqual(entryValue, candidateValue),\n      })\n    );\n  }\n\n  if (\n    (firstValue instanceof ArrayBuffer && secondValue instanceof ArrayBuffer) ||\n    (firstValue instanceof DataView && secondValue instanceof DataView)\n  ) {\n    return getAreBytesEqual({ firstView: firstValue, secondView: secondValue });\n  }\n\n  if (ArrayBuffer.isView(firstValue) && ArrayBuffer.isView(secondValue)) {\n    return getAreTypedArraysEqual({\n      firstArray: firstValue as unknown as ArrayLike<unknown>,\n      secondArray: secondValue as unknown as ArrayLike<unknown>,\n    });\n  }\n\n  return getAreOwnKeysEqual(firstValue, secondValue);\n};\n\nconst getAreValuesEqual = (\n  firstValue: unknown,\n  secondValue: unknown,\n): boolean =>\n  firstValue === secondValue ||\n  (isObject(firstValue) && isObject(secondValue)\n    ? getAreObjectsEqual(firstValue, secondValue)\n    : Number.isNaN(firstValue) && Number.isNaN(secondValue));\n\n/**\n * Returns `true` when two values are deeply equal. A function compares by its identity.\n *\n * Heavily inspired by [dequal](https://github.com/lukeed/dequal).\n */\nexport const isDeepEqual = ({ firstValue, secondValue }: IsDeepEqualArgs) =>\n  getAreValuesEqual(firstValue, secondValue);\n"],"mappings":"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","ignoreList":[]}