diff --git a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-properties.util.ts b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-properties.util.ts index 3c22e7fcb5c..1117b0e59ae 100644 --- a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-properties.util.ts +++ b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-properties.util.ts @@ -1,5 +1,5 @@ -import deepEqual from 'deep-equal'; import { type ObjectRecord } from 'twenty-shared/types'; +import { fastDeepEqual } from 'twenty-shared/utils'; import { type BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; @@ -13,7 +13,7 @@ export const objectRecordChangedProperties = < ) => { const changedProperties = Object.keys(newRecord).filter( // @ts-expect-error legacy noImplicitAny - (key) => !deepEqual(oldRecord[key], newRecord[key]), + (key) => !fastDeepEqual(oldRecord[key], newRecord[key]), ); return changedProperties; diff --git a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts index 6ca53c050d6..dd95936f04a 100644 --- a/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts +++ b/packages/twenty-server/src/engine/core-modules/event-emitter/utils/object-record-changed-values.ts @@ -1,7 +1,5 @@ -import deepEqual from 'deep-equal'; import { FieldMetadataType, type ObjectRecord } from 'twenty-shared/types'; import { fastDeepEqual } from 'twenty-shared/utils'; -import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; @@ -9,26 +7,6 @@ import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-m import { buildFieldMapsFromFlatObjectMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/build-field-maps-from-flat-object-metadata.util'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -const LARGE_JSON_FIELDS: Record> = { - [STANDARD_OBJECTS.workflowVersion.universalIdentifier]: new Set([ - 'steps', - 'trigger', - ]), - [STANDARD_OBJECTS.workflowAutomatedTrigger.universalIdentifier]: new Set([ - 'settings', - ]), - [STANDARD_OBJECTS.workflowRun.universalIdentifier]: new Set(['state']), -}; - -const isLargeJsonField = ( - objectMetadataItem: Pick, - key: string, -): boolean => { - const universalIdentifier = objectMetadataItem.universalIdentifier; - - return LARGE_JSON_FIELDS[universalIdentifier]?.has(key) ?? false; -}; - export const objectRecordChangedValues = ( oldRecord: Partial, newRecord: Partial, @@ -62,11 +40,7 @@ export const objectRecordChangedValues = ( return acc; } - if (isLargeJsonField(objectMetadataItem, key)) { - if (fastDeepEqual(oldRecordValue, newRecordValue)) { - return acc; - } - } else if (deepEqual(oldRecordValue, newRecordValue)) { + if (fastDeepEqual(oldRecordValue, newRecordValue)) { return acc; } diff --git a/packages/twenty-server/src/engine/twenty-orm/utils/compute-relation-connect-query-configs.util.ts b/packages/twenty-server/src/engine/twenty-orm/utils/compute-relation-connect-query-configs.util.ts index 6913a9badc2..044e07fcb81 100644 --- a/packages/twenty-server/src/engine/twenty-orm/utils/compute-relation-connect-query-configs.util.ts +++ b/packages/twenty-server/src/engine/twenty-orm/utils/compute-relation-connect-query-configs.util.ts @@ -1,7 +1,10 @@ import { msg } from '@lingui/core/macro'; -import deepEqual from 'deep-equal'; import { FieldMetadataType } from 'twenty-shared/types'; -import { getUniqueConstraintsFields, isDefined } from 'twenty-shared/utils'; +import { + fastDeepEqual, + getUniqueConstraintsFields, + isDefined, +} from 'twenty-shared/utils'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; @@ -326,7 +329,7 @@ const checkUniqueConstraintsAreSameOrThrow = ( uniqueConstraintFields: FlatFieldMetadata[], ) => { if ( - !deepEqual( + !fastDeepEqual( relationConnectQueryConfig.uniqueConstraintFields, uniqueConstraintFields, ) diff --git a/packages/twenty-server/src/modules/messaging/message-folder-manager/utils/compute-folders-to-update.util.ts b/packages/twenty-server/src/modules/messaging/message-folder-manager/utils/compute-folders-to-update.util.ts index 4e8bdcf6ebb..784d23e1a52 100644 --- a/packages/twenty-server/src/modules/messaging/message-folder-manager/utils/compute-folders-to-update.util.ts +++ b/packages/twenty-server/src/modules/messaging/message-folder-manager/utils/compute-folders-to-update.util.ts @@ -1,5 +1,5 @@ import { isNonEmptyString } from '@sniptt/guards'; -import deepEqual from 'deep-equal'; +import { fastDeepEqual } from 'twenty-shared/utils'; import { type DiscoveredMessageFolder, @@ -62,7 +62,7 @@ export const computeFoldersToUpdate = ({ : null, }; - if (!deepEqual(discoveredFolderData, existingFolderData)) { + if (!fastDeepEqual(discoveredFolderData, existingFolderData)) { foldersToUpdate.set(existingFolder.id, discoveredFolderData); } } diff --git a/packages/twenty-shared/src/utils/compute-diff-between-objects.ts b/packages/twenty-shared/src/utils/compute-diff-between-objects.ts index a81081038cf..b71644563cf 100644 --- a/packages/twenty-shared/src/utils/compute-diff-between-objects.ts +++ b/packages/twenty-shared/src/utils/compute-diff-between-objects.ts @@ -1,5 +1,6 @@ import { isDefined } from '@/utils/validation'; -import deepEqual from 'deep-equal'; + +import { fastDeepEqual } from './json/fast-deep-equal'; type Diff = { toCreate: T[]; @@ -67,7 +68,9 @@ export const computeDiffBetweenObjects = < propertiesToCompare, ); - if (!deepEqual(comparableExistingEntity, comparableReceivedEntity)) { + if ( + !fastDeepEqual(comparableExistingEntity, comparableReceivedEntity) + ) { toUpdate.push(receivedObject); } }