Skip to content

Commit 0f4ca88

Browse files
authored
Use filter API to delete identifiers from require object pattern (#322)
1 parent ad3a4c9 commit 0f4ca88

14 files changed

+127
-89
lines changed

.changeset/red-bears-fry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"aws-sdk-js-codemod": patch
3+
---
4+
5+
Use filter API to delete identifiers from require object pattern
Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1-
import { getServiceRequireOutput } from "./getServiceRequireOutput";
1+
import { CLIENT_NAMES_MAP, CLIENT_PACKAGE_NAMES_MAP } from "../../src/transforms/v2-to-v3/config";
2+
import { CLIENTS_TO_TEST } from "./config";
3+
import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode";
24

3-
export const getServiceRequireDeepOutput = getServiceRequireOutput;
5+
export const getServiceRequireDeepOutput = (codegenComment: string) => {
6+
let serviceRequireDeepOutputContent = `${codegenComment}\n`;
7+
8+
for (const v2ClientName of CLIENTS_TO_TEST) {
9+
const v3ClientName = CLIENT_NAMES_MAP[v2ClientName];
10+
const v3ClientPackageName = `@aws-sdk/${CLIENT_PACKAGE_NAMES_MAP[v2ClientName]}`;
11+
const v3RequireKeyValuePair =
12+
v3ClientName === v2ClientName ? v3ClientName : `${v3ClientName}: ${v2ClientName}`;
13+
serviceRequireDeepOutputContent += `const {\n ${v3RequireKeyValuePair}\n} = require("${v3ClientPackageName}");\n`;
14+
}
15+
serviceRequireDeepOutputContent += `\n`;
16+
serviceRequireDeepOutputContent += getV3ClientsNewExpressionCode(CLIENTS_TO_TEST);
17+
18+
return serviceRequireDeepOutputContent;
19+
};

scripts/generateNewClientTests/getServiceRequireInput.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@ import { getV2ClientsNewExpressionCode } from "./getV2ClientsNewExpressionCode";
44
export const getServiceRequireInput = (codegenComment: string) => {
55
let serviceRequireInputContent = `${codegenComment}\n`;
66

7-
for (const clientName of CLIENTS_TO_TEST) {
8-
serviceRequireInputContent += `const { ${clientName} } = require("aws-sdk");\n`;
9-
}
7+
serviceRequireInputContent += `const { ${CLIENTS_TO_TEST.join(", ")} } = require("aws-sdk");\n`;
108
serviceRequireInputContent += `\n`;
119
serviceRequireInputContent += getV2ClientsNewExpressionCode(CLIENTS_TO_TEST);
1210

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,3 @@
1-
import { CLIENT_NAMES_MAP, CLIENT_PACKAGE_NAMES_MAP } from "../../src/transforms/v2-to-v3/config";
2-
import { CLIENTS_TO_TEST } from "./config";
3-
import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode";
1+
import { getGlobalRequireOutput } from "./getGlobalRequireOutput";
42

5-
export const getServiceRequireOutput = (codegenComment: string) => {
6-
let serviceRequireOutputContent = `${codegenComment}\n`;
7-
8-
for (const v2ClientName of CLIENTS_TO_TEST) {
9-
const v3ClientName = CLIENT_NAMES_MAP[v2ClientName];
10-
const v3ClientPackageName = `@aws-sdk/${CLIENT_PACKAGE_NAMES_MAP[v2ClientName]}`;
11-
const v3RequireKeyValuePair =
12-
v3ClientName === v2ClientName ? v3ClientName : `${v3ClientName}: ${v2ClientName}`;
13-
serviceRequireOutputContent += `const {\n ${v3RequireKeyValuePair}\n} = require("${v3ClientPackageName}");\n`;
14-
}
15-
serviceRequireOutputContent += `\n`;
16-
serviceRequireOutputContent += getV3ClientsNewExpressionCode(CLIENTS_TO_TEST);
17-
18-
return serviceRequireOutputContent;
19-
};
3+
export const getServiceRequireOutput = getGlobalRequireOutput;

src/transforms/v2-to-v3/__fixtures__/new-client/service-require.input.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
// This file is generated by scripts/generateNewClientTests/index.ts
22
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
33
"use strict";
4-
const { ACM } = require("aws-sdk");
5-
const { AccessAnalyzer } = require("aws-sdk");
6-
const { Discovery } = require("aws-sdk");
4+
const { ACM, AccessAnalyzer, Discovery } = require("aws-sdk");
75

86
new ACM();
97
new AccessAnalyzer();

src/transforms/v2-to-v3/__fixtures__/new-client/service-require.output.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
33
"use strict";
44
const {
5-
ACM
6-
} = require("@aws-sdk/client-acm");
7-
const {
8-
AccessAnalyzer
9-
} = require("@aws-sdk/client-accessanalyzer");
10-
const {
11-
ApplicationDiscoveryService: Discovery
12-
} = require("@aws-sdk/client-application-discovery-service");
5+
AccessAnalyzer
6+
} = require("@aws-sdk/client-accessanalyzer"),
7+
{
8+
ACM
9+
} = require("@aws-sdk/client-acm"),
10+
{
11+
ApplicationDiscoveryService: Discovery
12+
} = require("@aws-sdk/client-application-discovery-service");
1313

1414
new ACM();
1515
new AccessAnalyzer();

src/transforms/v2-to-v3/modules/addV3ClientDefaultRequire.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Collection, JSCodeshift } from "jscodeshift";
22

33
import { getV3ClientDefaultLocalName } from "../utils";
4-
import { getRequireVariableDeclarators } from "./getRequireVariableDeclarators";
4+
import { getRequireDeclarators } from "./getRequireDeclarators";
55
import { getV2RequireDeclarator } from "./getV2RequireDeclarator";
66
import { V3ClientModulesOptions } from "./types";
77

@@ -11,7 +11,7 @@ export const addV3ClientDefaultRequire = (
1111
{ v2ClientName, v2ClientLocalName, v3ClientPackageName, v2GlobalName }: V3ClientModulesOptions
1212
) => {
1313
const identifierName = getV3ClientDefaultLocalName(v2ClientLocalName);
14-
const existingRequires = getRequireVariableDeclarators(j, source, v3ClientPackageName);
14+
const existingRequires = getRequireDeclarators(j, source, v3ClientPackageName);
1515

1616
if (
1717
existingRequires &&

src/transforms/v2-to-v3/modules/addV3ClientNamedRequire.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { Collection, Identifier, JSCodeshift, ObjectPattern } from "jscodeshift";
1+
import { Collection, JSCodeshift, ObjectPattern } from "jscodeshift";
22

33
import { getV3ClientDefaultLocalName } from "../utils";
4-
import { getRequireVariableDeclarators } from "./getRequireVariableDeclarators";
4+
import { getRequireDeclarators } from "./getRequireDeclarators";
5+
import { getRequireDeclaratorsWithIdentifier } from "./getRequireDeclaratorsWithIdentifier";
56
import { getV2RequireDeclarator } from "./getV2RequireDeclarator";
67
import { getV3ClientRequireProperty } from "./getV3ClientRequireProperty";
78
import { V3ClientModulesOptions } from "./types";
@@ -22,7 +23,7 @@ export const addV3ClientNamedRequire = (
2223
keyName: v3ClientName,
2324
valueName: v2ClientLocalName,
2425
});
25-
const existingRequires = getRequireVariableDeclarators(j, source, v3ClientPackageName);
26+
const existingRequires = getRequireDeclarators(j, source, v3ClientPackageName);
2627

2728
if (existingRequires && existingRequires.nodes().length > 0) {
2829
const existingRequireProperties = existingRequires
@@ -47,20 +48,13 @@ export const addV3ClientNamedRequire = (
4748
return;
4849
}
4950

50-
const v3ClientDefaultLocalNameIdentifier = {
51-
type: "Identifier",
52-
name: v3ClientDefaultLocalName,
53-
} as Identifier;
51+
const requireDeclaratorsWithIdentifier = getRequireDeclaratorsWithIdentifier(j, source, {
52+
identifierName: v3ClientDefaultLocalName,
53+
sourceValue: v3ClientPackageName,
54+
});
5455

55-
// prettier-ignore
56-
const v3ClientDefaultLocalNameIdentifierDeclarators =
57-
getRequireVariableDeclarators(j, source, v3ClientPackageName, v3ClientDefaultLocalNameIdentifier);
58-
59-
if (
60-
v3ClientDefaultLocalNameIdentifierDeclarators &&
61-
v3ClientDefaultLocalNameIdentifierDeclarators.nodes().length > 0
62-
) {
63-
v3ClientDefaultLocalNameIdentifierDeclarators.at(0).insertAfter(
56+
if (requireDeclaratorsWithIdentifier && requireDeclaratorsWithIdentifier.nodes().length > 0) {
57+
requireDeclaratorsWithIdentifier.at(0).insertAfter(
6458
j.variableDeclarator(j.objectPattern([v3ClientObjectProperty]), {
6559
type: "Identifier",
6660
name: v3ClientDefaultLocalName,

src/transforms/v2-to-v3/modules/getRequireVariableDeclarators.ts renamed to src/transforms/v2-to-v3/modules/getRequireDeclarators.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
import { Collection, Identifier, JSCodeshift, ObjectPattern } from "jscodeshift";
1+
import { Collection, JSCodeshift } from "jscodeshift";
22

3-
export const getRequireVariableDeclarators = (
3+
export const getRequireDeclarators = (
44
j: JSCodeshift,
55
source: Collection<unknown>,
6-
sourceValue: string,
7-
id?: Identifier | ObjectPattern
6+
sourceValue: string
87
) =>
98
source.find(j.VariableDeclarator, {
10-
...(id && { id }),
119
init: {
1210
arguments: [{ value: sourceValue }],
1311
callee: { type: "Identifier", name: "require" },
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Collection, JSCodeshift } from "jscodeshift";
2+
3+
import { getRequireDeclarators } from "./getRequireDeclarators";
4+
5+
export interface GetRequireDeclaratorsWithIdentifier {
6+
identifierName: string;
7+
sourceValue: string;
8+
}
9+
10+
export const getRequireDeclaratorsWithIdentifier = (
11+
j: JSCodeshift,
12+
source: Collection<unknown>,
13+
{ identifierName, sourceValue }: GetRequireDeclaratorsWithIdentifier
14+
) =>
15+
getRequireDeclarators(j, source, sourceValue).filter((declarator) => {
16+
if (declarator.value.id.type !== "Identifier") {
17+
return false;
18+
}
19+
return declarator.value.id.name === identifierName;
20+
});

0 commit comments

Comments
 (0)