Skip to content

Commit d440d3d

Browse files
authored
Transform promise() on APIs called on client created inside constructor (#843)
1 parent 01cc448 commit d440d3d

File tree

7 files changed

+120
-13
lines changed

7 files changed

+120
-13
lines changed

.changeset/tasty-pugs-smile.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+
Transform promise() on APIs called on client created inside constructor

src/transforms/v2-to-v3/__fixtures__/api-promise/client-class-member.input.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,19 @@ class ClientClassMember {
1313
async listTagsOfResource() {
1414
return await this.clientInClass.listTagsOfResource({ ResourceArn: "STRING_VALUE" }).promise();
1515
}
16+
}
17+
18+
// Client as class member with creation inside constructor
19+
class ClientClassMemberConstructor {
20+
constructor() {
21+
this.clientInClassCtr = new AWS.DynamoDB();
22+
}
23+
24+
async listTables() {
25+
return this.clientInClassCtr.listTables().promise();
26+
}
27+
28+
async listTagsOfResource() {
29+
return this.clientInClassCtr.listTagsOfResource({ ResourceArn: "STRING_VALUE" }).promise();
30+
}
1631
}

src/transforms/v2-to-v3/__fixtures__/api-promise/client-class-member.input.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,21 @@ class ClientClassMember {
1515
async listTagsOfResource() {
1616
return this.clientInClass.listTagsOfResource({ ResourceArn: "STRING_VALUE" }).promise();
1717
}
18+
}
19+
20+
// Client as class member with creation inside constructor
21+
class ClientClassMemberConstructor {
22+
private clientInClassCtr: AWS.DynamoDB;
23+
24+
constructor() {
25+
this.clientInClassCtr = new AWS.DynamoDB();
26+
}
27+
28+
async listTables() {
29+
return this.clientInClassCtr.listTables().promise();
30+
}
31+
32+
async listTagsOfResource() {
33+
return this.clientInClassCtr.listTagsOfResource({ ResourceArn: "STRING_VALUE" }).promise();
34+
}
1835
}

src/transforms/v2-to-v3/__fixtures__/api-promise/client-class-member.output.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,19 @@ class ClientClassMember {
1313
async listTagsOfResource() {
1414
return await this.clientInClass.listTagsOfResource({ ResourceArn: "STRING_VALUE" });
1515
}
16+
}
17+
18+
// Client as class member with creation inside constructor
19+
class ClientClassMemberConstructor {
20+
constructor() {
21+
this.clientInClassCtr = new DynamoDB();
22+
}
23+
24+
async listTables() {
25+
return this.clientInClassCtr.listTables();
26+
}
27+
28+
async listTagsOfResource() {
29+
return this.clientInClassCtr.listTagsOfResource({ ResourceArn: "STRING_VALUE" });
30+
}
1631
}

src/transforms/v2-to-v3/__fixtures__/api-promise/client-class-member.output.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,21 @@ class ClientClassMember {
1515
async listTagsOfResource() {
1616
return this.clientInClass.listTagsOfResource({ ResourceArn: "STRING_VALUE" });
1717
}
18+
}
19+
20+
// Client as class member with creation inside constructor
21+
class ClientClassMemberConstructor {
22+
private clientInClassCtr: DynamoDB;
23+
24+
constructor() {
25+
this.clientInClassCtr = new DynamoDB();
26+
}
27+
28+
async listTables() {
29+
return this.clientInClassCtr.listTables();
30+
}
31+
32+
async listTagsOfResource() {
33+
return this.clientInClassCtr.listTagsOfResource({ ResourceArn: "STRING_VALUE" });
34+
}
1835
}

src/transforms/v2-to-v3/apis/getClientIdNamesFromNewExpr.ts

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

33
import { DOCUMENT_CLIENT, DYNAMODB, DYNAMODB_DOCUMENT_CLIENT } from "../config";
44
import { getClientNewExpression } from "../utils";
@@ -15,10 +15,7 @@ const getNamesFromVariableDeclarator = (
1515
newExpression: NewExpression
1616
) =>
1717
source
18-
.find(j.VariableDeclarator, {
19-
id: { type: "Identifier" },
20-
init: newExpression,
21-
})
18+
.find(j.VariableDeclarator, { id: { type: "Identifier" }, init: newExpression })
2219
.nodes()
2320
.map((variableDeclarator) => (variableDeclarator.id as Identifier).name);
2421

@@ -28,12 +25,29 @@ const getNamesFromAssignmentPattern = (
2825
newExpression: NewExpression
2926
) =>
3027
source
31-
.find(j.AssignmentPattern, {
32-
left: { type: "Identifier" },
28+
.find(j.AssignmentPattern, { left: { type: "Identifier" }, right: newExpression })
29+
.nodes()
30+
.map((assignmentPattern) => (assignmentPattern.left as Identifier).name);
31+
32+
const getNamesFromThisMemberExpression = (
33+
j: JSCodeshift,
34+
source: Collection<unknown>,
35+
newExpression: NewExpression
36+
) =>
37+
source
38+
.find(j.AssignmentExpression, {
39+
left: {
40+
type: "MemberExpression",
41+
object: { type: "ThisExpression" },
42+
property: { type: "Identifier" },
43+
},
3344
right: newExpression,
3445
})
3546
.nodes()
36-
.map((assignmentPattern) => (assignmentPattern.left as Identifier).name);
47+
.map(
48+
(assignmentExpression) =>
49+
((assignmentExpression.left as MemberExpression).property as Identifier).name
50+
);
3751

3852
export const getClientIdNamesFromNewExpr = (
3953
j: JSCodeshift,
@@ -43,7 +57,11 @@ export const getClientIdNamesFromNewExpr = (
4357
const namesFromGlobalModule = [];
4458
const namesFromServiceModule = [];
4559

46-
for (const getNames of [getNamesFromVariableDeclarator, getNamesFromAssignmentPattern]) {
60+
for (const getNames of [
61+
getNamesFromVariableDeclarator,
62+
getNamesFromAssignmentPattern,
63+
getNamesFromThisMemberExpression,
64+
]) {
4765
if (v2GlobalName) {
4866
namesFromGlobalModule.push(
4967
...getNames(j, source, getClientNewExpression({ v2GlobalName, v2ClientName }))

src/transforms/v2-to-v3/apis/getClientIdThisExpressions.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ export const getClientIdThisExpressions = (
88
source: Collection<unknown>,
99
clientIdentifiers: Identifier[]
1010
): ThisMemberExpression[] =>
11-
clientIdentifiers.flatMap((clientIdentifier) =>
12-
source
11+
clientIdentifiers.flatMap((clientIdentifier) => {
12+
const clientIdsFromThisExpressionAssignment = source
1313
.find(j.AssignmentExpression, {
1414
left: thisMemberExpression as MemberExpression,
1515
right: clientIdentifier,
@@ -24,5 +24,25 @@ export const getClientIdThisExpressions = (
2424
name: ((assignmentExpression.left as MemberExpression).property as Identifier).name,
2525
},
2626
}) as ThisMemberExpression
27-
)
28-
);
27+
);
28+
29+
const clientIdsFromThisExpression = source
30+
.find(j.MemberExpression, {
31+
type: "MemberExpression",
32+
object: { type: "ThisExpression" },
33+
property: clientIdentifier,
34+
})
35+
.nodes()
36+
.map(
37+
(memberExpression) =>
38+
({
39+
...thisMemberExpression,
40+
property: {
41+
type: "Identifier",
42+
name: (memberExpression.property as Identifier).name,
43+
},
44+
}) as ThisMemberExpression
45+
)[0];
46+
47+
return [...clientIdsFromThisExpressionAssignment, clientIdsFromThisExpression];
48+
});

0 commit comments

Comments
 (0)