export function inferNodeProps()

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