diff --git a/packages/integration-sdk-core/src/types/storage.ts b/packages/integration-sdk-core/src/types/storage.ts index f5bd3e959..50e1a351e 100644 --- a/packages/integration-sdk-core/src/types/storage.ts +++ b/packages/integration-sdk-core/src/types/storage.ts @@ -1,5 +1,9 @@ import { Entity } from './entity'; -import { GraphObjectFilter, GraphObjectIteratee } from './jobState'; +import { + GraphObjectFilter, + GraphObjectIteratee, + GraphObjectIterateeOptions, +} from './jobState'; import { Relationship } from './relationship'; import { GraphObjectIndexMetadata } from '../types/step'; @@ -33,11 +37,13 @@ export interface GraphObjectStore { iterateEntities( filter: GraphObjectFilter, iteratee: GraphObjectIteratee, + options?: GraphObjectIterateeOptions, ): Promise; iterateRelationships( filter: GraphObjectFilter, iteratee: GraphObjectIteratee, + options?: GraphObjectIterateeOptions, ): Promise; flush( diff --git a/packages/integration-sdk-runtime/src/execution/duplicateKeyTracker.ts b/packages/integration-sdk-runtime/src/execution/duplicateKeyTracker.ts index 227e27d17..037e965f7 100644 --- a/packages/integration-sdk-runtime/src/execution/duplicateKeyTracker.ts +++ b/packages/integration-sdk-runtime/src/execution/duplicateKeyTracker.ts @@ -71,7 +71,7 @@ export async function createDuplicateEntityReport({ payload, indexOfDuplicateKey, graphObjectStore, -}: DuplicateKeyReportParams): Promise { +}: DuplicateKeyReportParams): Promise { const originalEntityFromPayload = getOriginalEntityFromPayload( payload, duplicateEntity._key, @@ -83,10 +83,7 @@ export async function createDuplicateEntityReport({ } else { const originalEntityFromGraphObjectStore = await graphObjectStore.findEntity(duplicateEntity._key); - return compareEntities( - originalEntityFromGraphObjectStore!, - duplicateEntity, - ); + return compareEntities(originalEntityFromGraphObjectStore, duplicateEntity); } } @@ -130,8 +127,8 @@ function isDeepStrictEqual(a: any, b: any): boolean { export type DuplicateEntityReport = { _key: string; - rawDataMatch: boolean; - entityPropertiesMatch: boolean; + rawDataMatch?: boolean; + entityPropertiesMatch?: boolean; rawDataDiff?: string; entityPropertiesDiff?: string; diffErrors?: { rawData?: string; entityProperties?: string }; @@ -233,7 +230,16 @@ export function diffObjects( * @param b * @returns */ -function compareEntities(a: Entity, b: Entity): DuplicateEntityReport { +function compareEntities( + a: Entity | undefined, + b: Entity, +): DuplicateEntityReport { + if (a === undefined) { + return { + _key: b._key, + }; + } + const aClone = JSON.parse(JSON.stringify(a)); const bClone = JSON.parse(JSON.stringify(b)); delete aClone._rawData; diff --git a/packages/integration-sdk-runtime/src/execution/jobState.ts b/packages/integration-sdk-runtime/src/execution/jobState.ts index 4989fe3b6..3b58ce4a4 100644 --- a/packages/integration-sdk-runtime/src/execution/jobState.ts +++ b/packages/integration-sdk-runtime/src/execution/jobState.ts @@ -164,7 +164,9 @@ export function createStepJobState({ indexOfDuplicateKey: index, graphObjectStore, }); - onDuplicateEntityKey(duplicateEntityReport); + if ('_key' in duplicateEntityReport) { + onDuplicateEntityKey(duplicateEntityReport); + } throw err; } @@ -274,11 +276,11 @@ export function createStepJobState({ return duplicateKeyTracker.hasKey(_key); }, - iterateEntities: (filter, iteratee) => - graphObjectStore.iterateEntities(filter, iteratee), + iterateEntities: (filter, iteratee, options) => + graphObjectStore.iterateEntities(filter, iteratee, options), - iterateRelationships: (filter, iteratee) => - graphObjectStore.iterateRelationships(filter, iteratee), + iterateRelationships: (filter, iteratee, options) => + graphObjectStore.iterateRelationships(filter, iteratee, options), flush: () => graphObjectStore.flush(