function propagateReplacementOperation()

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];
}