UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

2 lines (1 loc) 2.82 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolvedGet=resolvedGet,exports.resolvedExists=resolvedExists,exports.resolvedEquals=resolvedEquals,exports.findClosestRelatedResource=findClosestRelatedResource,exports.findL1FromRef=findL1FromRef,exports.findParentL2Scope=findParentL2Scope;var cfn_resource_1=()=>{var tmp=require("../cfn-resource");return cfn_resource_1=()=>tmp,tmp},token_1=()=>{var tmp=require("../token");return token_1=()=>tmp,tmp};function resolvedTraverse(obj,path){let current=obj;for(const key of path.split(".")){if(current==null)return{status:"missing"};if((0,token_1().isResolvableObject)(current))return{status:"token"};current=current[key]}return(0,token_1().isResolvableObject)(current)?{status:"token"}:current===void 0?{status:"missing"}:{status:"found",value:current}}function resolvedGet(obj,path,fallback){const result=resolvedTraverse(obj,path);if(result.status==="token")return fallback;if(result.status!=="missing")return result.value}function resolvedExists(obj,path){if(obj==null)return;const result=resolvedTraverse(obj,path);if(result.status!=="token")return result.status==="found"}function resolvedEquals(obj,path,expected){if(obj==null)return;const result=resolvedTraverse(obj,path);if(result.status!=="token")return result.status==="missing"?!1:result.value===expected}function findClosestRelatedResource(primary,relatedCfnResourceType,isConnected){let closestMatch,closestDistance=1/0;const visited=new Set,isRelatedResource=child=>cfn_resource_1().CfnResource.isCfnResource(child)&&child.cfnResourceType===relatedCfnResourceType,checkCandidate=(candidate,distance)=>{isRelatedResource(candidate)&&isConnected(primary,candidate)&&distance<closestDistance&&(closestMatch=candidate,closestDistance=distance)},searchChildren=(parent,distance)=>{if(!(distance>=closestDistance))for(const child of parent.node.children)visited.has(child)||(visited.add(child),checkCandidate(child,distance),searchChildren(child,distance+1))};searchChildren(primary,1);let ancestor=primary.node.scope,ancestorDistance=1;for(;ancestor&&ancestorDistance<closestDistance;){for(const sibling of ancestor.node.children)searchChildren(sibling,ancestorDistance);ancestor=ancestor.node.scope,ancestorDistance++}return closestMatch}function findL1FromRef(ref,cfnResourceType,compareIdToCfnId){const isCfnMatch=construct=>cfn_resource_1().CfnResource.isCfnResource(construct)&&construct.cfnResourceType===cfnResourceType;return isCfnMatch(ref)?ref:ref.node.defaultChild&&isCfnMatch(ref.node.defaultChild)?ref.node.defaultChild:findClosestRelatedResource(ref,cfnResourceType,(_,candidate)=>compareIdToCfnId(candidate,ref))}function findParentL2Scope(construct){if(construct.node.scope&&(construct.node.id==="Resource"||construct.node.id==="Default"))return construct.node.scope}