Skip to content

Commit 43abf32

Browse files
authored
feat: remove .promise() calls from class member clients (#181)
1 parent 4d9eae0 commit 43abf32

File tree

7 files changed

+132
-35
lines changed

7 files changed

+132
-35
lines changed

.changeset/lemon-fans-sell.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+
Remove .promise() calls from class member clients
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import * as AWS from 'aws-sdk';
2+
3+
export class SecretsManager {
4+
constructor(client = new AWS.SecretsManager()) {
5+
this.client = client;
6+
}
7+
8+
async getSecretValue(secretId) {
9+
const response = await this.client
10+
.getSecretValue({ SecretId: secretId })
11+
.promise();
12+
if (response.SecretString) {
13+
return response.SecretString;
14+
} else {
15+
throw new Error(`Unable to get the secret value from ${secretId}`);
16+
}
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { SecretsManager } from "@aws-sdk/client-secrets-manager";
2+
3+
export class SecretsManager {
4+
constructor(client = new SecretsManager()) {
5+
this.client = client;
6+
}
7+
8+
async getSecretValue(secretId) {
9+
const response = await this.client
10+
.getSecretValue({ SecretId: secretId });
11+
if (response.SecretString) {
12+
return response.SecretString;
13+
} else {
14+
throw new Error(`Unable to get the secret value from ${secretId}`);
15+
}
16+
}
17+
}
Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Collection, Identifier, JSCodeshift } from "jscodeshift";
1+
import { Collection, Identifier, JSCodeshift, NewExpression } from "jscodeshift";
22

33
import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates";
44

@@ -7,38 +7,58 @@ export interface GetV2ClientIdNamesFromNewExprOptions {
77
v2DefaultModuleName: string;
88
}
99

10-
export const getV2ClientIdNamesFromNewExpr = (
10+
const getNamesFromVariableDeclarator = (
1111
j: JSCodeshift,
1212
source: Collection<unknown>,
13-
{ v2DefaultModuleName, v2ClientName }: GetV2ClientIdNamesFromNewExprOptions
14-
): string[] => {
15-
const clientIdNamesFromDefaultModule = source
13+
newExpression: NewExpression
14+
) =>
15+
source
1616
.find(j.VariableDeclarator, {
1717
id: { type: "Identifier" },
18-
init: {
19-
type: "NewExpression",
20-
callee: {
21-
object: { type: "Identifier", name: v2DefaultModuleName },
22-
property: { type: "Identifier", name: v2ClientName },
23-
},
24-
},
18+
init: newExpression,
2519
})
2620
.nodes()
2721
.map((variableDeclarator) => (variableDeclarator.id as Identifier).name);
2822

29-
const clientIdNamesFromServiceModule = source
30-
.find(j.VariableDeclarator, {
31-
id: { type: "Identifier" },
32-
init: {
33-
type: "NewExpression",
34-
callee: { type: "Identifier", name: v2ClientName },
35-
},
23+
const getNamesFromAssignmentPattern = (
24+
j: JSCodeshift,
25+
source: Collection<unknown>,
26+
newExpression: NewExpression
27+
) =>
28+
source
29+
.find(j.AssignmentPattern, {
30+
left: { type: "Identifier" },
31+
right: newExpression,
3632
})
3733
.nodes()
38-
.map((variableDeclarator) => (variableDeclarator.id as Identifier).name);
34+
.map((assignmentPattern) => (assignmentPattern.left as Identifier).name);
35+
36+
export const getV2ClientIdNamesFromNewExpr = (
37+
j: JSCodeshift,
38+
source: Collection<unknown>,
39+
{ v2DefaultModuleName, v2ClientName }: GetV2ClientIdNamesFromNewExprOptions
40+
): string[] => {
41+
const defaultNewExpr = {
42+
type: "NewExpression",
43+
callee: {
44+
object: { type: "Identifier", name: v2DefaultModuleName },
45+
property: { type: "Identifier", name: v2ClientName },
46+
},
47+
} as NewExpression;
48+
49+
const clientNewExpr = {
50+
type: "NewExpression",
51+
callee: { type: "Identifier", name: v2ClientName },
52+
} as NewExpression;
53+
54+
const namesFromDefaultModule = [
55+
...getNamesFromVariableDeclarator(j, source, defaultNewExpr),
56+
...getNamesFromAssignmentPattern(j, source, defaultNewExpr),
57+
];
58+
const namesFromServiceModule = [
59+
...getNamesFromVariableDeclarator(j, source, clientNewExpr),
60+
...getNamesFromAssignmentPattern(j, source, clientNewExpr),
61+
];
3962

40-
return getMergedArrayWithoutDuplicates(
41-
clientIdNamesFromDefaultModule,
42-
clientIdNamesFromServiceModule
43-
);
63+
return getMergedArrayWithoutDuplicates(namesFromDefaultModule, namesFromServiceModule);
4464
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { Collection, Identifier, JSCodeshift, MemberExpression, ThisExpression } from "jscodeshift";
2+
3+
export interface ThisMemberExpression {
4+
type: "MemberExpression";
5+
object: ThisExpression;
6+
property: Identifier;
7+
}
8+
9+
const thisMemberExpression = { type: "MemberExpression", object: { type: "ThisExpression" } };
10+
11+
export const getV2ClientIdThisExpressions = (
12+
j: JSCodeshift,
13+
source: Collection<unknown>,
14+
v2ClientIdentifiers: Identifier[]
15+
): ThisMemberExpression[] =>
16+
v2ClientIdentifiers.flatMap((v2ClientIdentifier) =>
17+
source
18+
.find(j.AssignmentExpression, {
19+
left: thisMemberExpression as MemberExpression,
20+
right: v2ClientIdentifier,
21+
})
22+
.nodes()
23+
.map(
24+
(assignmentExpression) =>
25+
({
26+
...thisMemberExpression,
27+
property: {
28+
type: "Identifier",
29+
name: ((assignmentExpression.left as MemberExpression).property as Identifier).name,
30+
},
31+
} as ThisMemberExpression)
32+
)
33+
);

src/transforms/v2-to-v3/utils/getV2ClientIdNames.ts renamed to src/transforms/v2-to-v3/utils/getV2ClientIdentifiers.ts

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

33
import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates";
44
import { getV2ClientIdNamesFromNewExpr } from "./getV2ClientIdNamesFromNewExpr";
@@ -9,11 +9,11 @@ export interface GetV2ClientIdNamesOptions {
99
v2DefaultModuleName: string;
1010
}
1111

12-
export const getV2ClientIdNames = (
12+
export const getV2ClientIdentifiers = (
1313
j: JSCodeshift,
1414
source: Collection<unknown>,
1515
{ v2DefaultModuleName, v2ClientName }: GetV2ClientIdNamesOptions
16-
): string[] => {
16+
): Identifier[] => {
1717
const v2ClientIdNamesFromNewExpr = getV2ClientIdNamesFromNewExpr(j, source, {
1818
v2DefaultModuleName,
1919
v2ClientName,
@@ -24,5 +24,10 @@ export const getV2ClientIdNames = (
2424
v2ClientName,
2525
});
2626

27-
return getMergedArrayWithoutDuplicates(v2ClientIdNamesFromNewExpr, v2ClientIdNamesFromTSTypeRef);
27+
const clientIdNames = getMergedArrayWithoutDuplicates(
28+
v2ClientIdNamesFromNewExpr,
29+
v2ClientIdNamesFromTSTypeRef
30+
);
31+
32+
return clientIdNames.map((clientidName) => ({ type: "Identifier", name: clientidName }));
2833
};

src/transforms/v2-to-v3/utils/removePromiseCalls.ts

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

3-
import { getV2ClientIdNames } from "./getV2ClientIdNames";
3+
import { getV2ClientIdentifiers } from "./getV2ClientIdentifiers";
4+
import { getV2ClientIdThisExpressions } from "./getV2ClientIdThisExpressions";
45

56
export interface RemovePromiseCallsOptions {
67
v2ClientName: string;
@@ -13,12 +14,13 @@ export const removePromiseCalls = (
1314
source: Collection<unknown>,
1415
{ v2DefaultModuleName, v2ClientName }: RemovePromiseCallsOptions
1516
): void => {
16-
const v2ClientIdNames = getV2ClientIdNames(j, source, {
17+
const v2ClientIdentifiers = getV2ClientIdentifiers(j, source, {
1718
v2DefaultModuleName,
1819
v2ClientName,
1920
});
21+
const v2ClientIdThisExpressions = getV2ClientIdThisExpressions(j, source, v2ClientIdentifiers);
2022

21-
for (const v2ClientIdName of v2ClientIdNames) {
23+
for (const v2ClientId of [...v2ClientIdentifiers, ...v2ClientIdThisExpressions]) {
2224
source
2325
.find(j.CallExpression, {
2426
callee: {
@@ -27,10 +29,7 @@ export const removePromiseCalls = (
2729
type: "CallExpression",
2830
callee: {
2931
type: "MemberExpression",
30-
object: {
31-
type: "Identifier",
32-
name: v2ClientIdName,
33-
},
32+
object: v2ClientId,
3433
},
3534
},
3635
property: { type: "Identifier", name: "promise" },

0 commit comments

Comments
 (0)