export function inferFlags()

in packages/cdk-graph/src/core/utils.ts [235:298]


export function inferFlags(
  construct: IConstruct,
  constructInfo?: ConstructInfo,
  tags?: Tags
): FlagEnum[] {
  const flags: Set<FlagEnum> = new Set();
  const fqn = constructInfo?.fqn;

  if (isImportConstruct(construct)) {
    flags.add(FlagEnum.IMPORT);
  } else {
    if (fqn && ExtraneousFqns.includes(fqn as any)) {
      flags.add(FlagEnum.EXTRANEOUS);
    }

    if (fqn && AssetFqns.includes(fqn as any)) {
      flags.add(FlagEnum.ASSET);
    }
  }

  if (fqn && _isCfnFqn(fqn)) {
    flags.add(FlagEnum.CFN_FQN);
  }

  if (construct.node.id === "Exports" && Stack.isStack(construct.node.scope)) {
    flags.add(FlagEnum.EXTRANEOUS);
  }

  if (construct.node.id.startsWith("SsmParameterValue:")) {
    flags.add(FlagEnum.EXTRANEOUS);
  }

  if (
    fqn === ConstructInfoFqnEnum.LAMBDA &&
    Resource.isOwnedResource(construct)
  ) {
    if (construct.node.id === `AWS${AWS_PROVIDER_FUNCTION_UUID}`) {
      flags.add(FlagEnum.AWS_API_CALL_LAMBDA);
      flags.add(FlagEnum.EXTRANEOUS);
    }
  }

  if (fqn && CustomResourceFqns.includes(fqn as any)) {
    flags.add(FlagEnum.CUSTOM_RESOURCE);
    if (fqn === ConstructInfoFqnEnum.AWS_CUSTOM_RESOURCE) {
      flags.add(FlagEnum.AWS_CUSTOM_RESOURCE);
    }
  }

  // https://github.com/aws/aws-cdk/blob/37f031f1f1c41bbfb6f8e8a56f73b5966e365ff6/packages/%40aws-cdk/aws-s3/lib/bucket.ts#L21
  if (tags && tags["aws-cdk:auto-delete-objects"] === "true") {
    flags.add(FlagEnum.EXTRANEOUS);
  }

  if (
    /^Custom::(CDK(BucketDeployment)|S3AutoDeleteObjects)/i.test(
      construct.node.id
    )
  ) {
    flags.add(FlagEnum.EXTRANEOUS);
  }

  return Array.from(flags.values());
}