in packages/@aws-c2a/engine/lib/model-diffing/change-propagator.ts [103:139]
function propagateReplacementOperation(replacementOp: ReplaceComponentOperation, modelDiff: InfraModelDiff){
const newComponent = replacementOp.componentTransition.v2;
if(!newComponent)
throw Error('ReplaceComponentOperation has no new Component version');
const dependentRelationships = [...newComponent.incoming]
.filter(r => r instanceof DependencyRelationship) as DependencyRelationship[];
const replacementPropagations = flatMap(dependentRelationships, (rel: DependencyRelationship) => {
try{
const sourceComponentTransition = modelDiff.getComponentTransition(rel.source);
const consequentPropertyUpdateOp = createUpdateOperationForComponent(
modelDiff,
sourceComponentTransition,
rel.sourcePropertyPath,
replacementOp,
);
let propagatedPropertyUpdateOp: ComponentOperation[] = [];
if(consequentPropertyUpdateOp)
propagatedPropertyUpdateOp = [
consequentPropertyUpdateOp,
...propagatePropertyOperation(consequentPropertyUpdateOp, modelDiff),
];
return propagatedPropertyUpdateOp;
} catch(e) {
if(!(e instanceof TransitionNotFoundError)) throw e;
return [];
}
});
return [...replacementPropagations];
}