diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c83758e8d..b819d00e67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ should change the heading of the (upcoming) version to include a major version b --> # 5.24.3 +## @rjsf/utils + +- Rollback [4446](https://github.com/rjsf-team/react-jsonschema-form/pull/4446) due to regression + ## Dev / docs / playground - Fixed issue with selector, where validator was getting refreshed on clicking on anything in selector. [#4472](https://github.com/rjsf-team/react-jsonschema-form/pull/4472) diff --git a/package-lock.json b/package-lock.json index 537918fc12..a406cda3bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16648,15 +16648,6 @@ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, - "node_modules/fast-equals": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", - "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -35245,7 +35236,6 @@ "version": "5.24.2", "license": "Apache-2.0", "dependencies": { - "fast-equals": "^5.2.2", "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.1", "lodash": "^4.17.21", diff --git a/packages/utils/package.json b/packages/utils/package.json index 1877fd6422..21a5cf8b35 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -36,7 +36,6 @@ "react": "^16.14.0 || >=17" }, "dependencies": { - "fast-equals": "^5.2.2", "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.1", "lodash": "^4.17.21", diff --git a/packages/utils/src/deepEquals.ts b/packages/utils/src/deepEquals.ts index 99cb8779dd..2e2538848e 100644 --- a/packages/utils/src/deepEquals.ts +++ b/packages/utils/src/deepEquals.ts @@ -1,22 +1,19 @@ -import { createCustomEqual } from 'fast-equals'; +import isEqualWith from 'lodash/isEqualWith'; -/** Implements a deep equals using the `fast-equals.createCustomEqual` function, providing a customized comparator that assumes all functions are equivalent. +/** Implements a deep equals using the `lodash.isEqualWith` function, that provides a customized comparator that + * assumes all functions are equivalent. * * @param a - The first element to compare * @param b - The second element to compare * @returns - True if the `a` and `b` are deeply equal, false otherwise */ -const deepEquals = createCustomEqual({ - createCustomConfig: () => ({ - // Assume all functions are equivalent - // see https://github.com/rjsf-team/react-jsonschema-form/issues/255 - // - // Performance improvement: knowing that typeof a === function, so, only needs to check if typeof b === function. - // https://github.com/planttheidea/fast-equals/blob/c633c4e653cacf8fd5cbb309b6841df62322d74c/src/comparator.ts#L99 - areFunctionsEqual(_a, b) { - return typeof b === 'function'; - }, - }), -}); - -export default deepEquals; +export default function deepEquals(a: any, b: any): boolean { + return isEqualWith(a, b, (obj: any, other: any) => { + if (typeof obj === 'function' && typeof other === 'function') { + // Assume all functions are equivalent + // see https://github.com/rjsf-team/react-jsonschema-form/issues/255 + return true; + } + return undefined; // fallback to default isEquals behavior + }); +}