in packages/cdk-graph/src/core/utils.ts [72:126]
export function inferNodeProps(construct: Construct): InferredNodeProps {
const uuid = getConstructUUID(construct);
const logicalId = tryGetLogicalId(construct);
const metadata: Metadata = construct.node.metadata.filter((entry) => {
if (entry.type === MetadataTypeEnum.LOGICAL_ID) return false;
return true;
});
const attributes: Attributes = cloneDeep(
extractInspectableAttributes(construct) || {}
);
const cfnType = attributes[CfnAttributesEnum.TYPE] as string;
if (cfnType) {
// @ts-ignore
delete attributes[CfnAttributesEnum.TYPE];
}
const cfnProps = attributes[CfnAttributesEnum.PROPS] || {};
let tags: Tags = {};
// normalize tags
if (typeof cfnProps === "object" && "tags" in cfnProps) {
const _tags = cfnProps.tags as CfnAttributesTags;
// remove the tags from the attributes since we normalize
// @ts-ignore
delete cfnProps.tags;
if (Array.isArray(_tags)) {
tags = Object.fromEntries(_tags.map(({ key, value }) => [key, value]));
} else {
tags = _tags;
}
}
const constructInfo = constructInfoFromConstruct(construct);
const flags = inferFlags(construct, constructInfo, tags);
return {
uuid,
attributes,
metadata,
tags,
logicalId,
cfnType,
constructInfo,
dependencies: obtainDependencies(construct),
unresolvedReferences: extractUnresolvedReferences(uuid, attributes),
flags,
};
}