From 9036833aa7404aa12f65199f716cfe03937ec937 Mon Sep 17 00:00:00 2001 From: Otavio Macedo <288203+otaviomacedo@users.noreply.github.com> Date: Fri, 3 Nov 2023 16:16:08 +0000 Subject: [PATCH] feat: Documentation.toJson() can handle nested submodules (#1190) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow users to create documentation for nested modules. Suppose a project has the following submodule structure: ``` my-project └── foo └── bar ``` where `foo` and `bar` are submodules. To generate documentation for the `bar` module, call `documentation.toJson('foo.bar')`. --- src/docgen/view/documentation.ts | 29 +- .../assemblies/cdk-nag@2.27.179/.jsii | 6719 +++++++++++++++++ .../__snapshots__/documentation.test.ts.snap | 10 + test/docgen/view/documentation.test.ts | 6 + 4 files changed, 6753 insertions(+), 11 deletions(-) create mode 100644 test/__fixtures__/assemblies/cdk-nag@2.27.179/.jsii diff --git a/src/docgen/view/documentation.ts b/src/docgen/view/documentation.ts index d948c072..df770569 100644 --- a/src/docgen/view/documentation.ts +++ b/src/docgen/view/documentation.ts @@ -312,22 +312,29 @@ export class Documentation { } /** - * Lookup a submodule by a submodule name. + * Lookup a submodule by a submodule name. To look up a nested submodule, encode it as a + * dot-separated path, e.g., 'top-level-module.nested-module.another-nested-one'. */ private findSubmodule(assembly: reflect.Assembly, submodule: string): reflect.Submodule { - const submodules = assembly.submodules.filter( - (s) => s.name === submodule, - ); + type ReflectSubmodules = typeof assembly.submodules; + return recurse(submodule.split('.'), assembly.submodules); - if (submodules.length === 0) { - throw new Error(`Submodule ${submodule} not found in assembly ${assembly.name}@${assembly.version}`); - } + function recurse(names: string[], submodules: ReflectSubmodules): reflect.Submodule { + const [head, ...tail] = names; + const found = submodules.filter( + (s) => s.name === head, + ); - if (submodules.length > 1) { - throw new Error(`Found multiple submodules with name: ${submodule} in assembly ${assembly.name}@${assembly.version}`); - } + if (found.length === 0) { + throw new Error(`Submodule ${submodule} not found in assembly ${assembly.name}@${assembly.version}`); + } - return submodules[0]; + if (found.length > 1) { + throw new Error(`Found multiple submodules with name: ${submodule} in assembly ${assembly.name}@${assembly.version}`); + } + + return tail.length === 0 ? found[0] : recurse(tail, found[0].submodules); + } } private async createAssembly( diff --git a/test/__fixtures__/assemblies/cdk-nag@2.27.179/.jsii b/test/__fixtures__/assemblies/cdk-nag@2.27.179/.jsii new file mode 100644 index 00000000..42b24bd8 --- /dev/null +++ b/test/__fixtures__/assemblies/cdk-nag@2.27.179/.jsii @@ -0,0 +1,6719 @@ +{ + "author": { + "email": "donti@amazon.com", + "name": "Arun Donti", + "roles": [ + "author" + ] + }, + "dependencies": { + "aws-cdk-lib": "^2.78.0", + "constructs": "^10.0.5" + }, + "dependencyClosure": { + "@aws-cdk/asset-awscli-v1": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Asset.AwsCliV1", + "packageId": "Amazon.CDK.Asset.AwsCliV1" + }, + "go": { + "moduleName": "github.com/cdklabs/awscdk-asset-awscli-go", + "packageName": "awscliv1" + }, + "java": { + "maven": { + "artifactId": "cdk-asset-awscli-v1", + "groupId": "software.amazon.awscdk" + }, + "package": "software.amazon.awscdk.cdk.asset.awscli.v1" + }, + "js": { + "npm": "@aws-cdk/asset-awscli-v1" + }, + "python": { + "distName": "aws-cdk.asset-awscli-v1", + "module": "aws_cdk.asset_awscli_v1" + } + } + }, + "@aws-cdk/asset-kubectl-v20": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Asset.KubectlV20", + "packageId": "Amazon.CDK.Asset.KubectlV20" + }, + "go": { + "moduleName": "github.com/cdklabs/awscdk-asset-kubectl-go", + "packageName": "kubectlv20" + }, + "java": { + "maven": { + "artifactId": "cdk-asset-kubectl-v20", + "groupId": "software.amazon.awscdk" + }, + "package": "software.amazon.awscdk.cdk.asset.kubectl.v20" + }, + "js": { + "npm": "@aws-cdk/asset-kubectl-v20" + }, + "python": { + "distName": "aws-cdk.asset-kubectl-v20", + "module": "aws_cdk.asset_kubectl_v20" + } + } + }, + "@aws-cdk/asset-node-proxy-agent-v5": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Asset.NodeProxyAgentV5", + "packageId": "Amazon.CDK.Asset.NodeProxyAgentV5" + }, + "go": { + "moduleName": "github.com/cdklabs/awscdk-asset-node-proxy-agent-go", + "packageName": "nodeproxyagentv5" + }, + "java": { + "maven": { + "artifactId": "cdk-asset-node-proxy-agent-v5", + "groupId": "software.amazon.awscdk" + }, + "package": "software.amazon.awscdk.cdk.asset.node.proxy.agent.v5" + }, + "js": { + "npm": "@aws-cdk/asset-node-proxy-agent-v5" + }, + "python": { + "distName": "aws-cdk.asset-node-proxy-agent-v5", + "module": "aws_cdk.asset_node_proxy_agent_v5" + } + } + }, + "aws-cdk-lib": { + "submodules": { + "aws-cdk-lib.alexa_ask": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Alexa.Ask" + }, + "java": { + "package": "software.amazon.awscdk.alexa.ask" + }, + "python": { + "module": "aws_cdk.alexa_ask" + } + } + }, + "aws-cdk-lib.assertions": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Assertions" + }, + "java": { + "package": "software.amazon.awscdk.assertions" + }, + "python": { + "module": "aws_cdk.assertions" + } + } + }, + "aws-cdk-lib.assets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Assets" + }, + "java": { + "package": "software.amazon.awscdk.assets" + }, + "python": { + "module": "aws_cdk.assets" + } + } + }, + "aws-cdk-lib.aws_accessanalyzer": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AccessAnalyzer" + }, + "java": { + "package": "software.amazon.awscdk.services.accessanalyzer" + }, + "python": { + "module": "aws_cdk.aws_accessanalyzer" + } + } + }, + "aws-cdk-lib.aws_acmpca": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ACMPCA" + }, + "java": { + "package": "software.amazon.awscdk.services.acmpca" + }, + "python": { + "module": "aws_cdk.aws_acmpca" + } + } + }, + "aws-cdk-lib.aws_amazonmq": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AmazonMQ" + }, + "java": { + "package": "software.amazon.awscdk.services.amazonmq" + }, + "python": { + "module": "aws_cdk.aws_amazonmq" + } + } + }, + "aws-cdk-lib.aws_amplify": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Amplify" + }, + "java": { + "package": "software.amazon.awscdk.services.amplify" + }, + "python": { + "module": "aws_cdk.aws_amplify" + } + } + }, + "aws-cdk-lib.aws_amplifyuibuilder": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AmplifyUIBuilder" + }, + "java": { + "package": "software.amazon.awscdk.services.amplifyuibuilder" + }, + "python": { + "module": "aws_cdk.aws_amplifyuibuilder" + } + } + }, + "aws-cdk-lib.aws_apigateway": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.APIGateway" + }, + "java": { + "package": "software.amazon.awscdk.services.apigateway" + }, + "python": { + "module": "aws_cdk.aws_apigateway" + } + } + }, + "aws-cdk-lib.aws_apigatewayv2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Apigatewayv2" + }, + "java": { + "package": "software.amazon.awscdk.services.apigatewayv2" + }, + "python": { + "module": "aws_cdk.aws_apigatewayv2" + } + } + }, + "aws-cdk-lib.aws_appconfig": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AppConfig" + }, + "java": { + "package": "software.amazon.awscdk.services.appconfig" + }, + "python": { + "module": "aws_cdk.aws_appconfig" + } + } + }, + "aws-cdk-lib.aws_appflow": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AppFlow" + }, + "java": { + "package": "software.amazon.awscdk.services.appflow" + }, + "python": { + "module": "aws_cdk.aws_appflow" + } + } + }, + "aws-cdk-lib.aws_appintegrations": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AppIntegrations" + }, + "java": { + "package": "software.amazon.awscdk.services.appintegrations" + }, + "python": { + "module": "aws_cdk.aws_appintegrations" + } + } + }, + "aws-cdk-lib.aws_applicationautoscaling": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ApplicationAutoScaling" + }, + "java": { + "package": "software.amazon.awscdk.services.applicationautoscaling" + }, + "python": { + "module": "aws_cdk.aws_applicationautoscaling" + } + } + }, + "aws-cdk-lib.aws_applicationinsights": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ApplicationInsights" + }, + "java": { + "package": "software.amazon.awscdk.services.applicationinsights" + }, + "python": { + "module": "aws_cdk.aws_applicationinsights" + } + } + }, + "aws-cdk-lib.aws_appmesh": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AppMesh" + }, + "java": { + "package": "software.amazon.awscdk.services.appmesh" + }, + "python": { + "module": "aws_cdk.aws_appmesh" + } + } + }, + "aws-cdk-lib.aws_apprunner": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AppRunner" + }, + "java": { + "package": "software.amazon.awscdk.services.apprunner" + }, + "python": { + "module": "aws_cdk.aws_apprunner" + } + } + }, + "aws-cdk-lib.aws_appstream": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AppStream" + }, + "java": { + "package": "software.amazon.awscdk.services.appstream" + }, + "python": { + "module": "aws_cdk.aws_appstream" + } + } + }, + "aws-cdk-lib.aws_appsync": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AppSync" + }, + "java": { + "package": "software.amazon.awscdk.services.appsync" + }, + "python": { + "module": "aws_cdk.aws_appsync" + } + } + }, + "aws-cdk-lib.aws_aps": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.APS" + }, + "java": { + "package": "software.amazon.awscdk.services.aps" + }, + "python": { + "module": "aws_cdk.aws_aps" + } + } + }, + "aws-cdk-lib.aws_athena": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Athena" + }, + "java": { + "package": "software.amazon.awscdk.services.athena" + }, + "python": { + "module": "aws_cdk.aws_athena" + } + } + }, + "aws-cdk-lib.aws_auditmanager": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AuditManager" + }, + "java": { + "package": "software.amazon.awscdk.services.auditmanager" + }, + "python": { + "module": "aws_cdk.aws_auditmanager" + } + } + }, + "aws-cdk-lib.aws_autoscaling": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AutoScaling" + }, + "java": { + "package": "software.amazon.awscdk.services.autoscaling" + }, + "python": { + "module": "aws_cdk.aws_autoscaling" + } + } + }, + "aws-cdk-lib.aws_autoscaling_common": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AutoScaling.Common" + }, + "java": { + "package": "software.amazon.awscdk.services.autoscaling.common" + }, + "python": { + "module": "aws_cdk.aws_autoscaling_common" + } + } + }, + "aws-cdk-lib.aws_autoscaling_hooktargets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AutoScaling.HookTargets" + }, + "java": { + "package": "software.amazon.awscdk.services.autoscaling.hooktargets" + }, + "python": { + "module": "aws_cdk.aws_autoscaling_hooktargets" + } + } + }, + "aws-cdk-lib.aws_autoscalingplans": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.AutoScalingPlans" + }, + "java": { + "package": "software.amazon.awscdk.services.autoscalingplans" + }, + "python": { + "module": "aws_cdk.aws_autoscalingplans" + } + } + }, + "aws-cdk-lib.aws_backup": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Backup" + }, + "java": { + "package": "software.amazon.awscdk.services.backup" + }, + "python": { + "module": "aws_cdk.aws_backup" + } + } + }, + "aws-cdk-lib.aws_batch": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Batch" + }, + "java": { + "package": "software.amazon.awscdk.services.batch" + }, + "python": { + "module": "aws_cdk.aws_batch" + } + } + }, + "aws-cdk-lib.aws_billingconductor": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.BillingConductor" + }, + "java": { + "package": "software.amazon.awscdk.services.billingconductor" + }, + "python": { + "module": "aws_cdk.aws_billingconductor" + } + } + }, + "aws-cdk-lib.aws_budgets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Budgets" + }, + "java": { + "package": "software.amazon.awscdk.services.budgets" + }, + "python": { + "module": "aws_cdk.aws_budgets" + } + } + }, + "aws-cdk-lib.aws_cassandra": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Cassandra" + }, + "java": { + "package": "software.amazon.awscdk.services.cassandra" + }, + "python": { + "module": "aws_cdk.aws_cassandra" + } + } + }, + "aws-cdk-lib.aws_ce": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CE" + }, + "java": { + "package": "software.amazon.awscdk.services.ce" + }, + "python": { + "module": "aws_cdk.aws_ce" + } + } + }, + "aws-cdk-lib.aws_certificatemanager": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CertificateManager" + }, + "java": { + "package": "software.amazon.awscdk.services.certificatemanager" + }, + "python": { + "module": "aws_cdk.aws_certificatemanager" + } + } + }, + "aws-cdk-lib.aws_chatbot": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Chatbot" + }, + "java": { + "package": "software.amazon.awscdk.services.chatbot" + }, + "python": { + "module": "aws_cdk.aws_chatbot" + } + } + }, + "aws-cdk-lib.aws_cloud9": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Cloud9" + }, + "java": { + "package": "software.amazon.awscdk.services.cloud9" + }, + "python": { + "module": "aws_cdk.aws_cloud9" + } + } + }, + "aws-cdk-lib.aws_cloudformation": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CloudFormation" + }, + "java": { + "package": "software.amazon.awscdk.services.cloudformation" + }, + "python": { + "module": "aws_cdk.aws_cloudformation" + } + } + }, + "aws-cdk-lib.aws_cloudfront": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CloudFront" + }, + "java": { + "package": "software.amazon.awscdk.services.cloudfront" + }, + "python": { + "module": "aws_cdk.aws_cloudfront" + } + } + }, + "aws-cdk-lib.aws_cloudfront.experimental": {}, + "aws-cdk-lib.aws_cloudfront_origins": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CloudFront.Origins" + }, + "java": { + "package": "software.amazon.awscdk.services.cloudfront.origins" + }, + "python": { + "module": "aws_cdk.aws_cloudfront_origins" + } + } + }, + "aws-cdk-lib.aws_cloudtrail": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CloudTrail" + }, + "java": { + "package": "software.amazon.awscdk.services.cloudtrail" + }, + "python": { + "module": "aws_cdk.aws_cloudtrail" + } + } + }, + "aws-cdk-lib.aws_cloudwatch": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CloudWatch" + }, + "java": { + "package": "software.amazon.awscdk.services.cloudwatch" + }, + "python": { + "module": "aws_cdk.aws_cloudwatch" + } + } + }, + "aws-cdk-lib.aws_cloudwatch_actions": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CloudWatch.Actions" + }, + "java": { + "package": "software.amazon.awscdk.services.cloudwatch.actions" + }, + "python": { + "module": "aws_cdk.aws_cloudwatch_actions" + } + } + }, + "aws-cdk-lib.aws_codeartifact": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeArtifact" + }, + "java": { + "package": "software.amazon.awscdk.services.codeartifact" + }, + "python": { + "module": "aws_cdk.aws_codeartifact" + } + } + }, + "aws-cdk-lib.aws_codebuild": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeBuild" + }, + "java": { + "package": "software.amazon.awscdk.services.codebuild" + }, + "python": { + "module": "aws_cdk.aws_codebuild" + } + } + }, + "aws-cdk-lib.aws_codecommit": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeCommit" + }, + "java": { + "package": "software.amazon.awscdk.services.codecommit" + }, + "python": { + "module": "aws_cdk.aws_codecommit" + } + } + }, + "aws-cdk-lib.aws_codedeploy": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeDeploy" + }, + "java": { + "package": "software.amazon.awscdk.services.codedeploy" + }, + "python": { + "module": "aws_cdk.aws_codedeploy" + } + } + }, + "aws-cdk-lib.aws_codeguruprofiler": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeGuruProfiler" + }, + "java": { + "package": "software.amazon.awscdk.services.codeguruprofiler" + }, + "python": { + "module": "aws_cdk.aws_codeguruprofiler" + } + } + }, + "aws-cdk-lib.aws_codegurureviewer": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeGuruReviewer" + }, + "java": { + "package": "software.amazon.awscdk.services.codegurureviewer" + }, + "python": { + "module": "aws_cdk.aws_codegurureviewer" + } + } + }, + "aws-cdk-lib.aws_codepipeline": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodePipeline" + }, + "java": { + "package": "software.amazon.awscdk.services.codepipeline" + }, + "python": { + "module": "aws_cdk.aws_codepipeline" + } + } + }, + "aws-cdk-lib.aws_codepipeline_actions": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodePipeline.Actions" + }, + "java": { + "package": "software.amazon.awscdk.services.codepipeline.actions" + }, + "python": { + "module": "aws_cdk.aws_codepipeline_actions" + } + } + }, + "aws-cdk-lib.aws_codestar": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Codestar" + }, + "java": { + "package": "software.amazon.awscdk.services.codestar" + }, + "python": { + "module": "aws_cdk.aws_codestar" + } + } + }, + "aws-cdk-lib.aws_codestarconnections": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeStarConnections" + }, + "java": { + "package": "software.amazon.awscdk.services.codestarconnections" + }, + "python": { + "module": "aws_cdk.aws_codestarconnections" + } + } + }, + "aws-cdk-lib.aws_codestarnotifications": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CodeStarNotifications" + }, + "java": { + "package": "software.amazon.awscdk.services.codestarnotifications" + }, + "python": { + "module": "aws_cdk.aws_codestarnotifications" + } + } + }, + "aws-cdk-lib.aws_cognito": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Cognito" + }, + "java": { + "package": "software.amazon.awscdk.services.cognito" + }, + "python": { + "module": "aws_cdk.aws_cognito" + } + } + }, + "aws-cdk-lib.aws_comprehend": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Comprehend" + }, + "java": { + "package": "software.amazon.awscdk.services.comprehend" + }, + "python": { + "module": "aws_cdk.aws_comprehend" + } + } + }, + "aws-cdk-lib.aws_config": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Config" + }, + "java": { + "package": "software.amazon.awscdk.services.config" + }, + "python": { + "module": "aws_cdk.aws_config" + } + } + }, + "aws-cdk-lib.aws_connect": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Connect" + }, + "java": { + "package": "software.amazon.awscdk.services.connect" + }, + "python": { + "module": "aws_cdk.aws_connect" + } + } + }, + "aws-cdk-lib.aws_connectcampaigns": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ConnectCampaigns" + }, + "java": { + "package": "software.amazon.awscdk.services.connectcampaigns" + }, + "python": { + "module": "aws_cdk.aws_connectcampaigns" + } + } + }, + "aws-cdk-lib.aws_controltower": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ControlTower" + }, + "java": { + "package": "software.amazon.awscdk.services.controltower" + }, + "python": { + "module": "aws_cdk.aws_controltower" + } + } + }, + "aws-cdk-lib.aws_cur": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CUR" + }, + "java": { + "package": "software.amazon.awscdk.services.cur" + }, + "python": { + "module": "aws_cdk.aws_cur" + } + } + }, + "aws-cdk-lib.aws_customerprofiles": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.CustomerProfiles" + }, + "java": { + "package": "software.amazon.awscdk.services.customerprofiles" + }, + "python": { + "module": "aws_cdk.aws_customerprofiles" + } + } + }, + "aws-cdk-lib.aws_databrew": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DataBrew" + }, + "java": { + "package": "software.amazon.awscdk.services.databrew" + }, + "python": { + "module": "aws_cdk.aws_databrew" + } + } + }, + "aws-cdk-lib.aws_datapipeline": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DataPipeline" + }, + "java": { + "package": "software.amazon.awscdk.services.datapipeline" + }, + "python": { + "module": "aws_cdk.aws_datapipeline" + } + } + }, + "aws-cdk-lib.aws_datasync": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DataSync" + }, + "java": { + "package": "software.amazon.awscdk.services.datasync" + }, + "python": { + "module": "aws_cdk.aws_datasync" + } + } + }, + "aws-cdk-lib.aws_dax": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DAX" + }, + "java": { + "package": "software.amazon.awscdk.services.dax" + }, + "python": { + "module": "aws_cdk.aws_dax" + } + } + }, + "aws-cdk-lib.aws_detective": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Detective" + }, + "java": { + "package": "software.amazon.awscdk.services.detective" + }, + "python": { + "module": "aws_cdk.aws_detective" + } + } + }, + "aws-cdk-lib.aws_devicefarm": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DeviceFarm" + }, + "java": { + "package": "software.amazon.awscdk.services.devicefarm" + }, + "python": { + "module": "aws_cdk.aws_devicefarm" + } + } + }, + "aws-cdk-lib.aws_devopsguru": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DevOpsGuru" + }, + "java": { + "package": "software.amazon.awscdk.services.devopsguru" + }, + "python": { + "module": "aws_cdk.aws_devopsguru" + } + } + }, + "aws-cdk-lib.aws_directoryservice": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DirectoryService" + }, + "java": { + "package": "software.amazon.awscdk.services.directoryservice" + }, + "python": { + "module": "aws_cdk.aws_directoryservice" + } + } + }, + "aws-cdk-lib.aws_dlm": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DLM" + }, + "java": { + "package": "software.amazon.awscdk.services.dlm" + }, + "python": { + "module": "aws_cdk.aws_dlm" + } + } + }, + "aws-cdk-lib.aws_dms": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DMS" + }, + "java": { + "package": "software.amazon.awscdk.services.dms" + }, + "python": { + "module": "aws_cdk.aws_dms" + } + } + }, + "aws-cdk-lib.aws_docdb": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DocDB" + }, + "java": { + "package": "software.amazon.awscdk.services.docdb" + }, + "python": { + "module": "aws_cdk.aws_docdb" + } + } + }, + "aws-cdk-lib.aws_docdbelastic": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DocDBElastic" + }, + "java": { + "package": "software.amazon.awscdk.services.docdbelastic" + }, + "python": { + "module": "aws_cdk.aws_docdbelastic" + } + } + }, + "aws-cdk-lib.aws_dynamodb": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.DynamoDB" + }, + "java": { + "package": "software.amazon.awscdk.services.dynamodb" + }, + "python": { + "module": "aws_cdk.aws_dynamodb" + } + } + }, + "aws-cdk-lib.aws_ec2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.EC2" + }, + "java": { + "package": "software.amazon.awscdk.services.ec2" + }, + "python": { + "module": "aws_cdk.aws_ec2" + } + } + }, + "aws-cdk-lib.aws_ecr": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ECR" + }, + "java": { + "package": "software.amazon.awscdk.services.ecr" + }, + "python": { + "module": "aws_cdk.aws_ecr" + } + } + }, + "aws-cdk-lib.aws_ecr_assets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Ecr.Assets" + }, + "java": { + "package": "software.amazon.awscdk.services.ecr.assets" + }, + "python": { + "module": "aws_cdk.aws_ecr_assets" + } + } + }, + "aws-cdk-lib.aws_ecs": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ECS" + }, + "java": { + "package": "software.amazon.awscdk.services.ecs" + }, + "python": { + "module": "aws_cdk.aws_ecs" + } + } + }, + "aws-cdk-lib.aws_ecs_patterns": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ECS.Patterns" + }, + "java": { + "package": "software.amazon.awscdk.services.ecs.patterns" + }, + "python": { + "module": "aws_cdk.aws_ecs_patterns" + } + } + }, + "aws-cdk-lib.aws_efs": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.EFS" + }, + "java": { + "package": "software.amazon.awscdk.services.efs" + }, + "python": { + "module": "aws_cdk.aws_efs" + } + } + }, + "aws-cdk-lib.aws_eks": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.EKS" + }, + "java": { + "package": "software.amazon.awscdk.services.eks" + }, + "python": { + "module": "aws_cdk.aws_eks" + } + } + }, + "aws-cdk-lib.aws_elasticache": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ElastiCache" + }, + "java": { + "package": "software.amazon.awscdk.services.elasticache" + }, + "python": { + "module": "aws_cdk.aws_elasticache" + } + } + }, + "aws-cdk-lib.aws_elasticbeanstalk": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ElasticBeanstalk" + }, + "java": { + "package": "software.amazon.awscdk.services.elasticbeanstalk" + }, + "python": { + "module": "aws_cdk.aws_elasticbeanstalk" + } + } + }, + "aws-cdk-lib.aws_elasticloadbalancing": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ElasticLoadBalancing" + }, + "java": { + "package": "software.amazon.awscdk.services.elasticloadbalancing" + }, + "python": { + "module": "aws_cdk.aws_elasticloadbalancing" + } + } + }, + "aws-cdk-lib.aws_elasticloadbalancingv2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ElasticLoadBalancingV2" + }, + "java": { + "package": "software.amazon.awscdk.services.elasticloadbalancingv2" + }, + "python": { + "module": "aws_cdk.aws_elasticloadbalancingv2" + } + } + }, + "aws-cdk-lib.aws_elasticloadbalancingv2_actions": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ElasticLoadBalancingV2.Actions" + }, + "java": { + "package": "software.amazon.awscdk.services.elasticloadbalancingv2.actions" + }, + "python": { + "module": "aws_cdk.aws_elasticloadbalancingv2_actions" + } + } + }, + "aws-cdk-lib.aws_elasticloadbalancingv2_targets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ElasticLoadBalancingV2.Targets" + }, + "java": { + "package": "software.amazon.awscdk.services.elasticloadbalancingv2.targets" + }, + "python": { + "module": "aws_cdk.aws_elasticloadbalancingv2_targets" + } + } + }, + "aws-cdk-lib.aws_elasticsearch": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Elasticsearch" + }, + "java": { + "package": "software.amazon.awscdk.services.elasticsearch" + }, + "python": { + "module": "aws_cdk.aws_elasticsearch" + } + } + }, + "aws-cdk-lib.aws_emr": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.EMR" + }, + "java": { + "package": "software.amazon.awscdk.services.emr" + }, + "python": { + "module": "aws_cdk.aws_emr" + } + } + }, + "aws-cdk-lib.aws_emrcontainers": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.EMRContainers" + }, + "java": { + "package": "software.amazon.awscdk.services.emrcontainers" + }, + "python": { + "module": "aws_cdk.aws_emrcontainers" + } + } + }, + "aws-cdk-lib.aws_emrserverless": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.EMRServerless" + }, + "java": { + "package": "software.amazon.awscdk.services.emrserverless" + }, + "python": { + "module": "aws_cdk.aws_emrserverless" + } + } + }, + "aws-cdk-lib.aws_events": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Events" + }, + "java": { + "package": "software.amazon.awscdk.services.events" + }, + "python": { + "module": "aws_cdk.aws_events" + } + } + }, + "aws-cdk-lib.aws_events_targets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Events.Targets" + }, + "java": { + "package": "software.amazon.awscdk.services.events.targets" + }, + "python": { + "module": "aws_cdk.aws_events_targets" + } + } + }, + "aws-cdk-lib.aws_eventschemas": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.EventSchemas" + }, + "java": { + "package": "software.amazon.awscdk.services.eventschemas" + }, + "python": { + "module": "aws_cdk.aws_eventschemas" + } + } + }, + "aws-cdk-lib.aws_evidently": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Evidently" + }, + "java": { + "package": "software.amazon.awscdk.services.evidently" + }, + "python": { + "module": "aws_cdk.aws_evidently" + } + } + }, + "aws-cdk-lib.aws_finspace": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.FinSpace" + }, + "java": { + "package": "software.amazon.awscdk.services.finspace" + }, + "python": { + "module": "aws_cdk.aws_finspace" + } + } + }, + "aws-cdk-lib.aws_fis": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.FIS" + }, + "java": { + "package": "software.amazon.awscdk.services.fis" + }, + "python": { + "module": "aws_cdk.aws_fis" + } + } + }, + "aws-cdk-lib.aws_fms": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.FMS" + }, + "java": { + "package": "software.amazon.awscdk.services.fms" + }, + "python": { + "module": "aws_cdk.aws_fms" + } + } + }, + "aws-cdk-lib.aws_forecast": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Forecast" + }, + "java": { + "package": "software.amazon.awscdk.services.forecast" + }, + "python": { + "module": "aws_cdk.aws_forecast" + } + } + }, + "aws-cdk-lib.aws_frauddetector": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.FraudDetector" + }, + "java": { + "package": "software.amazon.awscdk.services.frauddetector" + }, + "python": { + "module": "aws_cdk.aws_frauddetector" + } + } + }, + "aws-cdk-lib.aws_fsx": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.FSx" + }, + "java": { + "package": "software.amazon.awscdk.services.fsx" + }, + "python": { + "module": "aws_cdk.aws_fsx" + } + } + }, + "aws-cdk-lib.aws_gamelift": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.GameLift" + }, + "java": { + "package": "software.amazon.awscdk.services.gamelift" + }, + "python": { + "module": "aws_cdk.aws_gamelift" + } + } + }, + "aws-cdk-lib.aws_globalaccelerator": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.GlobalAccelerator" + }, + "java": { + "package": "software.amazon.awscdk.services.globalaccelerator" + }, + "python": { + "module": "aws_cdk.aws_globalaccelerator" + } + } + }, + "aws-cdk-lib.aws_globalaccelerator_endpoints": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.GlobalAccelerator.Endpoints" + }, + "java": { + "package": "software.amazon.awscdk.services.globalaccelerator.endpoints" + }, + "python": { + "module": "aws_cdk.aws_globalaccelerator_endpoints" + } + } + }, + "aws-cdk-lib.aws_glue": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Glue" + }, + "java": { + "package": "software.amazon.awscdk.services.glue" + }, + "python": { + "module": "aws_cdk.aws_glue" + } + } + }, + "aws-cdk-lib.aws_grafana": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Grafana" + }, + "java": { + "package": "software.amazon.awscdk.services.grafana" + }, + "python": { + "module": "aws_cdk.aws_grafana" + } + } + }, + "aws-cdk-lib.aws_greengrass": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Greengrass" + }, + "java": { + "package": "software.amazon.awscdk.services.greengrass" + }, + "python": { + "module": "aws_cdk.aws_greengrass" + } + } + }, + "aws-cdk-lib.aws_greengrassv2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.GreengrassV2" + }, + "java": { + "package": "software.amazon.awscdk.services.greengrassv2" + }, + "python": { + "module": "aws_cdk.aws_greengrassv2" + } + } + }, + "aws-cdk-lib.aws_groundstation": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.GroundStation" + }, + "java": { + "package": "software.amazon.awscdk.services.groundstation" + }, + "python": { + "module": "aws_cdk.aws_groundstation" + } + } + }, + "aws-cdk-lib.aws_guardduty": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.GuardDuty" + }, + "java": { + "package": "software.amazon.awscdk.services.guardduty" + }, + "python": { + "module": "aws_cdk.aws_guardduty" + } + } + }, + "aws-cdk-lib.aws_healthlake": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.HealthLake" + }, + "java": { + "package": "software.amazon.awscdk.services.healthlake" + }, + "python": { + "module": "aws_cdk.aws_healthlake" + } + } + }, + "aws-cdk-lib.aws_iam": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IAM" + }, + "java": { + "package": "software.amazon.awscdk.services.iam" + }, + "python": { + "module": "aws_cdk.aws_iam" + } + } + }, + "aws-cdk-lib.aws_identitystore": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IdentityStore" + }, + "java": { + "package": "software.amazon.awscdk.services.identitystore" + }, + "python": { + "module": "aws_cdk.aws_identitystore" + } + } + }, + "aws-cdk-lib.aws_imagebuilder": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ImageBuilder" + }, + "java": { + "package": "software.amazon.awscdk.services.imagebuilder" + }, + "python": { + "module": "aws_cdk.aws_imagebuilder" + } + } + }, + "aws-cdk-lib.aws_inspector": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Inspector" + }, + "java": { + "package": "software.amazon.awscdk.services.inspector" + }, + "python": { + "module": "aws_cdk.aws_inspector" + } + } + }, + "aws-cdk-lib.aws_inspectorv2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.InspectorV2" + }, + "java": { + "package": "software.amazon.awscdk.services.inspectorv2" + }, + "python": { + "module": "aws_cdk.aws_inspectorv2" + } + } + }, + "aws-cdk-lib.aws_internetmonitor": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.InternetMonitor" + }, + "java": { + "package": "software.amazon.awscdk.services.internetmonitor" + }, + "python": { + "module": "aws_cdk.aws_internetmonitor" + } + } + }, + "aws-cdk-lib.aws_iot": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoT" + }, + "java": { + "package": "software.amazon.awscdk.services.iot" + }, + "python": { + "module": "aws_cdk.aws_iot" + } + } + }, + "aws-cdk-lib.aws_iot1click": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoT1Click" + }, + "java": { + "package": "software.amazon.awscdk.services.iot1click" + }, + "python": { + "module": "aws_cdk.aws_iot1click" + } + } + }, + "aws-cdk-lib.aws_iotanalytics": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTAnalytics" + }, + "java": { + "package": "software.amazon.awscdk.services.iotanalytics" + }, + "python": { + "module": "aws_cdk.aws_iotanalytics" + } + } + }, + "aws-cdk-lib.aws_iotcoredeviceadvisor": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTCoreDeviceAdvisor" + }, + "java": { + "package": "software.amazon.awscdk.services.iotcoredeviceadvisor" + }, + "python": { + "module": "aws_cdk.aws_iotcoredeviceadvisor" + } + } + }, + "aws-cdk-lib.aws_iotevents": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTEvents" + }, + "java": { + "package": "software.amazon.awscdk.services.iotevents" + }, + "python": { + "module": "aws_cdk.aws_iotevents" + } + } + }, + "aws-cdk-lib.aws_iotfleethub": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTFleetHub" + }, + "java": { + "package": "software.amazon.awscdk.services.iotfleethub" + }, + "python": { + "module": "aws_cdk.aws_iotfleethub" + } + } + }, + "aws-cdk-lib.aws_iotfleetwise": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTFleetWise" + }, + "java": { + "package": "software.amazon.awscdk.services.iotfleetwise" + }, + "python": { + "module": "aws_cdk.aws_iotfleetwise" + } + } + }, + "aws-cdk-lib.aws_iotsitewise": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTSiteWise" + }, + "java": { + "package": "software.amazon.awscdk.services.iotsitewise" + }, + "python": { + "module": "aws_cdk.aws_iotsitewise" + } + } + }, + "aws-cdk-lib.aws_iotthingsgraph": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTThingsGraph" + }, + "java": { + "package": "software.amazon.awscdk.services.iotthingsgraph" + }, + "python": { + "module": "aws_cdk.aws_iotthingsgraph" + } + } + }, + "aws-cdk-lib.aws_iottwinmaker": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTTwinMaker" + }, + "java": { + "package": "software.amazon.awscdk.services.iottwinmaker" + }, + "python": { + "module": "aws_cdk.aws_iottwinmaker" + } + } + }, + "aws-cdk-lib.aws_iotwireless": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IoTWireless" + }, + "java": { + "package": "software.amazon.awscdk.services.iotwireless" + }, + "python": { + "module": "aws_cdk.aws_iotwireless" + } + } + }, + "aws-cdk-lib.aws_ivs": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Ivs" + }, + "java": { + "package": "software.amazon.awscdk.services.ivs" + }, + "python": { + "module": "aws_cdk.aws_ivs" + } + } + }, + "aws-cdk-lib.aws_ivschat": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.IVSChat" + }, + "java": { + "package": "software.amazon.awscdk.services.ivschat" + }, + "python": { + "module": "aws_cdk.aws_ivschat" + } + } + }, + "aws-cdk-lib.aws_kafkaconnect": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.KafkaConnect" + }, + "java": { + "package": "software.amazon.awscdk.services.kafkaconnect" + }, + "python": { + "module": "aws_cdk.aws_kafkaconnect" + } + } + }, + "aws-cdk-lib.aws_kendra": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Kendra" + }, + "java": { + "package": "software.amazon.awscdk.services.kendra" + }, + "python": { + "module": "aws_cdk.aws_kendra" + } + } + }, + "aws-cdk-lib.aws_kendraranking": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.KendraRanking" + }, + "java": { + "package": "software.amazon.awscdk.services.kendraranking" + }, + "python": { + "module": "aws_cdk.aws_kendraranking" + } + } + }, + "aws-cdk-lib.aws_kinesis": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Kinesis" + }, + "java": { + "package": "software.amazon.awscdk.services.kinesis" + }, + "python": { + "module": "aws_cdk.aws_kinesis" + } + } + }, + "aws-cdk-lib.aws_kinesisanalytics": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.KinesisAnalytics" + }, + "java": { + "package": "software.amazon.awscdk.services.kinesisanalytics" + }, + "python": { + "module": "aws_cdk.aws_kinesisanalytics" + } + } + }, + "aws-cdk-lib.aws_kinesisanalyticsv2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.KinesisAnalyticsV2" + }, + "java": { + "package": "software.amazon.awscdk.services.kinesisanalyticsv2" + }, + "python": { + "module": "aws_cdk.aws_kinesisanalyticsv2" + } + } + }, + "aws-cdk-lib.aws_kinesisfirehose": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.KinesisFirehose" + }, + "java": { + "package": "software.amazon.awscdk.services.kinesisfirehose" + }, + "python": { + "module": "aws_cdk.aws_kinesisfirehose" + } + } + }, + "aws-cdk-lib.aws_kinesisvideo": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.KinesisVideo" + }, + "java": { + "package": "software.amazon.awscdk.services.kinesisvideo" + }, + "python": { + "module": "aws_cdk.aws_kinesisvideo" + } + } + }, + "aws-cdk-lib.aws_kms": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.KMS" + }, + "java": { + "package": "software.amazon.awscdk.services.kms" + }, + "python": { + "module": "aws_cdk.aws_kms" + } + } + }, + "aws-cdk-lib.aws_lakeformation": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.LakeFormation" + }, + "java": { + "package": "software.amazon.awscdk.services.lakeformation" + }, + "python": { + "module": "aws_cdk.aws_lakeformation" + } + } + }, + "aws-cdk-lib.aws_lambda": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Lambda" + }, + "java": { + "package": "software.amazon.awscdk.services.lambda" + }, + "python": { + "module": "aws_cdk.aws_lambda" + } + } + }, + "aws-cdk-lib.aws_lambda_destinations": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Lambda.Destinations" + }, + "java": { + "package": "software.amazon.awscdk.services.lambda.destinations" + }, + "python": { + "module": "aws_cdk.aws_lambda_destinations" + } + } + }, + "aws-cdk-lib.aws_lambda_event_sources": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Lambda.EventSources" + }, + "java": { + "package": "software.amazon.awscdk.services.lambda.eventsources" + }, + "python": { + "module": "aws_cdk.aws_lambda_event_sources" + } + } + }, + "aws-cdk-lib.aws_lambda_nodejs": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Lambda.Nodejs" + }, + "java": { + "package": "software.amazon.awscdk.services.lambda.nodejs" + }, + "python": { + "module": "aws_cdk.aws_lambda_nodejs" + } + } + }, + "aws-cdk-lib.aws_lex": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Lex" + }, + "java": { + "package": "software.amazon.awscdk.services.lex" + }, + "python": { + "module": "aws_cdk.aws_lex" + } + } + }, + "aws-cdk-lib.aws_licensemanager": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.LicenseManager" + }, + "java": { + "package": "software.amazon.awscdk.services.licensemanager" + }, + "python": { + "module": "aws_cdk.aws_licensemanager" + } + } + }, + "aws-cdk-lib.aws_lightsail": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Lightsail" + }, + "java": { + "package": "software.amazon.awscdk.services.lightsail" + }, + "python": { + "module": "aws_cdk.aws_lightsail" + } + } + }, + "aws-cdk-lib.aws_location": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Location" + }, + "java": { + "package": "software.amazon.awscdk.services.location" + }, + "python": { + "module": "aws_cdk.aws_location" + } + } + }, + "aws-cdk-lib.aws_logs": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Logs" + }, + "java": { + "package": "software.amazon.awscdk.services.logs" + }, + "python": { + "module": "aws_cdk.aws_logs" + } + } + }, + "aws-cdk-lib.aws_logs_destinations": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Logs.Destinations" + }, + "java": { + "package": "software.amazon.awscdk.services.logs.destinations" + }, + "python": { + "module": "aws_cdk.aws_logs_destinations" + } + } + }, + "aws-cdk-lib.aws_lookoutequipment": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.LookoutEquipment" + }, + "java": { + "package": "software.amazon.awscdk.services.lookoutequipment" + }, + "python": { + "module": "aws_cdk.aws_lookoutequipment" + } + } + }, + "aws-cdk-lib.aws_lookoutmetrics": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.LookoutMetrics" + }, + "java": { + "package": "software.amazon.awscdk.services.lookoutmetrics" + }, + "python": { + "module": "aws_cdk.aws_lookoutmetrics" + } + } + }, + "aws-cdk-lib.aws_lookoutvision": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.LookoutVision" + }, + "java": { + "package": "software.amazon.awscdk.services.lookoutvision" + }, + "python": { + "module": "aws_cdk.aws_lookoutvision" + } + } + }, + "aws-cdk-lib.aws_m2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.M2" + }, + "java": { + "package": "software.amazon.awscdk.services.m2" + }, + "python": { + "module": "aws_cdk.aws_m2" + } + } + }, + "aws-cdk-lib.aws_macie": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Macie" + }, + "java": { + "package": "software.amazon.awscdk.services.macie" + }, + "python": { + "module": "aws_cdk.aws_macie" + } + } + }, + "aws-cdk-lib.aws_managedblockchain": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ManagedBlockchain" + }, + "java": { + "package": "software.amazon.awscdk.services.managedblockchain" + }, + "python": { + "module": "aws_cdk.aws_managedblockchain" + } + } + }, + "aws-cdk-lib.aws_mediaconnect": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaConnect" + }, + "java": { + "package": "software.amazon.awscdk.services.mediaconnect" + }, + "python": { + "module": "aws_cdk.aws_mediaconnect" + } + } + }, + "aws-cdk-lib.aws_mediaconvert": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaConvert" + }, + "java": { + "package": "software.amazon.awscdk.services.mediaconvert" + }, + "python": { + "module": "aws_cdk.aws_mediaconvert" + } + } + }, + "aws-cdk-lib.aws_medialive": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaLive" + }, + "java": { + "package": "software.amazon.awscdk.services.medialive" + }, + "python": { + "module": "aws_cdk.aws_medialive" + } + } + }, + "aws-cdk-lib.aws_mediapackage": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaPackage" + }, + "java": { + "package": "software.amazon.awscdk.services.mediapackage" + }, + "python": { + "module": "aws_cdk.aws_mediapackage" + } + } + }, + "aws-cdk-lib.aws_mediastore": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaStore" + }, + "java": { + "package": "software.amazon.awscdk.services.mediastore" + }, + "python": { + "module": "aws_cdk.aws_mediastore" + } + } + }, + "aws-cdk-lib.aws_mediatailor": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MediaTailor" + }, + "java": { + "package": "software.amazon.awscdk.services.mediatailor" + }, + "python": { + "module": "aws_cdk.aws_mediatailor" + } + } + }, + "aws-cdk-lib.aws_memorydb": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MemoryDB" + }, + "java": { + "package": "software.amazon.awscdk.services.memorydb" + }, + "python": { + "module": "aws_cdk.aws_memorydb" + } + } + }, + "aws-cdk-lib.aws_msk": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MSK" + }, + "java": { + "package": "software.amazon.awscdk.services.msk" + }, + "python": { + "module": "aws_cdk.aws_msk" + } + } + }, + "aws-cdk-lib.aws_mwaa": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.MWAA" + }, + "java": { + "package": "software.amazon.awscdk.services.mwaa" + }, + "python": { + "module": "aws_cdk.aws_mwaa" + } + } + }, + "aws-cdk-lib.aws_neptune": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Neptune" + }, + "java": { + "package": "software.amazon.awscdk.services.neptune" + }, + "python": { + "module": "aws_cdk.aws_neptune" + } + } + }, + "aws-cdk-lib.aws_networkfirewall": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.NetworkFirewall" + }, + "java": { + "package": "software.amazon.awscdk.services.networkfirewall" + }, + "python": { + "module": "aws_cdk.aws_networkfirewall" + } + } + }, + "aws-cdk-lib.aws_networkmanager": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.NetworkManager" + }, + "java": { + "package": "software.amazon.awscdk.services.networkmanager" + }, + "python": { + "module": "aws_cdk.aws_networkmanager" + } + } + }, + "aws-cdk-lib.aws_nimblestudio": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.NimbleStudio" + }, + "java": { + "package": "software.amazon.awscdk.services.nimblestudio" + }, + "python": { + "module": "aws_cdk.aws_nimblestudio" + } + } + }, + "aws-cdk-lib.aws_oam": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Oam" + }, + "java": { + "package": "software.amazon.awscdk.services.oam" + }, + "python": { + "module": "aws_cdk.aws_oam" + } + } + }, + "aws-cdk-lib.aws_omics": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Omics" + }, + "java": { + "package": "software.amazon.awscdk.services.omics" + }, + "python": { + "module": "aws_cdk.aws_omics" + } + } + }, + "aws-cdk-lib.aws_opensearchserverless": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.OpenSearchServerless" + }, + "java": { + "package": "software.amazon.awscdk.services.opensearchserverless" + }, + "python": { + "module": "aws_cdk.aws_opensearchserverless" + } + } + }, + "aws-cdk-lib.aws_opensearchservice": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.OpenSearchService" + }, + "java": { + "package": "software.amazon.awscdk.services.opensearchservice" + }, + "python": { + "module": "aws_cdk.aws_opensearchservice" + } + } + }, + "aws-cdk-lib.aws_opsworks": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.OpsWorks" + }, + "java": { + "package": "software.amazon.awscdk.services.opsworks" + }, + "python": { + "module": "aws_cdk.aws_opsworks" + } + } + }, + "aws-cdk-lib.aws_opsworkscm": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.OpsWorksCM" + }, + "java": { + "package": "software.amazon.awscdk.services.opsworkscm" + }, + "python": { + "module": "aws_cdk.aws_opsworkscm" + } + } + }, + "aws-cdk-lib.aws_organizations": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Organizations" + }, + "java": { + "package": "software.amazon.awscdk.services.organizations" + }, + "python": { + "module": "aws_cdk.aws_organizations" + } + } + }, + "aws-cdk-lib.aws_panorama": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Panorama" + }, + "java": { + "package": "software.amazon.awscdk.services.panorama" + }, + "python": { + "module": "aws_cdk.aws_panorama" + } + } + }, + "aws-cdk-lib.aws_personalize": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Personalize" + }, + "java": { + "package": "software.amazon.awscdk.services.personalize" + }, + "python": { + "module": "aws_cdk.aws_personalize" + } + } + }, + "aws-cdk-lib.aws_pinpoint": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Pinpoint" + }, + "java": { + "package": "software.amazon.awscdk.services.pinpoint" + }, + "python": { + "module": "aws_cdk.aws_pinpoint" + } + } + }, + "aws-cdk-lib.aws_pinpointemail": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.PinpointEmail" + }, + "java": { + "package": "software.amazon.awscdk.services.pinpointemail" + }, + "python": { + "module": "aws_cdk.aws_pinpointemail" + } + } + }, + "aws-cdk-lib.aws_pipes": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Pipes" + }, + "java": { + "package": "software.amazon.awscdk.services.pipes" + }, + "python": { + "module": "aws_cdk.aws_pipes" + } + } + }, + "aws-cdk-lib.aws_qldb": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.QLDB" + }, + "java": { + "package": "software.amazon.awscdk.services.qldb" + }, + "python": { + "module": "aws_cdk.aws_qldb" + } + } + }, + "aws-cdk-lib.aws_quicksight": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.QuickSight" + }, + "java": { + "package": "software.amazon.awscdk.services.quicksight" + }, + "python": { + "module": "aws_cdk.aws_quicksight" + } + } + }, + "aws-cdk-lib.aws_ram": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.RAM" + }, + "java": { + "package": "software.amazon.awscdk.services.ram" + }, + "python": { + "module": "aws_cdk.aws_ram" + } + } + }, + "aws-cdk-lib.aws_rds": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.RDS" + }, + "java": { + "package": "software.amazon.awscdk.services.rds" + }, + "python": { + "module": "aws_cdk.aws_rds" + } + } + }, + "aws-cdk-lib.aws_redshift": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Redshift" + }, + "java": { + "package": "software.amazon.awscdk.services.redshift" + }, + "python": { + "module": "aws_cdk.aws_redshift" + } + } + }, + "aws-cdk-lib.aws_redshiftserverless": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.RedshiftServerless" + }, + "java": { + "package": "software.amazon.awscdk.services.redshiftserverless" + }, + "python": { + "module": "aws_cdk.aws_redshiftserverless" + } + } + }, + "aws-cdk-lib.aws_refactorspaces": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.RefactorSpaces" + }, + "java": { + "package": "software.amazon.awscdk.services.refactorspaces" + }, + "python": { + "module": "aws_cdk.aws_refactorspaces" + } + } + }, + "aws-cdk-lib.aws_rekognition": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Rekognition" + }, + "java": { + "package": "software.amazon.awscdk.services.rekognition" + }, + "python": { + "module": "aws_cdk.aws_rekognition" + } + } + }, + "aws-cdk-lib.aws_resiliencehub": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ResilienceHub" + }, + "java": { + "package": "software.amazon.awscdk.services.resiliencehub" + }, + "python": { + "module": "aws_cdk.aws_resiliencehub" + } + } + }, + "aws-cdk-lib.aws_resourceexplorer2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ResourceExplorer2" + }, + "java": { + "package": "software.amazon.awscdk.services.resourceexplorer2" + }, + "python": { + "module": "aws_cdk.aws_resourceexplorer2" + } + } + }, + "aws-cdk-lib.aws_resourcegroups": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ResourceGroups" + }, + "java": { + "package": "software.amazon.awscdk.services.resourcegroups" + }, + "python": { + "module": "aws_cdk.aws_resourcegroups" + } + } + }, + "aws-cdk-lib.aws_robomaker": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.RoboMaker" + }, + "java": { + "package": "software.amazon.awscdk.services.robomaker" + }, + "python": { + "module": "aws_cdk.aws_robomaker" + } + } + }, + "aws-cdk-lib.aws_rolesanywhere": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.RolesAnywhere" + }, + "java": { + "package": "software.amazon.awscdk.services.rolesanywhere" + }, + "python": { + "module": "aws_cdk.aws_rolesanywhere" + } + } + }, + "aws-cdk-lib.aws_route53": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Route53" + }, + "java": { + "package": "software.amazon.awscdk.services.route53" + }, + "python": { + "module": "aws_cdk.aws_route53" + } + } + }, + "aws-cdk-lib.aws_route53_patterns": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Route53.Patterns" + }, + "java": { + "package": "software.amazon.awscdk.services.route53.patterns" + }, + "python": { + "module": "aws_cdk.aws_route53_patterns" + } + } + }, + "aws-cdk-lib.aws_route53_targets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Route53.Targets" + }, + "java": { + "package": "software.amazon.awscdk.services.route53.targets" + }, + "python": { + "module": "aws_cdk.aws_route53_targets" + } + } + }, + "aws-cdk-lib.aws_route53recoverycontrol": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Route53RecoveryControl" + }, + "java": { + "package": "software.amazon.awscdk.services.route53recoverycontrol" + }, + "python": { + "module": "aws_cdk.aws_route53recoverycontrol" + } + } + }, + "aws-cdk-lib.aws_route53recoveryreadiness": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Route53RecoveryReadiness" + }, + "java": { + "package": "software.amazon.awscdk.services.route53recoveryreadiness" + }, + "python": { + "module": "aws_cdk.aws_route53recoveryreadiness" + } + } + }, + "aws-cdk-lib.aws_route53resolver": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Route53Resolver" + }, + "java": { + "package": "software.amazon.awscdk.services.route53resolver" + }, + "python": { + "module": "aws_cdk.aws_route53resolver" + } + } + }, + "aws-cdk-lib.aws_rum": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.RUM" + }, + "java": { + "package": "software.amazon.awscdk.services.rum" + }, + "python": { + "module": "aws_cdk.aws_rum" + } + } + }, + "aws-cdk-lib.aws_s3": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.S3" + }, + "java": { + "package": "software.amazon.awscdk.services.s3" + }, + "python": { + "module": "aws_cdk.aws_s3" + } + } + }, + "aws-cdk-lib.aws_s3_assets": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.S3.Assets" + }, + "java": { + "package": "software.amazon.awscdk.services.s3.assets" + }, + "python": { + "module": "aws_cdk.aws_s3_assets" + } + } + }, + "aws-cdk-lib.aws_s3_deployment": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.S3.Deployment" + }, + "java": { + "package": "software.amazon.awscdk.services.s3.deployment" + }, + "python": { + "module": "aws_cdk.aws_s3_deployment" + } + } + }, + "aws-cdk-lib.aws_s3_notifications": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.S3.Notifications" + }, + "java": { + "package": "software.amazon.awscdk.services.s3.notifications" + }, + "python": { + "module": "aws_cdk.aws_s3_notifications" + } + } + }, + "aws-cdk-lib.aws_s3objectlambda": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.S3ObjectLambda" + }, + "java": { + "package": "software.amazon.awscdk.services.s3objectlambda" + }, + "python": { + "module": "aws_cdk.aws_s3objectlambda" + } + } + }, + "aws-cdk-lib.aws_s3outposts": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.S3Outposts" + }, + "java": { + "package": "software.amazon.awscdk.services.s3outposts" + }, + "python": { + "module": "aws_cdk.aws_s3outposts" + } + } + }, + "aws-cdk-lib.aws_sagemaker": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Sagemaker" + }, + "java": { + "package": "software.amazon.awscdk.services.sagemaker" + }, + "python": { + "module": "aws_cdk.aws_sagemaker" + } + } + }, + "aws-cdk-lib.aws_sam": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SAM" + }, + "java": { + "package": "software.amazon.awscdk.services.sam" + }, + "python": { + "module": "aws_cdk.aws_sam" + } + } + }, + "aws-cdk-lib.aws_scheduler": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Scheduler" + }, + "java": { + "package": "software.amazon.awscdk.services.scheduler" + }, + "python": { + "module": "aws_cdk.aws_scheduler" + } + } + }, + "aws-cdk-lib.aws_sdb": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SDB" + }, + "java": { + "package": "software.amazon.awscdk.services.sdb" + }, + "python": { + "module": "aws_cdk.aws_sdb" + } + } + }, + "aws-cdk-lib.aws_secretsmanager": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SecretsManager" + }, + "java": { + "package": "software.amazon.awscdk.services.secretsmanager" + }, + "python": { + "module": "aws_cdk.aws_secretsmanager" + } + } + }, + "aws-cdk-lib.aws_securityhub": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SecurityHub" + }, + "java": { + "package": "software.amazon.awscdk.services.securityhub" + }, + "python": { + "module": "aws_cdk.aws_securityhub" + } + } + }, + "aws-cdk-lib.aws_servicecatalog": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Servicecatalog" + }, + "java": { + "package": "software.amazon.awscdk.services.servicecatalog" + }, + "python": { + "module": "aws_cdk.aws_servicecatalog" + } + } + }, + "aws-cdk-lib.aws_servicecatalogappregistry": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Servicecatalogappregistry" + }, + "java": { + "package": "software.amazon.awscdk.services.servicecatalogappregistry" + }, + "python": { + "module": "aws_cdk.aws_servicecatalogappregistry" + } + } + }, + "aws-cdk-lib.aws_servicediscovery": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.ServiceDiscovery" + }, + "java": { + "package": "software.amazon.awscdk.services.servicediscovery" + }, + "python": { + "module": "aws_cdk.aws_servicediscovery" + } + } + }, + "aws-cdk-lib.aws_ses": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SES" + }, + "java": { + "package": "software.amazon.awscdk.services.ses" + }, + "python": { + "module": "aws_cdk.aws_ses" + } + } + }, + "aws-cdk-lib.aws_ses_actions": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SES.Actions" + }, + "java": { + "package": "software.amazon.awscdk.services.ses.actions" + }, + "python": { + "module": "aws_cdk.aws_ses_actions" + } + } + }, + "aws-cdk-lib.aws_signer": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Signer" + }, + "java": { + "package": "software.amazon.awscdk.services.signer" + }, + "python": { + "module": "aws_cdk.aws_signer" + } + } + }, + "aws-cdk-lib.aws_simspaceweaver": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SimSpaceWeaver" + }, + "java": { + "package": "software.amazon.awscdk.services.simspaceweaver" + }, + "python": { + "module": "aws_cdk.aws_simspaceweaver" + } + } + }, + "aws-cdk-lib.aws_sns": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SNS" + }, + "java": { + "package": "software.amazon.awscdk.services.sns" + }, + "python": { + "module": "aws_cdk.aws_sns" + } + } + }, + "aws-cdk-lib.aws_sns_subscriptions": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SNS.Subscriptions" + }, + "java": { + "package": "software.amazon.awscdk.services.sns.subscriptions" + }, + "python": { + "module": "aws_cdk.aws_sns_subscriptions" + } + } + }, + "aws-cdk-lib.aws_sqs": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SQS" + }, + "java": { + "package": "software.amazon.awscdk.services.sqs" + }, + "python": { + "module": "aws_cdk.aws_sqs" + } + } + }, + "aws-cdk-lib.aws_ssm": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SSM" + }, + "java": { + "package": "software.amazon.awscdk.services.ssm" + }, + "python": { + "module": "aws_cdk.aws_ssm" + } + } + }, + "aws-cdk-lib.aws_ssmcontacts": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SSMContacts" + }, + "java": { + "package": "software.amazon.awscdk.services.ssmcontacts" + }, + "python": { + "module": "aws_cdk.aws_ssmcontacts" + } + } + }, + "aws-cdk-lib.aws_ssmincidents": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SSMIncidents" + }, + "java": { + "package": "software.amazon.awscdk.services.ssmincidents" + }, + "python": { + "module": "aws_cdk.aws_ssmincidents" + } + } + }, + "aws-cdk-lib.aws_sso": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SSO" + }, + "java": { + "package": "software.amazon.awscdk.services.sso" + }, + "python": { + "module": "aws_cdk.aws_sso" + } + } + }, + "aws-cdk-lib.aws_stepfunctions": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.StepFunctions" + }, + "java": { + "package": "software.amazon.awscdk.services.stepfunctions" + }, + "python": { + "module": "aws_cdk.aws_stepfunctions" + } + } + }, + "aws-cdk-lib.aws_stepfunctions_tasks": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.StepFunctions.Tasks" + }, + "java": { + "package": "software.amazon.awscdk.services.stepfunctions.tasks" + }, + "python": { + "module": "aws_cdk.aws_stepfunctions_tasks" + } + } + }, + "aws-cdk-lib.aws_supportapp": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SupportApp" + }, + "java": { + "package": "software.amazon.awscdk.services.supportapp" + }, + "python": { + "module": "aws_cdk.aws_supportapp" + } + } + }, + "aws-cdk-lib.aws_synthetics": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Synthetics" + }, + "java": { + "package": "software.amazon.awscdk.services.synthetics" + }, + "python": { + "module": "aws_cdk.aws_synthetics" + } + } + }, + "aws-cdk-lib.aws_systemsmanagersap": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.SystemsManagerSAP" + }, + "java": { + "package": "software.amazon.awscdk.services.systemsmanagersap" + }, + "python": { + "module": "aws_cdk.aws_systemsmanagersap" + } + } + }, + "aws-cdk-lib.aws_timestream": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Timestream" + }, + "java": { + "package": "software.amazon.awscdk.services.timestream" + }, + "python": { + "module": "aws_cdk.aws_timestream" + } + } + }, + "aws-cdk-lib.aws_transfer": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Transfer" + }, + "java": { + "package": "software.amazon.awscdk.services.transfer" + }, + "python": { + "module": "aws_cdk.aws_transfer" + } + } + }, + "aws-cdk-lib.aws_voiceid": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.VoiceID" + }, + "java": { + "package": "software.amazon.awscdk.services.voiceid" + }, + "python": { + "module": "aws_cdk.aws_voiceid" + } + } + }, + "aws-cdk-lib.aws_vpclattice": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.VpcLattice" + }, + "java": { + "package": "software.amazon.awscdk.services.vpclattice" + }, + "python": { + "module": "aws_cdk.aws_vpclattice" + } + } + }, + "aws-cdk-lib.aws_waf": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.WAF" + }, + "java": { + "package": "software.amazon.awscdk.services.waf" + }, + "python": { + "module": "aws_cdk.aws_waf" + } + } + }, + "aws-cdk-lib.aws_wafregional": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.WAFRegional" + }, + "java": { + "package": "software.amazon.awscdk.services.waf.regional" + }, + "python": { + "module": "aws_cdk.aws_wafregional" + } + } + }, + "aws-cdk-lib.aws_wafv2": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.WAFv2" + }, + "java": { + "package": "software.amazon.awscdk.services.wafv2" + }, + "python": { + "module": "aws_cdk.aws_wafv2" + } + } + }, + "aws-cdk-lib.aws_wisdom": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.Wisdom" + }, + "java": { + "package": "software.amazon.awscdk.services.wisdom" + }, + "python": { + "module": "aws_cdk.aws_wisdom" + } + } + }, + "aws-cdk-lib.aws_workspaces": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.WorkSpaces" + }, + "java": { + "package": "software.amazon.awscdk.services.workspaces" + }, + "python": { + "module": "aws_cdk.aws_workspaces" + } + } + }, + "aws-cdk-lib.aws_xray": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.AWS.XRay" + }, + "java": { + "package": "software.amazon.awscdk.services.xray" + }, + "python": { + "module": "aws_cdk.aws_xray" + } + } + }, + "aws-cdk-lib.cloud_assembly_schema": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.CloudAssembly.Schema" + }, + "java": { + "package": "software.amazon.awscdk.cloudassembly.schema" + }, + "python": { + "module": "aws_cdk.cloud_assembly_schema" + } + } + }, + "aws-cdk-lib.cloudformation_include": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.CloudFormation.Include" + }, + "java": { + "package": "software.amazon.awscdk.cloudformation.include" + }, + "python": { + "module": "aws_cdk.cloudformation_include" + } + } + }, + "aws-cdk-lib.custom_resources": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.CustomResources" + }, + "java": { + "package": "software.amazon.awscdk.customresources" + }, + "python": { + "module": "aws_cdk.custom_resources" + } + } + }, + "aws-cdk-lib.cx_api": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.CXAPI" + }, + "java": { + "package": "software.amazon.awscdk.cxapi" + }, + "python": { + "module": "aws_cdk.cx_api" + } + } + }, + "aws-cdk-lib.lambda_layer_awscli": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.LambdaLayer.AwsCli" + }, + "java": { + "package": "software.amazon.awscdk.lambdalayer.awscli" + }, + "python": { + "module": "aws_cdk.lambda_layer_awscli" + } + } + }, + "aws-cdk-lib.lambda_layer_kubectl": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.LambdaLayer.Kubectl" + }, + "java": { + "package": "software.amazon.awscdk.lambdalayer.kubectl" + }, + "python": { + "module": "aws_cdk.lambda_layer_kubectl" + } + } + }, + "aws-cdk-lib.lambda_layer_node_proxy_agent": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.LambdaLayer.NodeProxyAgent" + }, + "java": { + "package": "software.amazon.awscdk.lambda.layer.node.proxy.agent" + }, + "python": { + "module": "aws_cdk.lambda_layer_node_proxy_agent" + } + } + }, + "aws-cdk-lib.pipelines": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Pipelines" + }, + "java": { + "package": "software.amazon.awscdk.pipelines" + }, + "python": { + "module": "aws_cdk.pipelines" + } + } + }, + "aws-cdk-lib.region_info": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.RegionInfo" + }, + "java": { + "package": "software.amazon.awscdk.regioninfo" + }, + "python": { + "module": "aws_cdk.region_info" + } + } + }, + "aws-cdk-lib.triggers": { + "targets": { + "dotnet": { + "namespace": "Amazon.CDK.Triggers" + }, + "java": { + "package": "software.amazon.awscdk.triggers" + }, + "python": { + "module": "aws_cdk.triggers" + } + } + } + }, + "targets": { + "dotnet": { + "iconUrl": "https://raw.githubusercontent.com/aws/aws-cdk/main/logo/default-256-dark.png", + "namespace": "Amazon.CDK", + "packageId": "Amazon.CDK.Lib" + }, + "go": { + "moduleName": "github.com/aws/aws-cdk-go", + "packageName": "awscdk" + }, + "java": { + "maven": { + "artifactId": "aws-cdk-lib", + "groupId": "software.amazon.awscdk" + }, + "package": "software.amazon.awscdk" + }, + "js": { + "npm": "aws-cdk-lib" + }, + "python": { + "distName": "aws-cdk-lib", + "module": "aws_cdk" + } + } + }, + "constructs": { + "targets": { + "dotnet": { + "namespace": "Constructs", + "packageId": "Constructs" + }, + "go": { + "moduleName": "github.com/aws/constructs-go" + }, + "java": { + "maven": { + "artifactId": "constructs", + "groupId": "software.constructs" + }, + "package": "software.constructs" + }, + "js": { + "npm": "constructs" + }, + "python": { + "distName": "constructs", + "module": "constructs" + } + } + } + }, + "description": "Check CDK v2 applications for best practices using a combination on available rule packs.", + "docs": { + "stability": "stable" + }, + "homepage": "https://github.com/cdklabs/cdk-nag.git", + "jsiiVersion": "1.86.1 (build defb235)", + "keywords": [ + "cdk" + ], + "license": "Apache-2.0", + "metadata": { + "jsii": { + "pacmak": { + "hasDefaultInterfaces": true + } + }, + "tscRootDir": "src" + }, + "name": "cdk-nag", + "readme": { + "markdown": "\n\n# cdk-nag\n\n[![PyPI version](https://img.shields.io/pypi/v/cdk-nag)](https://pypi.org/project/cdk-nag/)\n[![npm version](https://img.shields.io/npm/v/cdk-nag)](https://www.npmjs.com/package/cdk-nag)\n[![Maven version](https://img.shields.io/maven-central/v/io.github.cdklabs/cdknag)](https://search.maven.org/search?q=a:cdknag)\n[![NuGet version](https://img.shields.io/nuget/v/Cdklabs.CdkNag)](https://www.nuget.org/packages/Cdklabs.CdkNag)\n[![Go version](https://img.shields.io/github/go-mod/go-version/cdklabs/cdk-nag-go?color=blue&filename=cdknag%2Fgo.mod)](https://github.com/cdklabs/cdk-nag-go)\n\n[![View on Construct Hub](https://constructs.dev/badge?package=cdk-nag)](https://constructs.dev/packages/cdk-nag)\n\nCheck CDK applications or [CloudFormation templates](#using-on-cloudformation-templates) for best practices using a combination of available rule packs. Inspired by [cfn_nag](https://github.com/stelligent/cfn_nag).\n\nCheck out [this blog post](https://aws.amazon.com/blogs/devops/manage-application-security-and-compliance-with-the-aws-cloud-development-kit-and-cdk-nag/) for a guided overview!\n\n![demo](cdk_nag.gif)\n\n## Available Rules and Packs\n\nSee [RULES](./RULES.md) for more information on all the available packs.\n\n1. [AWS Solutions](./RULES.md#awssolutions)\n2. [HIPAA Security](./RULES.md#hipaa-security)\n3. [NIST 800-53 rev 4](./RULES.md#nist-800-53-rev-4)\n4. [NIST 800-53 rev 5](./RULES.md#nist-800-53-rev-5)\n5. [PCI DSS 3.2.1](./RULES.md#pci-dss-321)\n\n[RULES](./RULES.md) also includes a collection of [additional rules](./RULES.md#additional-rules) that are not currently included in any of the pre-built NagPacks, but are still available for inclusion in custom NagPacks.\n\nRead the [NagPack developer docs](./docs/NagPack.md) if you are interested in creating your own pack.\n\n## Usage\n\nFor a full list of options See `NagPackProps` in the [API.md](./API.md#struct-nagpackprops)\n\n
\nIncluding in an application\n\n```typescript\nimport { App, Aspects } from 'aws-cdk-lib';\nimport { CdkTestStack } from '../lib/cdk-test-stack';\nimport { AwsSolutionsChecks } from 'cdk-nag';\n\nconst app = new App();\nnew CdkTestStack(app, 'CdkNagDemo');\n// Simple rule informational messages\nAspects.of(app).add(new AwsSolutionsChecks());\n// Additional explanations on the purpose of triggered rules\n// Aspects.of(stack).add(new AwsSolutionsChecks({ verbose: true }));\n```\n\n
\n\n## Suppressing a Rule\n\n
\n Example 1) Default Construct\n\n```typescript\nimport { SecurityGroup, Vpc, Peer, Port } from 'aws-cdk-lib/aws-ec2';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { NagSuppressions } from 'cdk-nag';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n const test = new SecurityGroup(this, 'test', {\n vpc: new Vpc(this, 'vpc'),\n });\n test.addIngressRule(Peer.anyIpv4(), Port.allTraffic());\n NagSuppressions.addResourceSuppressions(test, [\n { id: 'AwsSolutions-EC23', reason: 'lorem ipsum' },\n ]);\n }\n}\n```\n\n
\n\n
\n Example 2) On Multiple Constructs\n\n```typescript\nimport { SecurityGroup, Vpc, Peer, Port } from 'aws-cdk-lib/aws-ec2';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { NagSuppressions } from 'cdk-nag';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n const vpc = new Vpc(this, 'vpc');\n const test1 = new SecurityGroup(this, 'test', { vpc });\n test1.addIngressRule(Peer.anyIpv4(), Port.allTraffic());\n const test2 = new SecurityGroup(this, 'test', { vpc });\n test2.addIngressRule(Peer.anyIpv4(), Port.allTraffic());\n NagSuppressions.addResourceSuppressions(\n [test1, test2],\n [{ id: 'AwsSolutions-EC23', reason: 'lorem ipsum' }]\n );\n }\n}\n```\n\n
\n\n
\n Example 3) Child Constructs\n\n```typescript\nimport { User, PolicyStatement } from 'aws-cdk-lib/aws-iam';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { NagSuppressions } from 'cdk-nag';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n const user = new User(this, 'rUser');\n user.addToPolicy(\n new PolicyStatement({\n actions: ['s3:PutObject'],\n resources: ['arn:aws:s3:::bucket_name/*'],\n })\n );\n // Enable adding suppressions to child constructs\n NagSuppressions.addResourceSuppressions(\n user,\n [\n {\n id: 'AwsSolutions-IAM5',\n reason: 'lorem ipsum',\n appliesTo: ['Resource::arn:aws:s3:::bucket_name/*'], // optional\n },\n ],\n true\n );\n }\n}\n```\n\n
\n\n
\n Example 4) Stack Level \n\n```typescript\nimport { App, Aspects } from 'aws-cdk-lib';\nimport { CdkTestStack } from '../lib/cdk-test-stack';\nimport { AwsSolutionsChecks, NagSuppressions } from 'cdk-nag';\n\nconst app = new App();\nconst stack = new CdkTestStack(app, 'CdkNagDemo');\nAspects.of(app).add(new AwsSolutionsChecks());\nNagSuppressions.addStackSuppressions(stack, [\n { id: 'AwsSolutions-EC23', reason: 'lorem ipsum' },\n]);\n```\n\n
\n\n
\n Example 5) Construct path\n\nIf you received the following error on synth/deploy\n\n```bash\n[Error at /StackName/Custom::CDKBucketDeployment8675309/ServiceRole/Resource] AwsSolutions-IAM4: The IAM user, role, or group uses AWS managed policies\n```\n\n```typescript\nimport { Bucket } from 'aws-cdk-lib/aws-s3';\nimport { BucketDeployment } from 'aws-cdk-lib/aws-s3-deployment';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { NagSuppressions } from 'cdk-nag';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n new BucketDeployment(this, 'rDeployment', {\n sources: [],\n destinationBucket: Bucket.fromBucketName(this, 'rBucket', 'foo'),\n });\n NagSuppressions.addResourceSuppressionsByPath(\n this,\n '/StackName/Custom::CDKBucketDeployment8675309/ServiceRole/Resource',\n [{ id: 'AwsSolutions-IAM4', reason: 'at least 10 characters' }]\n );\n }\n}\n```\n\n
\n\n
\n Example 6) Granular Suppressions of findings\n\nCertain rules support granular suppressions of `findings`. If you received the following errors on synth/deploy\n\n```bash\n[Error at /StackName/rFirstUser/DefaultPolicy/Resource] AwsSolutions-IAM5[Action::s3:*]: The IAM entity contains wildcard permissions and does not have a cdk-nag rule suppression with evidence for those permission.\n[Error at /StackName/rFirstUser/DefaultPolicy/Resource] AwsSolutions-IAM5[Resource::*]: The IAM entity contains wildcard permissions and does not have a cdk-nag rule suppression with evidence for those permission.\n[Error at /StackName/rSecondUser/DefaultPolicy/Resource] AwsSolutions-IAM5[Action::s3:*]: The IAM entity contains wildcard permissions and does not have a cdk-nag rule suppression with evidence for those permission.\n[Error at /StackName/rSecondUser/DefaultPolicy/Resource] AwsSolutions-IAM5[Resource::*]: The IAM entity contains wildcard permissions and does not have a cdk-nag rule suppression with evidence for those permission.\n```\n\nBy applying the following suppressions\n\n```typescript\nimport { User } from 'aws-cdk-lib/aws-iam';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { NagSuppressions } from 'cdk-nag';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n const firstUser = new User(this, 'rFirstUser');\n firstUser.addToPolicy(\n new PolicyStatement({\n actions: ['s3:*'],\n resources: ['*'],\n })\n );\n const secondUser = new User(this, 'rSecondUser');\n secondUser.addToPolicy(\n new PolicyStatement({\n actions: ['s3:*'],\n resources: ['*'],\n })\n );\n const thirdUser = new User(this, 'rSecondUser');\n thirdUser.addToPolicy(\n new PolicyStatement({\n actions: ['sqs:CreateQueue'],\n resources: [`arn:aws:sqs:${this.region}:${this.account}:*`],\n })\n );\n NagSuppressions.addResourceSuppressions(\n firstUser,\n [\n {\n id: 'AwsSolutions-IAM5',\n reason:\n \"Only suppress AwsSolutions-IAM5 's3:*' finding on First User.\",\n appliesTo: ['Action::s3:*'],\n },\n ],\n true\n );\n NagSuppressions.addResourceSuppressions(\n secondUser,\n [\n {\n id: 'AwsSolutions-IAM5',\n reason: 'Suppress all AwsSolutions-IAM5 findings on Second User.',\n },\n ],\n true\n );\n NagSuppressions.addResourceSuppressions(\n thirdUser,\n [\n {\n id: 'AwsSolutions-IAM5',\n reason: 'Suppress AwsSolutions-IAM5 on the SQS resource.',\n appliesTo: [\n {\n regex: '/^Resource::arn:aws:sqs:(.*):\\\\*$/g',\n },\n ],\n },\n ],\n true\n );\n }\n}\n```\n\nYou would see the following error on synth/deploy\n\n```bash\n[Error at /StackName/rFirstUser/DefaultPolicy/Resource] AwsSolutions-IAM5[Resource::*]: The IAM entity contains wildcard permissions and does not have a cdk-nag rule suppression with evidence for those permission.\n```\n\n
\n\n## Suppressing `aws-cdk-lib/pipelines` Violations\n\nThe [aws-cdk-lib/pipelines.CodePipeline](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.pipelines.CodePipeline.html) construct and its child constructs are not guaranteed to be \"Visited\" by `Aspects`, as they are not added during the \"Construction\" phase of the [cdk lifecycle](https://docs.aws.amazon.com/cdk/v2/guide/apps.html#lifecycle). Because of this behavior, you may experience problems such as rule violations not appearing or the inability to suppress violations on these constructs.\n\nYou can remediate these rule violation and suppression problems by forcing the pipeline construct creation forward by calling `.buildPipeline()` on your `CodePipeline` object. Otherwise you may see errors such as:\n\n```\nError: Suppression path \"/this/construct/path\" did not match any resource. This can occur when a resource does not exist or if a suppression is applied before a resource is created.\n```\n\nSee [this issue](https://github.com/aws/aws-cdk/issues/18440) for more information.\n\n
\n Example) Supressing Violations in Pipelines\n\n`example-app.ts`\n\n```ts\nimport { App, Aspects } from 'aws-cdk-lib';\nimport { AwsSolutionsChecks } from 'cdk-nag';\nimport { ExamplePipeline } from '../lib/example-pipeline';\n\nconst app = new App();\nnew ExamplePipeline(app, 'example-cdk-pipeline');\nAspects.of(app).add(new AwsSolutionsChecks({ verbose: true }));\napp.synth();\n```\n\n`example-pipeline.ts`\n\n```ts\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Repository } from 'aws-cdk-lib/aws-codecommit';\nimport {\n CodePipeline,\n CodePipelineSource,\n ShellStep,\n} from 'aws-cdk-lib/pipelines';\nimport { NagSuppressions } from 'cdk-nag';\nimport { Construct } from 'constructs';\n\nexport class ExamplePipeline extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n\n const exampleSynth = new ShellStep('ExampleSynth', {\n commands: ['yarn build --frozen-lockfile'],\n input: CodePipelineSource.codeCommit(\n new Repository(this, 'ExampleRepo', { repositoryName: 'ExampleRepo' }),\n 'main'\n ),\n });\n\n const ExamplePipeline = new CodePipeline(this, 'ExamplePipeline', {\n synth: exampleSynth,\n });\n\n // Force the pipeline construct creation forward before applying suppressions.\n // @See https://github.com/aws/aws-cdk/issues/18440\n ExamplePipeline.buildPipeline();\n\n // The path suppression will error if you comment out \"ExamplePipeline.buildPipeline();\"\"\n NagSuppressions.addResourceSuppressionsByPath(\n this,\n '/example-cdk-pipeline/ExamplePipeline/Pipeline/ArtifactsBucket/Resource',\n [\n {\n id: 'AwsSolutions-S1',\n reason: 'Because I said so',\n },\n ]\n );\n }\n}\n```\n\n
\n\n## Rules and Property Overrides\n\nIn some cases L2 Constructs do not have a native option to remediate an issue and must be fixed via [Raw Overrides](https://docs.aws.amazon.com/cdk/latest/guide/cfn_layer.html#cfn_layer_raw). Since raw overrides take place after template synthesis these fixes are not caught by cdk-nag. In this case you should remediate the issue and suppress the issue like in the following example.\n\n
\n Example) Property Overrides\n\n```ts\nimport {\n Instance,\n InstanceType,\n InstanceClass,\n MachineImage,\n Vpc,\n CfnInstance,\n} from 'aws-cdk-lib/aws-ec2';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { NagSuppressions } from 'cdk-nag';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n const instance = new Instance(this, 'rInstance', {\n vpc: new Vpc(this, 'rVpc'),\n instanceType: new InstanceType(InstanceClass.T3),\n machineImage: MachineImage.latestAmazonLinux(),\n });\n const cfnIns = instance.node.defaultChild as CfnInstance;\n cfnIns.addPropertyOverride('DisableApiTermination', true);\n NagSuppressions.addResourceSuppressions(instance, [\n {\n id: 'AwsSolutions-EC29',\n reason: 'Remediated through property override.',\n },\n ]);\n }\n}\n```\n\n
\n\n## Conditionally Ignoring Suppressions\n\nYou can optionally create a condition that prevents certain rules from being suppressed. You can create conditions for any variety of reasons. Examples include a condition that always ignores a suppression, a condition that ignores a suppression based on the date, a condition that ignores a suppression based on the reason. You can read [the developer docs](./docs/IgnoreSuppressionConditions.md) for more information on creating your own conditions.\n\n
\n Example) Using the pre-built `SuppressionIgnoreErrors` class to ignore suppressions on any `Error` level rules.\n\n```ts\nimport { App, Aspects } from 'aws-cdk-lib';\nimport { CdkTestStack } from '../lib/cdk-test-stack';\nimport { AwsSolutionsChecks, SuppressionIgnoreErrors } from 'cdk-nag';\n\nconst app = new App();\nnew CdkTestStack(app, 'CdkNagDemo');\n// Ignore Suppressions on any errors\nAspects.of(app).add(\n new AwsSolutionsChecks({\n suppressionIgnoreCondition: new SuppressionIgnoreErrors(),\n })\n);\n```\n\n
\n\n## Customizing Logging\n\n`NagLogger`s give `NagPack` authors and users the ability to create their own custom reporting mechanisms. All pre-built `NagPacks`come with the `AnnotationsLogger`and the `NagReportLogger` (with CSV reports) enabled by default.\n\nSee the [NagLogger](./docs/NagLogger.md) developer docs for more information.\n\n
\n Example) Adding the `ExtremelyHelpfulConsoleLogger` example from the NagLogger docs\n\n```ts\nimport { App, Aspects } from 'aws-cdk-lib';\nimport { CdkTestStack } from '../lib/cdk-test-stack';\nimport { ExtremelyHelpfulConsoleLogger } from './docs/NagLogger';\nimport { AwsSolutionsChecks } from 'cdk-nag';\n\nconst app = new App();\nnew CdkTestStack(app, 'CdkNagDemo');\nAspects.of(app).add(\n new AwsSolutionsChecks({\n additionalLoggers: [new ExtremelyHelpfulConsoleLogger()],\n })\n);\n```\n\n
\n\n## Using on CloudFormation templates\n\nYou can use cdk-nag on existing CloudFormation templates by using the [cloudformation-include](https://docs.aws.amazon.com/cdk/latest/guide/use_cfn_template.html#use_cfn_template_install) module.\n\n
\n Example 1) CloudFormation template with suppression\n\nSample CloudFormation template with suppression\n\n```json\n{\n \"Resources\": {\n \"rBucket\": {\n \"Type\": \"AWS::S3::Bucket\",\n \"Properties\": {\n \"BucketName\": \"some-bucket-name\"\n },\n \"Metadata\": {\n \"cdk_nag\": {\n \"rules_to_suppress\": [\n {\n \"id\": \"AwsSolutions-S1\",\n \"reason\": \"at least 10 characters\"\n }\n ]\n }\n }\n }\n }\n}\n```\n\nSample App\n\n```typescript\nimport { App, Aspects } from 'aws-cdk-lib';\nimport { CdkTestStack } from '../lib/cdk-test-stack';\nimport { AwsSolutionsChecks } from 'cdk-nag';\n\nconst app = new App();\nnew CdkTestStack(app, 'CdkNagDemo');\nAspects.of(app).add(new AwsSolutionsChecks());\n```\n\nSample Stack with imported template\n\n```typescript\nimport { CfnInclude } from 'aws-cdk-lib/cloudformation-include';\nimport { NagSuppressions } from 'cdk-nag';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n new CfnInclude(this, 'Template', {\n templateFile: 'my-template.json',\n });\n // Add any additional suppressions\n NagSuppressions.addResourceSuppressionsByPath(\n this,\n '/CdkNagDemo/Template/rBucket',\n [\n {\n id: 'AwsSolutions-S2',\n reason: 'at least 10 characters',\n },\n ]\n );\n }\n}\n```\n\n
\n\n
\n Example 2) CloudFormation template with granular suppressions\n\nSample CloudFormation template with suppression\n\n```json\n{\n \"Resources\": {\n \"myPolicy\": {\n \"Type\": \"AWS::IAM::Policy\",\n \"Properties\": {\n \"PolicyDocument\": {\n \"Statement\": [\n {\n \"Action\": [\n \"kms:Decrypt\",\n \"kms:DescribeKey\",\n \"kms:Encrypt\",\n \"kms:ReEncrypt*\",\n \"kms:GenerateDataKey*\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\"some-key-arn\"]\n }\n ],\n \"Version\": \"2012-10-17\"\n }\n },\n \"Metadata\": {\n \"cdk_nag\": {\n \"rules_to_suppress\": [\n {\n \"id\": \"AwsSolutions-IAM5\",\n \"reason\": \"Allow key data access\",\n \"applies_to\": [\n \"Action::kms:ReEncrypt*\",\n \"Action::kms:GenerateDataKey*\"\n ]\n }\n ]\n }\n }\n }\n }\n}\n```\n\nSample App\n\n```typescript\nimport { App, Aspects } from 'aws-cdk-lib';\nimport { CdkTestStack } from '../lib/cdk-test-stack';\nimport { AwsSolutionsChecks } from 'cdk-nag';\n\nconst app = new App();\nnew CdkTestStack(app, 'CdkNagDemo');\nAspects.of(app).add(new AwsSolutionsChecks());\n```\n\nSample Stack with imported template\n\n```typescript\nimport { CfnInclude } from 'aws-cdk-lib/cloudformation-include';\nimport { NagSuppressions } from 'cdk-nag';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\n\nexport class CdkTestStack extends Stack {\n constructor(scope: Construct, id: string, props?: StackProps) {\n super(scope, id, props);\n new CfnInclude(this, 'Template', {\n templateFile: 'my-template.json',\n });\n // Add any additional suppressions\n NagSuppressions.addResourceSuppressionsByPath(\n this,\n '/CdkNagDemo/Template/myPolicy',\n [\n {\n id: 'AwsSolutions-IAM5',\n reason: 'Allow key data access',\n appliesTo: ['Action::kms:ReEncrypt*', 'Action::kms:GenerateDataKey*'],\n },\n ]\n );\n }\n}\n```\n\n
\n\n## Contributing\n\nSee [CONTRIBUTING](./CONTRIBUTING.md) for more information.\n\n## License\n\nThis project is licensed under the Apache-2.0 License.\n" + }, + "repository": { + "type": "git", + "url": "https://github.com/cdklabs/cdk-nag.git" + }, + "schema": "jsii/0.10.0", + "submodules": { + "cdk-nag.rules": { + "locationInModule": { + "filename": "src/index.ts", + "line": 16 + }, + "symbolId": "src/rules/index:" + }, + "cdk-nag.rules.apigw": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 5 + }, + "symbolId": "src/rules/apigw/index:" + }, + "cdk-nag.rules.appsync": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 6 + }, + "symbolId": "src/rules/appsync/index:" + }, + "cdk-nag.rules.athena": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 7 + }, + "symbolId": "src/rules/athena/index:" + }, + "cdk-nag.rules.autoscaling": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 8 + }, + "symbolId": "src/rules/autoscaling/index:" + }, + "cdk-nag.rules.cloud9": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 9 + }, + "symbolId": "src/rules/cloud9/index:" + }, + "cdk-nag.rules.cloudfront": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 10 + }, + "symbolId": "src/rules/cloudfront/index:" + }, + "cdk-nag.rules.cloudtrail": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 11 + }, + "symbolId": "src/rules/cloudtrail/index:" + }, + "cdk-nag.rules.cloudwatch": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 12 + }, + "symbolId": "src/rules/cloudwatch/index:" + }, + "cdk-nag.rules.codebuild": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 13 + }, + "symbolId": "src/rules/codebuild/index:" + }, + "cdk-nag.rules.cognito": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 14 + }, + "symbolId": "src/rules/cognito/index:" + }, + "cdk-nag.rules.dms": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 15 + }, + "symbolId": "src/rules/dms/index:" + }, + "cdk-nag.rules.documentdb": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 16 + }, + "symbolId": "src/rules/documentdb/index:" + }, + "cdk-nag.rules.dynamodb": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 17 + }, + "symbolId": "src/rules/dynamodb/index:" + }, + "cdk-nag.rules.ec2": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 18 + }, + "symbolId": "src/rules/ec2/index:" + }, + "cdk-nag.rules.ecr": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 19 + }, + "symbolId": "src/rules/ecr/index:" + }, + "cdk-nag.rules.ecs": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 20 + }, + "symbolId": "src/rules/ecs/index:" + }, + "cdk-nag.rules.efs": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 22 + }, + "symbolId": "src/rules/efs/index:" + }, + "cdk-nag.rules.eks": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 21 + }, + "symbolId": "src/rules/eks/index:" + }, + "cdk-nag.rules.elasticache": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 23 + }, + "symbolId": "src/rules/elasticache/index:" + }, + "cdk-nag.rules.elasticbeanstalk": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 24 + }, + "symbolId": "src/rules/elasticbeanstalk/index:" + }, + "cdk-nag.rules.elb": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 25 + }, + "symbolId": "src/rules/elb/index:" + }, + "cdk-nag.rules.emr": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 26 + }, + "symbolId": "src/rules/emr/index:" + }, + "cdk-nag.rules.eventbridge": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 27 + }, + "symbolId": "src/rules/eventbridge/index:" + }, + "cdk-nag.rules.glue": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 28 + }, + "symbolId": "src/rules/glue/index:" + }, + "cdk-nag.rules.iam": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 29 + }, + "symbolId": "src/rules/iam/index:" + }, + "cdk-nag.rules.kinesis": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 30 + }, + "symbolId": "src/rules/kinesis/index:" + }, + "cdk-nag.rules.kms": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 31 + }, + "symbolId": "src/rules/kms/index:" + }, + "cdk-nag.rules.lambda": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 32 + }, + "symbolId": "src/rules/lambda/index:" + }, + "cdk-nag.rules.lex": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 33 + }, + "symbolId": "src/rules/lex/index:" + }, + "cdk-nag.rules.mediastore": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 34 + }, + "symbolId": "src/rules/mediastore/index:" + }, + "cdk-nag.rules.msk": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 35 + }, + "symbolId": "src/rules/msk/index:" + }, + "cdk-nag.rules.neptune": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 36 + }, + "symbolId": "src/rules/neptune/index:" + }, + "cdk-nag.rules.opensearch": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 37 + }, + "symbolId": "src/rules/opensearch/index:" + }, + "cdk-nag.rules.quicksight": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 38 + }, + "symbolId": "src/rules/quicksight/index:" + }, + "cdk-nag.rules.rds": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 39 + }, + "symbolId": "src/rules/rds/index:" + }, + "cdk-nag.rules.redshift": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 40 + }, + "symbolId": "src/rules/redshift/index:" + }, + "cdk-nag.rules.s3": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 41 + }, + "symbolId": "src/rules/s3/index:" + }, + "cdk-nag.rules.sagemaker": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 42 + }, + "symbolId": "src/rules/sagemaker/index:" + }, + "cdk-nag.rules.secretsmanager": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 43 + }, + "symbolId": "src/rules/secretsmanager/index:" + }, + "cdk-nag.rules.sns": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 44 + }, + "symbolId": "src/rules/sns/index:" + }, + "cdk-nag.rules.sqs": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 45 + }, + "symbolId": "src/rules/sqs/index:" + }, + "cdk-nag.rules.stepfunctions": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 46 + }, + "symbolId": "src/rules/stepfunctions/index:" + }, + "cdk-nag.rules.timestream": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 47 + }, + "symbolId": "src/rules/timestream/index:" + }, + "cdk-nag.rules.vpc": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 48 + }, + "symbolId": "src/rules/vpc/index:" + }, + "cdk-nag.rules.waf": { + "locationInModule": { + "filename": "src/rules/index.ts", + "line": 49 + }, + "symbolId": "src/rules/waf/index:" + } + }, + "targets": { + "dotnet": { + "namespace": "Cdklabs.CdkNag", + "packageId": "Cdklabs.CdkNag" + }, + "go": { + "moduleName": "github.com/cdklabs/cdk-nag-go" + }, + "java": { + "maven": { + "artifactId": "cdknag", + "groupId": "io.github.cdklabs" + }, + "package": "io.github.cdklabs.cdknag" + }, + "js": { + "npm": "cdk-nag" + }, + "python": { + "distName": "cdk-nag", + "module": "cdk_nag" + } + }, + "types": { + "cdk-nag.AnnotationLogger": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "A NagLogger that outputs to the CDK Annotations system." + }, + "fqn": "cdk-nag.AnnotationLogger", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 124 + }, + "parameters": [ + { + "name": "props", + "optional": true, + "type": { + "fqn": "cdk-nag.AnnotationLoggerProps" + } + } + ] + }, + "interfaces": [ + "cdk-nag.INagLogger" + ], + "kind": "class", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 120 + }, + "methods": [ + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 184 + }, + "name": "createMessage", + "parameters": [ + { + "name": "ruleId", + "type": { + "primitive": "string" + } + }, + { + "name": "findingId", + "type": { + "primitive": "string" + } + }, + { + "name": "ruleInfo", + "type": { + "primitive": "string" + } + }, + { + "name": "ruleExplanation", + "type": { + "primitive": "string" + } + }, + { + "name": "verbose", + "type": { + "primitive": "boolean" + } + } + ], + "protected": true, + "returns": { + "type": { + "primitive": "string" + } + } + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource passes the compliance check for a given rule." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 128 + }, + "name": "onCompliance", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "_data", + "type": { + "fqn": "cdk-nag.NagLoggerComplianceData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a rule throws an error during while validating a CfnResource for compliance." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 157 + }, + "name": "onError", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerErrorData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource does not pass the compliance check for a given rule and the the rule violation is not suppressed by the user." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 131 + }, + "name": "onNonCompliance", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerNonComplianceData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a rule does not apply to the given CfnResource." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 180 + }, + "name": "onNotApplicable", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "_data", + "type": { + "fqn": "cdk-nag.NagLoggerNotApplicableData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource does not pass the compliance check for a given rule and the rule violation is suppressed by the user." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 145 + }, + "name": "onSuppressed", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerSuppressedData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a rule throws an error during while validating a CfnResource for compliance and the error is suppressed." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 168 + }, + "name": "onSuppressedError", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerSuppressedErrorData" + } + } + ] + } + ], + "name": "AnnotationLogger", + "properties": [ + { + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 123 + }, + "name": "logIgnores", + "type": { + "primitive": "boolean" + } + }, + { + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 122 + }, + "name": "verbose", + "type": { + "primitive": "boolean" + } + }, + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 121 + }, + "name": "suppressionId", + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/nag-logger:AnnotationLogger" + }, + "cdk-nag.AnnotationLoggerProps": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Props for the AnnotationLogger." + }, + "fqn": "cdk-nag.AnnotationLoggerProps", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 106 + }, + "name": "AnnotationLoggerProps", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Whether or not to log suppressed rule violations as informational messages (default: false)." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 115 + }, + "name": "logIgnores", + "optional": true, + "type": { + "primitive": "boolean" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Whether or not to enable extended explanatory descriptions on warning, error, and logged ignore messages." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 110 + }, + "name": "verbose", + "optional": true, + "type": { + "primitive": "boolean" + } + } + ], + "symbolId": "src/nag-logger:AnnotationLoggerProps" + }, + "cdk-nag.AwsSolutionsChecks": { + "assembly": "cdk-nag", + "base": "cdk-nag.NagPack", + "docs": { + "stability": "stable", + "summary": "Check Best practices based on AWS Solutions Security Matrix." + }, + "fqn": "cdk-nag.AwsSolutionsChecks", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/packs/aws-solutions.ts", + "line": 194 + }, + "parameters": [ + { + "name": "props", + "optional": true, + "type": { + "fqn": "cdk-nag.NagPackProps" + } + } + ] + }, + "kind": "class", + "locationInModule": { + "filename": "src/packs/aws-solutions.ts", + "line": 193 + }, + "methods": [ + { + "docs": { + "stability": "stable", + "summary": "All aspects can visit an IConstruct." + }, + "locationInModule": { + "filename": "src/packs/aws-solutions.ts", + "line": 198 + }, + "name": "visit", + "overrides": "cdk-nag.NagPack", + "parameters": [ + { + "name": "node", + "type": { + "fqn": "constructs.IConstruct" + } + } + ] + } + ], + "name": "AwsSolutionsChecks", + "symbolId": "src/packs/aws-solutions:AwsSolutionsChecks" + }, + "cdk-nag.HIPAASecurityChecks": { + "assembly": "cdk-nag", + "base": "cdk-nag.NagPack", + "docs": { + "remarks": "Based on the HIPAA Security AWS operational best practices: https://docs.aws.amazon.com/config/latest/developerguide/operational-best-practices-for-hipaa_security.html", + "stability": "stable", + "summary": "Check for HIPAA Security compliance." + }, + "fqn": "cdk-nag.HIPAASecurityChecks", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/packs/hipaa-security.ts", + "line": 141 + }, + "parameters": [ + { + "name": "props", + "optional": true, + "type": { + "fqn": "cdk-nag.NagPackProps" + } + } + ] + }, + "kind": "class", + "locationInModule": { + "filename": "src/packs/hipaa-security.ts", + "line": 140 + }, + "methods": [ + { + "docs": { + "stability": "stable", + "summary": "All aspects can visit an IConstruct." + }, + "locationInModule": { + "filename": "src/packs/hipaa-security.ts", + "line": 146 + }, + "name": "visit", + "overrides": "cdk-nag.NagPack", + "parameters": [ + { + "name": "node", + "type": { + "fqn": "constructs.IConstruct" + } + } + ] + } + ], + "name": "HIPAASecurityChecks", + "symbolId": "src/packs/hipaa-security:HIPAASecurityChecks" + }, + "cdk-nag.IApplyRule": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Interface for JSII interoperability for passing parameters and the Rule Callback to @applyRule method." + }, + "fqn": "cdk-nag.IApplyRule", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 67 + }, + "methods": [ + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "The callback to the rule." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 96 + }, + "name": "rule", + "parameters": [ + { + "docs": { + "summary": "The CfnResource to check." + }, + "name": "node", + "type": { + "fqn": "aws-cdk-lib.CfnResource" + } + } + ], + "returns": { + "type": { + "union": { + "types": [ + { + "fqn": "cdk-nag.NagRuleCompliance" + }, + { + "collection": { + "elementtype": { + "primitive": "string" + }, + "kind": "array" + } + } + ] + } + } + } + } + ], + "name": "IApplyRule", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Why the rule exists." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 79 + }, + "name": "explanation", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Why the rule was triggered." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 75 + }, + "name": "info", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "The annotations message level to apply to the rule if triggered." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 83 + }, + "name": "level", + "type": { + "fqn": "cdk-nag.NagMessageLevel" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "The CfnResource to check." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 91 + }, + "name": "node", + "type": { + "fqn": "aws-cdk-lib.CfnResource" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "A condition in which a suppression should be ignored." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 87 + }, + "name": "ignoreSuppressionCondition", + "optional": true, + "type": { + "fqn": "cdk-nag.INagSuppressionIgnore" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Override for the suffix of the Rule ID for this rule." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 71 + }, + "name": "ruleSuffixOverride", + "optional": true, + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/nag-pack:IApplyRule" + }, + "cdk-nag.INagLogger": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Interface for creating NagSuppression Ignores." + }, + "fqn": "cdk-nag.INagLogger", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 76 + }, + "methods": [ + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource passes the compliance check for a given rule." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 80 + }, + "name": "onCompliance", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerComplianceData" + } + } + ] + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Called when a rule throws an error during while validating a CfnResource for compliance." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 92 + }, + "name": "onError", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerErrorData" + } + } + ] + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource does not pass the compliance check for a given rule and the the rule violation is not suppressed by the user." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 84 + }, + "name": "onNonCompliance", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerNonComplianceData" + } + } + ] + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Called when a rule does not apply to the given CfnResource." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 100 + }, + "name": "onNotApplicable", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerNotApplicableData" + } + } + ] + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource does not pass the compliance check for a given rule and the rule violation is suppressed by the user." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 88 + }, + "name": "onSuppressed", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerSuppressedData" + } + } + ] + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Called when a rule throws an error during while validating a CfnResource for compliance and the error is suppressed." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 96 + }, + "name": "onSuppressedError", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerSuppressedErrorData" + } + } + ] + } + ], + "name": "INagLogger", + "symbolId": "src/nag-logger:INagLogger" + }, + "cdk-nag.INagSuppressionIgnore": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Interface for creating NagSuppression Ignores." + }, + "fqn": "cdk-nag.INagSuppressionIgnore", + "kind": "interface", + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 27 + }, + "methods": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 28 + }, + "name": "createMessage", + "parameters": [ + { + "name": "input", + "type": { + "fqn": "cdk-nag.SuppressionIgnoreInput" + } + } + ], + "returns": { + "type": { + "primitive": "string" + } + } + } + ], + "name": "INagSuppressionIgnore", + "symbolId": "src/ignore-suppression-conditions:INagSuppressionIgnore" + }, + "cdk-nag.NIST80053R4Checks": { + "assembly": "cdk-nag", + "base": "cdk-nag.NagPack", + "docs": { + "remarks": "Based on the NIST 800-53 rev 4 AWS operational best practices: https://docs.aws.amazon.com/config/latest/developerguide/operational-best-practices-for-nist-800-53_rev_4.html", + "stability": "stable", + "summary": "Check for NIST 800-53 rev 4 compliance." + }, + "fqn": "cdk-nag.NIST80053R4Checks", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/packs/nist-800-53-r4.ts", + "line": 115 + }, + "parameters": [ + { + "name": "props", + "optional": true, + "type": { + "fqn": "cdk-nag.NagPackProps" + } + } + ] + }, + "kind": "class", + "locationInModule": { + "filename": "src/packs/nist-800-53-r4.ts", + "line": 114 + }, + "methods": [ + { + "docs": { + "stability": "stable", + "summary": "All aspects can visit an IConstruct." + }, + "locationInModule": { + "filename": "src/packs/nist-800-53-r4.ts", + "line": 120 + }, + "name": "visit", + "overrides": "cdk-nag.NagPack", + "parameters": [ + { + "name": "node", + "type": { + "fqn": "constructs.IConstruct" + } + } + ] + } + ], + "name": "NIST80053R4Checks", + "symbolId": "src/packs/nist-800-53-r4:NIST80053R4Checks" + }, + "cdk-nag.NIST80053R5Checks": { + "assembly": "cdk-nag", + "base": "cdk-nag.NagPack", + "docs": { + "remarks": "Based on the NIST 800-53 rev 5 AWS operational best practices: https://docs.aws.amazon.com/config/latest/developerguide/operational-best-practices-for-nist-800-53_rev_5.html", + "stability": "stable", + "summary": "Check for NIST 800-53 rev 5 compliance." + }, + "fqn": "cdk-nag.NIST80053R5Checks", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/packs/nist-800-53-r5.ts", + "line": 134 + }, + "parameters": [ + { + "name": "props", + "optional": true, + "type": { + "fqn": "cdk-nag.NagPackProps" + } + } + ] + }, + "kind": "class", + "locationInModule": { + "filename": "src/packs/nist-800-53-r5.ts", + "line": 133 + }, + "methods": [ + { + "docs": { + "stability": "stable", + "summary": "All aspects can visit an IConstruct." + }, + "locationInModule": { + "filename": "src/packs/nist-800-53-r5.ts", + "line": 138 + }, + "name": "visit", + "overrides": "cdk-nag.NagPack", + "parameters": [ + { + "name": "node", + "type": { + "fqn": "constructs.IConstruct" + } + } + ] + } + ], + "name": "NIST80053R5Checks", + "symbolId": "src/packs/nist-800-53-r5:NIST80053R5Checks" + }, + "cdk-nag.NagLoggerBaseData": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Shared data for all INagLogger methods." + }, + "fqn": "cdk-nag.NagLoggerBaseData", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 25 + }, + "name": "NagLoggerBaseData", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 26 + }, + "name": "nagPackName", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 27 + }, + "name": "resource", + "type": { + "fqn": "aws-cdk-lib.CfnResource" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 30 + }, + "name": "ruleExplanation", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 28 + }, + "name": "ruleId", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 29 + }, + "name": "ruleInfo", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 31 + }, + "name": "ruleLevel", + "type": { + "fqn": "cdk-nag.NagMessageLevel" + } + } + ], + "symbolId": "src/nag-logger:NagLoggerBaseData" + }, + "cdk-nag.NagLoggerComplianceData": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Data for onCompliance method of an INagLogger." + }, + "fqn": "cdk-nag.NagLoggerComplianceData", + "interfaces": [ + "cdk-nag.NagLoggerBaseData" + ], + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 37 + }, + "name": "NagLoggerComplianceData", + "symbolId": "src/nag-logger:NagLoggerComplianceData" + }, + "cdk-nag.NagLoggerErrorData": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Data for onError method of an INagLogger." + }, + "fqn": "cdk-nag.NagLoggerErrorData", + "interfaces": [ + "cdk-nag.NagLoggerBaseData" + ], + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 57 + }, + "name": "NagLoggerErrorData", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 58 + }, + "name": "errorMessage", + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/nag-logger:NagLoggerErrorData" + }, + "cdk-nag.NagLoggerNonComplianceData": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Data for onNonCompliance method of an INagLogger." + }, + "fqn": "cdk-nag.NagLoggerNonComplianceData", + "interfaces": [ + "cdk-nag.NagLoggerBaseData" + ], + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 42 + }, + "name": "NagLoggerNonComplianceData", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 43 + }, + "name": "findingId", + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/nag-logger:NagLoggerNonComplianceData" + }, + "cdk-nag.NagLoggerNotApplicableData": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Data for onNotApplicable method of an INagLogger." + }, + "fqn": "cdk-nag.NagLoggerNotApplicableData", + "interfaces": [ + "cdk-nag.NagLoggerBaseData" + ], + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 71 + }, + "name": "NagLoggerNotApplicableData", + "symbolId": "src/nag-logger:NagLoggerNotApplicableData" + }, + "cdk-nag.NagLoggerSuppressedData": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Data for onSuppressed method of an INagLogger." + }, + "fqn": "cdk-nag.NagLoggerSuppressedData", + "interfaces": [ + "cdk-nag.NagLoggerNonComplianceData" + ], + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 49 + }, + "name": "NagLoggerSuppressedData", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 50 + }, + "name": "suppressionReason", + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/nag-logger:NagLoggerSuppressedData" + }, + "cdk-nag.NagLoggerSuppressedErrorData": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Data for onSuppressedError method of an INagLogger." + }, + "fqn": "cdk-nag.NagLoggerSuppressedErrorData", + "interfaces": [ + "cdk-nag.NagLoggerErrorData" + ], + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 64 + }, + "name": "NagLoggerSuppressedErrorData", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 65 + }, + "name": "errorSuppressionReason", + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/nag-logger:NagLoggerSuppressedErrorData" + }, + "cdk-nag.NagMessageLevel": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "The severity level of the rule." + }, + "fqn": "cdk-nag.NagMessageLevel", + "kind": "enum", + "locationInModule": { + "filename": "src/nag-rules.ts", + "line": 12 + }, + "members": [ + { + "docs": { + "stability": "stable" + }, + "name": "WARN" + }, + { + "docs": { + "stability": "stable" + }, + "name": "ERROR" + } + ], + "name": "NagMessageLevel", + "symbolId": "src/nag-rules:NagMessageLevel" + }, + "cdk-nag.NagPack": { + "abstract": true, + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Base class for all rule packs." + }, + "fqn": "cdk-nag.NagPack", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 108 + }, + "parameters": [ + { + "name": "props", + "optional": true, + "type": { + "fqn": "cdk-nag.NagPackProps" + } + } + ] + }, + "interfaces": [ + "aws-cdk-lib.IAspect" + ], + "kind": "class", + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 102 + }, + "methods": [ + { + "docs": { + "custom": { + "IApplyRule": "interface with rule details." + }, + "stability": "stable", + "summary": "Create a rule to be used in the NagPack." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 140 + }, + "name": "applyRule", + "parameters": [ + { + "docs": { + "summary": "The." + }, + "name": "params", + "type": { + "fqn": "cdk-nag.IApplyRule" + } + } + ], + "protected": true + }, + { + "docs": { + "returns": "The reason the rule was ignored, or an empty string.", + "stability": "stable", + "summary": "Check whether a specific rule should be ignored." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 234 + }, + "name": "ignoreRule", + "parameters": [ + { + "docs": { + "summary": "The suppressions listed in the cdk-nag metadata." + }, + "name": "suppressions", + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagPackSuppression" + }, + "kind": "array" + } + } + }, + { + "docs": { + "summary": "The id of the rule to ignore." + }, + "name": "ruleId", + "type": { + "primitive": "string" + } + }, + { + "docs": { + "summary": "The id of the finding that is being checked." + }, + "name": "findingId", + "type": { + "primitive": "string" + } + }, + { + "docs": { + "summary": "The resource being evaluated." + }, + "name": "resource", + "type": { + "fqn": "aws-cdk-lib.CfnResource" + } + }, + { + "name": "level", + "type": { + "fqn": "cdk-nag.NagMessageLevel" + } + }, + { + "name": "ignoreSuppressionCondition", + "optional": true, + "type": { + "fqn": "cdk-nag.INagSuppressionIgnore" + } + } + ], + "protected": true, + "returns": { + "type": { + "primitive": "string" + } + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "All aspects can visit an IConstruct." + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 134 + }, + "name": "visit", + "overrides": "aws-cdk-lib.IAspect", + "parameters": [ + { + "name": "node", + "type": { + "fqn": "constructs.IConstruct" + } + } + ] + } + ], + "name": "NagPack", + "properties": [ + { + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 127 + }, + "name": "readPackName", + "type": { + "primitive": "string" + } + }, + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 103 + }, + "name": "loggers", + "protected": true, + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.INagLogger" + }, + "kind": "array" + } + } + }, + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 104 + }, + "name": "packName", + "protected": true, + "type": { + "primitive": "string" + } + }, + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 106 + }, + "name": "packGlobalSuppressionIgnore", + "optional": true, + "protected": true, + "type": { + "fqn": "cdk-nag.INagSuppressionIgnore" + } + }, + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 105 + }, + "name": "userGlobalSuppressionIgnore", + "optional": true, + "protected": true, + "type": { + "fqn": "cdk-nag.INagSuppressionIgnore" + } + } + ], + "symbolId": "src/nag-pack:NagPack" + }, + "cdk-nag.NagPackProps": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Interface for creating a NagPack." + }, + "fqn": "cdk-nag.NagPackProps", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 32 + }, + "name": "NagPackProps", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Additional NagLoggers for logging rule validation outputs." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 61 + }, + "name": "additionalLoggers", + "optional": true, + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.INagLogger" + }, + "kind": "array" + } + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Whether or not to log suppressed rule violations as informational messages (default: false)." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 41 + }, + "name": "logIgnores", + "optional": true, + "type": { + "primitive": "boolean" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "If reports are enabled, the output formats of compliance reports in the App's output directory (default: only CSV)." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 51 + }, + "name": "reportFormats", + "optional": true, + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagReportFormat" + }, + "kind": "array" + } + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Whether or not to generate compliance reports for applied Stacks in the App's output directory (default: true)." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 46 + }, + "name": "reports", + "optional": true, + "type": { + "primitive": "boolean" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Conditionally prevent rules from being suppressed (default: no user provided condition)." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 56 + }, + "name": "suppressionIgnoreCondition", + "optional": true, + "type": { + "fqn": "cdk-nag.INagSuppressionIgnore" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Whether or not to enable extended explanatory descriptions on warning, error, and logged ignore messages (default: false)." + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-pack.ts", + "line": 36 + }, + "name": "verbose", + "optional": true, + "type": { + "primitive": "boolean" + } + } + ], + "symbolId": "src/nag-pack:NagPackProps" + }, + "cdk-nag.NagPackSuppression": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Interface for creating a rule suppression." + }, + "fqn": "cdk-nag.NagPackSuppression", + "kind": "interface", + "locationInModule": { + "filename": "src/models/nag-suppression.ts", + "line": 9 + }, + "name": "NagPackSuppression", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "The id of the rule to ignore." + }, + "immutable": true, + "locationInModule": { + "filename": "src/models/nag-suppression.ts", + "line": 13 + }, + "name": "id", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "The reason to ignore the rule (minimum 10 characters)." + }, + "immutable": true, + "locationInModule": { + "filename": "src/models/nag-suppression.ts", + "line": 17 + }, + "name": "reason", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "Rule specific granular suppressions." + }, + "immutable": true, + "locationInModule": { + "filename": "src/models/nag-suppression.ts", + "line": 21 + }, + "name": "appliesTo", + "optional": true, + "type": { + "collection": { + "elementtype": { + "union": { + "types": [ + { + "primitive": "string" + }, + { + "fqn": "cdk-nag.RegexAppliesTo" + } + ] + } + }, + "kind": "array" + } + } + } + ], + "symbolId": "src/models/nag-suppression:NagPackSuppression" + }, + "cdk-nag.NagReportFormat": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Possible output formats of the NagReport." + }, + "fqn": "cdk-nag.NagReportFormat", + "kind": "enum", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 214 + }, + "members": [ + { + "docs": { + "stability": "stable" + }, + "name": "CSV" + }, + { + "docs": { + "stability": "stable" + }, + "name": "JSON" + } + ], + "name": "NagReportFormat", + "symbolId": "src/nag-logger:NagReportFormat" + }, + "cdk-nag.NagReportLine": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable" + }, + "fqn": "cdk-nag.NagReportLine", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 202 + }, + "name": "NagReportLine", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 205 + }, + "name": "compliance", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 206 + }, + "name": "exceptionReason", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 204 + }, + "name": "resourceId", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 203 + }, + "name": "ruleId", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 208 + }, + "name": "ruleInfo", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 207 + }, + "name": "ruleLevel", + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/nag-logger:NagReportLine" + }, + "cdk-nag.NagReportLogger": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "A NagLogger that creates compliance reports." + }, + "fqn": "cdk-nag.NagReportLogger", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 232 + }, + "parameters": [ + { + "name": "props", + "type": { + "fqn": "cdk-nag.NagReportLoggerProps" + } + } + ] + }, + "interfaces": [ + "cdk-nag.INagLogger" + ], + "kind": "class", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 229 + }, + "methods": [ + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 272 + }, + "name": "getFormatStacks", + "parameters": [ + { + "name": "format", + "type": { + "fqn": "cdk-nag.NagReportFormat" + } + } + ], + "returns": { + "type": { + "collection": { + "elementtype": { + "primitive": "string" + }, + "kind": "array" + } + } + } + }, + { + "docs": { + "stability": "stable", + "summary": "Initialize the report for the rule pack's compliance report for the resource's Stack if it doesn't exist." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 280 + }, + "name": "initializeStackReport", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerBaseData" + } + } + ], + "protected": true + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource passes the compliance check for a given rule." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 239 + }, + "name": "onCompliance", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerComplianceData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a rule throws an error during while validating a CfnResource for compliance." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 254 + }, + "name": "onError", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerErrorData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource does not pass the compliance check for a given rule and the the rule violation is not suppressed by the user." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 243 + }, + "name": "onNonCompliance", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerNonComplianceData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a rule does not apply to the given CfnResource." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 268 + }, + "name": "onNotApplicable", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerNotApplicableData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a CfnResource does not pass the compliance check for a given rule and the rule violation is suppressed by the user." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 247 + }, + "name": "onSuppressed", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerSuppressedData" + } + } + ] + }, + { + "docs": { + "stability": "stable", + "summary": "Called when a rule throws an error during while validating a CfnResource for compliance and the error is suppressed." + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 261 + }, + "name": "onSuppressedError", + "overrides": "cdk-nag.INagLogger", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerSuppressedErrorData" + } + } + ] + }, + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 306 + }, + "name": "writeToStackComplianceReport", + "parameters": [ + { + "name": "data", + "type": { + "fqn": "cdk-nag.NagLoggerBaseData" + } + }, + { + "name": "compliance", + "type": { + "union": { + "types": [ + { + "fqn": "cdk-nag.NagRuleCompliance" + }, + { + "fqn": "cdk-nag.NagRulePostValidationStates" + } + ] + } + } + } + ], + "protected": true + } + ], + "name": "NagReportLogger", + "properties": [ + { + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 231 + }, + "name": "formats", + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagReportFormat" + }, + "kind": "array" + } + } + } + ], + "symbolId": "src/nag-logger:NagReportLogger" + }, + "cdk-nag.NagReportLoggerProps": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Props for the NagReportLogger." + }, + "fqn": "cdk-nag.NagReportLoggerProps", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 222 + }, + "name": "NagReportLoggerProps", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 223 + }, + "name": "formats", + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagReportFormat" + }, + "kind": "array" + } + } + } + ], + "symbolId": "src/nag-logger:NagReportLoggerProps" + }, + "cdk-nag.NagReportSchema": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable" + }, + "fqn": "cdk-nag.NagReportSchema", + "kind": "interface", + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 198 + }, + "name": "NagReportSchema", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/nag-logger.ts", + "line": 199 + }, + "name": "lines", + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagReportLine" + }, + "kind": "array" + } + } + } + ], + "symbolId": "src/nag-logger:NagReportSchema" + }, + "cdk-nag.NagRuleCompliance": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "The compliance level of a resource in relation to a rule." + }, + "fqn": "cdk-nag.NagRuleCompliance", + "kind": "enum", + "locationInModule": { + "filename": "src/nag-rules.ts", + "line": 20 + }, + "members": [ + { + "docs": { + "stability": "stable" + }, + "name": "COMPLIANT" + }, + { + "docs": { + "stability": "stable" + }, + "name": "NON_COMPLIANT" + }, + { + "docs": { + "stability": "stable" + }, + "name": "NOT_APPLICABLE" + } + ], + "name": "NagRuleCompliance", + "symbolId": "src/nag-rules:NagRuleCompliance" + }, + "cdk-nag.NagRulePostValidationStates": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Additional states a rule can be in post compliance validation." + }, + "fqn": "cdk-nag.NagRulePostValidationStates", + "kind": "enum", + "locationInModule": { + "filename": "src/nag-rules.ts", + "line": 29 + }, + "members": [ + { + "docs": { + "stability": "stable" + }, + "name": "SUPPRESSED" + }, + { + "docs": { + "stability": "stable" + }, + "name": "UNKNOWN" + } + ], + "name": "NagRulePostValidationStates", + "symbolId": "src/nag-rules:NagRulePostValidationStates" + }, + "cdk-nag.NagRules": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Helper class with methods for rule creation." + }, + "fqn": "cdk-nag.NagRules", + "initializer": { + "docs": { + "stability": "stable" + } + }, + "kind": "class", + "locationInModule": { + "filename": "src/nag-rules.ts", + "line": 52 + }, + "methods": [ + { + "docs": { + "remarks": "https://developer.mozilla.org/en-US/docs/Glossary/Primitive", + "returns": "Return a value if resolves to a primitive data type, otherwise throw an error.", + "stability": "stable", + "summary": "Use in cases where a primitive value must be known to pass a rule." + }, + "locationInModule": { + "filename": "src/nag-rules.ts", + "line": 60 + }, + "name": "resolveIfPrimitive", + "parameters": [ + { + "docs": { + "summary": "The CfnResource to check." + }, + "name": "node", + "type": { + "fqn": "aws-cdk-lib.CfnResource" + } + }, + { + "docs": { + "summary": "The value to attempt to resolve." + }, + "name": "parameter", + "type": { + "primitive": "any" + } + } + ], + "returns": { + "type": { + "primitive": "any" + } + }, + "static": true + }, + { + "docs": { + "returns": "Return the Logical resource Id if resolves to a intrinsic function, otherwise the resolved provided value.", + "stability": "stable", + "summary": "Use in cases where a token resolves to an intrinsic function and the referenced resource must be known to pass a rule." + }, + "locationInModule": { + "filename": "src/nag-rules.ts", + "line": 79 + }, + "name": "resolveResourceFromInstrinsic", + "parameters": [ + { + "docs": { + "summary": "The CfnResource to check." + }, + "name": "node", + "type": { + "fqn": "aws-cdk-lib.CfnResource" + } + }, + { + "docs": { + "summary": "The value to attempt to resolve." + }, + "name": "parameter", + "type": { + "primitive": "any" + } + } + ], + "returns": { + "type": { + "primitive": "any" + } + }, + "static": true + } + ], + "name": "NagRules", + "symbolId": "src/nag-rules:NagRules" + }, + "cdk-nag.NagSuppressions": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Helper class with methods to add cdk-nag suppressions to cdk resources." + }, + "fqn": "cdk-nag.NagSuppressions", + "initializer": { + "docs": { + "stability": "stable" + } + }, + "kind": "class", + "locationInModule": { + "filename": "src/nag-suppressions.ts", + "line": 13 + }, + "methods": [ + { + "docs": { + "stability": "stable", + "summary": "Add cdk-nag suppressions to a CfnResource and optionally its children." + }, + "locationInModule": { + "filename": "src/nag-suppressions.ts", + "line": 48 + }, + "name": "addResourceSuppressions", + "parameters": [ + { + "docs": { + "summary": "The IConstruct(s) to apply the suppression to." + }, + "name": "construct", + "type": { + "union": { + "types": [ + { + "fqn": "constructs.IConstruct" + }, + { + "collection": { + "elementtype": { + "fqn": "constructs.IConstruct" + }, + "kind": "array" + } + } + ] + } + } + }, + { + "docs": { + "summary": "A list of suppressions to apply to the resource." + }, + "name": "suppressions", + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagPackSuppression" + }, + "kind": "array" + } + } + }, + { + "docs": { + "summary": "Apply the suppressions to children CfnResources (default:false)." + }, + "name": "applyToChildren", + "optional": true, + "type": { + "primitive": "boolean" + } + } + ], + "static": true + }, + { + "docs": { + "stability": "stable", + "summary": "Add cdk-nag suppressions to a CfnResource and optionally its children via its path." + }, + "locationInModule": { + "filename": "src/nag-suppressions.ts", + "line": 87 + }, + "name": "addResourceSuppressionsByPath", + "parameters": [ + { + "docs": { + "summary": "The Stack the construct belongs to." + }, + "name": "stack", + "type": { + "fqn": "aws-cdk-lib.Stack" + } + }, + { + "docs": { + "summary": "The path(s) to the construct in the provided stack." + }, + "name": "path", + "type": { + "union": { + "types": [ + { + "primitive": "string" + }, + { + "collection": { + "elementtype": { + "primitive": "string" + }, + "kind": "array" + } + } + ] + } + } + }, + { + "docs": { + "summary": "A list of suppressions to apply to the resource." + }, + "name": "suppressions", + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagPackSuppression" + }, + "kind": "array" + } + } + }, + { + "docs": { + "summary": "Apply the suppressions to children CfnResources (default:false)." + }, + "name": "applyToChildren", + "optional": true, + "type": { + "primitive": "boolean" + } + } + ], + "static": true + }, + { + "docs": { + "stability": "stable", + "summary": "Apply cdk-nag suppressions to a Stack and optionally nested stacks." + }, + "locationInModule": { + "filename": "src/nag-suppressions.ts", + "line": 20 + }, + "name": "addStackSuppressions", + "parameters": [ + { + "docs": { + "summary": "The Stack to apply the suppression to." + }, + "name": "stack", + "type": { + "fqn": "aws-cdk-lib.Stack" + } + }, + { + "docs": { + "summary": "A list of suppressions to apply to the stack." + }, + "name": "suppressions", + "type": { + "collection": { + "elementtype": { + "fqn": "cdk-nag.NagPackSuppression" + }, + "kind": "array" + } + } + }, + { + "docs": { + "summary": "Apply the suppressions to children stacks (default:false)." + }, + "name": "applyToNestedStacks", + "optional": true, + "type": { + "primitive": "boolean" + } + } + ], + "static": true + } + ], + "name": "NagSuppressions", + "symbolId": "src/nag-suppressions:NagSuppressions" + }, + "cdk-nag.PCIDSS321Checks": { + "assembly": "cdk-nag", + "base": "cdk-nag.NagPack", + "docs": { + "stability": "stable", + "summary": "Check for PCI DSS 3.2.1 compliance. Based on the PCI DSS 3.2.1 AWS operational best practices: https://docs.aws.amazon.com/config/latest/developerguide/operational-best-practices-for-pci-dss.html." + }, + "fqn": "cdk-nag.PCIDSS321Checks", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/packs/pci-dss-321.ts", + "line": 115 + }, + "parameters": [ + { + "name": "props", + "optional": true, + "type": { + "fqn": "cdk-nag.NagPackProps" + } + } + ] + }, + "kind": "class", + "locationInModule": { + "filename": "src/packs/pci-dss-321.ts", + "line": 114 + }, + "methods": [ + { + "docs": { + "stability": "stable", + "summary": "All aspects can visit an IConstruct." + }, + "locationInModule": { + "filename": "src/packs/pci-dss-321.ts", + "line": 119 + }, + "name": "visit", + "overrides": "cdk-nag.NagPack", + "parameters": [ + { + "name": "node", + "type": { + "fqn": "constructs.IConstruct" + } + } + ] + } + ], + "name": "PCIDSS321Checks", + "symbolId": "src/packs/pci-dss-321:PCIDSS321Checks" + }, + "cdk-nag.RegexAppliesTo": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "A regular expression to apply to matching findings." + }, + "fqn": "cdk-nag.RegexAppliesTo", + "kind": "interface", + "locationInModule": { + "filename": "src/models/nag-suppression.ts", + "line": 32 + }, + "name": "RegexAppliesTo", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable", + "summary": "An ECMA-262 regex string." + }, + "immutable": true, + "locationInModule": { + "filename": "src/models/nag-suppression.ts", + "line": 36 + }, + "name": "regex", + "type": { + "primitive": "string" + } + } + ], + "symbolId": "src/models/nag-suppression:RegexAppliesTo" + }, + "cdk-nag.SuppressionIgnoreAlways": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Always ignore the suppression." + }, + "fqn": "cdk-nag.SuppressionIgnoreAlways", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 91 + }, + "parameters": [ + { + "name": "triggerMessage", + "type": { + "primitive": "string" + } + } + ] + }, + "interfaces": [ + "cdk-nag.INagSuppressionIgnore" + ], + "kind": "class", + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 89 + }, + "methods": [ + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 99 + }, + "name": "createMessage", + "overrides": "cdk-nag.INagSuppressionIgnore", + "parameters": [ + { + "name": "_input", + "type": { + "fqn": "cdk-nag.SuppressionIgnoreInput" + } + } + ], + "returns": { + "type": { + "primitive": "string" + } + } + } + ], + "name": "SuppressionIgnoreAlways", + "symbolId": "src/ignore-suppression-conditions:SuppressionIgnoreAlways" + }, + "cdk-nag.SuppressionIgnoreAnd": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Ignore the suppression if all of the given INagSuppressionIgnore return a non-empty message." + }, + "fqn": "cdk-nag.SuppressionIgnoreAnd", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 37 + }, + "parameters": [ + { + "name": "SuppressionIgnoreAnds", + "type": { + "fqn": "cdk-nag.INagSuppressionIgnore" + }, + "variadic": true + } + ], + "variadic": true + }, + "interfaces": [ + "cdk-nag.INagSuppressionIgnore" + ], + "kind": "class", + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 34 + }, + "methods": [ + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 46 + }, + "name": "createMessage", + "overrides": "cdk-nag.INagSuppressionIgnore", + "parameters": [ + { + "name": "input", + "type": { + "fqn": "cdk-nag.SuppressionIgnoreInput" + } + } + ], + "returns": { + "type": { + "primitive": "string" + } + } + } + ], + "name": "SuppressionIgnoreAnd", + "symbolId": "src/ignore-suppression-conditions:SuppressionIgnoreAnd" + }, + "cdk-nag.SuppressionIgnoreErrors": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Ignore Suppressions for Rules with a NagMessageLevel.ERROR." + }, + "fqn": "cdk-nag.SuppressionIgnoreErrors", + "initializer": { + "docs": { + "stability": "stable" + } + }, + "interfaces": [ + "cdk-nag.INagSuppressionIgnore" + ], + "kind": "class", + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 116 + }, + "methods": [ + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 117 + }, + "name": "createMessage", + "overrides": "cdk-nag.INagSuppressionIgnore", + "parameters": [ + { + "name": "input", + "type": { + "fqn": "cdk-nag.SuppressionIgnoreInput" + } + } + ], + "returns": { + "type": { + "primitive": "string" + } + } + } + ], + "name": "SuppressionIgnoreErrors", + "symbolId": "src/ignore-suppression-conditions:SuppressionIgnoreErrors" + }, + "cdk-nag.SuppressionIgnoreInput": { + "assembly": "cdk-nag", + "datatype": true, + "docs": { + "stability": "stable", + "summary": "Information about the NagRule and the relevant NagSuppression for the INagSuppressionIgnore." + }, + "fqn": "cdk-nag.SuppressionIgnoreInput", + "kind": "interface", + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 16 + }, + "name": "SuppressionIgnoreInput", + "properties": [ + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 20 + }, + "name": "findingId", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 18 + }, + "name": "reason", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 17 + }, + "name": "resource", + "type": { + "fqn": "aws-cdk-lib.CfnResource" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 19 + }, + "name": "ruleId", + "type": { + "primitive": "string" + } + }, + { + "abstract": true, + "docs": { + "stability": "stable" + }, + "immutable": true, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 21 + }, + "name": "ruleLevel", + "type": { + "fqn": "cdk-nag.NagMessageLevel" + } + } + ], + "symbolId": "src/ignore-suppression-conditions:SuppressionIgnoreInput" + }, + "cdk-nag.SuppressionIgnoreNever": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Don't ignore the suppression." + }, + "fqn": "cdk-nag.SuppressionIgnoreNever", + "initializer": { + "docs": { + "stability": "stable" + } + }, + "interfaces": [ + "cdk-nag.INagSuppressionIgnore" + ], + "kind": "class", + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 107 + }, + "methods": [ + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 108 + }, + "name": "createMessage", + "overrides": "cdk-nag.INagSuppressionIgnore", + "parameters": [ + { + "name": "_input", + "type": { + "fqn": "cdk-nag.SuppressionIgnoreInput" + } + } + ], + "returns": { + "type": { + "primitive": "string" + } + } + } + ], + "name": "SuppressionIgnoreNever", + "symbolId": "src/ignore-suppression-conditions:SuppressionIgnoreNever" + }, + "cdk-nag.SuppressionIgnoreOr": { + "assembly": "cdk-nag", + "docs": { + "stability": "stable", + "summary": "Ignore the suppression if any of the given INagSuppressionIgnore return a non-empty message." + }, + "fqn": "cdk-nag.SuppressionIgnoreOr", + "initializer": { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 65 + }, + "parameters": [ + { + "name": "orSuppressionIgnores", + "type": { + "fqn": "cdk-nag.INagSuppressionIgnore" + }, + "variadic": true + } + ], + "variadic": true + }, + "interfaces": [ + "cdk-nag.INagSuppressionIgnore" + ], + "kind": "class", + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 62 + }, + "methods": [ + { + "docs": { + "stability": "stable" + }, + "locationInModule": { + "filename": "src/ignore-suppression-conditions.ts", + "line": 74 + }, + "name": "createMessage", + "overrides": "cdk-nag.INagSuppressionIgnore", + "parameters": [ + { + "name": "input", + "type": { + "fqn": "cdk-nag.SuppressionIgnoreInput" + } + } + ], + "returns": { + "type": { + "primitive": "string" + } + } + } + ], + "name": "SuppressionIgnoreOr", + "symbolId": "src/ignore-suppression-conditions:SuppressionIgnoreOr" + } + }, + "version": "2.27.179", + "fingerprint": "N0SiBDSkWtP5p6KyEVVrZuZu9Elly/hay6dqabZ2pd0=" +} \ No newline at end of file diff --git a/test/docgen/view/__snapshots__/documentation.test.ts.snap b/test/docgen/view/__snapshots__/documentation.test.ts.snap index 674c2d74..4da3351b 100644 --- a/test/docgen/view/__snapshots__/documentation.test.ts.snap +++ b/test/docgen/view/__snapshots__/documentation.test.ts.snap @@ -145001,6 +145001,16 @@ Rule applies to untagged images. --- +" +`; + +exports[`typescript snapshot - nested submodules 1`] = ` +"# API Reference + + + + + " `; diff --git a/test/docgen/view/documentation.test.ts b/test/docgen/view/documentation.test.ts index bb825e66..fb6104fd 100644 --- a/test/docgen/view/documentation.test.ts +++ b/test/docgen/view/documentation.test.ts @@ -140,6 +140,12 @@ describe('typescript', () => { const markdown = await docs.toMarkdown({ language: Language.TYPESCRIPT, submodule: 'aws_eks' }); expect(markdown.render()).toMatchSnapshot(); }); + + test('snapshot - nested submodules', async () => { + const docs = await Documentation.forAssembly('cdk-nag', Assemblies.AWSCDK_1_106_0); + const markdown = await docs.toMarkdown({ language: Language.TYPESCRIPT, submodule: 'rules.apigw' }); + expect(markdown.render()).toMatchSnapshot(); + }); }); describe('java', () => {