From 3c5197db9c61d3af331931b191815f3253383e64 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 2 Jan 2023 14:24:21 -0800 Subject: [PATCH] Support updating variable declaration with require CallExpression (#278) --- .changeset/famous-steaks-watch.md | 5 + .../getGlobalRequireOutput.ts | 21 +- .../getServiceRequireOutput.ts | 15 +- .../getV3PackageRequireCode.ts | 21 - .../global-require.output.ts | 19 +- .../multiple-declarators/global.input.js | 6 + .../multiple-declarators/global.output.js | 11 + .../service-named.input.js | 6 + .../service-named.output.js | 11 + .../multiple-declarators/service.input.js | 7 + .../multiple-declarators/service.output.js | 11 + .../new-client/global-require.output.js | 2336 +++++++---------- .../modules/addV3ClientModuleRequire.ts | 20 +- .../v2-to-v3/modules/addV3ClientRequires.ts | 50 +- .../modules/getRequireVariableDeclaration.ts | 18 - .../modules/getRequireVariableDeclarators.ts | 17 + .../modules/getV2RequireDeclarator.ts | 50 + .../modules/removeImportIdentifierName.ts | 4 +- .../modules/removeRequireIdentifierName.ts | 42 +- .../v2-to-v3/utils/hasPropertyWithName.ts | 43 - src/transforms/v2-to-v3/utils/index.ts | 1 - 21 files changed, 1221 insertions(+), 1493 deletions(-) create mode 100644 .changeset/famous-steaks-watch.md delete mode 100644 scripts/generateNewClientTests/getV3PackageRequireCode.ts create mode 100644 src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.input.js create mode 100644 src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.output.js create mode 100644 src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.input.js create mode 100644 src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.output.js create mode 100644 src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.input.js create mode 100644 src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.output.js delete mode 100644 src/transforms/v2-to-v3/modules/getRequireVariableDeclaration.ts create mode 100644 src/transforms/v2-to-v3/modules/getRequireVariableDeclarators.ts create mode 100644 src/transforms/v2-to-v3/modules/getV2RequireDeclarator.ts delete mode 100644 src/transforms/v2-to-v3/utils/hasPropertyWithName.ts diff --git a/.changeset/famous-steaks-watch.md b/.changeset/famous-steaks-watch.md new file mode 100644 index 00000000..abc77c9c --- /dev/null +++ b/.changeset/famous-steaks-watch.md @@ -0,0 +1,5 @@ +--- +"aws-sdk-js-codemod": patch +--- + +Support updating variable declaration with require CallExpression diff --git a/scripts/generateNewClientTests/getGlobalRequireOutput.ts b/scripts/generateNewClientTests/getGlobalRequireOutput.ts index 4a52d730..fdfbd909 100644 --- a/scripts/generateNewClientTests/getGlobalRequireOutput.ts +++ b/scripts/generateNewClientTests/getGlobalRequireOutput.ts @@ -1,13 +1,24 @@ +import { CLIENT_NAMES_MAP, CLIENT_PACKAGE_NAMES_MAP } from "../../src/transforms/v2-to-v3/config"; import { getClientNamesSortedByPackageName } from "./getClientNamesSortedByPackageName"; import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode"; -import { getV3PackageRequireCode } from "./getV3PackageRequireCode"; export const getGlobalRequireOutput = (codegenComment: string) => { - let globalRequireOutputContent = `${codegenComment}\n\n`; + let globalRequireOutputContent = `${codegenComment}\n`; - globalRequireOutputContent += getV3PackageRequireCode(getClientNamesSortedByPackageName(), { - extraNewLine: true, - }); + const sortedClientNames = getClientNamesSortedByPackageName(); + globalRequireOutputContent += `const `; + for (const v2ClientName of sortedClientNames) { + const v3ClientName = CLIENT_NAMES_MAP[v2ClientName]; + const v3ClientPackageName = `@aws-sdk/${CLIENT_PACKAGE_NAMES_MAP[v2ClientName]}`; + const v3RequireKeyValuePair = + v3ClientName === v2ClientName ? v3ClientName : `${v3ClientName}: ${v2ClientName}`; + globalRequireOutputContent += + `{\n` + + ` ${v3RequireKeyValuePair}\n` + + ` } = require("${v3ClientPackageName}"),\n` + + ` `; + } + globalRequireOutputContent = globalRequireOutputContent.replace(/,\n {6}$/, ";\n\n"); globalRequireOutputContent += getV3ClientsNewExpressionCode(); return globalRequireOutputContent; diff --git a/scripts/generateNewClientTests/getServiceRequireOutput.ts b/scripts/generateNewClientTests/getServiceRequireOutput.ts index 5dbd2052..7a2fd83e 100644 --- a/scripts/generateNewClientTests/getServiceRequireOutput.ts +++ b/scripts/generateNewClientTests/getServiceRequireOutput.ts @@ -1,11 +1,20 @@ -import { CLIENT_NAMES } from "../../src/transforms/v2-to-v3/config"; +import { + CLIENT_NAMES, + CLIENT_NAMES_MAP, + CLIENT_PACKAGE_NAMES_MAP, +} from "../../src/transforms/v2-to-v3/config"; import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode"; -import { getV3PackageRequireCode } from "./getV3PackageRequireCode"; export const getServiceRequireOutput = (codegenComment: string) => { let serviceRequireOutputContent = `${codegenComment}\n`; - serviceRequireOutputContent += getV3PackageRequireCode(CLIENT_NAMES); + for (const v2ClientName of CLIENT_NAMES) { + const v3ClientName = CLIENT_NAMES_MAP[v2ClientName]; + const v3ClientPackageName = `@aws-sdk/${CLIENT_PACKAGE_NAMES_MAP[v2ClientName]}`; + const v3RequireKeyValuePair = + v3ClientName === v2ClientName ? v3ClientName : `${v3ClientName}: ${v2ClientName}`; + serviceRequireOutputContent += `const {\n ${v3RequireKeyValuePair}\n} = require("${v3ClientPackageName}");\n`; + } serviceRequireOutputContent += `\n`; serviceRequireOutputContent += getV3ClientsNewExpressionCode(); diff --git a/scripts/generateNewClientTests/getV3PackageRequireCode.ts b/scripts/generateNewClientTests/getV3PackageRequireCode.ts deleted file mode 100644 index ef52d3e9..00000000 --- a/scripts/generateNewClientTests/getV3PackageRequireCode.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { - CLIENT_NAMES, - CLIENT_NAMES_MAP, - CLIENT_PACKAGE_NAMES_MAP, -} from "../../src/transforms/v2-to-v3/config"; - -export const getV3PackageRequireCode = ( - sortedV2ClientNames: typeof CLIENT_NAMES, - { extraNewLine = false }: { extraNewLine?: boolean } = {} -) => { - let v3PackageRequireCode = ``; - for (const v2ClientName of sortedV2ClientNames) { - const v3ClientName = CLIENT_NAMES_MAP[v2ClientName]; - const v3ClientPackageName = `@aws-sdk/${CLIENT_PACKAGE_NAMES_MAP[v2ClientName]}`; - const v3RequireKeyValuePair = - v3ClientName === v2ClientName ? v3ClientName : `${v3ClientName}: ${v2ClientName}`; - v3PackageRequireCode += `const {\n ${v3RequireKeyValuePair}\n} = require("${v3ClientPackageName}");\n`; - if (extraNewLine) v3PackageRequireCode += `\n`; - } - return v3PackageRequireCode; -}; diff --git a/src/transforms/v2-to-v3/__fixtures__/api-input-output-type/global-require.output.ts b/src/transforms/v2-to-v3/__fixtures__/api-input-output-type/global-require.output.ts index a620b8d5..490cad6f 100644 --- a/src/transforms/v2-to-v3/__fixtures__/api-input-output-type/global-require.output.ts +++ b/src/transforms/v2-to-v3/__fixtures__/api-input-output-type/global-require.output.ts @@ -1,14 +1,13 @@ const { - DynamoDB, - ListTablesCommandInput, - ListTablesCommandOutput -} = require("@aws-sdk/client-dynamodb"); - -const { - STS, - GetCallerIdentityCommandInput, - GetCallerIdentityCommandOutput -} = require("@aws-sdk/client-sts"); + DynamoDB, + ListTablesCommandInput, + ListTablesCommandOutput + } = require("@aws-sdk/client-dynamodb"), + { + STS, + GetCallerIdentityCommandInput, + GetCallerIdentityCommandOutput + } = require("@aws-sdk/client-sts"); const ddbClient = new DynamoDB({ region: "us-west-2" }); const listTablesInput: ListTablesCommandInput = { Limit: 10 }; diff --git a/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.input.js b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.input.js new file mode 100644 index 00000000..bddb77f9 --- /dev/null +++ b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.input.js @@ -0,0 +1,6 @@ +const AWS = require("aws-sdk"), + ddbClient = new AWS.DynamoDB(), + discoveryClient = new AWS.Discovery(); + +const ddbResponse = await ddbClient.listTables().promise(); +const discoveryResponse = await discoveryClient.describeAgents().promise(); \ No newline at end of file diff --git a/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.output.js b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.output.js new file mode 100644 index 00000000..e5ebf42e --- /dev/null +++ b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/global.output.js @@ -0,0 +1,11 @@ +const { + ApplicationDiscoveryService: Discovery + } = require("@aws-sdk/client-application-discovery-service"), + { + DynamoDB + } = require("@aws-sdk/client-dynamodb"), + ddbClient = new DynamoDB(), + discoveryClient = new Discovery(); + +const ddbResponse = await ddbClient.listTables(); +const discoveryResponse = await discoveryClient.describeAgents(); \ No newline at end of file diff --git a/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.input.js b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.input.js new file mode 100644 index 00000000..35a5d876 --- /dev/null +++ b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.input.js @@ -0,0 +1,6 @@ +const { DynamoDB, Discovery } = require("aws-sdk"), + ddbClient = new DynamoDB(), + discoveryClient = new Discovery(); + +const ddbResponse = await ddbClient.listTables().promise(); +const discoveryResponse = await discoveryClient.describeAgents().promise(); \ No newline at end of file diff --git a/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.output.js b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.output.js new file mode 100644 index 00000000..e5ebf42e --- /dev/null +++ b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service-named.output.js @@ -0,0 +1,11 @@ +const { + ApplicationDiscoveryService: Discovery + } = require("@aws-sdk/client-application-discovery-service"), + { + DynamoDB + } = require("@aws-sdk/client-dynamodb"), + ddbClient = new DynamoDB(), + discoveryClient = new Discovery(); + +const ddbResponse = await ddbClient.listTables(); +const discoveryResponse = await discoveryClient.describeAgents(); \ No newline at end of file diff --git a/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.input.js b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.input.js new file mode 100644 index 00000000..bfd4e0c4 --- /dev/null +++ b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.input.js @@ -0,0 +1,7 @@ +const DynamoDB = require("aws-sdk/clients/dynamodb"), + Discovery = require("aws-sdk/clients/discovery"), + ddbClient = new DynamoDB(), + discoveryClient = new Discovery(); + +const ddbResponse = await ddbClient.listTables().promise(); +const discoveryResponse = await discoveryClient.describeAgents().promise(); \ No newline at end of file diff --git a/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.output.js b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.output.js new file mode 100644 index 00000000..1e187859 --- /dev/null +++ b/src/transforms/v2-to-v3/__fixtures__/multiple-declarators/service.output.js @@ -0,0 +1,11 @@ +const { + DynamoDB +} = require("@aws-sdk/client-dynamodb"), + { + ApplicationDiscoveryService: Discovery + } = require("@aws-sdk/client-application-discovery-service"), + ddbClient = new DynamoDB(), + discoveryClient = new Discovery(); + +const ddbResponse = await ddbClient.listTables(); +const discoveryResponse = await discoveryClient.describeAgents(); \ No newline at end of file diff --git a/src/transforms/v2-to-v3/__fixtures__/new-client/global-require.output.js b/src/transforms/v2-to-v3/__fixtures__/new-client/global-require.output.js index aeb3ff03..c644eaf6 100644 --- a/src/transforms/v2-to-v3/__fixtures__/new-client/global-require.output.js +++ b/src/transforms/v2-to-v3/__fixtures__/new-client/global-require.output.js @@ -1,1342 +1,1008 @@ // This file is generated by scripts/generateNewClientTests/index.ts // Do not edit this file directly. Instead, edit the script and run it to regenerate this file. "use strict"; - -const { - AccessAnalyzer -} = require("@aws-sdk/client-accessanalyzer"); - -const { - Account -} = require("@aws-sdk/client-account"); - -const { - ACM -} = require("@aws-sdk/client-acm"); - -const { - ACMPCA -} = require("@aws-sdk/client-acm-pca"); - -const { - AlexaForBusiness -} = require("@aws-sdk/client-alexa-for-business"); - -const { - Amp -} = require("@aws-sdk/client-amp"); - -const { - Amplify -} = require("@aws-sdk/client-amplify"); - -const { - AmplifyBackend -} = require("@aws-sdk/client-amplifybackend"); - -const { - AmplifyUIBuilder -} = require("@aws-sdk/client-amplifyuibuilder"); - -const { - APIGateway -} = require("@aws-sdk/client-api-gateway"); - -const { - ApiGatewayManagementApi -} = require("@aws-sdk/client-apigatewaymanagementapi"); - -const { - ApiGatewayV2 -} = require("@aws-sdk/client-apigatewayv2"); - -const { - AppMesh -} = require("@aws-sdk/client-app-mesh"); - -const { - AppConfig -} = require("@aws-sdk/client-appconfig"); - -const { - AppConfigData -} = require("@aws-sdk/client-appconfigdata"); - -const { - Appflow -} = require("@aws-sdk/client-appflow"); - -const { - AppIntegrations -} = require("@aws-sdk/client-appintegrations"); - -const { - ApplicationAutoScaling -} = require("@aws-sdk/client-application-auto-scaling"); - -const { - ApplicationDiscoveryService: Discovery -} = require("@aws-sdk/client-application-discovery-service"); - -const { - ApplicationInsights -} = require("@aws-sdk/client-application-insights"); - -const { - ApplicationCostProfiler -} = require("@aws-sdk/client-applicationcostprofiler"); - -const { - AppRunner -} = require("@aws-sdk/client-apprunner"); - -const { - AppStream -} = require("@aws-sdk/client-appstream"); - -const { - AppSync -} = require("@aws-sdk/client-appsync"); - -const { - ARCZonalShift -} = require("@aws-sdk/client-arc-zonal-shift"); - -const { - Athena -} = require("@aws-sdk/client-athena"); - -const { - AuditManager -} = require("@aws-sdk/client-auditmanager"); - -const { - AutoScaling -} = require("@aws-sdk/client-auto-scaling"); - -const { - AutoScalingPlans -} = require("@aws-sdk/client-auto-scaling-plans"); - -const { - Backup -} = require("@aws-sdk/client-backup"); - -const { - BackupGateway -} = require("@aws-sdk/client-backup-gateway"); - -const { - BackupStorage -} = require("@aws-sdk/client-backupstorage"); - -const { - Batch -} = require("@aws-sdk/client-batch"); - -const { - Billingconductor -} = require("@aws-sdk/client-billingconductor"); - -const { - Braket -} = require("@aws-sdk/client-braket"); - -const { - Budgets -} = require("@aws-sdk/client-budgets"); - -const { - Chime -} = require("@aws-sdk/client-chime"); - -const { - ChimeSDKIdentity -} = require("@aws-sdk/client-chime-sdk-identity"); - -const { - ChimeSDKMediaPipelines -} = require("@aws-sdk/client-chime-sdk-media-pipelines"); - -const { - ChimeSDKMeetings -} = require("@aws-sdk/client-chime-sdk-meetings"); - -const { - ChimeSDKMessaging -} = require("@aws-sdk/client-chime-sdk-messaging"); - -const { - ChimeSDKVoice -} = require("@aws-sdk/client-chime-sdk-voice"); - -const { - Cloud9 -} = require("@aws-sdk/client-cloud9"); - -const { - CloudControl -} = require("@aws-sdk/client-cloudcontrol"); - -const { - CloudDirectory -} = require("@aws-sdk/client-clouddirectory"); - -const { - CloudFormation -} = require("@aws-sdk/client-cloudformation"); - -const { - CloudFront -} = require("@aws-sdk/client-cloudfront"); - -const { - CloudHSM -} = require("@aws-sdk/client-cloudhsm"); - -const { - CloudHSMV2 -} = require("@aws-sdk/client-cloudhsm-v2"); - -const { - CloudSearch -} = require("@aws-sdk/client-cloudsearch"); - -const { - CloudSearchDomain -} = require("@aws-sdk/client-cloudsearch-domain"); - -const { - CloudTrail -} = require("@aws-sdk/client-cloudtrail"); - -const { - CloudWatch -} = require("@aws-sdk/client-cloudwatch"); - -const { - CloudWatchEvents -} = require("@aws-sdk/client-cloudwatch-events"); - -const { - CloudWatchLogs -} = require("@aws-sdk/client-cloudwatch-logs"); - -const { - Codeartifact: CodeArtifact -} = require("@aws-sdk/client-codeartifact"); - -const { - CodeBuild -} = require("@aws-sdk/client-codebuild"); - -const { - CodeCatalyst -} = require("@aws-sdk/client-codecatalyst"); - -const { - CodeCommit -} = require("@aws-sdk/client-codecommit"); - -const { - CodeDeploy -} = require("@aws-sdk/client-codedeploy"); - -const { - CodeGuruReviewer -} = require("@aws-sdk/client-codeguru-reviewer"); - -const { - CodeGuruProfiler -} = require("@aws-sdk/client-codeguruprofiler"); - -const { - CodePipeline -} = require("@aws-sdk/client-codepipeline"); - -const { - CodeStar -} = require("@aws-sdk/client-codestar"); - -const { - CodeStarConnections: CodeStarconnections -} = require("@aws-sdk/client-codestar-connections"); - -const { - CodestarNotifications: CodeStarNotifications -} = require("@aws-sdk/client-codestar-notifications"); - -const { - CognitoIdentity -} = require("@aws-sdk/client-cognito-identity"); - -const { - CognitoIdentityProvider: CognitoIdentityServiceProvider -} = require("@aws-sdk/client-cognito-identity-provider"); - -const { - CognitoSync -} = require("@aws-sdk/client-cognito-sync"); - -const { - Comprehend -} = require("@aws-sdk/client-comprehend"); - -const { - ComprehendMedical -} = require("@aws-sdk/client-comprehendmedical"); - -const { - ComputeOptimizer -} = require("@aws-sdk/client-compute-optimizer"); - -const { - ConfigService -} = require("@aws-sdk/client-config-service"); - -const { - Connect -} = require("@aws-sdk/client-connect"); - -const { - ConnectContactLens -} = require("@aws-sdk/client-connect-contact-lens"); - -const { - ConnectCampaigns -} = require("@aws-sdk/client-connectcampaigns"); - -const { - ConnectCases -} = require("@aws-sdk/client-connectcases"); - -const { - ConnectParticipant -} = require("@aws-sdk/client-connectparticipant"); - -const { - ControlTower -} = require("@aws-sdk/client-controltower"); - -const { - CostAndUsageReportService: CUR -} = require("@aws-sdk/client-cost-and-usage-report-service"); - -const { - CostExplorer -} = require("@aws-sdk/client-cost-explorer"); - -const { - CustomerProfiles -} = require("@aws-sdk/client-customer-profiles"); - -const { - DataPipeline -} = require("@aws-sdk/client-data-pipeline"); - -const { - DatabaseMigrationService: DMS -} = require("@aws-sdk/client-database-migration-service"); - -const { - DataBrew -} = require("@aws-sdk/client-databrew"); - -const { - DataExchange -} = require("@aws-sdk/client-dataexchange"); - -const { - DataSync -} = require("@aws-sdk/client-datasync"); - -const { - DAX -} = require("@aws-sdk/client-dax"); - -const { - Detective -} = require("@aws-sdk/client-detective"); - -const { - DeviceFarm -} = require("@aws-sdk/client-device-farm"); - -const { - DevOpsGuru -} = require("@aws-sdk/client-devops-guru"); - -const { - DirectConnect -} = require("@aws-sdk/client-direct-connect"); - -const { - DirectoryService -} = require("@aws-sdk/client-directory-service"); - -const { - DLM -} = require("@aws-sdk/client-dlm"); - -const { - DocDB -} = require("@aws-sdk/client-docdb"); - -const { - DocDBElastic -} = require("@aws-sdk/client-docdb-elastic"); - -const { - Drs -} = require("@aws-sdk/client-drs"); - -const { - DynamoDB -} = require("@aws-sdk/client-dynamodb"); - -const { - DynamoDBStreams -} = require("@aws-sdk/client-dynamodb-streams"); - -const { - EBS -} = require("@aws-sdk/client-ebs"); - -const { - EC2 -} = require("@aws-sdk/client-ec2"); - -const { - EC2InstanceConnect -} = require("@aws-sdk/client-ec2-instance-connect"); - -const { - ECR -} = require("@aws-sdk/client-ecr"); - -const { - ECRPUBLIC -} = require("@aws-sdk/client-ecr-public"); - -const { - ECS -} = require("@aws-sdk/client-ecs"); - -const { - EFS -} = require("@aws-sdk/client-efs"); - -const { - EKS -} = require("@aws-sdk/client-eks"); - -const { - ElasticBeanstalk -} = require("@aws-sdk/client-elastic-beanstalk"); - -const { - ElasticInference -} = require("@aws-sdk/client-elastic-inference"); - -const { - ElasticLoadBalancing: ELB -} = require("@aws-sdk/client-elastic-load-balancing"); - -const { - ElasticLoadBalancingV2: ELBv2 -} = require("@aws-sdk/client-elastic-load-balancing-v2"); - -const { - ElasticTranscoder -} = require("@aws-sdk/client-elastic-transcoder"); - -const { - ElastiCache -} = require("@aws-sdk/client-elasticache"); - -const { - ElasticsearchService: ES -} = require("@aws-sdk/client-elasticsearch-service"); - -const { - EMR -} = require("@aws-sdk/client-emr"); - -const { - EMRContainers: EMRcontainers -} = require("@aws-sdk/client-emr-containers"); - -const { - EMRServerless -} = require("@aws-sdk/client-emr-serverless"); - -const { - EventBridge -} = require("@aws-sdk/client-eventbridge"); - -const { - Evidently -} = require("@aws-sdk/client-evidently"); - -const { - Finspace -} = require("@aws-sdk/client-finspace"); - -const { - FinspaceData: Finspacedata -} = require("@aws-sdk/client-finspace-data"); - -const { - Firehose -} = require("@aws-sdk/client-firehose"); - -const { - Fis -} = require("@aws-sdk/client-fis"); - -const { - FMS -} = require("@aws-sdk/client-fms"); - -const { - Forecast: ForecastService -} = require("@aws-sdk/client-forecast"); - -const { - Forecastquery: ForecastQueryService -} = require("@aws-sdk/client-forecastquery"); - -const { - FraudDetector -} = require("@aws-sdk/client-frauddetector"); - -const { - FSx -} = require("@aws-sdk/client-fsx"); - -const { - GameLift -} = require("@aws-sdk/client-gamelift"); - -const { - GameSparks -} = require("@aws-sdk/client-gamesparks"); - -const { - Glacier -} = require("@aws-sdk/client-glacier"); - -const { - GlobalAccelerator -} = require("@aws-sdk/client-global-accelerator"); - -const { - Glue -} = require("@aws-sdk/client-glue"); - -const { - Grafana -} = require("@aws-sdk/client-grafana"); - -const { - Greengrass -} = require("@aws-sdk/client-greengrass"); - -const { - GreengrassV2 -} = require("@aws-sdk/client-greengrassv2"); - -const { - GroundStation -} = require("@aws-sdk/client-groundstation"); - -const { - GuardDuty -} = require("@aws-sdk/client-guardduty"); - -const { - Health -} = require("@aws-sdk/client-health"); - -const { - HealthLake -} = require("@aws-sdk/client-healthlake"); - -const { - Honeycode -} = require("@aws-sdk/client-honeycode"); - -const { - IAM -} = require("@aws-sdk/client-iam"); - -const { - Identitystore: IdentityStore -} = require("@aws-sdk/client-identitystore"); - -const { - Imagebuilder -} = require("@aws-sdk/client-imagebuilder"); - -const { - Inspector -} = require("@aws-sdk/client-inspector"); - -const { - Inspector2 -} = require("@aws-sdk/client-inspector2"); - -const { - IoT: Iot -} = require("@aws-sdk/client-iot"); - -const { - IoT1ClickDevicesService -} = require("@aws-sdk/client-iot-1click-devices-service"); - -const { - IoT1ClickProjects -} = require("@aws-sdk/client-iot-1click-projects"); - -const { - IoTDataPlane: IotData -} = require("@aws-sdk/client-iot-data-plane"); - -const { - IoTEvents -} = require("@aws-sdk/client-iot-events"); - -const { - IoTEventsData -} = require("@aws-sdk/client-iot-events-data"); - -const { - IoTJobsDataPlane -} = require("@aws-sdk/client-iot-jobs-data-plane"); - -const { - IoTRoboRunner -} = require("@aws-sdk/client-iot-roborunner"); - -const { - IoTWireless -} = require("@aws-sdk/client-iot-wireless"); - -const { - IoTAnalytics -} = require("@aws-sdk/client-iotanalytics"); - -const { - IotDeviceAdvisor -} = require("@aws-sdk/client-iotdeviceadvisor"); - -const { - IoTFleetHub -} = require("@aws-sdk/client-iotfleethub"); - -const { - IoTFleetWise -} = require("@aws-sdk/client-iotfleetwise"); - -const { - IoTSecureTunneling -} = require("@aws-sdk/client-iotsecuretunneling"); - -const { - IoTSiteWise -} = require("@aws-sdk/client-iotsitewise"); - -const { - IoTThingsGraph -} = require("@aws-sdk/client-iotthingsgraph"); - -const { - IoTTwinMaker -} = require("@aws-sdk/client-iottwinmaker"); - -const { - Ivs: IVS -} = require("@aws-sdk/client-ivs"); - -const { - Ivschat -} = require("@aws-sdk/client-ivschat"); - -const { - Kafka -} = require("@aws-sdk/client-kafka"); - -const { - KafkaConnect -} = require("@aws-sdk/client-kafkaconnect"); - -const { - Kendra -} = require("@aws-sdk/client-kendra"); - -const { - Keyspaces -} = require("@aws-sdk/client-keyspaces"); - -const { - Kinesis -} = require("@aws-sdk/client-kinesis"); - -const { - KinesisAnalytics -} = require("@aws-sdk/client-kinesis-analytics"); - -const { - KinesisAnalyticsV2 -} = require("@aws-sdk/client-kinesis-analytics-v2"); - -const { - KinesisVideo -} = require("@aws-sdk/client-kinesis-video"); - -const { - KinesisVideoArchivedMedia -} = require("@aws-sdk/client-kinesis-video-archived-media"); - -const { - KinesisVideoMedia -} = require("@aws-sdk/client-kinesis-video-media"); - -const { - KinesisVideoSignaling: KinesisVideoSignalingChannels -} = require("@aws-sdk/client-kinesis-video-signaling"); - -const { - KinesisVideoWebRTCStorage -} = require("@aws-sdk/client-kinesis-video-webrtc-storage"); - -const { - KMS -} = require("@aws-sdk/client-kms"); - -const { - LakeFormation -} = require("@aws-sdk/client-lakeformation"); - -const { - Lambda -} = require("@aws-sdk/client-lambda"); - -const { - LexModelBuildingService -} = require("@aws-sdk/client-lex-model-building-service"); - -const { - LexModelsV2 -} = require("@aws-sdk/client-lex-models-v2"); - -const { - LexRuntimeService: LexRuntime -} = require("@aws-sdk/client-lex-runtime-service"); - -const { - LexRuntimeV2 -} = require("@aws-sdk/client-lex-runtime-v2"); - -const { - LicenseManager -} = require("@aws-sdk/client-license-manager"); - -const { - LicenseManagerLinuxSubscriptions -} = require("@aws-sdk/client-license-manager-linux-subscriptions"); - -const { - LicenseManagerUserSubscriptions -} = require("@aws-sdk/client-license-manager-user-subscriptions"); - -const { - Lightsail -} = require("@aws-sdk/client-lightsail"); - -const { - Location -} = require("@aws-sdk/client-location"); - -const { - LookoutEquipment -} = require("@aws-sdk/client-lookoutequipment"); - -const { - LookoutMetrics -} = require("@aws-sdk/client-lookoutmetrics"); - -const { - LookoutVision -} = require("@aws-sdk/client-lookoutvision"); - -const { - M2 -} = require("@aws-sdk/client-m2"); - -const { - MachineLearning -} = require("@aws-sdk/client-machine-learning"); - -const { - Macie -} = require("@aws-sdk/client-macie"); - -const { - Macie2 -} = require("@aws-sdk/client-macie2"); - -const { - ManagedBlockchain -} = require("@aws-sdk/client-managedblockchain"); - -const { - MarketplaceCatalog -} = require("@aws-sdk/client-marketplace-catalog"); - -const { - MarketplaceCommerceAnalytics -} = require("@aws-sdk/client-marketplace-commerce-analytics"); - -const { - MarketplaceEntitlementService -} = require("@aws-sdk/client-marketplace-entitlement-service"); - -const { - MarketplaceMetering -} = require("@aws-sdk/client-marketplace-metering"); - -const { - MediaConnect -} = require("@aws-sdk/client-mediaconnect"); - -const { - MediaConvert -} = require("@aws-sdk/client-mediaconvert"); - -const { - MediaLive -} = require("@aws-sdk/client-medialive"); - -const { - MediaPackage -} = require("@aws-sdk/client-mediapackage"); - -const { - MediaPackageVod -} = require("@aws-sdk/client-mediapackage-vod"); - -const { - MediaStore -} = require("@aws-sdk/client-mediastore"); - -const { - MediaStoreData -} = require("@aws-sdk/client-mediastore-data"); - -const { - MediaTailor -} = require("@aws-sdk/client-mediatailor"); - -const { - MemoryDB -} = require("@aws-sdk/client-memory-db"); - -const { - Mgn -} = require("@aws-sdk/client-mgn"); - -const { - MigrationHub -} = require("@aws-sdk/client-migration-hub"); - -const { - MigrationHubRefactorSpaces -} = require("@aws-sdk/client-migration-hub-refactor-spaces"); - -const { - MigrationHubConfig -} = require("@aws-sdk/client-migrationhub-config"); - -const { - MigrationHubOrchestrator -} = require("@aws-sdk/client-migrationhuborchestrator"); - -const { - MigrationHubStrategy -} = require("@aws-sdk/client-migrationhubstrategy"); - -const { - Mobile -} = require("@aws-sdk/client-mobile"); - -const { - Mq: MQ -} = require("@aws-sdk/client-mq"); - -const { - MTurk -} = require("@aws-sdk/client-mturk"); - -const { - MWAA -} = require("@aws-sdk/client-mwaa"); - -const { - Neptune -} = require("@aws-sdk/client-neptune"); - -const { - NetworkFirewall -} = require("@aws-sdk/client-network-firewall"); - -const { - NetworkManager -} = require("@aws-sdk/client-networkmanager"); - -const { - Nimble -} = require("@aws-sdk/client-nimble"); - -const { - OAM -} = require("@aws-sdk/client-oam"); - -const { - Omics -} = require("@aws-sdk/client-omics"); - -const { - OpenSearch -} = require("@aws-sdk/client-opensearch"); - -const { - OpenSearchServerless -} = require("@aws-sdk/client-opensearchserverless"); - -const { - OpsWorks -} = require("@aws-sdk/client-opsworks"); - -const { - OpsWorksCM -} = require("@aws-sdk/client-opsworkscm"); - -const { - Organizations -} = require("@aws-sdk/client-organizations"); - -const { - Outposts -} = require("@aws-sdk/client-outposts"); - -const { - Panorama -} = require("@aws-sdk/client-panorama"); - -const { - Personalize -} = require("@aws-sdk/client-personalize"); - -const { - PersonalizeEvents -} = require("@aws-sdk/client-personalize-events"); - -const { - PersonalizeRuntime -} = require("@aws-sdk/client-personalize-runtime"); - -const { - PI -} = require("@aws-sdk/client-pi"); - -const { - Pinpoint -} = require("@aws-sdk/client-pinpoint"); - -const { - PinpointEmail -} = require("@aws-sdk/client-pinpoint-email"); - -const { - PinpointSMSVoice -} = require("@aws-sdk/client-pinpoint-sms-voice"); - -const { - PinpointSMSVoiceV2 -} = require("@aws-sdk/client-pinpoint-sms-voice-v2"); - -const { - Pipes -} = require("@aws-sdk/client-pipes"); - -const { - Polly -} = require("@aws-sdk/client-polly"); - -const { - Pricing -} = require("@aws-sdk/client-pricing"); - -const { - PrivateNetworks -} = require("@aws-sdk/client-privatenetworks"); - -const { - Proton -} = require("@aws-sdk/client-proton"); - -const { - QLDB -} = require("@aws-sdk/client-qldb"); - -const { - QLDBSession -} = require("@aws-sdk/client-qldb-session"); - -const { - QuickSight -} = require("@aws-sdk/client-quicksight"); - -const { - RAM -} = require("@aws-sdk/client-ram"); - -const { - Rbin -} = require("@aws-sdk/client-rbin"); - -const { - RDS -} = require("@aws-sdk/client-rds"); - -const { - RDSData: RDSDataService -} = require("@aws-sdk/client-rds-data"); - -const { - Redshift -} = require("@aws-sdk/client-redshift"); - -const { - RedshiftData -} = require("@aws-sdk/client-redshift-data"); - -const { - RedshiftServerless -} = require("@aws-sdk/client-redshift-serverless"); - -const { - Rekognition -} = require("@aws-sdk/client-rekognition"); - -const { - Resiliencehub -} = require("@aws-sdk/client-resiliencehub"); - -const { - ResourceExplorer2 -} = require("@aws-sdk/client-resource-explorer-2"); - -const { - ResourceGroups -} = require("@aws-sdk/client-resource-groups"); - -const { - ResourceGroupsTaggingAPI -} = require("@aws-sdk/client-resource-groups-tagging-api"); - -const { - RoboMaker -} = require("@aws-sdk/client-robomaker"); - -const { - RolesAnywhere -} = require("@aws-sdk/client-rolesanywhere"); - -const { - Route53 -} = require("@aws-sdk/client-route-53"); - -const { - Route53Domains -} = require("@aws-sdk/client-route-53-domains"); - -const { - Route53RecoveryCluster -} = require("@aws-sdk/client-route53-recovery-cluster"); - -const { - Route53RecoveryControlConfig -} = require("@aws-sdk/client-route53-recovery-control-config"); - -const { - Route53RecoveryReadiness -} = require("@aws-sdk/client-route53-recovery-readiness"); - -const { - Route53Resolver -} = require("@aws-sdk/client-route53resolver"); - -const { - RUM -} = require("@aws-sdk/client-rum"); - -const { - S3 -} = require("@aws-sdk/client-s3"); - -const { - S3Control -} = require("@aws-sdk/client-s3-control"); - -const { - S3Outposts -} = require("@aws-sdk/client-s3outposts"); - -const { - SageMakerA2IRuntime: AugmentedAIRuntime -} = require("@aws-sdk/client-sage-maker-a2iruntime"); - -const { - SageMaker -} = require("@aws-sdk/client-sagemaker"); - -const { - SagemakerEdge -} = require("@aws-sdk/client-sagemaker-edge"); - -const { - SageMakerFeatureStoreRuntime -} = require("@aws-sdk/client-sagemaker-featurestore-runtime"); - -const { - SageMakerGeospatial -} = require("@aws-sdk/client-sagemaker-geospatial"); - -const { - SageMakerMetrics -} = require("@aws-sdk/client-sagemaker-metrics"); - -const { - SageMakerRuntime -} = require("@aws-sdk/client-sagemaker-runtime"); - -const { - Savingsplans: SavingsPlans -} = require("@aws-sdk/client-savingsplans"); - -const { - Scheduler -} = require("@aws-sdk/client-scheduler"); - -const { - Schemas -} = require("@aws-sdk/client-schemas"); - -const { - SecretsManager -} = require("@aws-sdk/client-secrets-manager"); - -const { - SecurityHub -} = require("@aws-sdk/client-securityhub"); - -const { - SecurityLake -} = require("@aws-sdk/client-securitylake"); - -const { - ServerlessApplicationRepository -} = require("@aws-sdk/client-serverlessapplicationrepository"); - -const { - ServiceCatalog -} = require("@aws-sdk/client-service-catalog"); - -const { - ServiceCatalogAppRegistry -} = require("@aws-sdk/client-service-catalog-appregistry"); - -const { - ServiceQuotas -} = require("@aws-sdk/client-service-quotas"); - -const { - ServiceDiscovery -} = require("@aws-sdk/client-servicediscovery"); - -const { - SES -} = require("@aws-sdk/client-ses"); - -const { - SESv2: SESV2 -} = require("@aws-sdk/client-sesv2"); - -const { - SFN: StepFunctions -} = require("@aws-sdk/client-sfn"); - -const { - Shield -} = require("@aws-sdk/client-shield"); - -const { - Signer -} = require("@aws-sdk/client-signer"); - -const { - SimSpaceWeaver -} = require("@aws-sdk/client-simspaceweaver"); - -const { - SMS -} = require("@aws-sdk/client-sms"); - -const { - SnowDeviceManagement -} = require("@aws-sdk/client-snow-device-management"); - -const { - Snowball -} = require("@aws-sdk/client-snowball"); - -const { - SNS -} = require("@aws-sdk/client-sns"); - -const { - SQS -} = require("@aws-sdk/client-sqs"); - -const { - SSM -} = require("@aws-sdk/client-ssm"); - -const { - SSMContacts -} = require("@aws-sdk/client-ssm-contacts"); - -const { - SSMIncidents -} = require("@aws-sdk/client-ssm-incidents"); - -const { - SsmSap -} = require("@aws-sdk/client-ssm-sap"); - -const { - SSO -} = require("@aws-sdk/client-sso"); - -const { - SSOAdmin -} = require("@aws-sdk/client-sso-admin"); - -const { - SSOOIDC -} = require("@aws-sdk/client-sso-oidc"); - -const { - StorageGateway -} = require("@aws-sdk/client-storage-gateway"); - -const { - STS -} = require("@aws-sdk/client-sts"); - -const { - Support -} = require("@aws-sdk/client-support"); - -const { - SupportApp -} = require("@aws-sdk/client-support-app"); - -const { - SWF -} = require("@aws-sdk/client-swf"); - -const { - Synthetics -} = require("@aws-sdk/client-synthetics"); - -const { - Textract -} = require("@aws-sdk/client-textract"); - -const { - TimestreamQuery -} = require("@aws-sdk/client-timestream-query"); - -const { - TimestreamWrite -} = require("@aws-sdk/client-timestream-write"); - -const { - Transcribe: TranscribeService -} = require("@aws-sdk/client-transcribe"); - -const { - Transfer -} = require("@aws-sdk/client-transfer"); - -const { - Translate -} = require("@aws-sdk/client-translate"); - -const { - VoiceID -} = require("@aws-sdk/client-voice-id"); - -const { - WAF -} = require("@aws-sdk/client-waf"); - -const { - WAFRegional -} = require("@aws-sdk/client-waf-regional"); - -const { - WAFV2 -} = require("@aws-sdk/client-wafv2"); - -const { - WellArchitected -} = require("@aws-sdk/client-wellarchitected"); - -const { - Wisdom -} = require("@aws-sdk/client-wisdom"); - -const { - WorkDocs -} = require("@aws-sdk/client-workdocs"); - -const { - WorkLink -} = require("@aws-sdk/client-worklink"); - -const { - WorkMail -} = require("@aws-sdk/client-workmail"); - -const { - WorkMailMessageFlow -} = require("@aws-sdk/client-workmailmessageflow"); - -const { - WorkSpaces -} = require("@aws-sdk/client-workspaces"); - -const { - WorkSpacesWeb -} = require("@aws-sdk/client-workspaces-web"); - const { - XRay -} = require("@aws-sdk/client-xray"); + AccessAnalyzer + } = require("@aws-sdk/client-accessanalyzer"), + { + Account + } = require("@aws-sdk/client-account"), + { + ACM + } = require("@aws-sdk/client-acm"), + { + ACMPCA + } = require("@aws-sdk/client-acm-pca"), + { + AlexaForBusiness + } = require("@aws-sdk/client-alexa-for-business"), + { + Amp + } = require("@aws-sdk/client-amp"), + { + Amplify + } = require("@aws-sdk/client-amplify"), + { + AmplifyBackend + } = require("@aws-sdk/client-amplifybackend"), + { + AmplifyUIBuilder + } = require("@aws-sdk/client-amplifyuibuilder"), + { + APIGateway + } = require("@aws-sdk/client-api-gateway"), + { + ApiGatewayManagementApi + } = require("@aws-sdk/client-apigatewaymanagementapi"), + { + ApiGatewayV2 + } = require("@aws-sdk/client-apigatewayv2"), + { + AppMesh + } = require("@aws-sdk/client-app-mesh"), + { + AppConfig + } = require("@aws-sdk/client-appconfig"), + { + AppConfigData + } = require("@aws-sdk/client-appconfigdata"), + { + Appflow + } = require("@aws-sdk/client-appflow"), + { + AppIntegrations + } = require("@aws-sdk/client-appintegrations"), + { + ApplicationAutoScaling + } = require("@aws-sdk/client-application-auto-scaling"), + { + ApplicationDiscoveryService: Discovery + } = require("@aws-sdk/client-application-discovery-service"), + { + ApplicationInsights + } = require("@aws-sdk/client-application-insights"), + { + ApplicationCostProfiler + } = require("@aws-sdk/client-applicationcostprofiler"), + { + AppRunner + } = require("@aws-sdk/client-apprunner"), + { + AppStream + } = require("@aws-sdk/client-appstream"), + { + AppSync + } = require("@aws-sdk/client-appsync"), + { + ARCZonalShift + } = require("@aws-sdk/client-arc-zonal-shift"), + { + Athena + } = require("@aws-sdk/client-athena"), + { + AuditManager + } = require("@aws-sdk/client-auditmanager"), + { + AutoScaling + } = require("@aws-sdk/client-auto-scaling"), + { + AutoScalingPlans + } = require("@aws-sdk/client-auto-scaling-plans"), + { + Backup + } = require("@aws-sdk/client-backup"), + { + BackupGateway + } = require("@aws-sdk/client-backup-gateway"), + { + BackupStorage + } = require("@aws-sdk/client-backupstorage"), + { + Batch + } = require("@aws-sdk/client-batch"), + { + Billingconductor + } = require("@aws-sdk/client-billingconductor"), + { + Braket + } = require("@aws-sdk/client-braket"), + { + Budgets + } = require("@aws-sdk/client-budgets"), + { + Chime + } = require("@aws-sdk/client-chime"), + { + ChimeSDKIdentity + } = require("@aws-sdk/client-chime-sdk-identity"), + { + ChimeSDKMediaPipelines + } = require("@aws-sdk/client-chime-sdk-media-pipelines"), + { + ChimeSDKMeetings + } = require("@aws-sdk/client-chime-sdk-meetings"), + { + ChimeSDKMessaging + } = require("@aws-sdk/client-chime-sdk-messaging"), + { + ChimeSDKVoice + } = require("@aws-sdk/client-chime-sdk-voice"), + { + Cloud9 + } = require("@aws-sdk/client-cloud9"), + { + CloudControl + } = require("@aws-sdk/client-cloudcontrol"), + { + CloudDirectory + } = require("@aws-sdk/client-clouddirectory"), + { + CloudFormation + } = require("@aws-sdk/client-cloudformation"), + { + CloudFront + } = require("@aws-sdk/client-cloudfront"), + { + CloudHSM + } = require("@aws-sdk/client-cloudhsm"), + { + CloudHSMV2 + } = require("@aws-sdk/client-cloudhsm-v2"), + { + CloudSearch + } = require("@aws-sdk/client-cloudsearch"), + { + CloudSearchDomain + } = require("@aws-sdk/client-cloudsearch-domain"), + { + CloudTrail + } = require("@aws-sdk/client-cloudtrail"), + { + CloudWatch + } = require("@aws-sdk/client-cloudwatch"), + { + CloudWatchEvents + } = require("@aws-sdk/client-cloudwatch-events"), + { + CloudWatchLogs + } = require("@aws-sdk/client-cloudwatch-logs"), + { + Codeartifact: CodeArtifact + } = require("@aws-sdk/client-codeartifact"), + { + CodeBuild + } = require("@aws-sdk/client-codebuild"), + { + CodeCatalyst + } = require("@aws-sdk/client-codecatalyst"), + { + CodeCommit + } = require("@aws-sdk/client-codecommit"), + { + CodeDeploy + } = require("@aws-sdk/client-codedeploy"), + { + CodeGuruReviewer + } = require("@aws-sdk/client-codeguru-reviewer"), + { + CodeGuruProfiler + } = require("@aws-sdk/client-codeguruprofiler"), + { + CodePipeline + } = require("@aws-sdk/client-codepipeline"), + { + CodeStar + } = require("@aws-sdk/client-codestar"), + { + CodeStarConnections: CodeStarconnections + } = require("@aws-sdk/client-codestar-connections"), + { + CodestarNotifications: CodeStarNotifications + } = require("@aws-sdk/client-codestar-notifications"), + { + CognitoIdentity + } = require("@aws-sdk/client-cognito-identity"), + { + CognitoIdentityProvider: CognitoIdentityServiceProvider + } = require("@aws-sdk/client-cognito-identity-provider"), + { + CognitoSync + } = require("@aws-sdk/client-cognito-sync"), + { + Comprehend + } = require("@aws-sdk/client-comprehend"), + { + ComprehendMedical + } = require("@aws-sdk/client-comprehendmedical"), + { + ComputeOptimizer + } = require("@aws-sdk/client-compute-optimizer"), + { + ConfigService + } = require("@aws-sdk/client-config-service"), + { + Connect + } = require("@aws-sdk/client-connect"), + { + ConnectContactLens + } = require("@aws-sdk/client-connect-contact-lens"), + { + ConnectCampaigns + } = require("@aws-sdk/client-connectcampaigns"), + { + ConnectCases + } = require("@aws-sdk/client-connectcases"), + { + ConnectParticipant + } = require("@aws-sdk/client-connectparticipant"), + { + ControlTower + } = require("@aws-sdk/client-controltower"), + { + CostAndUsageReportService: CUR + } = require("@aws-sdk/client-cost-and-usage-report-service"), + { + CostExplorer + } = require("@aws-sdk/client-cost-explorer"), + { + CustomerProfiles + } = require("@aws-sdk/client-customer-profiles"), + { + DataPipeline + } = require("@aws-sdk/client-data-pipeline"), + { + DatabaseMigrationService: DMS + } = require("@aws-sdk/client-database-migration-service"), + { + DataBrew + } = require("@aws-sdk/client-databrew"), + { + DataExchange + } = require("@aws-sdk/client-dataexchange"), + { + DataSync + } = require("@aws-sdk/client-datasync"), + { + DAX + } = require("@aws-sdk/client-dax"), + { + Detective + } = require("@aws-sdk/client-detective"), + { + DeviceFarm + } = require("@aws-sdk/client-device-farm"), + { + DevOpsGuru + } = require("@aws-sdk/client-devops-guru"), + { + DirectConnect + } = require("@aws-sdk/client-direct-connect"), + { + DirectoryService + } = require("@aws-sdk/client-directory-service"), + { + DLM + } = require("@aws-sdk/client-dlm"), + { + DocDB + } = require("@aws-sdk/client-docdb"), + { + DocDBElastic + } = require("@aws-sdk/client-docdb-elastic"), + { + Drs + } = require("@aws-sdk/client-drs"), + { + DynamoDB + } = require("@aws-sdk/client-dynamodb"), + { + DynamoDBStreams + } = require("@aws-sdk/client-dynamodb-streams"), + { + EBS + } = require("@aws-sdk/client-ebs"), + { + EC2 + } = require("@aws-sdk/client-ec2"), + { + EC2InstanceConnect + } = require("@aws-sdk/client-ec2-instance-connect"), + { + ECR + } = require("@aws-sdk/client-ecr"), + { + ECRPUBLIC + } = require("@aws-sdk/client-ecr-public"), + { + ECS + } = require("@aws-sdk/client-ecs"), + { + EFS + } = require("@aws-sdk/client-efs"), + { + EKS + } = require("@aws-sdk/client-eks"), + { + ElasticBeanstalk + } = require("@aws-sdk/client-elastic-beanstalk"), + { + ElasticInference + } = require("@aws-sdk/client-elastic-inference"), + { + ElasticLoadBalancing: ELB + } = require("@aws-sdk/client-elastic-load-balancing"), + { + ElasticLoadBalancingV2: ELBv2 + } = require("@aws-sdk/client-elastic-load-balancing-v2"), + { + ElasticTranscoder + } = require("@aws-sdk/client-elastic-transcoder"), + { + ElastiCache + } = require("@aws-sdk/client-elasticache"), + { + ElasticsearchService: ES + } = require("@aws-sdk/client-elasticsearch-service"), + { + EMR + } = require("@aws-sdk/client-emr"), + { + EMRContainers: EMRcontainers + } = require("@aws-sdk/client-emr-containers"), + { + EMRServerless + } = require("@aws-sdk/client-emr-serverless"), + { + EventBridge + } = require("@aws-sdk/client-eventbridge"), + { + Evidently + } = require("@aws-sdk/client-evidently"), + { + Finspace + } = require("@aws-sdk/client-finspace"), + { + FinspaceData: Finspacedata + } = require("@aws-sdk/client-finspace-data"), + { + Firehose + } = require("@aws-sdk/client-firehose"), + { + Fis + } = require("@aws-sdk/client-fis"), + { + FMS + } = require("@aws-sdk/client-fms"), + { + Forecast: ForecastService + } = require("@aws-sdk/client-forecast"), + { + Forecastquery: ForecastQueryService + } = require("@aws-sdk/client-forecastquery"), + { + FraudDetector + } = require("@aws-sdk/client-frauddetector"), + { + FSx + } = require("@aws-sdk/client-fsx"), + { + GameLift + } = require("@aws-sdk/client-gamelift"), + { + GameSparks + } = require("@aws-sdk/client-gamesparks"), + { + Glacier + } = require("@aws-sdk/client-glacier"), + { + GlobalAccelerator + } = require("@aws-sdk/client-global-accelerator"), + { + Glue + } = require("@aws-sdk/client-glue"), + { + Grafana + } = require("@aws-sdk/client-grafana"), + { + Greengrass + } = require("@aws-sdk/client-greengrass"), + { + GreengrassV2 + } = require("@aws-sdk/client-greengrassv2"), + { + GroundStation + } = require("@aws-sdk/client-groundstation"), + { + GuardDuty + } = require("@aws-sdk/client-guardduty"), + { + Health + } = require("@aws-sdk/client-health"), + { + HealthLake + } = require("@aws-sdk/client-healthlake"), + { + Honeycode + } = require("@aws-sdk/client-honeycode"), + { + IAM + } = require("@aws-sdk/client-iam"), + { + Identitystore: IdentityStore + } = require("@aws-sdk/client-identitystore"), + { + Imagebuilder + } = require("@aws-sdk/client-imagebuilder"), + { + Inspector + } = require("@aws-sdk/client-inspector"), + { + Inspector2 + } = require("@aws-sdk/client-inspector2"), + { + IoT: Iot + } = require("@aws-sdk/client-iot"), + { + IoT1ClickDevicesService + } = require("@aws-sdk/client-iot-1click-devices-service"), + { + IoT1ClickProjects + } = require("@aws-sdk/client-iot-1click-projects"), + { + IoTDataPlane: IotData + } = require("@aws-sdk/client-iot-data-plane"), + { + IoTEvents + } = require("@aws-sdk/client-iot-events"), + { + IoTEventsData + } = require("@aws-sdk/client-iot-events-data"), + { + IoTJobsDataPlane + } = require("@aws-sdk/client-iot-jobs-data-plane"), + { + IoTRoboRunner + } = require("@aws-sdk/client-iot-roborunner"), + { + IoTWireless + } = require("@aws-sdk/client-iot-wireless"), + { + IoTAnalytics + } = require("@aws-sdk/client-iotanalytics"), + { + IotDeviceAdvisor + } = require("@aws-sdk/client-iotdeviceadvisor"), + { + IoTFleetHub + } = require("@aws-sdk/client-iotfleethub"), + { + IoTFleetWise + } = require("@aws-sdk/client-iotfleetwise"), + { + IoTSecureTunneling + } = require("@aws-sdk/client-iotsecuretunneling"), + { + IoTSiteWise + } = require("@aws-sdk/client-iotsitewise"), + { + IoTThingsGraph + } = require("@aws-sdk/client-iotthingsgraph"), + { + IoTTwinMaker + } = require("@aws-sdk/client-iottwinmaker"), + { + Ivs: IVS + } = require("@aws-sdk/client-ivs"), + { + Ivschat + } = require("@aws-sdk/client-ivschat"), + { + Kafka + } = require("@aws-sdk/client-kafka"), + { + KafkaConnect + } = require("@aws-sdk/client-kafkaconnect"), + { + Kendra + } = require("@aws-sdk/client-kendra"), + { + Keyspaces + } = require("@aws-sdk/client-keyspaces"), + { + Kinesis + } = require("@aws-sdk/client-kinesis"), + { + KinesisAnalytics + } = require("@aws-sdk/client-kinesis-analytics"), + { + KinesisAnalyticsV2 + } = require("@aws-sdk/client-kinesis-analytics-v2"), + { + KinesisVideo + } = require("@aws-sdk/client-kinesis-video"), + { + KinesisVideoArchivedMedia + } = require("@aws-sdk/client-kinesis-video-archived-media"), + { + KinesisVideoMedia + } = require("@aws-sdk/client-kinesis-video-media"), + { + KinesisVideoSignaling: KinesisVideoSignalingChannels + } = require("@aws-sdk/client-kinesis-video-signaling"), + { + KinesisVideoWebRTCStorage + } = require("@aws-sdk/client-kinesis-video-webrtc-storage"), + { + KMS + } = require("@aws-sdk/client-kms"), + { + LakeFormation + } = require("@aws-sdk/client-lakeformation"), + { + Lambda + } = require("@aws-sdk/client-lambda"), + { + LexModelBuildingService + } = require("@aws-sdk/client-lex-model-building-service"), + { + LexModelsV2 + } = require("@aws-sdk/client-lex-models-v2"), + { + LexRuntimeService: LexRuntime + } = require("@aws-sdk/client-lex-runtime-service"), + { + LexRuntimeV2 + } = require("@aws-sdk/client-lex-runtime-v2"), + { + LicenseManager + } = require("@aws-sdk/client-license-manager"), + { + LicenseManagerLinuxSubscriptions + } = require("@aws-sdk/client-license-manager-linux-subscriptions"), + { + LicenseManagerUserSubscriptions + } = require("@aws-sdk/client-license-manager-user-subscriptions"), + { + Lightsail + } = require("@aws-sdk/client-lightsail"), + { + Location + } = require("@aws-sdk/client-location"), + { + LookoutEquipment + } = require("@aws-sdk/client-lookoutequipment"), + { + LookoutMetrics + } = require("@aws-sdk/client-lookoutmetrics"), + { + LookoutVision + } = require("@aws-sdk/client-lookoutvision"), + { + M2 + } = require("@aws-sdk/client-m2"), + { + MachineLearning + } = require("@aws-sdk/client-machine-learning"), + { + Macie + } = require("@aws-sdk/client-macie"), + { + Macie2 + } = require("@aws-sdk/client-macie2"), + { + ManagedBlockchain + } = require("@aws-sdk/client-managedblockchain"), + { + MarketplaceCatalog + } = require("@aws-sdk/client-marketplace-catalog"), + { + MarketplaceCommerceAnalytics + } = require("@aws-sdk/client-marketplace-commerce-analytics"), + { + MarketplaceEntitlementService + } = require("@aws-sdk/client-marketplace-entitlement-service"), + { + MarketplaceMetering + } = require("@aws-sdk/client-marketplace-metering"), + { + MediaConnect + } = require("@aws-sdk/client-mediaconnect"), + { + MediaConvert + } = require("@aws-sdk/client-mediaconvert"), + { + MediaLive + } = require("@aws-sdk/client-medialive"), + { + MediaPackage + } = require("@aws-sdk/client-mediapackage"), + { + MediaPackageVod + } = require("@aws-sdk/client-mediapackage-vod"), + { + MediaStore + } = require("@aws-sdk/client-mediastore"), + { + MediaStoreData + } = require("@aws-sdk/client-mediastore-data"), + { + MediaTailor + } = require("@aws-sdk/client-mediatailor"), + { + MemoryDB + } = require("@aws-sdk/client-memory-db"), + { + Mgn + } = require("@aws-sdk/client-mgn"), + { + MigrationHub + } = require("@aws-sdk/client-migration-hub"), + { + MigrationHubRefactorSpaces + } = require("@aws-sdk/client-migration-hub-refactor-spaces"), + { + MigrationHubConfig + } = require("@aws-sdk/client-migrationhub-config"), + { + MigrationHubOrchestrator + } = require("@aws-sdk/client-migrationhuborchestrator"), + { + MigrationHubStrategy + } = require("@aws-sdk/client-migrationhubstrategy"), + { + Mobile + } = require("@aws-sdk/client-mobile"), + { + Mq: MQ + } = require("@aws-sdk/client-mq"), + { + MTurk + } = require("@aws-sdk/client-mturk"), + { + MWAA + } = require("@aws-sdk/client-mwaa"), + { + Neptune + } = require("@aws-sdk/client-neptune"), + { + NetworkFirewall + } = require("@aws-sdk/client-network-firewall"), + { + NetworkManager + } = require("@aws-sdk/client-networkmanager"), + { + Nimble + } = require("@aws-sdk/client-nimble"), + { + OAM + } = require("@aws-sdk/client-oam"), + { + Omics + } = require("@aws-sdk/client-omics"), + { + OpenSearch + } = require("@aws-sdk/client-opensearch"), + { + OpenSearchServerless + } = require("@aws-sdk/client-opensearchserverless"), + { + OpsWorks + } = require("@aws-sdk/client-opsworks"), + { + OpsWorksCM + } = require("@aws-sdk/client-opsworkscm"), + { + Organizations + } = require("@aws-sdk/client-organizations"), + { + Outposts + } = require("@aws-sdk/client-outposts"), + { + Panorama + } = require("@aws-sdk/client-panorama"), + { + Personalize + } = require("@aws-sdk/client-personalize"), + { + PersonalizeEvents + } = require("@aws-sdk/client-personalize-events"), + { + PersonalizeRuntime + } = require("@aws-sdk/client-personalize-runtime"), + { + PI + } = require("@aws-sdk/client-pi"), + { + Pinpoint + } = require("@aws-sdk/client-pinpoint"), + { + PinpointEmail + } = require("@aws-sdk/client-pinpoint-email"), + { + PinpointSMSVoice + } = require("@aws-sdk/client-pinpoint-sms-voice"), + { + PinpointSMSVoiceV2 + } = require("@aws-sdk/client-pinpoint-sms-voice-v2"), + { + Pipes + } = require("@aws-sdk/client-pipes"), + { + Polly + } = require("@aws-sdk/client-polly"), + { + Pricing + } = require("@aws-sdk/client-pricing"), + { + PrivateNetworks + } = require("@aws-sdk/client-privatenetworks"), + { + Proton + } = require("@aws-sdk/client-proton"), + { + QLDB + } = require("@aws-sdk/client-qldb"), + { + QLDBSession + } = require("@aws-sdk/client-qldb-session"), + { + QuickSight + } = require("@aws-sdk/client-quicksight"), + { + RAM + } = require("@aws-sdk/client-ram"), + { + Rbin + } = require("@aws-sdk/client-rbin"), + { + RDS + } = require("@aws-sdk/client-rds"), + { + RDSData: RDSDataService + } = require("@aws-sdk/client-rds-data"), + { + Redshift + } = require("@aws-sdk/client-redshift"), + { + RedshiftData + } = require("@aws-sdk/client-redshift-data"), + { + RedshiftServerless + } = require("@aws-sdk/client-redshift-serverless"), + { + Rekognition + } = require("@aws-sdk/client-rekognition"), + { + Resiliencehub + } = require("@aws-sdk/client-resiliencehub"), + { + ResourceExplorer2 + } = require("@aws-sdk/client-resource-explorer-2"), + { + ResourceGroups + } = require("@aws-sdk/client-resource-groups"), + { + ResourceGroupsTaggingAPI + } = require("@aws-sdk/client-resource-groups-tagging-api"), + { + RoboMaker + } = require("@aws-sdk/client-robomaker"), + { + RolesAnywhere + } = require("@aws-sdk/client-rolesanywhere"), + { + Route53 + } = require("@aws-sdk/client-route-53"), + { + Route53Domains + } = require("@aws-sdk/client-route-53-domains"), + { + Route53RecoveryCluster + } = require("@aws-sdk/client-route53-recovery-cluster"), + { + Route53RecoveryControlConfig + } = require("@aws-sdk/client-route53-recovery-control-config"), + { + Route53RecoveryReadiness + } = require("@aws-sdk/client-route53-recovery-readiness"), + { + Route53Resolver + } = require("@aws-sdk/client-route53resolver"), + { + RUM + } = require("@aws-sdk/client-rum"), + { + S3 + } = require("@aws-sdk/client-s3"), + { + S3Control + } = require("@aws-sdk/client-s3-control"), + { + S3Outposts + } = require("@aws-sdk/client-s3outposts"), + { + SageMakerA2IRuntime: AugmentedAIRuntime + } = require("@aws-sdk/client-sage-maker-a2iruntime"), + { + SageMaker + } = require("@aws-sdk/client-sagemaker"), + { + SagemakerEdge + } = require("@aws-sdk/client-sagemaker-edge"), + { + SageMakerFeatureStoreRuntime + } = require("@aws-sdk/client-sagemaker-featurestore-runtime"), + { + SageMakerGeospatial + } = require("@aws-sdk/client-sagemaker-geospatial"), + { + SageMakerMetrics + } = require("@aws-sdk/client-sagemaker-metrics"), + { + SageMakerRuntime + } = require("@aws-sdk/client-sagemaker-runtime"), + { + Savingsplans: SavingsPlans + } = require("@aws-sdk/client-savingsplans"), + { + Scheduler + } = require("@aws-sdk/client-scheduler"), + { + Schemas + } = require("@aws-sdk/client-schemas"), + { + SecretsManager + } = require("@aws-sdk/client-secrets-manager"), + { + SecurityHub + } = require("@aws-sdk/client-securityhub"), + { + SecurityLake + } = require("@aws-sdk/client-securitylake"), + { + ServerlessApplicationRepository + } = require("@aws-sdk/client-serverlessapplicationrepository"), + { + ServiceCatalog + } = require("@aws-sdk/client-service-catalog"), + { + ServiceCatalogAppRegistry + } = require("@aws-sdk/client-service-catalog-appregistry"), + { + ServiceQuotas + } = require("@aws-sdk/client-service-quotas"), + { + ServiceDiscovery + } = require("@aws-sdk/client-servicediscovery"), + { + SES + } = require("@aws-sdk/client-ses"), + { + SESv2: SESV2 + } = require("@aws-sdk/client-sesv2"), + { + SFN: StepFunctions + } = require("@aws-sdk/client-sfn"), + { + Shield + } = require("@aws-sdk/client-shield"), + { + Signer + } = require("@aws-sdk/client-signer"), + { + SimSpaceWeaver + } = require("@aws-sdk/client-simspaceweaver"), + { + SMS + } = require("@aws-sdk/client-sms"), + { + SnowDeviceManagement + } = require("@aws-sdk/client-snow-device-management"), + { + Snowball + } = require("@aws-sdk/client-snowball"), + { + SNS + } = require("@aws-sdk/client-sns"), + { + SQS + } = require("@aws-sdk/client-sqs"), + { + SSM + } = require("@aws-sdk/client-ssm"), + { + SSMContacts + } = require("@aws-sdk/client-ssm-contacts"), + { + SSMIncidents + } = require("@aws-sdk/client-ssm-incidents"), + { + SsmSap + } = require("@aws-sdk/client-ssm-sap"), + { + SSO + } = require("@aws-sdk/client-sso"), + { + SSOAdmin + } = require("@aws-sdk/client-sso-admin"), + { + SSOOIDC + } = require("@aws-sdk/client-sso-oidc"), + { + StorageGateway + } = require("@aws-sdk/client-storage-gateway"), + { + STS + } = require("@aws-sdk/client-sts"), + { + Support + } = require("@aws-sdk/client-support"), + { + SupportApp + } = require("@aws-sdk/client-support-app"), + { + SWF + } = require("@aws-sdk/client-swf"), + { + Synthetics + } = require("@aws-sdk/client-synthetics"), + { + Textract + } = require("@aws-sdk/client-textract"), + { + TimestreamQuery + } = require("@aws-sdk/client-timestream-query"), + { + TimestreamWrite + } = require("@aws-sdk/client-timestream-write"), + { + Transcribe: TranscribeService + } = require("@aws-sdk/client-transcribe"), + { + Transfer + } = require("@aws-sdk/client-transfer"), + { + Translate + } = require("@aws-sdk/client-translate"), + { + VoiceID + } = require("@aws-sdk/client-voice-id"), + { + WAF + } = require("@aws-sdk/client-waf"), + { + WAFRegional + } = require("@aws-sdk/client-waf-regional"), + { + WAFV2 + } = require("@aws-sdk/client-wafv2"), + { + WellArchitected + } = require("@aws-sdk/client-wellarchitected"), + { + Wisdom + } = require("@aws-sdk/client-wisdom"), + { + WorkDocs + } = require("@aws-sdk/client-workdocs"), + { + WorkLink + } = require("@aws-sdk/client-worklink"), + { + WorkMail + } = require("@aws-sdk/client-workmail"), + { + WorkMailMessageFlow + } = require("@aws-sdk/client-workmailmessageflow"), + { + WorkSpaces + } = require("@aws-sdk/client-workspaces"), + { + WorkSpacesWeb + } = require("@aws-sdk/client-workspaces-web"), + { + XRay + } = require("@aws-sdk/client-xray"); new ACM(); new ACMPCA(); diff --git a/src/transforms/v2-to-v3/modules/addV3ClientModuleRequire.ts b/src/transforms/v2-to-v3/modules/addV3ClientModuleRequire.ts index e8e0e53b..9d1b1ae0 100644 --- a/src/transforms/v2-to-v3/modules/addV3ClientModuleRequire.ts +++ b/src/transforms/v2-to-v3/modules/addV3ClientModuleRequire.ts @@ -1,27 +1,15 @@ -import { - Collection, - Identifier, - JSCodeshift, - ObjectPattern, - Property, - VariableDeclaration, - VariableDeclarator, -} from "jscodeshift"; +import { Collection, Identifier, JSCodeshift } from "jscodeshift"; +import { ObjectPattern, Property, VariableDeclarator } from "jscodeshift"; import { getV3ClientRequireProperty } from "./getV3ClientRequireProperty"; import { V3ClientRequirePropertyOptions } from "./types"; export const addV3ClientModuleRequire = ( j: JSCodeshift, - existingRequires: Collection, + existingRequires: Collection, { keyName, valueName }: V3ClientRequirePropertyOptions ) => { - const existingRequireProperties = existingRequires - .nodes() - .map((node) => - node.declarations.filter((declaration) => declaration.type === "VariableDeclarator") - ) - .flat() as VariableDeclarator[]; + const existingRequireProperties = existingRequires.nodes() as VariableDeclarator[]; if ( !existingRequireProperties.find((variableDeclarator) => diff --git a/src/transforms/v2-to-v3/modules/addV3ClientRequires.ts b/src/transforms/v2-to-v3/modules/addV3ClientRequires.ts index 2d258f06..94487a86 100644 --- a/src/transforms/v2-to-v3/modules/addV3ClientRequires.ts +++ b/src/transforms/v2-to-v3/modules/addV3ClientRequires.ts @@ -1,10 +1,9 @@ import { Collection, JSCodeshift } from "jscodeshift"; -import { PACKAGE_NAME } from "../config"; import { getV3ClientTypeNames } from "../ts-type"; -import { getV2ServiceModulePath, hasPropertyWithName } from "../utils"; import { addV3ClientModuleRequire } from "./addV3ClientModuleRequire"; -import { getRequireVariableDeclaration } from "./getRequireVariableDeclaration"; +import { getRequireVariableDeclarators } from "./getRequireVariableDeclarators"; +import { getV2RequireDeclarator } from "./getV2RequireDeclarator"; import { getV3ClientRequireProperty } from "./getV3ClientRequireProperty"; import { V3ClientModulesOptions } from "./types"; @@ -19,7 +18,7 @@ export const addV3ClientRequires = ( v2GlobalName, }: V3ClientModulesOptions ): void => { - const existingRequires = getRequireVariableDeclaration(j, source, v3ClientPackageName); + const existingRequires = getRequireVariableDeclarators(j, source, v3ClientPackageName); // Require declaration already exists. if (existingRequires && existingRequires.nodes().length > 0) { @@ -29,38 +28,33 @@ export const addV3ClientRequires = ( }); } else { // Insert after require for global SDK if present. If not, insert after service require. - const v2ServiceModulePath = getV2ServiceModulePath(v2ClientName); - const globalRequireVarDecl = getRequireVariableDeclaration(j, source, PACKAGE_NAME).filter( - (varDeclaration) => - hasPropertyWithName(varDeclaration, { - identifierName: v2GlobalName, - objectPropertyName: v2ClientLocalName, - }) + const requireDeclarator = j.variableDeclarator( + j.objectPattern([ + getV3ClientRequireProperty(j, { + keyName: v3ClientName, + valueName: v2ClientLocalName, + }), + ]), + j.callExpression(j.identifier("require"), [j.literal(v3ClientPackageName)]) ); - const serviceRequireVarDecl = getRequireVariableDeclaration(j, source, v2ServiceModulePath); - const requireVarDecl = - globalRequireVarDecl.size() > 0 ? globalRequireVarDecl : serviceRequireVarDecl; - requireVarDecl.at(0).insertAfter( - j.variableDeclaration("const", [ - j.variableDeclarator( - j.objectPattern([ - getV3ClientRequireProperty(j, { - keyName: v3ClientName, - valueName: v2ClientLocalName, - }), - ]), - j.callExpression(j.identifier("require"), [j.literal(v3ClientPackageName)]) - ), - ]) - ); + // prettier-ignore + const v2RequireDeclarator = + getV2RequireDeclarator(j, source, { v2ClientName, v2ClientLocalName, v2GlobalName }); + + if (v2RequireDeclarator && v2RequireDeclarator.nodes().length > 0) { + v2RequireDeclarator.insertAfter(requireDeclarator); + } else { + // Insert at the top of the file. + source.insertBefore(requireDeclarator); + } } // Add require for input/output types, if needed. const v3ClientTypeNames = getV3ClientTypeNames(j, source, { v2ClientName, v2GlobalName }); if (v3ClientTypeNames.length > 0) { - const clientRequires = getRequireVariableDeclaration(j, source, v3ClientPackageName); + const clientRequires = getRequireVariableDeclarators(j, source, v3ClientPackageName); for (const v3ClientTypeName of v3ClientTypeNames.sort()) { addV3ClientModuleRequire(j, clientRequires, { keyName: v3ClientTypeName, diff --git a/src/transforms/v2-to-v3/modules/getRequireVariableDeclaration.ts b/src/transforms/v2-to-v3/modules/getRequireVariableDeclaration.ts deleted file mode 100644 index 4f8133ef..00000000 --- a/src/transforms/v2-to-v3/modules/getRequireVariableDeclaration.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Collection, JSCodeshift } from "jscodeshift"; - -export const getRequireVariableDeclaration = ( - j: JSCodeshift, - source: Collection, - sourceValue: string -) => - source.find(j.VariableDeclaration, { - declarations: [ - { - init: { - type: "CallExpression", - callee: { type: "Identifier", name: "require" }, - arguments: [{ value: sourceValue }], - }, - }, - ], - }); diff --git a/src/transforms/v2-to-v3/modules/getRequireVariableDeclarators.ts b/src/transforms/v2-to-v3/modules/getRequireVariableDeclarators.ts new file mode 100644 index 00000000..3c1efb74 --- /dev/null +++ b/src/transforms/v2-to-v3/modules/getRequireVariableDeclarators.ts @@ -0,0 +1,17 @@ +import { Collection, Identifier, JSCodeshift, ObjectPattern } from "jscodeshift"; + +export const getRequireVariableDeclarators = ( + j: JSCodeshift, + source: Collection, + sourceValue: string, + id?: Identifier | ObjectPattern +) => + source.find(j.VariableDeclarator, { + ...(id && { id }), + init: { + arguments: [{ value: sourceValue }], + callee: { type: "Identifier", name: "require" }, + type: "CallExpression", + }, + type: "VariableDeclarator", + }); diff --git a/src/transforms/v2-to-v3/modules/getV2RequireDeclarator.ts b/src/transforms/v2-to-v3/modules/getV2RequireDeclarator.ts new file mode 100644 index 00000000..20a602f8 --- /dev/null +++ b/src/transforms/v2-to-v3/modules/getV2RequireDeclarator.ts @@ -0,0 +1,50 @@ +import { Collection, Identifier, JSCodeshift, ObjectPattern } from "jscodeshift"; + +import { PACKAGE_NAME } from "../config"; +import { getV2ServiceModulePath } from "../utils"; +import { getRequireVariableDeclarators } from "./getRequireVariableDeclarators"; + +export interface GetV2BaseDeclaratorOptions { + v2ClientName: string; + v2ClientLocalName: string; + v2GlobalName?: string; +} + +export const getV2RequireDeclarator = ( + j: JSCodeshift, + source: Collection, + { v2ClientName, v2ClientLocalName, v2GlobalName }: GetV2BaseDeclaratorOptions +) => { + if (v2GlobalName) { + const v2GlobalNameIdentifier = { type: "Identifier", name: v2GlobalName } as Identifier; + // prettier-ignore + const v2GlobalNameIdentifierDeclarators = + getRequireVariableDeclarators(j, source, PACKAGE_NAME, v2GlobalNameIdentifier); + + if (v2GlobalNameIdentifierDeclarators && v2GlobalNameIdentifierDeclarators.nodes().length > 0) { + return v2GlobalNameIdentifierDeclarators; + } + } + + const v2ClientLocalNameObject = { + type: "ObjectPattern", + properties: [{ type: "Property", value: { type: "Identifier", name: v2ClientLocalName } }], + } as ObjectPattern; + // prettier-ignore + const v2ClientLocalNameObjectDeclarators = + getRequireVariableDeclarators(j, source, PACKAGE_NAME, v2ClientLocalNameObject); + + if (v2ClientLocalNameObjectDeclarators && v2ClientLocalNameObjectDeclarators.nodes().length > 0) { + return v2ClientLocalNameObjectDeclarators; + } + + const v2ServiceModulePath = getV2ServiceModulePath(v2ClientName); + const v2ClientNameIdentifier = { type: "Identifier", name: v2ClientLocalName } as Identifier; + // prettier-ignore + const v2ClientNameIdentifierDeclarators = + getRequireVariableDeclarators(j, source, v2ServiceModulePath, v2ClientNameIdentifier); + + if (v2ClientNameIdentifierDeclarators && v2ClientNameIdentifierDeclarators.nodes().length > 0) { + return v2ClientNameIdentifierDeclarators; + } +}; diff --git a/src/transforms/v2-to-v3/modules/removeImportIdentifierName.ts b/src/transforms/v2-to-v3/modules/removeImportIdentifierName.ts index c4eda1dd..641a3cb2 100644 --- a/src/transforms/v2-to-v3/modules/removeImportIdentifierName.ts +++ b/src/transforms/v2-to-v3/modules/removeImportIdentifierName.ts @@ -9,10 +9,8 @@ export interface RemoveImportIdentifierNameOptions { export const removeImportIdentifierName = ( j: JSCodeshift, source: Collection, - options: RemoveImportIdentifierNameOptions + { importedName, localName, sourceValue }: RemoveImportIdentifierNameOptions ) => { - const { importedName, localName, sourceValue } = options; - source .find(j.ImportDeclaration, { specifiers: [{ local: { name: localName } }], diff --git a/src/transforms/v2-to-v3/modules/removeRequireIdentifierName.ts b/src/transforms/v2-to-v3/modules/removeRequireIdentifierName.ts index 4fea9221..65afa10b 100644 --- a/src/transforms/v2-to-v3/modules/removeRequireIdentifierName.ts +++ b/src/transforms/v2-to-v3/modules/removeRequireIdentifierName.ts @@ -1,7 +1,6 @@ import { Collection, JSCodeshift } from "jscodeshift"; -import { hasPropertyWithName } from "../utils"; -import { getRequireVariableDeclaration } from "./getRequireVariableDeclaration"; +import { getRequireVariableDeclarators } from "./getRequireVariableDeclarators"; export interface RemoveRequireIdentifierNameOptions { localName: string; @@ -13,12 +12,35 @@ export const removeRequireIdentifierName = ( source: Collection, { localName, sourceValue }: RemoveRequireIdentifierNameOptions ) => { - getRequireVariableDeclaration(j, source, sourceValue) - .filter((varDeclaration) => - hasPropertyWithName(varDeclaration, { - identifierName: localName, - objectPropertyName: localName, - }) - ) - .remove(); + const requireDeclarators = getRequireVariableDeclarators(j, source, sourceValue); + + requireDeclarators.forEach((varDeclarator) => { + const varDeclarationCollection = j(varDeclarator).closest(j.VariableDeclaration); + const varDeclaration = varDeclarationCollection.nodes()[0]; + + // Remove Identifier or ObjectPattern from VariableDeclarator. + varDeclaration.declarations = varDeclaration.declarations?.filter((declarator) => { + if (declarator.type !== "VariableDeclarator") { + return true; + } + if (declarator.id.type === "Identifier" && declarator.id.name === localName) { + return false; + } + if (declarator.id.type === "ObjectPattern" && declarator.id.properties) { + declarator.id.properties = declarator.id.properties.filter( + (property) => + property.type !== "Property" || + property.value.type !== "Identifier" || + property.value.name !== localName + ); + return declarator.id.properties.length > 0; + } + return true; + }); + + // Remove VariableDeclaration if there are no declarations. + if (varDeclaration.declarations?.length === 0) { + varDeclarationCollection.remove(); + } + }); }; diff --git a/src/transforms/v2-to-v3/utils/hasPropertyWithName.ts b/src/transforms/v2-to-v3/utils/hasPropertyWithName.ts deleted file mode 100644 index 6723d0d8..00000000 --- a/src/transforms/v2-to-v3/utils/hasPropertyWithName.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ASTPath, ObjectPattern, VariableDeclaration, VariableDeclarator } from "jscodeshift"; - -const hasIdentifierName = (varDeclarator: VariableDeclarator, localName: string) => - varDeclarator.id.type === "Identifier" && varDeclarator.id.name === localName; - -const hasObjectPropertyName = (varDeclarator: VariableDeclarator, localName: string) => - varDeclarator.id.type === "ObjectPattern" && - (varDeclarator.id as ObjectPattern).properties.some( - (property) => - property.type === "Property" && - property.value.type === "Identifier" && - property.value.name === localName - ); - -export interface HasPropertyWithNameOptions { - identifierName?: string; - objectPropertyName?: string; -} - -export const hasPropertyWithName = ( - varDeclaration: ASTPath, - { identifierName, objectPropertyName }: HasPropertyWithNameOptions -) => { - const declarations = varDeclaration.value.declarations.filter( - (declaration) => declaration.type === "VariableDeclarator" - ) as VariableDeclarator[]; - - if ( - identifierName && - declarations.some((varDeclarator) => hasIdentifierName(varDeclarator, identifierName)) - ) { - return true; - } - - if ( - objectPropertyName && - declarations.some((varDeclarator) => hasObjectPropertyName(varDeclarator, objectPropertyName)) - ) { - return true; - } - - return false; -}; diff --git a/src/transforms/v2-to-v3/utils/index.ts b/src/transforms/v2-to-v3/utils/index.ts index c8ec0a18..8d5d7fd5 100644 --- a/src/transforms/v2-to-v3/utils/index.ts +++ b/src/transforms/v2-to-v3/utils/index.ts @@ -1,4 +1,3 @@ export * from "./getV2ClientNewExpression"; export * from "./getV2ServiceModulePath"; -export * from "./hasPropertyWithName"; export * from "./isTypeScriptFile";