in packages/@aws-c2a/engine/lib/model-diffing/entity-matchers/entities-matcher.ts [26:61]
export function matchEntities<T extends ValidEntity, K = undefined>(
entitiesA: T[],
entitiesB: T[],
similarityEvaluator: SimilarityEvaluator<T, K>,
similarityThreshold = 0.5,
): EntitiesMatcherResults<T, K> {
const matchesBySimilarity = findMatchesDecreasingSimilarity(
entitiesA,
entitiesB,
similarityEvaluator,
similarityThreshold,
);
const matchedA = new Set<T>();
const matchedB = new Set<T>();
const matches = matchesBySimilarity.map(
(entityMatch): EntityMatch<T, K> | undefined => {
if(entityMatch.transition.v1 === undefined || entityMatch.transition.v2 === undefined)
throw Error('EntityMatcher produced transition with undefined version');
if(!matchedA.has(entityMatch.transition.v1)
&& !matchedB.has(entityMatch.transition.v2)) {
matchedA.add(entityMatch.transition.v1);
matchedB.add(entityMatch.transition.v2);
return entityMatch;
}
return;
},
).filter(isDefined);
const unmatchedA = entitiesA.filter(e => !matchedA.has(e));
const unmatchedB = entitiesB.filter(e => !matchedB.has(e));
return {matches, unmatchedA, unmatchedB};
}