Skip to content

Commit 5896f7a

Browse files
authored
Remove transformation for types with type annotation (#619)
1 parent 0296d75 commit 5896f7a

File tree

5 files changed

+69
-65
lines changed

5 files changed

+69
-65
lines changed

.changeset/strange-foxes-yawn.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 transformation for types with type annotation

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {
2424
removeClientModule,
2525
removeGlobalModule,
2626
} from "./modules";
27-
import { replaceTSQualifiedName } from "./ts-type";
27+
import { replaceTSTypeReference } from "./ts-type";
2828
import { isTypeScriptFile } from "./utils";
2929

3030
const transformer = async (file: FileInfo, api: API) => {
@@ -72,7 +72,7 @@ const transformer = async (file: FileInfo, api: API) => {
7272
const v3Options = { v3ClientName, v3ClientPackageName };
7373

7474
addClientModules(j, source, { ...v2Options, ...v3Options, clientIdentifiers, importType });
75-
replaceTSQualifiedName(j, source, { ...v2Options, v3ClientName });
75+
replaceTSTypeReference(j, source, { ...v2Options, v3ClientName });
7676
removeClientModule(j, source, { ...v2Options, importType });
7777

7878
if (v2ClientName === S3) {

src/transforms/v2-to-v3/ts-type/getClientTypeNames.ts

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

33
import { getImportSpecifiers } from "../modules";
44
import { getClientDeepImportPath } from "../utils";
@@ -14,13 +14,12 @@ type DeepPartial<T> = Partial<{ [P in keyof T]: DeepPartial<T[P]> }>;
1414
const getRightIdentifierName = (
1515
j: JSCodeshift,
1616
source: Collection<unknown>,
17-
tsQualifiedName: DeepPartial<TSQualifiedName>
17+
tsTypeRef: DeepPartial<TSTypeReference>
1818
) =>
1919
source
20-
.find(j.TSQualifiedName, tsQualifiedName)
21-
.filter((tsQualifiedName) => tsQualifiedName.parentPath?.value.type !== "TSQualifiedName")
20+
.find(j.TSTypeReference, tsTypeRef)
2221
.nodes()
23-
.map((node) => node.right)
22+
.map((node) => (node.typeName as TSQualifiedName).right)
2423
.filter((node) => node.type === "Identifier")
2524
.map((node) => (node as Identifier).name);
2625

@@ -37,19 +36,21 @@ export const getClientTypeNames = (
3736

3837
clientTypeNames.push(
3938
...getRightIdentifierName(j, source, {
40-
left: {
41-
...(subClientName
42-
? {
43-
left: {
39+
typeName: {
40+
left: {
41+
...(subClientName
42+
? {
43+
left: {
44+
left: { type: "Identifier", name: v2GlobalName },
45+
right: { type: "Identifier", name: clientName },
46+
},
47+
right: { type: "Identifier", name: subClientName },
48+
}
49+
: {
4450
left: { type: "Identifier", name: v2GlobalName },
4551
right: { type: "Identifier", name: clientName },
46-
},
47-
right: { type: "Identifier", name: subClientName },
48-
}
49-
: {
50-
left: { type: "Identifier", name: v2GlobalName },
51-
right: { type: "Identifier", name: clientName },
52-
}),
52+
}),
53+
},
5354
},
5455
})
5556
);
@@ -60,14 +61,16 @@ export const getClientTypeNames = (
6061

6162
clientTypeNames.push(
6263
...getRightIdentifierName(j, source, {
63-
...(subClientName
64-
? {
65-
left: {
66-
left: { type: "Identifier", name: clientName },
67-
right: { type: "Identifier", name: subClientName },
68-
},
69-
}
70-
: { left: { type: "Identifier", name: clientName } }),
64+
typeName: {
65+
...(subClientName
66+
? {
67+
left: {
68+
left: { type: "Identifier", name: clientName },
69+
right: { type: "Identifier", name: subClientName },
70+
},
71+
}
72+
: { left: { type: "Identifier", name: clientName } }),
73+
},
7174
})
7275
);
7376

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
export * from "./getClientTypeNames";
22
export * from "./getV3ClientType";
33
export * from "./getV3ClientTypes";
4-
export * from "./replaceTSQualifiedName";
4+
export * from "./replaceTSTypeReference";

src/transforms/v2-to-v3/ts-type/replaceTSQualifiedName.ts renamed to src/transforms/v2-to-v3/ts-type/replaceTSTypeReference.ts

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,50 @@
1-
import { ASTPath, Collection, Identifier, JSCodeshift, TSQualifiedName } from "jscodeshift";
1+
import { Collection, Identifier, JSCodeshift, TSQualifiedName, TSTypeReference } from "jscodeshift";
22

33
import { DOCUMENT_CLIENT, DYNAMODB, DYNAMODB_DOCUMENT_CLIENT } from "../config";
44
import { getClientTypeNames } from "./getClientTypeNames";
55
import { getTSQualifiedNameFromClientName } from "./getTSQualifiedNameFromClientName";
66
import { getV3ClientType } from "./getV3ClientType";
77

8-
export interface ReplaceTSQualifiedNameOptions {
8+
export interface ReplaceTSTypeReferenceOptions {
99
v2ClientName: string;
1010
v2ClientLocalName: string;
1111
v2GlobalName?: string;
1212
v3ClientName: string;
1313
}
1414

15-
const isRightSectionIdentifier = (node: TSQualifiedName) => node.right.type === "Identifier";
15+
const isRightSectionIdentifier = (node: TSTypeReference) =>
16+
(node.typeName as TSQualifiedName).right.type === "Identifier";
1617

17-
const getRightIdentifierName = (node: TSQualifiedName) => (node.right as Identifier).name;
18-
19-
const isParentTSQualifiedName = (node: ASTPath<TSQualifiedName>) =>
20-
node.parentPath?.value.type === "TSQualifiedName";
18+
const getRightIdentifierName = (node: TSTypeReference) =>
19+
((node.typeName as TSQualifiedName).right as Identifier).name;
2120

2221
// Replace v2 client type reference with v3 client type reference.
23-
export const replaceTSQualifiedName = (
22+
export const replaceTSTypeReference = (
2423
j: JSCodeshift,
2524
source: Collection<unknown>,
26-
options: ReplaceTSQualifiedNameOptions
25+
options: ReplaceTSTypeReferenceOptions
2726
): void => {
2827
const { v2ClientName, v2ClientLocalName, v2GlobalName, v3ClientName } = options;
2928
const clientTypeOptions = { v2ClientName, v2ClientLocalName };
3029

3130
if (v2GlobalName) {
3231
// Replace type reference to client created with global name.
3332
source
34-
.find(j.TSQualifiedName, getTSQualifiedNameFromClientName(v2GlobalName, v2ClientName))
35-
.filter((v2ClientType) => !isParentTSQualifiedName(v2ClientType))
36-
.replaceWith(() => j.tsTypeReference(j.identifier(v3ClientName)));
33+
.find(j.TSTypeReference, {
34+
typeName: getTSQualifiedNameFromClientName(v2GlobalName, v2ClientName),
35+
})
36+
.replaceWith((v2ClientType) =>
37+
j.tsTypeReference(j.identifier(v3ClientName), v2ClientType.node.typeParameters)
38+
);
3739

3840
// Replace reference to client types created with global name.
3941
source
40-
.find(j.TSQualifiedName, {
41-
left: getTSQualifiedNameFromClientName(v2GlobalName, v2ClientName),
42+
.find(j.TSTypeReference, {
43+
typeName: {
44+
left: getTSQualifiedNameFromClientName(v2GlobalName, v2ClientName),
45+
},
4246
})
43-
.filter(
44-
(v2ClientType) =>
45-
isRightSectionIdentifier(v2ClientType.node) && !isParentTSQualifiedName(v2ClientType)
46-
)
47+
.filter((v2ClientType) => isRightSectionIdentifier(v2ClientType.node))
4748
.replaceWith((v2ClientType) => {
4849
const v2ClientTypeName = getRightIdentifierName(v2ClientType.node);
4950
return getV3ClientType(j, { ...clientTypeOptions, v2ClientTypeName });
@@ -53,20 +54,19 @@ export const replaceTSQualifiedName = (
5354
const [clientNamePrefix, clientNameSuffix] = v2ClientLocalName.split(".");
5455
// Replace reference to client types created with client module.
5556
source
56-
.find(j.TSQualifiedName, {
57-
...(clientNameSuffix
58-
? {
59-
left: {
60-
left: { type: "Identifier", name: clientNamePrefix },
61-
right: { type: "Identifier", name: clientNameSuffix },
62-
},
63-
}
64-
: { left: { type: "Identifier", name: clientNamePrefix } }),
57+
.find(j.TSTypeReference, {
58+
typeName: {
59+
...(clientNameSuffix
60+
? {
61+
left: {
62+
left: { type: "Identifier", name: clientNamePrefix },
63+
right: { type: "Identifier", name: clientNameSuffix },
64+
},
65+
}
66+
: { left: { type: "Identifier", name: clientNamePrefix } }),
67+
},
6568
})
66-
.filter(
67-
(v2ClientType) =>
68-
isRightSectionIdentifier(v2ClientType.node) && !isParentTSQualifiedName(v2ClientType)
69-
)
69+
.filter((v2ClientType) => isRightSectionIdentifier(v2ClientType.node))
7070
.replaceWith((v2ClientType) => {
7171
const v2ClientTypeName = getRightIdentifierName(v2ClientType.node);
7272
return getV3ClientType(j, { ...clientTypeOptions, v2ClientTypeName });
@@ -81,19 +81,15 @@ export const replaceTSQualifiedName = (
8181

8282
for (const clientTypeName of clientTypeNames) {
8383
source
84-
.find(j.Identifier, { name: clientTypeName })
85-
.filter(
86-
(v2ClientType) =>
87-
!["TSQualifiedName", "ImportSpecifier"].includes(v2ClientType.parentPath?.value.type)
88-
)
84+
.find(j.TSTypeReference, { typeName: { type: "Identifier", name: clientTypeName } })
8985
.replaceWith((v2ClientType) => {
90-
const v2ClientTypeName = v2ClientType.node.name;
86+
const v2ClientTypeName = (v2ClientType.node.typeName as Identifier).name;
9187
return getV3ClientType(j, { ...clientTypeOptions, v2ClientTypeName });
9288
});
9389
}
9490

9591
if (v2ClientName === DYNAMODB) {
96-
replaceTSQualifiedName(j, source, {
92+
replaceTSTypeReference(j, source, {
9793
...options,
9894
v2ClientName: DYNAMODB_DOCUMENT_CLIENT,
9995
v2ClientLocalName: `${v2ClientLocalName}.${DOCUMENT_CLIENT}`,

0 commit comments

Comments
 (0)