Skip to content

Commit 9d2c537

Browse files
authored
Add utility getV2ClientNamesFromDefault (#226)
1 parent d80c999 commit 9d2c537

File tree

6 files changed

+53
-50
lines changed

6 files changed

+53
-50
lines changed

.changeset/chatty-beds-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+
Add utility getV2ClientNamesFromDefault

src/transforms/v2-to-v3/transformer.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import {
44
addV3ClientModules,
55
getClientMetadata,
66
getV2ClientNames,
7+
getV2ClientNamesFromDefault,
78
getV2DefaultModuleName,
8-
getV2ServiceModuleNames,
99
isTypeScriptFile,
1010
removeDefaultModuleIfNotUsed,
1111
removePromiseCalls,
@@ -18,13 +18,19 @@ export default function transformer(file: FileInfo, api: API) {
1818
const j = isTypeScriptFile(file.path) ? api.jscodeshift.withParser("ts") : api.jscodeshift;
1919
const source = j(file.source);
2020

21+
// ToDo: Make v2DefaultModuleName optional downstream as it can be undefined.
22+
// ToDo: Rename v2DefaultModuleName to v2GlobalName to align with v2ClientName.
2123
const v2DefaultModuleName = getV2DefaultModuleName(j, source) as string;
22-
const v2ServiceModuleNames = getV2ServiceModuleNames(j, source);
23-
if (!v2DefaultModuleName && v2ServiceModuleNames.length === 0) {
24+
const v2ClientNames = getV2ClientNames(j, source);
25+
26+
if (!v2DefaultModuleName && v2ClientNames.length === 0) {
2427
return source.toSource();
2528
}
2629

27-
const v2ClientNames = getV2ClientNames(j, source, { v2DefaultModuleName, v2ServiceModuleNames });
30+
if (v2DefaultModuleName) {
31+
v2ClientNames.push(...getV2ClientNamesFromDefault(j, source, v2DefaultModuleName));
32+
}
33+
2834
const clientMetadata = getClientMetadata(v2ClientNames);
2935

3036
for (const [v2ClientName, v3ClientMetadata] of Object.entries(clientMetadata).reverse()) {
Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
import { Collection, JSCodeshift } from "jscodeshift";
22

3-
import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates";
4-
import { getV2ClientNamesFromNewExpr } from "./getV2ClientNamesFromNewExpr";
5-
import { getV2ClientNamesFromTSTypeRef } from "./getV2ClientNamesFromTSTypeRef";
3+
import { CLIENT_NAMES } from "../config";
4+
import { containsRequire } from "../containsRequire";
5+
import { getImportSpecifiers } from "./getImportSpecifiers";
6+
import { getRequireIdentifierName } from "./getRequireIdentifierName";
7+
import { getV2ServiceModulePath } from "./getV2ServiceModulePath";
68

7-
export interface GetV2ClientNamesOptions {
8-
v2DefaultModuleName: string;
9-
v2ServiceModuleNames: string[];
10-
}
9+
export const getV2ClientNames = (j: JSCodeshift, source: Collection<unknown>): string[] => {
10+
if (containsRequire(j, source)) {
11+
return CLIENT_NAMES.map((clientName) =>
12+
getRequireIdentifierName(j, source, getV2ServiceModulePath(clientName))
13+
).filter((v2ServiceModuleName) => v2ServiceModuleName !== undefined) as string[];
14+
}
1115

12-
export const getV2ClientNames = (
13-
j: JSCodeshift,
14-
source: Collection<unknown>,
15-
{ v2DefaultModuleName, v2ServiceModuleNames }: GetV2ClientNamesOptions
16-
): string[] => {
17-
const v2ClientNamesFromNewExpr = getV2ClientNamesFromNewExpr(j, source, v2DefaultModuleName);
18-
const v2ClientNamesFromTSTypeRef = getV2ClientNamesFromTSTypeRef(j, source, v2DefaultModuleName);
19-
20-
return getMergedArrayWithoutDuplicates(
21-
getMergedArrayWithoutDuplicates(v2ClientNamesFromNewExpr, v2ClientNamesFromTSTypeRef),
22-
v2ServiceModuleNames
23-
);
16+
return CLIENT_NAMES.filter((clientName) => {
17+
const importSpecifiers = getImportSpecifiers(j, source, getV2ServiceModulePath(clientName));
18+
if (
19+
importSpecifiers &&
20+
importSpecifiers.map((importSpecifier) => importSpecifier.local?.name).includes(clientName)
21+
) {
22+
return true;
23+
}
24+
return false;
25+
});
2426
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { Collection, JSCodeshift } from "jscodeshift";
2+
3+
import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates";
4+
import { getV2ClientNamesFromNewExpr } from "./getV2ClientNamesFromNewExpr";
5+
import { getV2ClientNamesFromTSTypeRef } from "./getV2ClientNamesFromTSTypeRef";
6+
7+
export const getV2ClientNamesFromDefault = (
8+
j: JSCodeshift,
9+
source: Collection<unknown>,
10+
v2DefaultModuleName: string
11+
): string[] => {
12+
const v2ClientNamesFromNewExpr = getV2ClientNamesFromNewExpr(j, source, v2DefaultModuleName);
13+
const v2ClientNamesFromTSTypeRef = getV2ClientNamesFromTSTypeRef(j, source, v2DefaultModuleName);
14+
15+
return getMergedArrayWithoutDuplicates(v2ClientNamesFromNewExpr, v2ClientNamesFromTSTypeRef);
16+
};

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

Lines changed: 0 additions & 26 deletions
This file was deleted.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ export * from "./getRequireVariableDeclaration";
33
export * from "./getV2ClientIdentifiers";
44
export * from "./getV2ClientIdThisExpressions";
55
export * from "./getV2ClientNames";
6+
export * from "./getV2ClientNamesFromDefault";
67
export * from "./getV2ClientTypeNames";
78
export * from "./getV2DefaultModuleName";
8-
export * from "./getV2ServiceModuleNames";
99
export * from "./getV2ServiceModulePath";
1010
export * from "./getV3ClientTypeName";
1111
export * from "./getV3ClientTypeNames";

0 commit comments

Comments
 (0)