Skip to content

Commit 27a2f24

Browse files
authored
Add utility getV2ClientNewExpression (#224)
1 parent 9d2c537 commit 27a2f24

File tree

6 files changed

+51
-31
lines changed

6 files changed

+51
-31
lines changed

.changeset/chilly-hats-clap.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+
Add utility getV2ClientNewExpression

src/transforms/v2-to-v3/utils/get/getV2ClientIdNamesFromNewExpr.ts

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

33
import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates";
4+
import { getV2ClientNewExpression } from "./getV2ClientNewExpression";
45

56
export interface GetV2ClientIdNamesFromNewExprOptions {
67
v2ClientName: string;
@@ -38,25 +39,14 @@ export const getV2ClientIdNamesFromNewExpr = (
3839
source: Collection<unknown>,
3940
{ v2DefaultModuleName, v2ClientName }: GetV2ClientIdNamesFromNewExprOptions
4041
): 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-
5442
const namesFromDefaultModule = [];
5543
const namesFromServiceModule = [];
5644

5745
for (const getNames of [getNamesFromVariableDeclarator, getNamesFromAssignmentPattern]) {
58-
namesFromDefaultModule.push(...getNames(j, source, defaultNewExpr));
59-
namesFromServiceModule.push(...getNames(j, source, clientNewExpr));
46+
namesFromDefaultModule.push(
47+
...getNames(j, source, getV2ClientNewExpression({ v2DefaultModuleName, v2ClientName }))
48+
);
49+
namesFromServiceModule.push(...getNames(j, source, getV2ClientNewExpression({ v2ClientName })));
6050
}
6151

6252
return getMergedArrayWithoutDuplicates(namesFromDefaultModule, namesFromServiceModule);

src/transforms/v2-to-v3/utils/get/getV2ClientNamesFromNewExpr.ts

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

3+
import { getV2ClientNewExpression } from "../get";
4+
35
export const getV2ClientNamesFromNewExpr = (
46
j: JSCodeshift,
57
source: Collection<unknown>,
68
v2DefaultModuleName: string
79
): string[] =>
810
source
9-
.find(j.NewExpression, {
10-
callee: {
11-
type: "MemberExpression",
12-
object: { type: "Identifier", name: v2DefaultModuleName },
13-
property: { type: "Identifier" },
14-
},
15-
})
11+
.find(j.NewExpression, getV2ClientNewExpression({ v2DefaultModuleName }))
1612
.nodes()
1713
.map(
1814
(newExpression) => ((newExpression.callee as MemberExpression).property as Identifier).name
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { NewExpression } from "jscodeshift";
2+
3+
export interface ClientNewExpressionOptions {
4+
v2DefaultModuleName?: string;
5+
v2ClientName?: string;
6+
isDocumentClient?: boolean;
7+
}
8+
9+
export const getV2ClientNewExpression = ({
10+
v2DefaultModuleName,
11+
v2ClientName,
12+
}: ClientNewExpressionOptions): NewExpression => {
13+
if (!v2DefaultModuleName && !v2ClientName) {
14+
throw new Error(
15+
`At least one of the following options must be provided: v2DefaultModuleName, v2ClientName`
16+
);
17+
}
18+
19+
if (v2DefaultModuleName) {
20+
return {
21+
type: "NewExpression",
22+
callee: {
23+
object: { type: "Identifier", name: v2DefaultModuleName },
24+
property: { type: "Identifier", ...(v2ClientName && { name: v2ClientName }) },
25+
},
26+
} as NewExpression;
27+
}
28+
29+
return {
30+
type: "NewExpression",
31+
callee: { type: "Identifier", name: v2ClientName },
32+
} as NewExpression;
33+
};

src/transforms/v2-to-v3/utils/get/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export * from "./getV2ClientIdentifiers";
44
export * from "./getV2ClientIdThisExpressions";
55
export * from "./getV2ClientNames";
66
export * from "./getV2ClientNamesFromDefault";
7+
export * from "./getV2ClientNewExpression";
78
export * from "./getV2ClientTypeNames";
89
export * from "./getV2DefaultModuleName";
910
export * from "./getV2ServiceModulePath";

src/transforms/v2-to-v3/utils/replace/replaceClientCreation.ts

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

3+
import { getV2ClientNewExpression } from "../get";
4+
35
export interface ReplaceClientCreationOptions {
46
v2ClientName: string;
57
v3ClientName: string;
@@ -14,12 +16,7 @@ export const replaceClientCreation = (
1416
): void => {
1517
// Replace clients created with default module.
1618
source
17-
.find(j.NewExpression, {
18-
callee: {
19-
object: { type: "Identifier", name: v2DefaultModuleName },
20-
property: { type: "Identifier", name: v2ClientName },
21-
},
22-
})
19+
.find(j.NewExpression, getV2ClientNewExpression({ v2DefaultModuleName, v2ClientName }))
2320
.replaceWith((nodePath) => {
2421
const { node } = nodePath;
2522
node.callee = j.identifier(v3ClientName);
@@ -28,9 +25,7 @@ export const replaceClientCreation = (
2825

2926
// Replace clients created with client module.
3027
source
31-
.find(j.NewExpression, {
32-
callee: { type: "Identifier", name: v2ClientName },
33-
})
28+
.find(j.NewExpression, getV2ClientNewExpression({ v2ClientName }))
3429
.replaceWith((nodePath) => {
3530
const { node } = nodePath;
3631
node.callee = j.identifier(v3ClientName);

0 commit comments

Comments
 (0)