Skip to content

Commit c80233f

Browse files
authored
Remove .promise() from client API request stored in a variable (#184)
1 parent b76ff35 commit c80233f

File tree

7 files changed

+96
-29
lines changed

7 files changed

+96
-29
lines changed

.changeset/warm-hornets-own.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() from client API request stored in a variable.

src/transforms/v2-to-v3/__fixtures__/api-promise/global-import.input.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ const client = new AWS.DynamoDB();
3232

3333
// Variable declarator
3434
const listTablesPromise = client.listTables().promise();
35+
36+
// Promise call on request in variable declarator
37+
const listTablesRequest = client.listTables();
38+
listTablesRequest
39+
.promise()
40+
.then((data) => console.log(data))
41+
.catch((err) => console.log(err, err.stack));
3542
}
3643

3744
// Promise with params

src/transforms/v2-to-v3/__fixtures__/api-promise/global-import.output.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ const client = new DynamoDB();
3131

3232
// Variable declarator
3333
const listTablesPromise = client.listTables();
34+
35+
// Promise call on request in variable declarator
36+
const listTablesRequest = client.listTables();
37+
listTablesRequest
38+
.then((data) => console.log(data))
39+
.catch((err) => console.log(err, err.stack));
3440
}
3541

3642
// Promise with params

src/transforms/v2-to-v3/__fixtures__/api-promise/service-import.input.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ const client = new DynamoDB();
3232

3333
// Variable declarator
3434
const listTablesPromise = client.listTables().promise();
35+
36+
// Promise call on request in variable declarator
37+
const listTablesRequest = client.listTables();
38+
listTablesRequest
39+
.promise()
40+
.then((data) => console.log(data))
41+
.catch((err) => console.log(err, err.stack));
3542
}
3643

3744
// Promise with params

src/transforms/v2-to-v3/__fixtures__/api-promise/service-import.output.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ const client = new DynamoDB();
3131

3232
// Variable declarator
3333
const listTablesPromise = client.listTables();
34+
35+
// Promise call on request in variable declarator
36+
const listTablesRequest = client.listTables();
37+
listTablesRequest
38+
.then((data) => console.log(data))
39+
.catch((err) => console.log(err, err.stack));
3440
}
3541

3642
// Promise with params
Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { CallExpression, Collection, JSCodeshift, MemberExpression } from "jscodeshift";
1+
import { Collection, Identifier, JSCodeshift } from "jscodeshift";
22

33
import { getV2ClientIdentifiers, getV2ClientIdThisExpressions } from "../get";
4+
import { removePromiseForCallExpression } from "./removePromiseForCallExpression";
45

56
export interface RemovePromiseCallsOptions {
67
v2ClientName: string;
@@ -20,6 +21,7 @@ export const removePromiseCalls = (
2021
const v2ClientIdThisExpressions = getV2ClientIdThisExpressions(j, source, v2ClientIdentifiers);
2122

2223
for (const v2ClientId of [...v2ClientIdentifiers, ...v2ClientIdThisExpressions]) {
24+
// Remove .promise() from client API calls.
2325
source
2426
.find(j.CallExpression, {
2527
callee: {
@@ -34,34 +36,37 @@ export const removePromiseCalls = (
3436
property: { type: "Identifier", name: "promise" },
3537
},
3638
})
37-
.forEach((callExpressionPath) => {
38-
switch (callExpressionPath.parentPath.value.type) {
39-
case "AwaitExpression":
40-
callExpressionPath.parentPath.value.argument = (
41-
callExpressionPath.value.callee as MemberExpression
42-
).object;
43-
break;
44-
case "MemberExpression":
45-
callExpressionPath.parentPath.value.object = (
46-
callExpressionPath.value.callee as MemberExpression
47-
).object;
48-
break;
49-
case "VariableDeclarator":
50-
callExpressionPath.parentPath.value.init = (
51-
callExpressionPath.value.callee as MemberExpression
52-
).object;
53-
break;
54-
case "ArrowFunctionExpression":
55-
case "ReturnStatement":
56-
callExpressionPath.value.callee = (
57-
(callExpressionPath.value.callee as MemberExpression).object as CallExpression
58-
).callee;
59-
break;
60-
default:
61-
throw new Error(
62-
`Removal of .promise() not implemented for ${callExpressionPath.parentPath.value.type}`
63-
);
64-
}
39+
.forEach((callExpression) => {
40+
removePromiseForCallExpression(callExpression);
41+
});
42+
43+
// Remove .promise() from client API request stored in a variable.
44+
source
45+
.find(j.VariableDeclarator, {
46+
id: { type: "Identifier" },
47+
init: {
48+
type: "CallExpression",
49+
callee: {
50+
type: "MemberExpression",
51+
object: v2ClientId,
52+
},
53+
},
54+
})
55+
.forEach((variableDeclarator) => {
56+
source
57+
.find(j.CallExpression, {
58+
callee: {
59+
type: "MemberExpression",
60+
object: {
61+
type: "Identifier",
62+
name: (variableDeclarator.value.id as Identifier).name,
63+
},
64+
property: { type: "Identifier", name: "promise" },
65+
},
66+
})
67+
.forEach((callExpression) => {
68+
removePromiseForCallExpression(callExpression);
69+
});
6570
});
6671
}
6772
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { ASTPath, CallExpression, MemberExpression } from "jscodeshift";
2+
3+
export const removePromiseForCallExpression = (callExpression: ASTPath<CallExpression>) => {
4+
switch (callExpression.parentPath.value.type) {
5+
case "AwaitExpression":
6+
callExpression.parentPath.value.argument = (
7+
callExpression.value.callee as MemberExpression
8+
).object;
9+
break;
10+
case "MemberExpression":
11+
callExpression.parentPath.value.object = (
12+
callExpression.value.callee as MemberExpression
13+
).object;
14+
break;
15+
case "VariableDeclarator":
16+
callExpression.parentPath.value.init = (
17+
callExpression.value.callee as MemberExpression
18+
).object;
19+
break;
20+
case "ArrowFunctionExpression":
21+
case "ReturnStatement":
22+
callExpression.value.callee = (
23+
(callExpression.value.callee as MemberExpression).object as CallExpression
24+
).callee;
25+
break;
26+
default:
27+
throw new Error(
28+
`Removal of .promise() not implemented for ${callExpression.parentPath.value.type}`
29+
);
30+
}
31+
};

0 commit comments

Comments
 (0)