@l-v-yonsama/multi-platform-database-drivers 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -0
- package/built/src/drivers/Auth0Driver.js +9 -9
- package/built/src/drivers/Auth0Driver.js.map +1 -1
- package/built/src/drivers/AwsDriver.d.ts +6 -0
- package/built/src/drivers/AwsDriver.js +87 -7
- package/built/src/drivers/AwsDriver.js.map +1 -1
- package/built/src/drivers/BaseDriver.d.ts +1 -1
- package/built/src/drivers/BaseDriver.js +4 -6
- package/built/src/drivers/BaseDriver.js.map +1 -1
- package/built/src/drivers/DBDriverResolver.js.map +1 -1
- package/built/src/drivers/DBError.js.map +1 -1
- package/built/src/drivers/KeycloakDriver.d.ts +2 -3
- package/built/src/drivers/KeycloakDriver.js +27 -262
- package/built/src/drivers/KeycloakDriver.js.map +1 -1
- package/built/src/drivers/MemcacheDriver.d.ts +0 -1
- package/built/src/drivers/MemcacheDriver.js +5 -5
- package/built/src/drivers/MemcacheDriver.js.map +1 -1
- package/built/src/drivers/MqttDriver.d.ts +0 -1
- package/built/src/drivers/MqttDriver.js +4 -4
- package/built/src/drivers/MqttDriver.js.map +1 -1
- package/built/src/drivers/MySQLDriver.js +12 -12
- package/built/src/drivers/MySQLDriver.js.map +1 -1
- package/built/src/drivers/OracleDriver.js +13 -13
- package/built/src/drivers/OracleDriver.js.map +1 -1
- package/built/src/drivers/PostgresDriver.js +22 -2
- package/built/src/drivers/PostgresDriver.js.map +1 -1
- package/built/src/drivers/RDSBaseDriver.d.ts +1 -1
- package/built/src/drivers/RDSBaseDriver.js +6 -6
- package/built/src/drivers/RDSBaseDriver.js.map +1 -1
- package/built/src/drivers/RedisDriver.js +2 -2
- package/built/src/drivers/RedisDriver.js.map +1 -1
- package/built/src/drivers/SQLServerDriver.js +7 -7
- package/built/src/drivers/SQLServerDriver.js.map +1 -1
- package/built/src/drivers/SQLiteDriver.d.ts +1 -1
- package/built/src/drivers/SQLiteDriver.js +7 -7
- package/built/src/drivers/SQLiteDriver.js.map +1 -1
- package/built/src/drivers/aws/AwsCloudFormationServiceClient.d.ts +35 -0
- package/built/src/drivers/aws/AwsCloudFormationServiceClient.js +197 -0
- package/built/src/drivers/aws/AwsCloudFormationServiceClient.js.map +1 -0
- package/built/src/drivers/aws/AwsCloudwatchServiceClient.js +4 -7
- package/built/src/drivers/aws/AwsCloudwatchServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsDynamoServiceClient.js +8 -11
- package/built/src/drivers/aws/AwsDynamoServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsS3ServiceClient.js +28 -30
- package/built/src/drivers/aws/AwsS3ServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSESServiceClient.js +23 -0
- package/built/src/drivers/aws/AwsSESServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSQSServiceClient.d.ts +1 -0
- package/built/src/drivers/aws/AwsSQSServiceClient.js +40 -8
- package/built/src/drivers/aws/AwsSQSServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSecretsManagerServiceClient.d.ts +19 -0
- package/built/src/drivers/aws/AwsSecretsManagerServiceClient.js +118 -0
- package/built/src/drivers/aws/AwsSecretsManagerServiceClient.js.map +1 -0
- package/built/src/drivers/aws/AwsServiceClient.d.ts +1 -0
- package/built/src/drivers/aws/AwsServiceClient.js +13 -2
- package/built/src/drivers/aws/AwsServiceClient.js.map +1 -1
- package/built/src/drivers/aws/AwsSsmServiceClient.d.ts +19 -0
- package/built/src/drivers/aws/AwsSsmServiceClient.js +116 -0
- package/built/src/drivers/aws/AwsSsmServiceClient.js.map +1 -0
- package/built/src/drivers/aws/index.d.ts +3 -0
- package/built/src/drivers/aws/index.js +3 -0
- package/built/src/drivers/aws/index.js.map +1 -1
- package/built/src/drivers/keycloak/resourceTreeBuilder.d.ts +5 -0
- package/built/src/drivers/keycloak/resourceTreeBuilder.js +37 -0
- package/built/src/drivers/keycloak/resourceTreeBuilder.js.map +1 -0
- package/built/src/drivers/keycloak/scanResultBuilder.d.ts +8 -0
- package/built/src/drivers/keycloak/scanResultBuilder.js +212 -0
- package/built/src/drivers/keycloak/scanResultBuilder.js.map +1 -0
- package/built/src/drivers/memcache/helper.d.ts +0 -1
- package/built/src/drivers/memcache/helper.js +13 -14
- package/built/src/drivers/memcache/helper.js.map +1 -1
- package/built/src/helpers/ProposalHelper.js +3 -3
- package/built/src/helpers/ProposalHelper.js.map +1 -1
- package/built/src/helpers/RdhRecordRuleHelper.js.map +1 -1
- package/built/src/helpers/RuleEngine.d.ts +5 -5
- package/built/src/helpers/RuleEngine.js +14 -14
- package/built/src/helpers/RuleEngine.js.map +1 -1
- package/built/src/helpers/SQLHelper.d.ts +8 -115
- package/built/src/helpers/SQLHelper.js +35 -1084
- package/built/src/helpers/SQLHelper.js.map +1 -1
- package/built/src/helpers/prompts/Auth0PromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/AwsPromptHelper.js +93 -2
- package/built/src/helpers/prompts/AwsPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/KeycloakPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/MemcachePromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/MqttPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/RdsPromptHelper.js +1 -1
- package/built/src/helpers/prompts/RdsPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/RedisPromptHelper.js.map +1 -1
- package/built/src/helpers/prompts/SchemaPromptHelper.js.map +1 -1
- package/built/src/helpers/sql/dynamoConversion.d.ts +2 -0
- package/built/src/helpers/sql/dynamoConversion.js +27 -0
- package/built/src/helpers/sql/dynamoConversion.js.map +1 -0
- package/built/src/helpers/sql/formatQuery.d.ts +6 -0
- package/built/src/helpers/sql/formatQuery.js +45 -0
- package/built/src/helpers/sql/formatQuery.js.map +1 -0
- package/built/src/helpers/sql/mutationQuery.d.ts +54 -0
- package/built/src/helpers/sql/mutationQuery.js +250 -0
- package/built/src/helpers/sql/mutationQuery.js.map +1 -0
- package/built/src/helpers/sql/parameterNormalizer.d.ts +16 -0
- package/built/src/helpers/sql/parameterNormalizer.js +166 -0
- package/built/src/helpers/sql/parameterNormalizer.js.map +1 -0
- package/built/src/helpers/sql/queryParser.d.ts +6 -0
- package/built/src/helpers/sql/queryParser.js +239 -0
- package/built/src/helpers/sql/queryParser.js.map +1 -0
- package/built/src/helpers/sql/quote.d.ts +17 -0
- package/built/src/helpers/sql/quote.js +140 -0
- package/built/src/helpers/sql/quote.js.map +1 -0
- package/built/src/helpers/sql/selectQuery.d.ts +24 -0
- package/built/src/helpers/sql/selectQuery.js +262 -0
- package/built/src/helpers/sql/selectQuery.js.map +1 -0
- package/built/src/resource/aws.d.ts +106 -0
- package/built/src/resource/aws.js +219 -0
- package/built/src/resource/aws.js.map +1 -0
- package/built/src/resource/base.d.ts +28 -0
- package/built/src/resource/base.js +76 -0
- package/built/src/resource/base.js.map +1 -0
- package/built/src/resource/connection.d.ts +35 -0
- package/built/src/resource/connection.js +52 -0
- package/built/src/resource/connection.js.map +1 -0
- package/built/src/resource/fromJson.d.ts +2 -0
- package/built/src/resource/fromJson.js +125 -0
- package/built/src/resource/fromJson.js.map +1 -0
- package/built/src/resource/iam.d.ts +70 -0
- package/built/src/resource/iam.js +175 -0
- package/built/src/resource/iam.js.map +1 -0
- package/built/src/resource/index.d.ts +8 -1
- package/built/src/resource/index.js +8 -1
- package/built/src/resource/index.js.map +1 -1
- package/built/src/resource/keyValue.d.ts +85 -0
- package/built/src/resource/keyValue.js +74 -0
- package/built/src/resource/keyValue.js.map +1 -0
- package/built/src/resource/rdb.d.ts +49 -0
- package/built/src/resource/rdb.js +155 -0
- package/built/src/resource/rdb.js.map +1 -0
- package/built/src/resource/types.d.ts +18 -0
- package/built/src/resource/types.js +3 -0
- package/built/src/resource/types.js.map +1 -0
- package/built/src/types/drivers/Keycloak.js +1 -1
- package/built/src/types/drivers/Keycloak.js.map +1 -1
- package/built/src/types/drivers/MemcachedParams.d.ts +0 -1
- package/built/src/types/drivers/ScanParams.d.ts +15 -1
- package/built/src/types/helpers/index.js +1 -1
- package/built/src/types/helpers/index.js.map +1 -1
- package/built/src/types/resource/AwsCfnStackAttributes.d.ts +164 -0
- package/built/src/types/resource/AwsCfnStackAttributes.js +56 -0
- package/built/src/types/resource/AwsCfnStackAttributes.js.map +1 -0
- package/built/src/types/resource/AwsSESIdentityAttributes.d.ts +17 -0
- package/built/src/types/resource/AwsSESIdentityAttributes.js +3 -0
- package/built/src/types/resource/AwsSESIdentityAttributes.js.map +1 -0
- package/built/src/types/resource/AwsSQSAttributes.d.ts +1 -0
- package/built/src/types/resource/AwsSecretAttributes.d.ts +6 -0
- package/built/src/types/resource/AwsSecretAttributes.js +3 -0
- package/built/src/types/resource/AwsSecretAttributes.js.map +1 -0
- package/built/src/types/resource/AwsServiceType.d.ts +4 -1
- package/built/src/types/resource/AwsServiceType.js +3 -0
- package/built/src/types/resource/AwsServiceType.js.map +1 -1
- package/built/src/types/resource/AwsSsmParameterAttributes.d.ts +12 -0
- package/built/src/types/resource/AwsSsmParameterAttributes.js +3 -0
- package/built/src/types/resource/AwsSsmParameterAttributes.js.map +1 -0
- package/built/src/types/resource/ConnectionSetting.d.ts +2 -2
- package/built/src/types/resource/ConnectionSetting.js.map +1 -1
- package/built/src/types/resource/MySQLColumnType.js +2 -2
- package/built/src/types/resource/MySQLColumnType.js.map +1 -1
- package/built/src/types/resource/OracleColumnType.js +2 -2
- package/built/src/types/resource/OracleColumnType.js.map +1 -1
- package/built/src/types/resource/PartiQLAttrType.js.map +1 -1
- package/built/src/types/resource/PostgresColumnType.js +2 -2
- package/built/src/types/resource/PostgresColumnType.js.map +1 -1
- package/built/src/types/resource/ResourceType.d.ts +5 -0
- package/built/src/types/resource/ResourceType.js +5 -0
- package/built/src/types/resource/ResourceType.js.map +1 -1
- package/built/src/types/resource/SQLServerColumnType.js +2 -2
- package/built/src/types/resource/SQLServerColumnType.js.map +1 -1
- package/built/src/types/resource/index.d.ts +4 -0
- package/built/src/types/resource/index.js +4 -0
- package/built/src/types/resource/index.js.map +1 -1
- package/built/src/types/utils/index.js +2 -2
- package/built/src/types/utils/index.js.map +1 -1
- package/built/src/utils/base.js +1 -1
- package/built/src/utils/base.js.map +1 -1
- package/built/src/utils/cfn/applicationDiagram.d.ts +2 -0
- package/built/src/utils/cfn/applicationDiagram.js +174 -0
- package/built/src/utils/cfn/applicationDiagram.js.map +1 -0
- package/built/src/utils/cfn/applicationRelations.d.ts +28 -0
- package/built/src/utils/cfn/applicationRelations.js +430 -0
- package/built/src/utils/cfn/applicationRelations.js.map +1 -0
- package/built/src/utils/cfn/cfnDependencyGraphDiagram.d.ts +2 -0
- package/built/src/utils/cfn/cfnDependencyGraphDiagram.js +198 -0
- package/built/src/utils/cfn/cfnDependencyGraphDiagram.js.map +1 -0
- package/built/src/utils/cfn/deploymentTopology.d.ts +132 -0
- package/built/src/utils/cfn/deploymentTopology.js +637 -0
- package/built/src/utils/cfn/deploymentTopology.js.map +1 -0
- package/built/src/utils/cfn/diagramFileModel.d.ts +2 -0
- package/built/src/utils/cfn/diagramFileModel.js +178 -0
- package/built/src/utils/cfn/diagramFileModel.js.map +1 -0
- package/built/src/utils/cfn/drawio/cfnDependencyGraphDiagram.d.ts +3 -0
- package/built/src/utils/cfn/drawio/cfnDependencyGraphDiagram.js +174 -0
- package/built/src/utils/cfn/drawio/cfnDependencyGraphDiagram.js.map +1 -0
- package/built/src/utils/cfn/drawio/commonCells.d.ts +22 -0
- package/built/src/utils/cfn/drawio/commonCells.js +83 -0
- package/built/src/utils/cfn/drawio/commonCells.js.map +1 -0
- package/built/src/utils/cfn/drawio/edgeRouting.d.ts +34 -0
- package/built/src/utils/cfn/drawio/edgeRouting.js +77 -0
- package/built/src/utils/cfn/drawio/edgeRouting.js.map +1 -0
- package/built/src/utils/cfn/drawio/multiAzInfrastructureDiagram.d.ts +3 -0
- package/built/src/utils/cfn/drawio/multiAzInfrastructureDiagram.js +812 -0
- package/built/src/utils/cfn/drawio/multiAzInfrastructureDiagram.js.map +1 -0
- package/built/src/utils/cfn/drawioApplicationDiagram.d.ts +3 -0
- package/built/src/utils/cfn/drawioApplicationDiagram.js +455 -0
- package/built/src/utils/cfn/drawioApplicationDiagram.js.map +1 -0
- package/built/src/utils/cfn/drawioInfrastructureDiagrams.d.ts +2 -0
- package/built/src/utils/cfn/drawioInfrastructureDiagrams.js +10 -0
- package/built/src/utils/cfn/drawioInfrastructureDiagrams.js.map +1 -0
- package/built/src/utils/cfn/drawioXml.d.ts +1 -0
- package/built/src/utils/cfn/drawioXml.js +11 -0
- package/built/src/utils/cfn/drawioXml.js.map +1 -0
- package/built/src/utils/cfn/generateDiagram.d.ts +2 -0
- package/built/src/utils/cfn/generateDiagram.js +22 -0
- package/built/src/utils/cfn/generateDiagram.js.map +1 -0
- package/built/src/utils/cfn/icons.d.ts +1 -0
- package/built/src/utils/cfn/icons.js +60 -0
- package/built/src/utils/cfn/icons.js.map +1 -0
- package/built/src/utils/cfn/index.d.ts +11 -0
- package/built/src/utils/cfn/index.js +34 -0
- package/built/src/utils/cfn/index.js.map +1 -0
- package/built/src/utils/cfn/intrinsics.d.ts +12 -0
- package/built/src/utils/cfn/intrinsics.js +158 -0
- package/built/src/utils/cfn/intrinsics.js.map +1 -0
- package/built/src/utils/cfn/mermaidFlowchart.d.ts +3 -0
- package/built/src/utils/cfn/mermaidFlowchart.js +14 -0
- package/built/src/utils/cfn/mermaidFlowchart.js.map +1 -0
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtection.d.ts +27 -0
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtection.js +409 -0
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtection.js.map +1 -0
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtectionDiagram.d.ts +2 -0
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtectionDiagram.js +286 -0
- package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtectionDiagram.js.map +1 -0
- package/built/src/utils/cfn/naming.d.ts +7 -0
- package/built/src/utils/cfn/naming.js +33 -0
- package/built/src/utils/cfn/naming.js.map +1 -0
- package/built/src/utils/cfn/resourceDependencies.d.ts +2 -0
- package/built/src/utils/cfn/resourceDependencies.js +33 -0
- package/built/src/utils/cfn/resourceDependencies.js.map +1 -0
- package/built/src/utils/cfn/templateParsing.d.ts +3 -0
- package/built/src/utils/cfn/templateParsing.js +58 -0
- package/built/src/utils/cfn/templateParsing.js.map +1 -0
- package/built/src/utils/cfn/viewpoints.d.ts +3 -0
- package/built/src/utils/cfn/viewpoints.js +122 -0
- package/built/src/utils/cfn/viewpoints.js.map +1 -0
- package/built/src/utils/csv.js.map +1 -1
- package/built/src/utils/dbType.js.map +1 -1
- package/built/src/utils/diagramLayout/elkLayoutEngine.d.ts +3 -0
- package/built/src/utils/diagramLayout/elkLayoutEngine.js +199 -0
- package/built/src/utils/diagramLayout/elkLayoutEngine.js.map +1 -0
- package/built/src/utils/diagramLayout/index.d.ts +4 -0
- package/built/src/utils/diagramLayout/index.js +13 -0
- package/built/src/utils/diagramLayout/index.js.map +1 -0
- package/built/src/utils/diagramLayout/normalizeLayout.d.ts +33 -0
- package/built/src/utils/diagramLayout/normalizeLayout.js +116 -0
- package/built/src/utils/diagramLayout/normalizeLayout.js.map +1 -0
- package/built/src/utils/diagramLayout/types.d.ts +64 -0
- package/built/src/utils/diagramLayout/types.js +3 -0
- package/built/src/utils/diagramLayout/types.js.map +1 -0
- package/built/src/utils/drawio/drawioXml.d.ts +24 -0
- package/built/src/utils/drawio/drawioXml.js +47 -0
- package/built/src/utils/drawio/drawioXml.js.map +1 -0
- package/built/src/utils/drawio/index.d.ts +2 -0
- package/built/src/utils/drawio/index.js +10 -0
- package/built/src/utils/drawio/index.js.map +1 -0
- package/built/src/utils/driverUtil.d.ts +1 -1
- package/built/src/utils/driverUtil.js.map +1 -1
- package/built/src/utils/er/erDiagramDrawioGenerator.d.ts +26 -0
- package/built/src/utils/er/erDiagramDrawioGenerator.js +99 -0
- package/built/src/utils/er/erDiagramDrawioGenerator.js.map +1 -0
- package/built/src/utils/er/erDiagramDrawioGeneratorAuto.d.ts +2 -0
- package/built/src/utils/er/erDiagramDrawioGeneratorAuto.js +103 -0
- package/built/src/utils/er/erDiagramDrawioGeneratorAuto.js.map +1 -0
- package/built/src/utils/er/erDiagramGenerator.d.ts +7 -0
- package/built/src/utils/er/erDiagramGenerator.js +321 -0
- package/built/src/utils/er/erDiagramGenerator.js.map +1 -0
- package/built/src/utils/er/index.d.ts +4 -0
- package/built/src/utils/er/index.js +13 -0
- package/built/src/utils/er/index.js.map +1 -0
- package/built/src/utils/er/types.d.ts +31 -0
- package/built/src/utils/er/types.js +3 -0
- package/built/src/utils/er/types.js.map +1 -0
- package/built/src/utils/index.d.ts +2 -0
- package/built/src/utils/index.js +2 -0
- package/built/src/utils/index.js.map +1 -1
- package/built/src/utils/log/LogParser.js.map +1 -1
- package/built/src/utils/log/buildSqlExecutions.js +3 -4
- package/built/src/utils/log/buildSqlExecutions.js.map +1 -1
- package/built/src/utils/log/classify/classifyEvent.js +2 -3
- package/built/src/utils/log/classify/classifyEvent.js.map +1 -1
- package/built/src/utils/log/detect/presetDetector.js +4 -5
- package/built/src/utils/log/detect/presetDetector.js.map +1 -1
- package/built/src/utils/log/extract/runExtractors.js +1 -2
- package/built/src/utils/log/extract/runExtractors.js.map +1 -1
- package/built/src/utils/log/logSummary.js +5 -5
- package/built/src/utils/log/logSummary.js.map +1 -1
- package/built/src/utils/log/pattern/logEventPattern.js +2 -3
- package/built/src/utils/log/pattern/logEventPattern.js.map +1 -1
- package/built/src/utils/log/rdh/convertExtractedSqlRdhResult.js +2 -3
- package/built/src/utils/log/rdh/convertExtractedSqlRdhResult.js.map +1 -1
- package/built/src/utils/log/split/splitLogEvents.js +1 -2
- package/built/src/utils/log/split/splitLogEvents.js.map +1 -1
- package/built/src/utils/log/sql/removeSqlComments.js +2 -3
- package/built/src/utils/log/sql/removeSqlComments.js.map +1 -1
- package/built/src/utils/log/validator.js +8 -5
- package/built/src/utils/log/validator.js.map +1 -1
- package/package.json +21 -9
- package/built/src/resource/DbResource.d.ts +0 -355
- package/built/src/resource/DbResource.js +0 -755
- package/built/src/resource/DbResource.js.map +0 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDiagramMultiAzDeploymentTrafficPathsAndProtection = void 0;
|
|
4
|
+
const deploymentTopology_1 = require("./deploymentTopology");
|
|
5
|
+
const diagramFileModel_1 = require("./diagramFileModel");
|
|
6
|
+
const multiAzDeploymentTrafficPathsAndProtection_1 = require("./multiAzDeploymentTrafficPathsAndProtection");
|
|
7
|
+
const mermaidFlowchart_1 = require("./mermaidFlowchart");
|
|
8
|
+
const naming_1 = require("./naming");
|
|
9
|
+
const pathStyle = {
|
|
10
|
+
'client-request-response': { color: '#2563eb', width: 3, dashed: false },
|
|
11
|
+
'egress-return': { color: '#0d9488', width: 2, dashed: false },
|
|
12
|
+
'event-delivery': { color: '#d97706', width: 2, dashed: true },
|
|
13
|
+
'data-access': { color: '#059669', width: 2, dashed: false },
|
|
14
|
+
'resource-membership': { color: '#64748b', width: 2, dashed: true },
|
|
15
|
+
'security-permission': { color: '#7c3aed', width: 2, dashed: true },
|
|
16
|
+
'security-protection': { color: '#dc2626', width: 2, dashed: false },
|
|
17
|
+
};
|
|
18
|
+
const vpcId = (vpc) => `f${vpc.fileIndex}_vpc_${vpc.logicalId}`;
|
|
19
|
+
const resourceId = (vpc, fileIndex, logicalId) => `${vpcId(vpc)}_f${fileIndex}_${logicalId}`;
|
|
20
|
+
const subnetId = (vpc, subnet) => resourceId(vpc, subnet.fileIndex, subnet.logicalId);
|
|
21
|
+
const subnetResourceId = (vpc, subnet, fileIndex, logicalId) => `${subnetId(vpc, subnet)}_f${fileIndex}_${logicalId}`;
|
|
22
|
+
const resourceLabel = (logicalId, type, detail) => (0, mermaidFlowchart_1.mermaidTextCardLabel)(logicalId, [(0, naming_1.shortResourceTypeName)(type), detail].filter(Boolean).join(' · '));
|
|
23
|
+
const displayCidr = (value) => value.replace(/_(\d+)$/, '/$1').replace(/_/g, '.');
|
|
24
|
+
const displayAvailabilityZone = (value) => value.startsWith('Availability_Zone_')
|
|
25
|
+
? value.replace(/_/g, ' ')
|
|
26
|
+
: value.replace(/_/g, '-');
|
|
27
|
+
const generateDiagramMultiAzDeploymentTrafficPathsAndProtection = (params) => {
|
|
28
|
+
var _a;
|
|
29
|
+
const diagramFiles = (0, diagramFileModel_1.parseDiagramFiles)(Object.assign(Object.assign({}, params), { options: { includeOutputs: true, includeParameters: true } }));
|
|
30
|
+
const structure = new deploymentTopology_1.CfnDeploymentTopologyStructure(diagramFiles);
|
|
31
|
+
const trafficPathsAndProtection = (0, multiAzDeploymentTrafficPathsAndProtection_1.buildMultiAzDeploymentTrafficPathsAndProtection)(diagramFiles, structure);
|
|
32
|
+
const contents = ['```mermaid', 'flowchart TB'];
|
|
33
|
+
const hasInternet = trafficPathsAndProtection.paths.some((path) => path.from.id === multiAzDeploymentTrafficPathsAndProtection_1.internetEndpoint.id ||
|
|
34
|
+
path.to.id === multiAzDeploymentTrafficPathsAndProtection_1.internetEndpoint.id);
|
|
35
|
+
if (hasInternet) {
|
|
36
|
+
contents.push(' internet(["Internet"])');
|
|
37
|
+
}
|
|
38
|
+
const containedMemberIds = new Set();
|
|
39
|
+
structure.vpcs.forEach((vpc) => renderVpc(contents, vpc, trafficPathsAndProtection, containedMemberIds));
|
|
40
|
+
if (structure.standaloneResources.length > 0) {
|
|
41
|
+
renderStandaloneResources(contents, structure.standaloneResources);
|
|
42
|
+
}
|
|
43
|
+
renderRegionalServices(contents, trafficPathsAndProtection.regionalNodes);
|
|
44
|
+
const renderedPaths = trafficPathsAndProtection.paths.filter((path) => !(path.kind === 'resource-membership' && containedMemberIds.has(path.from.id)));
|
|
45
|
+
const edgeStyles = [];
|
|
46
|
+
renderedPaths.forEach((path) => {
|
|
47
|
+
const source = nodeIdForEndpoint(structure, trafficPathsAndProtection.regionalNodes, path.from);
|
|
48
|
+
const target = nodeIdForEndpoint(structure, trafficPathsAndProtection.regionalNodes, path.to);
|
|
49
|
+
if (!source || !target)
|
|
50
|
+
return;
|
|
51
|
+
const edge = path.bidirectional
|
|
52
|
+
? '<-->'
|
|
53
|
+
: pathStyle[path.kind].dashed
|
|
54
|
+
? '-.->'
|
|
55
|
+
: '-->';
|
|
56
|
+
contents.push(` ${source} ${edge}|"${(0, mermaidFlowchart_1.escapeMermaidLabel)(path.label)}"| ${target}`);
|
|
57
|
+
const style = pathStyle[path.kind];
|
|
58
|
+
edgeStyles.push(` linkStyle ${edgeStyles.length} stroke:${style.color},stroke-width:${style.width}px${style.dashed ? ',stroke-dasharray:5 5' : ''}`);
|
|
59
|
+
});
|
|
60
|
+
contents.push(...edgeStyles);
|
|
61
|
+
const legendEntries = [
|
|
62
|
+
['client-request-response', 'Blue: client request / response'],
|
|
63
|
+
['egress-return', 'Teal: egress / return'],
|
|
64
|
+
['event-delivery', 'Orange dashed: event delivery'],
|
|
65
|
+
['data-access', 'Green: data access'],
|
|
66
|
+
['resource-membership', 'Gray dashed: membership'],
|
|
67
|
+
['security-permission', 'Purple dashed: security-group permission'],
|
|
68
|
+
['security-protection', 'Red: security protection'],
|
|
69
|
+
];
|
|
70
|
+
const usedPathKinds = new Set(renderedPaths.map((path) => path.kind));
|
|
71
|
+
const visibleLegendLabels = legendEntries
|
|
72
|
+
.filter(([kind]) => usedPathKinds.has(kind))
|
|
73
|
+
.map(([, label]) => label);
|
|
74
|
+
const showLegend = ((_a = params.options) === null || _a === void 0 ? void 0 : _a.includeLegend) !== false && visibleLegendLabels.length > 0;
|
|
75
|
+
if (showLegend) {
|
|
76
|
+
contents.push(' subgraph path_legend["Traffic and protection types"]');
|
|
77
|
+
contents.push(` path_legend_card["${(0, mermaidFlowchart_1.mermaidCompactLegendLabel)('Edge styles', visibleLegendLabels)}"]`);
|
|
78
|
+
contents.push(' end');
|
|
79
|
+
}
|
|
80
|
+
contents.push(' classDef resourceNode fill:#ffffff,stroke:#64748b,color:#0f172a,stroke-width:1px');
|
|
81
|
+
contents.push(' classDef internetNode fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e,stroke-width:2px');
|
|
82
|
+
contents.push(' classDef legendNode fill:#ffffff,stroke:#94a3b8,color:#334155,font-size:11px');
|
|
83
|
+
if (hasInternet)
|
|
84
|
+
contents.push(' class internet internetNode');
|
|
85
|
+
if (showLegend) {
|
|
86
|
+
contents.push(' class path_legend_card legendNode');
|
|
87
|
+
contents.push(' style path_legend fill:#f8fafc,stroke:#94a3b8,stroke-dasharray:4 3');
|
|
88
|
+
}
|
|
89
|
+
contents.push('```');
|
|
90
|
+
return contents.join('\n');
|
|
91
|
+
};
|
|
92
|
+
exports.generateDiagramMultiAzDeploymentTrafficPathsAndProtection = generateDiagramMultiAzDeploymentTrafficPathsAndProtection;
|
|
93
|
+
const renderVpc = (contents, vpc, trafficPathsAndProtection, containedMemberIds) => {
|
|
94
|
+
const groupId = vpcId(vpc);
|
|
95
|
+
contents.push(` subgraph ${groupId}["VPC ${(0, mermaidFlowchart_1.escapeMermaidLabel)(displayCidr(vpc.cidrBlock))}"]`);
|
|
96
|
+
contents.push(' direction TB');
|
|
97
|
+
vpc.availabilityZones.forEach((az) => renderAvailabilityZone(contents, vpc, az));
|
|
98
|
+
if (vpc.resources.length > 0) {
|
|
99
|
+
const vpcResourceEndpointIds = new Set(vpc.resources.map((resource) => `f${resource.fileIndex}_${resource.logicalId}`));
|
|
100
|
+
const memberParentId = new Map();
|
|
101
|
+
trafficPathsAndProtection.paths
|
|
102
|
+
.filter((path) => path.kind === 'resource-membership')
|
|
103
|
+
.forEach((path) => {
|
|
104
|
+
if (vpcResourceEndpointIds.has(path.from.id) && vpcResourceEndpointIds.has(path.to.id)) {
|
|
105
|
+
memberParentId.set(path.from.id, path.to.id);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
const parentMembers = new Map();
|
|
109
|
+
vpc.resources.forEach((resource) => {
|
|
110
|
+
var _a;
|
|
111
|
+
const endpointId = `f${resource.fileIndex}_${resource.logicalId}`;
|
|
112
|
+
const parentId = memberParentId.get(endpointId);
|
|
113
|
+
if (!parentId)
|
|
114
|
+
return;
|
|
115
|
+
parentMembers.set(parentId, [...(_a = parentMembers.get(parentId)) !== null && _a !== void 0 ? _a : [], resource]);
|
|
116
|
+
containedMemberIds.add(endpointId);
|
|
117
|
+
});
|
|
118
|
+
const topLevelResources = vpc.resources.filter((resource) => !memberParentId.has(`f${resource.fileIndex}_${resource.logicalId}`));
|
|
119
|
+
const multiAzGroupId = `${groupId}_multi_az`;
|
|
120
|
+
contents.push(` subgraph ${multiAzGroupId}["Multi-AZ / VPC resources"]`);
|
|
121
|
+
topLevelResources.forEach((resource) => {
|
|
122
|
+
var _a, _b;
|
|
123
|
+
const endpointId = `f${resource.fileIndex}_${resource.logicalId}`;
|
|
124
|
+
const placement = [
|
|
125
|
+
resource.placement,
|
|
126
|
+
...(resource.multiAz ? ['Multi-AZ'] : []),
|
|
127
|
+
...((_a = resource.traits) !== null && _a !== void 0 ? _a : []),
|
|
128
|
+
].join('; ');
|
|
129
|
+
const parentCellId = resourceId(vpc, resource.fileIndex, resource.logicalId);
|
|
130
|
+
const members = (_b = parentMembers.get(endpointId)) !== null && _b !== void 0 ? _b : [];
|
|
131
|
+
if (members.length === 0) {
|
|
132
|
+
contents.push(` ${parentCellId}["${resourceLabel(resource.logicalId, resource.detail.Type, placement)}"]`);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
contents.push(` subgraph ${parentCellId}["${resourceLabel(resource.logicalId, resource.detail.Type, placement)}"]`);
|
|
136
|
+
members.forEach((member) => {
|
|
137
|
+
contents.push(` ${resourceId(vpc, member.fileIndex, member.logicalId)}["${resourceLabel(member.logicalId, member.detail.Type)}"]`);
|
|
138
|
+
});
|
|
139
|
+
contents.push(' end');
|
|
140
|
+
contents.push(` style ${parentCellId} fill:#ffffff,stroke:#64748b,stroke-width:1px`);
|
|
141
|
+
});
|
|
142
|
+
contents.push(' end');
|
|
143
|
+
contents.push(` style ${multiAzGroupId} fill:#f5f3ff,stroke:#7c3aed,stroke-dasharray:4 3`);
|
|
144
|
+
}
|
|
145
|
+
vpc.loadBalancers.forEach((loadBalancer) => renderLoadBalancer(contents, vpc, loadBalancer));
|
|
146
|
+
if (vpc.igw) {
|
|
147
|
+
const type = 'AWS::EC2::InternetGateway';
|
|
148
|
+
contents.push(` ${resourceId(vpc, vpc.igw.fileIndex, vpc.igw.logicalId)}["${resourceLabel(vpc.igw.logicalId, type)}"]`);
|
|
149
|
+
}
|
|
150
|
+
contents.push(' end');
|
|
151
|
+
contents.push(` style ${groupId} fill:#eff6ff,stroke:#2563eb,stroke-width:2px`);
|
|
152
|
+
};
|
|
153
|
+
const renderAvailabilityZone = (contents, vpc, az) => {
|
|
154
|
+
const azId = `${vpcId(vpc)}_${az.id.replace(/[^a-zA-Z0-9_]/g, '_')}`;
|
|
155
|
+
contents.push(` subgraph ${azId}["Availability Zone ${(0, mermaidFlowchart_1.escapeMermaidLabel)(displayAvailabilityZone(az.id))}"]`);
|
|
156
|
+
az.subnets.forEach((subnet) => renderSubnet(contents, vpc, subnet));
|
|
157
|
+
contents.push(' end');
|
|
158
|
+
contents.push(` style ${azId} fill:#f8fafc,stroke:#64748b,stroke-width:1px`);
|
|
159
|
+
};
|
|
160
|
+
const renderSubnet = (contents, vpc, subnet) => {
|
|
161
|
+
const groupId = subnetId(vpc, subnet);
|
|
162
|
+
const title = `${subnet.connectivity[0].toUpperCase()}${subnet.connectivity.slice(1)} subnet ${displayCidr(subnet.cidrBlock)}`;
|
|
163
|
+
contents.push(` subgraph ${groupId}["${(0, mermaidFlowchart_1.escapeMermaidLabel)(title)}"]`);
|
|
164
|
+
subnet.resources.forEach((resource) => {
|
|
165
|
+
contents.push(` ${subnetResourceId(vpc, subnet, resource.fileIndex, resource.logicalId)}["${resourceLabel(resource.logicalId, resource.detail.Type)}"]`);
|
|
166
|
+
});
|
|
167
|
+
contents.push(' end');
|
|
168
|
+
const palette = {
|
|
169
|
+
public: 'fill:#e0f2fe,stroke:#0284c7',
|
|
170
|
+
private: 'fill:#fef3c7,stroke:#d97706',
|
|
171
|
+
isolated: 'fill:#dcfce7,stroke:#059669',
|
|
172
|
+
}[subnet.connectivity];
|
|
173
|
+
contents.push(` style ${groupId} ${palette},stroke-width:2px`);
|
|
174
|
+
};
|
|
175
|
+
const renderLoadBalancer = (contents, vpc, loadBalancer) => {
|
|
176
|
+
const lbType = 'AWS::ElasticLoadBalancingV2::LoadBalancer';
|
|
177
|
+
contents.push(` ${resourceId(vpc, loadBalancer.fileIndex, loadBalancer.logicalId)}["${resourceLabel(loadBalancer.logicalId, lbType, loadBalancer.internetFacing ? 'internet-facing' : 'internal')}"]`);
|
|
178
|
+
const renderedTargetGroups = new Set();
|
|
179
|
+
const renderTargetGroup = (targetGroup) => {
|
|
180
|
+
const id = resourceId(vpc, targetGroup.fileIndex, targetGroup.logicalId);
|
|
181
|
+
if (renderedTargetGroups.has(id))
|
|
182
|
+
return;
|
|
183
|
+
renderedTargetGroups.add(id);
|
|
184
|
+
const detail = [
|
|
185
|
+
targetGroup.protocol,
|
|
186
|
+
targetGroup.port ? `port ${targetGroup.port}` : undefined,
|
|
187
|
+
targetGroup.targetType
|
|
188
|
+
? `target type ${targetGroup.targetType}`
|
|
189
|
+
: undefined,
|
|
190
|
+
]
|
|
191
|
+
.filter(Boolean)
|
|
192
|
+
.join(' · ');
|
|
193
|
+
contents.push(` ${id}["${resourceLabel(targetGroup.logicalId, 'AWS::ElasticLoadBalancingV2::TargetGroup', detail)}"]`);
|
|
194
|
+
};
|
|
195
|
+
loadBalancer.listeners.forEach((listener) => {
|
|
196
|
+
const detail = [
|
|
197
|
+
listener.protocol,
|
|
198
|
+
listener.port ? `port ${listener.port}` : undefined,
|
|
199
|
+
]
|
|
200
|
+
.filter(Boolean)
|
|
201
|
+
.join(' · ');
|
|
202
|
+
contents.push(` ${resourceId(vpc, listener.fileIndex, listener.logicalId)}["${resourceLabel(listener.logicalId, 'AWS::ElasticLoadBalancingV2::Listener', detail)}"]`);
|
|
203
|
+
listener.targetGroups.forEach(renderTargetGroup);
|
|
204
|
+
listener.rules.forEach((rule) => {
|
|
205
|
+
const detail = [
|
|
206
|
+
...rule.conditions,
|
|
207
|
+
rule.priority ? `priority ${rule.priority}` : undefined,
|
|
208
|
+
]
|
|
209
|
+
.filter(Boolean)
|
|
210
|
+
.join(' · ');
|
|
211
|
+
contents.push(` ${resourceId(vpc, rule.fileIndex, rule.logicalId)}["${resourceLabel(rule.logicalId, 'AWS::ElasticLoadBalancingV2::ListenerRule', detail)}"]`);
|
|
212
|
+
rule.targetGroups.forEach(renderTargetGroup);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
loadBalancer.targetGroups.forEach(renderTargetGroup);
|
|
216
|
+
};
|
|
217
|
+
const renderRegionalServices = (contents, nodes) => {
|
|
218
|
+
if (nodes.length === 0)
|
|
219
|
+
return;
|
|
220
|
+
contents.push(' subgraph regional["Regional managed services"]');
|
|
221
|
+
nodes.forEach((node) => {
|
|
222
|
+
contents.push(` regional_${node.endpoint.id}["${resourceLabel(node.label, node.type)}"]`);
|
|
223
|
+
});
|
|
224
|
+
contents.push(' end');
|
|
225
|
+
contents.push(' style regional fill:#fff7ed,stroke:#ea580c,stroke-width:2px');
|
|
226
|
+
};
|
|
227
|
+
const renderStandaloneResources = (contents, standaloneResources) => {
|
|
228
|
+
contents.push(' subgraph standalone["Standalone resources (no resolvable VPC/subnet)"]');
|
|
229
|
+
standaloneResources.forEach((resource) => {
|
|
230
|
+
contents.push(` f${resource.fileIndex}_${resource.logicalId}["${resourceLabel(resource.logicalId, resource.detail.Type)}"]`);
|
|
231
|
+
});
|
|
232
|
+
contents.push(' end');
|
|
233
|
+
contents.push(' style standalone fill:#f8fafc,stroke:#64748b,stroke-dasharray:4 3');
|
|
234
|
+
};
|
|
235
|
+
const nodeIdForEndpoint = (structure, regionalNodes, endpoint) => {
|
|
236
|
+
var _a;
|
|
237
|
+
if (endpoint.id === multiAzDeploymentTrafficPathsAndProtection_1.internetEndpoint.id)
|
|
238
|
+
return 'internet';
|
|
239
|
+
for (const vpc of structure.vpcs) {
|
|
240
|
+
if (((_a = vpc.igw) === null || _a === void 0 ? void 0 : _a.fileIndex) === endpoint.fileIndex &&
|
|
241
|
+
vpc.igw.logicalId === endpoint.logicalId) {
|
|
242
|
+
return resourceId(vpc, endpoint.fileIndex, endpoint.logicalId);
|
|
243
|
+
}
|
|
244
|
+
if (vpc.resources.some((resource) => resource.fileIndex === endpoint.fileIndex &&
|
|
245
|
+
resource.logicalId === endpoint.logicalId)) {
|
|
246
|
+
return resourceId(vpc, endpoint.fileIndex, endpoint.logicalId);
|
|
247
|
+
}
|
|
248
|
+
for (const loadBalancer of vpc.loadBalancers) {
|
|
249
|
+
if (loadBalancer.fileIndex === endpoint.fileIndex &&
|
|
250
|
+
loadBalancer.logicalId === endpoint.logicalId) {
|
|
251
|
+
return resourceId(vpc, endpoint.fileIndex, endpoint.logicalId);
|
|
252
|
+
}
|
|
253
|
+
if (loadBalancer.targetGroups.some((candidate) => candidate.fileIndex === endpoint.fileIndex &&
|
|
254
|
+
candidate.logicalId === endpoint.logicalId)) {
|
|
255
|
+
return resourceId(vpc, endpoint.fileIndex, endpoint.logicalId);
|
|
256
|
+
}
|
|
257
|
+
for (const listener of loadBalancer.listeners) {
|
|
258
|
+
if (listener.fileIndex === endpoint.fileIndex &&
|
|
259
|
+
listener.logicalId === endpoint.logicalId) {
|
|
260
|
+
return resourceId(vpc, endpoint.fileIndex, endpoint.logicalId);
|
|
261
|
+
}
|
|
262
|
+
if (listener.rules.some((candidate) => candidate.fileIndex === endpoint.fileIndex &&
|
|
263
|
+
candidate.logicalId === endpoint.logicalId)) {
|
|
264
|
+
return resourceId(vpc, endpoint.fileIndex, endpoint.logicalId);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
for (const az of vpc.availabilityZones) {
|
|
269
|
+
for (const subnet of az.subnets) {
|
|
270
|
+
if (subnet.resources.some((candidate) => candidate.fileIndex === endpoint.fileIndex &&
|
|
271
|
+
candidate.logicalId === endpoint.logicalId)) {
|
|
272
|
+
return subnetResourceId(vpc, subnet, endpoint.fileIndex, endpoint.logicalId);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (regionalNodes.some((node) => node.endpoint.id === endpoint.id)) {
|
|
278
|
+
return `regional_${endpoint.id}`;
|
|
279
|
+
}
|
|
280
|
+
if (structure.standaloneResources.some((resource) => resource.fileIndex === endpoint.fileIndex &&
|
|
281
|
+
resource.logicalId === endpoint.logicalId)) {
|
|
282
|
+
return `f${endpoint.fileIndex}_${endpoint.logicalId}`;
|
|
283
|
+
}
|
|
284
|
+
return undefined;
|
|
285
|
+
};
|
|
286
|
+
//# sourceMappingURL=multiAzDeploymentTrafficPathsAndProtectionDiagram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiAzDeploymentTrafficPathsAndProtectionDiagram.js","sourceRoot":"","sources":["../../../../src/utils/cfn/multiAzDeploymentTrafficPathsAndProtectionDiagram.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Refable } from '../../types';
|
|
2
|
+
import { CfnStringResolutionContext } from './intrinsics';
|
|
3
|
+
export declare const sanitizeLogicalId: (id: string) => string;
|
|
4
|
+
export declare const sanitizeAwsType: (s: string) => string;
|
|
5
|
+
export declare const shortResourceTypeName: (type: string) => string;
|
|
6
|
+
export declare const resourceServiceLabel: (logicalId: string, type: string, iconStr: string) => string;
|
|
7
|
+
export declare const getCidrBlock: (properties?: Record<string, Refable>, context?: CfnStringResolutionContext) => string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCidrBlock = exports.resourceServiceLabel = exports.shortResourceTypeName = exports.sanitizeAwsType = exports.sanitizeLogicalId = void 0;
|
|
4
|
+
const intrinsics_1 = require("./intrinsics");
|
|
5
|
+
const sanitizeLogicalId = (id) => {
|
|
6
|
+
return id.replace(/["{}!_\]\\[]/g, '').replace(/[^a-zA-Z0-9_]/g, '_');
|
|
7
|
+
};
|
|
8
|
+
exports.sanitizeLogicalId = sanitizeLogicalId;
|
|
9
|
+
const sanitizeAwsType = (s) => {
|
|
10
|
+
return s.replace(/::/g, '_').replace(/[<>]/g, '_');
|
|
11
|
+
};
|
|
12
|
+
exports.sanitizeAwsType = sanitizeAwsType;
|
|
13
|
+
const shortResourceTypeName = (type) => {
|
|
14
|
+
const withoutGenericParam = type.split('<')[0];
|
|
15
|
+
const segments = withoutGenericParam.split('::');
|
|
16
|
+
return segments[segments.length - 1] || type;
|
|
17
|
+
};
|
|
18
|
+
exports.shortResourceTypeName = shortResourceTypeName;
|
|
19
|
+
const resourceServiceLabel = (logicalId, type, iconStr) => iconStr ? logicalId : `${logicalId} ${(0, exports.shortResourceTypeName)(type)}`;
|
|
20
|
+
exports.resourceServiceLabel = resourceServiceLabel;
|
|
21
|
+
const getCidrBlock = (properties, context) => {
|
|
22
|
+
var _a;
|
|
23
|
+
if (!properties || !properties.CidrBlock) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
26
|
+
if (typeof properties.CidrBlock === 'object') {
|
|
27
|
+
const resolved = (0, intrinsics_1.resolveCfnString)(properties.CidrBlock, context !== null && context !== void 0 ? context : {});
|
|
28
|
+
return typeof resolved === 'string' ? resolved.replace(/[/.]/g, '_') : '';
|
|
29
|
+
}
|
|
30
|
+
return ((_a = properties === null || properties === void 0 ? void 0 : properties.CidrBlock) !== null && _a !== void 0 ? _a : '').replace(/[/.]/g, '_');
|
|
31
|
+
};
|
|
32
|
+
exports.getCidrBlock = getCidrBlock;
|
|
33
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../../src/utils/cfn/naming.ts"],"names":[],"mappings":";;;AACA,6CAA4E;AAErE,MAAM,iBAAiB,GAAG,CAAC,EAAU,EAAU,EAAE;IACtD,OAAO,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AACxE,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B;AAEK,MAAM,eAAe,GAAG,CAAC,CAAS,EAAU,EAAE;IACnD,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC;AAFW,QAAA,eAAe,mBAE1B;AAUK,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAU,EAAE;IAC5D,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/C,CAAC,CAAC;AAJW,QAAA,qBAAqB,yBAIhC;AASK,MAAM,oBAAoB,GAAG,CAClC,SAAiB,EACjB,IAAY,EACZ,OAAe,EACP,EAAE,CACV,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,IAAA,6BAAqB,EAAC,IAAI,CAAC,EAAE,CAAC;AALzD,QAAA,oBAAoB,wBAKqC;AAE/D,MAAM,YAAY,GAAG,CAC1B,UAAoC,EACpC,OAAoC,EAC5B,EAAE;;IACV,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAU7C,MAAM,QAAQ,GAAG,IAAA,6BAAgB,EAAC,UAAU,CAAC,SAAS,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC;QACvE,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,mCAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC,CAAC;AArBW,QAAA,YAAY,gBAqBvB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractResourceDependencies = void 0;
|
|
4
|
+
const intrinsics_1 = require("./intrinsics");
|
|
5
|
+
const extractResourceDependencies = (cfnTemplate) => {
|
|
6
|
+
const resourceIds = new Set(Object.keys(cfnTemplate.Resources));
|
|
7
|
+
const result = {};
|
|
8
|
+
Object.entries(cfnTemplate.Resources).forEach(([logicalId, resource]) => {
|
|
9
|
+
const deps = [];
|
|
10
|
+
const pushIfResource = (targetId, via) => {
|
|
11
|
+
if (resourceIds.has(targetId) && targetId !== logicalId) {
|
|
12
|
+
deps.push({ logicalId: targetId, via });
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const dependsOn = resource.DependsOn;
|
|
16
|
+
if (typeof dependsOn === 'string') {
|
|
17
|
+
pushIfResource(dependsOn, 'DependsOn');
|
|
18
|
+
}
|
|
19
|
+
else if (Array.isArray(dependsOn)) {
|
|
20
|
+
dependsOn.forEach((dep) => pushIfResource(dep, 'DependsOn'));
|
|
21
|
+
}
|
|
22
|
+
if (resource.Properties) {
|
|
23
|
+
(0, intrinsics_1.walkIntrinsicRefs)(resource.Properties, (via, targetId) => pushIfResource(targetId, via));
|
|
24
|
+
}
|
|
25
|
+
const unique = Array.from(new Map(deps.map((d) => [`${d.logicalId}:${d.via}`, d])).values());
|
|
26
|
+
if (unique.length > 0) {
|
|
27
|
+
result[logicalId] = unique;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
exports.extractResourceDependencies = extractResourceDependencies;
|
|
33
|
+
//# sourceMappingURL=resourceDependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceDependencies.js","sourceRoot":"","sources":["../../../../src/utils/cfn/resourceDependencies.ts"],"names":[],"mappings":";;;AAIA,6CAAiD;AAa1C,MAAM,2BAA2B,GAAG,CACzC,WAAmC,EACc,EAAE;IACnD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,MAAM,MAAM,GAAoD,EAAE,CAAC;IAEnE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE;QACtE,MAAM,IAAI,GAAoC,EAAE,CAAC;QACjD,MAAM,cAAc,GAAG,CACrB,QAAgB,EAChB,GAAyC,EACnC,EAAE;YACR,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,IAAA,8BAAiB,EAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CACvD,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAC9B,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAClE,CAAC;QACF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAvCW,QAAA,2BAA2B,+BAuCtC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseCfnJsonTemplate = exports.parseCfnYamlTemplate = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const js_yaml_1 = tslib_1.__importDefault(require("js-yaml"));
|
|
6
|
+
const CFN_INTRINSIC_TAGS = [
|
|
7
|
+
'!And',
|
|
8
|
+
'!If',
|
|
9
|
+
'!Not',
|
|
10
|
+
'!Equals',
|
|
11
|
+
'!Or',
|
|
12
|
+
'!FindInMap',
|
|
13
|
+
'!Base64',
|
|
14
|
+
'!Cidr',
|
|
15
|
+
'!Ref',
|
|
16
|
+
'!Sub',
|
|
17
|
+
'!GetAtt',
|
|
18
|
+
'!GetAZs',
|
|
19
|
+
'!ImportValue',
|
|
20
|
+
'!Select',
|
|
21
|
+
'!Split',
|
|
22
|
+
'!Join',
|
|
23
|
+
];
|
|
24
|
+
const CFN_TAG_KINDS = ['scalar', 'sequence', 'mapping'];
|
|
25
|
+
const parseCfnYamlTemplate = (yamlText) => {
|
|
26
|
+
const customTags = CFN_INTRINSIC_TAGS.flatMap((tag) => CFN_TAG_KINDS.map((kind) => new js_yaml_1.default.Type(tag, {
|
|
27
|
+
kind,
|
|
28
|
+
construct: (data) => ({
|
|
29
|
+
[tag]: data,
|
|
30
|
+
}),
|
|
31
|
+
})));
|
|
32
|
+
const customSchema = js_yaml_1.default.DEFAULT_SCHEMA.extend(customTags);
|
|
33
|
+
const jsonObj = js_yaml_1.default.load(yamlText, { schema: customSchema });
|
|
34
|
+
return jsonObj;
|
|
35
|
+
};
|
|
36
|
+
exports.parseCfnYamlTemplate = parseCfnYamlTemplate;
|
|
37
|
+
const parseCfnJsonTemplate = (templateJSONString) => {
|
|
38
|
+
if (!templateJSONString || templateJSONString.trim() === '') {
|
|
39
|
+
throw new Error('TemplateBody is undefined or empty.');
|
|
40
|
+
}
|
|
41
|
+
let jsonObj;
|
|
42
|
+
try {
|
|
43
|
+
jsonObj = JSON.parse(templateJSONString);
|
|
44
|
+
}
|
|
45
|
+
catch (_a) {
|
|
46
|
+
throw new Error('TemplateBody is not a valid JSON string.');
|
|
47
|
+
}
|
|
48
|
+
if (typeof jsonObj !== 'object' || jsonObj === null) {
|
|
49
|
+
throw new Error('TemplateBody does not contain a valid JSON object.');
|
|
50
|
+
}
|
|
51
|
+
const template = jsonObj;
|
|
52
|
+
if (!template.Resources || typeof template.Resources !== 'object') {
|
|
53
|
+
throw new Error('TemplateBody does not contain valid Resources.');
|
|
54
|
+
}
|
|
55
|
+
return template;
|
|
56
|
+
};
|
|
57
|
+
exports.parseCfnJsonTemplate = parseCfnJsonTemplate;
|
|
58
|
+
//# sourceMappingURL=templateParsing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateParsing.js","sourceRoot":"","sources":["../../../../src/utils/cfn/templateParsing.ts"],"names":[],"mappings":";;;;AAAA,8DAA2B;AAkB3B,MAAM,kBAAkB,GAAG;IACzB,MAAM;IACN,KAAK;IACL,MAAM;IACN,SAAS;IACT,KAAK;IACL,YAAY;IACZ,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;IACN,SAAS;IACT,SAAS;IACT,cAAc;IACd,SAAS;IACT,QAAQ;IACR,OAAO;CACR,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AAQ1D,MAAM,oBAAoB,GAAG,CAClC,QAAgB,EACQ,EAAE;IAC1B,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACpD,aAAa,CAAC,GAAG,CACf,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,iBAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QACjB,IAAI;QACJ,SAAS,EAAE,CAAC,IAAa,EAA2B,EAAE,CAAC,CAAC;YACtD,CAAC,GAAG,CAAC,EAAE,IAAI;SACZ,CAAC;KACH,CAAC,CACL,CACF,CAAC;IACF,MAAM,YAAY,GAAG,iBAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,iBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9D,OAAO,OAAiC,CAAC;AAC3C,CAAC,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B;AAEK,MAAM,oBAAoB,GAAG,CAClC,kBAA0B,EACF,EAAE;IAC1B,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;IAAC,WAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,QAAQ,GAAG,OAAiC,CAAC;IACnD,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AApBW,QAAA,oBAAoB,wBAoB/B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isFocusParameterOrOutput = exports.isFocusResourceType = void 0;
|
|
4
|
+
const APPLICATION_VIEW_FOCUS_TYPES = new Set([
|
|
5
|
+
'AWS::CloudFront::Distribution',
|
|
6
|
+
'AWS::WAFv2::WebACL',
|
|
7
|
+
'AWS::WAFv2::WebACLAssociation',
|
|
8
|
+
'AWS::WAF::WebACL',
|
|
9
|
+
'AWS::WAFRegional::WebACL',
|
|
10
|
+
'AWS::ElasticLoadBalancingV2::LoadBalancer',
|
|
11
|
+
'AWS::ElasticLoadBalancingV2::Listener',
|
|
12
|
+
'AWS::ElasticLoadBalancingV2::ListenerRule',
|
|
13
|
+
'AWS::ElasticLoadBalancingV2::TargetGroup',
|
|
14
|
+
'AWS::ApiGateway::RestApi',
|
|
15
|
+
'AWS::ApiGateway::Resource',
|
|
16
|
+
'AWS::ApiGateway::Method',
|
|
17
|
+
'AWS::ApiGatewayV2::Api',
|
|
18
|
+
'AWS::ApiGatewayV2::Route',
|
|
19
|
+
'AWS::ApiGatewayV2::Integration',
|
|
20
|
+
'AWS::Lambda::Function',
|
|
21
|
+
'AWS::Lambda::EventSourceMapping',
|
|
22
|
+
'AWS::ECS::Cluster',
|
|
23
|
+
'AWS::ECS::Service',
|
|
24
|
+
'AWS::ECS::TaskDefinition',
|
|
25
|
+
'AWS::EC2::Instance',
|
|
26
|
+
'AWS::StepFunctions::StateMachine',
|
|
27
|
+
'AWS::SQS::Queue',
|
|
28
|
+
'AWS::SNS::Topic',
|
|
29
|
+
'AWS::SNS::Subscription',
|
|
30
|
+
'AWS::Events::Rule',
|
|
31
|
+
'AWS::Events::EventBus',
|
|
32
|
+
'AWS::Kinesis::Stream',
|
|
33
|
+
'AWS::MSK::Cluster',
|
|
34
|
+
'AWS::AmazonMQ::Broker',
|
|
35
|
+
'AWS::DynamoDB::Table',
|
|
36
|
+
'AWS::S3::Bucket',
|
|
37
|
+
'AWS::RDS::DBInstance',
|
|
38
|
+
'AWS::RDS::DBCluster',
|
|
39
|
+
'AWS::ElastiCache::CacheCluster',
|
|
40
|
+
'AWS::ElastiCache::ReplicationGroup',
|
|
41
|
+
'AWS::ElastiCache::ServerlessCache',
|
|
42
|
+
'AWS::SES::EmailIdentity',
|
|
43
|
+
'AWS::SES::Template',
|
|
44
|
+
'AWS::SES::ConfigurationSet',
|
|
45
|
+
]);
|
|
46
|
+
const INFRASTRUCTURE_VIEW_FOCUS_TYPES = new Set([
|
|
47
|
+
'AWS::IAM::Role',
|
|
48
|
+
'AWS::IAM::Policy',
|
|
49
|
+
'AWS::IAM::ManagedPolicy',
|
|
50
|
+
'AWS::Lambda::Permission',
|
|
51
|
+
'AWS::EC2::VPC',
|
|
52
|
+
'AWS::EC2::Subnet',
|
|
53
|
+
'AWS::EC2::SecurityGroup',
|
|
54
|
+
'AWS::EC2::NetworkAcl',
|
|
55
|
+
'AWS::EC2::NetworkAclEntry',
|
|
56
|
+
'AWS::EC2::SubnetNetworkAclAssociation',
|
|
57
|
+
'AWS::EC2::RouteTable',
|
|
58
|
+
'AWS::EC2::Route',
|
|
59
|
+
'AWS::EC2::SubnetRouteTableAssociation',
|
|
60
|
+
'AWS::EC2::InternetGateway',
|
|
61
|
+
'AWS::EC2::VPCGatewayAttachment',
|
|
62
|
+
'AWS::EC2::NatGateway',
|
|
63
|
+
'AWS::EC2::EIP',
|
|
64
|
+
'AWS::ApiGateway::Stage',
|
|
65
|
+
'AWS::ApiGatewayV2::Stage',
|
|
66
|
+
'AWS::Logs::LogGroup',
|
|
67
|
+
]);
|
|
68
|
+
const DB_VIEW_FOCUS_TYPES = new Set([
|
|
69
|
+
'AWS::RDS::DBInstance',
|
|
70
|
+
'AWS::RDS::DBCluster',
|
|
71
|
+
'AWS::RDS::DBProxy',
|
|
72
|
+
'AWS::RDS::DBProxyTargetGroup',
|
|
73
|
+
'AWS::ElastiCache::CacheCluster',
|
|
74
|
+
'AWS::ElastiCache::ReplicationGroup',
|
|
75
|
+
'AWS::ElastiCache::ServerlessCache',
|
|
76
|
+
'AWS::DynamoDB::Table',
|
|
77
|
+
'AWS::SecretsManager::Secret',
|
|
78
|
+
'AWS::SSM::Parameter',
|
|
79
|
+
]);
|
|
80
|
+
const SECURITY_VIEW_FOCUS_TYPES = new Set([
|
|
81
|
+
'AWS::IAM::Role',
|
|
82
|
+
'AWS::IAM::Policy',
|
|
83
|
+
'AWS::IAM::ManagedPolicy',
|
|
84
|
+
'AWS::S3::BucketPolicy',
|
|
85
|
+
'AWS::SQS::QueuePolicy',
|
|
86
|
+
'AWS::SNS::TopicPolicy',
|
|
87
|
+
'AWS::KMS::Key',
|
|
88
|
+
'AWS::KMS::Alias',
|
|
89
|
+
'AWS::SecretsManager::Secret',
|
|
90
|
+
'AWS::WAFv2::WebACL',
|
|
91
|
+
'AWS::WAFv2::WebACLAssociation',
|
|
92
|
+
'AWS::WAF::WebACL',
|
|
93
|
+
'AWS::WAFRegional::WebACL',
|
|
94
|
+
'AWS::Cognito::UserPool',
|
|
95
|
+
'AWS::Cognito::UserPoolClient',
|
|
96
|
+
'AWS::Cognito::IdentityPool',
|
|
97
|
+
'AWS::ApiGateway::Authorizer',
|
|
98
|
+
'AWS::ApiGatewayV2::Authorizer',
|
|
99
|
+
'AWS::Lambda::Permission',
|
|
100
|
+
]);
|
|
101
|
+
const OPERATIONS_VIEW_FOCUS_TYPES = new Set([
|
|
102
|
+
'AWS::Logs::LogGroup',
|
|
103
|
+
'AWS::CloudWatch::Alarm',
|
|
104
|
+
'AWS::SQS::Queue',
|
|
105
|
+
'AWS::Events::Rule',
|
|
106
|
+
'AWS::Lambda::Function',
|
|
107
|
+
'AWS::XRay::Group',
|
|
108
|
+
'AWS::XRay::SamplingRule',
|
|
109
|
+
]);
|
|
110
|
+
const FOCUS_TYPES_BY_VIEWPOINT = {
|
|
111
|
+
ApplicationView: APPLICATION_VIEW_FOCUS_TYPES,
|
|
112
|
+
InfrastructureView: INFRASTRUCTURE_VIEW_FOCUS_TYPES,
|
|
113
|
+
DBView: DB_VIEW_FOCUS_TYPES,
|
|
114
|
+
SecurityView: SECURITY_VIEW_FOCUS_TYPES,
|
|
115
|
+
OperationsView: OPERATIONS_VIEW_FOCUS_TYPES,
|
|
116
|
+
};
|
|
117
|
+
const isFocusResourceType = (viewpoint, cfnType) => viewpoint === 'CloudFormationView' ||
|
|
118
|
+
FOCUS_TYPES_BY_VIEWPOINT[viewpoint].has(cfnType);
|
|
119
|
+
exports.isFocusResourceType = isFocusResourceType;
|
|
120
|
+
const isFocusParameterOrOutput = (viewpoint) => viewpoint === 'CloudFormationView';
|
|
121
|
+
exports.isFocusParameterOrOutput = isFocusParameterOrOutput;
|
|
122
|
+
//# sourceMappingURL=viewpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewpoints.js","sourceRoot":"","sources":["../../../../src/utils/cfn/viewpoints.ts"],"names":[],"mappings":";;;AA6BA,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAS;IACnD,+BAA+B;IAC/B,oBAAoB;IACpB,+BAA+B;IAC/B,kBAAkB;IAClB,0BAA0B;IAC1B,2CAA2C;IAC3C,uCAAuC;IACvC,2CAA2C;IAC3C,0CAA0C;IAC1C,0BAA0B;IAC1B,2BAA2B;IAC3B,yBAAyB;IACzB,wBAAwB;IACxB,0BAA0B;IAC1B,gCAAgC;IAChC,uBAAuB;IACvB,iCAAiC;IACjC,mBAAmB;IACnB,mBAAmB;IACnB,0BAA0B;IAC1B,oBAAoB;IACpB,kCAAkC;IAClC,iBAAiB;IACjB,iBAAiB;IACjB,wBAAwB;IACxB,mBAAmB;IACnB,uBAAuB;IACvB,sBAAsB;IACtB,mBAAmB;IACnB,uBAAuB;IACvB,sBAAsB;IACtB,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;IACrB,gCAAgC;IAChC,oCAAoC;IACpC,mCAAmC;IACnC,yBAAyB;IACzB,oBAAoB;IACpB,4BAA4B;CAC7B,CAAC,CAAC;AAEH,MAAM,+BAA+B,GAAG,IAAI,GAAG,CAAS;IACtD,gBAAgB;IAChB,kBAAkB;IAClB,yBAAyB;IACzB,yBAAyB;IACzB,eAAe;IACf,kBAAkB;IAClB,yBAAyB;IACzB,sBAAsB;IACtB,2BAA2B;IAC3B,uCAAuC;IACvC,sBAAsB;IACtB,iBAAiB;IACjB,uCAAuC;IACvC,2BAA2B;IAC3B,gCAAgC;IAChC,sBAAsB;IACtB,eAAe;IACf,wBAAwB;IACxB,0BAA0B;IAC1B,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS;IAC1C,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,8BAA8B;IAC9B,gCAAgC;IAChC,oCAAoC;IACpC,mCAAmC;IACnC,sBAAsB;IACtB,6BAA6B;IAC7B,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAS;IAChD,gBAAgB;IAChB,kBAAkB;IAClB,yBAAyB;IACzB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,eAAe;IACf,iBAAiB;IACjB,6BAA6B;IAC7B,oBAAoB;IACpB,+BAA+B;IAC/B,kBAAkB;IAClB,0BAA0B;IAC1B,wBAAwB;IACxB,8BAA8B;IAC9B,4BAA4B;IAC5B,6BAA6B;IAC7B,+BAA+B;IAC/B,yBAAyB;CAC1B,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAS;IAClD,qBAAqB;IACrB,wBAAwB;IACxB,iBAAiB;IACjB,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;IAClB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAG1B;IACF,eAAe,EAAE,4BAA4B;IAC7C,kBAAkB,EAAE,+BAA+B;IACnD,MAAM,EAAE,mBAAmB;IAC3B,YAAY,EAAE,yBAAyB;IACvC,cAAc,EAAE,2BAA2B;CAC5C,CAAC;AAOK,MAAM,mBAAmB,GAAG,CACjC,SAA2B,EAC3B,OAAe,EACN,EAAE,CACX,SAAS,KAAK,oBAAoB;IAClC,wBAAwB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AALtC,QAAA,mBAAmB,uBAKmB;AAQ5C,MAAM,wBAAwB,GAAG,CAAC,SAA2B,EAAW,EAAE,CAC/E,SAAS,KAAK,oBAAoB,CAAC;AADxB,QAAA,wBAAwB,4BACA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/utils/csv.ts"],"names":[],"mappings":";;;;AAAA,0CAAsE;AACtE,yCAA2C;AAC3C,+CAAyB;AACzB,mCAAkC;AAClC,8CAA2C;AA+CpC,MAAM,gBAAgB,GAAG,CAC9B,QAAgB,EAChB,OAAiB,EACc,EAAE;IACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO,oBAAoB,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC,CAAA,CAAC;AAPW,QAAA,gBAAgB,oBAO3B;AAEK,MAAM,kBAAkB,GAAG,CAChC,SAAiB,EACjB,OAAiB,EACc,EAAE;IACjC,OAAO,oBAAoB,CAAC,iBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC,CAAA,CAAC;AALW,QAAA,kBAAkB,sBAK7B;AAEF,MAAM,oBAAoB,GAAG,CAC3B,QAAkB,EAClB,OAAiB,EACc,EAAE;IACjC,IAAI,GAAG,GAAqC,SAAS,CAAC;IAEtD,MAAM,MAAM,GAAG,QAAQ;SACpB,IAAI,CACH,IAAA,iBAAK,kBACH,cAAc,EAAE,IAAI,EACpB,oBAAoB,EAAE,IAAI,IACvB,OAAO,EACV,CACH;SACA,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACnB,IAAI,GAAG,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/utils/csv.ts"],"names":[],"mappings":";;;;AAAA,0CAAsE;AACtE,yCAA2C;AAC3C,+CAAyB;AACzB,mCAAkC;AAClC,8CAA2C;AA+CpC,MAAM,gBAAgB,GAAG,CAC9B,QAAgB,EAChB,OAAiB,EACc,EAAE;IACjC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEjC,OAAO,oBAAoB,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC,CAAA,CAAC;AAPW,QAAA,gBAAgB,oBAO3B;AAEK,MAAM,kBAAkB,GAAG,CAChC,SAAiB,EACjB,OAAiB,EACc,EAAE;IACjC,OAAO,oBAAoB,CAAC,iBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC,CAAA,CAAC;AALW,QAAA,kBAAkB,sBAK7B;AAEF,MAAM,oBAAoB,GAAG,CAC3B,QAAkB,EAClB,OAAiB,EACc,EAAE;IACjC,IAAI,GAAG,GAAqC,SAAS,CAAC;IAEtD,MAAM,MAAM,GAAG,QAAQ;SACpB,IAAI,CACH,IAAA,iBAAK,kBACH,cAAc,EAAE,IAAI,EACpB,oBAAoB,EAAE,IAAI,IACvB,OAAO,EACV,CACH;SACA,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACnB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAA,kBAAY,EAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACvE,GAAG,GAAG,IAAI,0BAAoB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEL,MAAM,IAAA,mBAAQ,EAAC,MAAM,CAAC,CAAC;IAEvB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACzB,GAAG,CAAC,sBAAsB,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbType.js","sourceRoot":"","sources":["../../../src/utils/dbType.ts"],"names":[],"mappings":";;;AAAA,oCAA8D;AAEvD,MAAM,KAAK,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,cAAM,CAAC,GAAG,KAAK,MAAM,CAAC;AAA3D,QAAA,KAAK,SAAsD;AAEjE,MAAM,SAAS,GAAG,CAAC,MAAc,EAAW,EAAE;IACnD,QAAQ,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"dbType.js","sourceRoot":"","sources":["../../../src/utils/dbType.ts"],"names":[],"mappings":";;;AAAA,oCAA8D;AAEvD,MAAM,KAAK,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,cAAM,CAAC,GAAG,KAAK,MAAM,CAAC;AAA3D,QAAA,KAAK,SAAsD;AAEjE,MAAM,SAAS,GAAG,CAAC,MAAc,EAAW,EAAE;IACnD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAM,CAAC,KAAK,CAAC;QAClB,KAAK,cAAM,CAAC,QAAQ,CAAC;QACrB,KAAK,cAAM,CAAC,SAAS,CAAC;QACtB,KAAK,cAAM,CAAC,MAAM,CAAC;QACnB,KAAK,cAAM,CAAC,MAAM;YAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAVW,QAAA,SAAS,aAUpB;AAkBK,MAAM,6BAA6B,GAAG,CAAC,MAAc,EAAW,EAAE;IACvE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAM,CAAC,KAAK,CAAC;QAClB,KAAK,cAAM,CAAC,QAAQ,CAAC;QACrB,KAAK,cAAM,CAAC,MAAM;YAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AARW,QAAA,6BAA6B,iCAQxC;AAEK,MAAM,aAAa,GAAG,CAC3B,MAAc,EACd,UAAuB,EACd,EAAE;IACX,IAAI,MAAM,KAAK,cAAM,CAAC,GAAG,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,sBAAc,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB"}
|