diff --git a/package-lock.json b/package-lock.json index 33c0cab2..0ac33fd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "dotenv": "^10.0.0", "express": "^5.2.1", "express-session": "^1.19.0", - "fast-deep-equal": "^3.1.3", + "fast-equals": "^6.0.0", "fixed-size-list": "^0.3.0", "flat-cache": "^6.1.13", "formidable": "^3.5", @@ -8253,6 +8253,15 @@ "version": "3.1.3", "license": "MIT" }, + "node_modules/fast-equals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-6.0.0.tgz", + "integrity": "sha512-PFhhIGgdM79r5Uztdj9Zb6Tt1zKafqVfdMGwVca1z5z6fbX7DmsySSuJd8HiP6I1j505DCS83cLxo5rmSNeVEA==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/fast-glob": { "version": "3.3.2", "dev": true, diff --git a/package.json b/package.json index 327fd45d..747885d2 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "dotenv": "^10.0.0", "express": "^5.2.1", "express-session": "^1.19.0", - "fast-deep-equal": "^3.1.3", + "fast-equals": "^6.0.0", "fixed-size-list": "^0.3.0", "flat-cache": "^6.1.13", "formidable": "^3.5", diff --git a/src/backend/common/AbstractComponent.ts b/src/backend/common/AbstractComponent.ts index eef9b8e1..167497d3 100644 --- a/src/backend/common/AbstractComponent.ts +++ b/src/backend/common/AbstractComponent.ts @@ -2,7 +2,6 @@ import { childLogger, Logger } from "@foxxmd/logging"; import { cacheFunctions, } from "@foxxmd/regex-buddy-core"; -import deepEqual from 'fast-deep-equal'; import { LifecycleStep, PlayData, PlayObject, TransformResult } from "../../core/Atomic.js"; import { buildPlayHumanDiffable, buildTrackString } from "../../core/StringUtils.js"; import { CommonClientConfig } from "./infrastructure/config/client/index.js"; @@ -27,6 +26,7 @@ import { MSCache } from "./Cache.js"; import { diffObjects, diffObjectsConsoleOutput, patchObject } from "../../core/DataUtils.js"; import clone from "clone"; import { loggerNoop } from "./MaybeLogger.js"; +import { objectsEqual } from "../utils/DataUtils.js"; export type AbstractComponentConfig = (CommonClientConfig | CommonSourceConfig) & { transformManager?: TransformerManager }; @@ -406,7 +406,7 @@ export default abstract class AbstractComponent extends AbstractInitializable { } else { step.flowResult = onSuccess; - if (!deepEqual(playTruth.data, newTransformedPlay.data)) { + if (!objectsEqual(playTruth.data, newTransformedPlay.data)) { const o = JSON.parse(JSON.stringify(playTruth.data)); const t = JSON.parse(JSON.stringify(newTransformedPlay.data)); const patch = diffObjects(o, t); // jdiff.diff(o, t); diff --git a/src/backend/utils/DataUtils.ts b/src/backend/utils/DataUtils.ts index 57f2a9eb..176f1adb 100644 --- a/src/backend/utils/DataUtils.ts +++ b/src/backend/utils/DataUtils.ts @@ -1,6 +1,7 @@ import JSON5 from "json5"; import { constants, promises } from "fs"; import { MaybeLogger } from '../common/MaybeLogger.js'; +import { deepEqual } from 'fast-equals'; export const asArray = (data: T | T[]): T[] => { if (Array.isArray(data)) { @@ -166,4 +167,12 @@ export const shuffleArray = (array: any[]): void => { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } +} + +export const objectsEqual = (a: object, b: object) => { + try { + return deepEqual(a, b); + } catch (e) { + throw new Error('Could not compare objects', {cause: e}); + } } \ No newline at end of file