Skip to content

Commit 52d8543

Browse files
authored
Add utility getV3ClientTypeName* which returns string (#217)
1 parent b37ff19 commit 52d8543

11 files changed

+117
-114
lines changed

src/transforms/v2-to-v3/utils/add/addV3ClientImports.ts

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

33
import { PACKAGE_NAME } from "../config";
4-
import { getV2ServiceModulePath, getV3ClientTypes } from "../get";
4+
import { getV2ServiceModulePath, getV3ClientTypeNames } from "../get";
55
import { addV3ClientModuleImport } from "./addV3ClientModuleImport";
66
import { AddV3ClientModulesOptions } from "./addV3ClientModules";
77

@@ -41,17 +41,14 @@ export const addV3ClientImports = (
4141
}
4242

4343
// Add require for input/output types, if needed.
44-
const v3ClientTypes = getV3ClientTypes(j, source, { v2ClientName, v2DefaultModuleName });
44+
const v3ClientTypeNames = getV3ClientTypeNames(j, source, { v2ClientName, v2DefaultModuleName });
4545

46-
if (v3ClientTypes.length > 0) {
46+
if (v3ClientTypeNames.length > 0) {
4747
const clientImports = source.find(j.ImportDeclaration, {
4848
source: { value: v3ClientPackageName },
4949
});
50-
for (const v3ClientType of v3ClientTypes.sort()) {
51-
const v3ClientTypeName = (v3ClientType.typeName as Identifier).name;
52-
if (v3ClientTypeName.endsWith("CommandInput") || v3ClientTypeName.endsWith("CommandOutput")) {
53-
addV3ClientModuleImport(j, clientImports, v3ClientTypeName);
54-
}
50+
for (const v3ClientTypeName of v3ClientTypeNames.sort()) {
51+
addV3ClientModuleImport(j, clientImports, v3ClientTypeName);
5552
}
5653
}
5754
};
Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
11
import { Collection, Identifier, JSCodeshift } from "jscodeshift";
22

33
import { PACKAGE_NAME } from "../config";
4-
import { getRequireVariableDeclaration, getV2ServiceModulePath, getV3ClientTypes } from "../get";
4+
import {
5+
getRequireVariableDeclaration,
6+
getV2ServiceModulePath,
7+
getV3ClientTypeNames,
8+
} from "../get";
59
import { addV3ClientModuleRequire } from "./addV3ClientModuleRequire";
610
import { AddV3ClientModulesOptions } from "./addV3ClientModules";
711

12+
const getClientProperty = (j: JSCodeshift, name: Identifier) =>
13+
j.property.from({
14+
kind: "init",
15+
key: name,
16+
shorthand: true,
17+
value: name,
18+
});
19+
820
export const addV3ClientRequires = (
921
j: JSCodeshift,
1022
source: Collection<unknown>,
@@ -15,14 +27,7 @@ export const addV3ClientRequires = (
1527
v2DefaultModuleName,
1628
}: AddV3ClientModulesOptions
1729
): void => {
18-
const v3ClientNameIdentifier = j.identifier(v3ClientName);
19-
const v3ClientNameProperty = j.property.from({
20-
kind: "init",
21-
key: v3ClientNameIdentifier,
22-
shorthand: true,
23-
value: v3ClientNameIdentifier,
24-
});
25-
30+
const v3ClientNameProperty = getClientProperty(j, j.identifier(v3ClientName));
2631
const existingRequires = getRequireVariableDeclaration(j, source, v3ClientPackageName);
2732

2833
// Require declaration already exists.
@@ -49,22 +54,13 @@ export const addV3ClientRequires = (
4954
}
5055

5156
// Add require for input/output types, if needed.
52-
const v3ClientTypes = getV3ClientTypes(j, source, { v2ClientName, v2DefaultModuleName });
57+
const v3ClientTypeNames = getV3ClientTypeNames(j, source, { v2ClientName, v2DefaultModuleName });
5358

54-
if (v3ClientTypes.length > 0) {
59+
if (v3ClientTypeNames.length > 0) {
5560
const clientRequires = getRequireVariableDeclaration(j, source, v3ClientPackageName);
56-
for (const v3ClientType of v3ClientTypes.sort()) {
57-
const v3ClientTypeName = (v3ClientType.typeName as Identifier).name;
58-
if (v3ClientTypeName.endsWith("CommandInput") || v3ClientTypeName.endsWith("CommandOutput")) {
59-
const v3ClientTypeNameIdentifier = j.identifier(v3ClientTypeName);
60-
const v3ClientTypeNameProperty = j.property.from({
61-
kind: "init",
62-
key: v3ClientTypeNameIdentifier,
63-
shorthand: true,
64-
value: v3ClientTypeNameIdentifier,
65-
});
66-
addV3ClientModuleRequire(j, clientRequires, v3ClientTypeNameProperty);
67-
}
61+
for (const v3ClientTypeName of v3ClientTypeNames.sort()) {
62+
const v3ClientTypeNameProperty = getClientProperty(j, j.identifier(v3ClientTypeName));
63+
addV3ClientModuleRequire(j, clientRequires, v3ClientTypeNameProperty);
6864
}
6965
}
7066
};
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { Collection, Identifier, JSCodeshift, TSQualifiedName, TSTypeReference } from "jscodeshift";
2+
3+
export interface GetV2ClientTypeNamesOptions {
4+
v2ClientName: string;
5+
v2DefaultModuleName: string;
6+
}
7+
8+
const getRightIdentifierName = (node: TSTypeReference) =>
9+
((node.typeName as TSQualifiedName).right as Identifier).name;
10+
11+
export const getV2ClientTypeNames = (
12+
j: JSCodeshift,
13+
source: Collection<unknown>,
14+
{ v2ClientName, v2DefaultModuleName }: GetV2ClientTypeNamesOptions
15+
): string[] => {
16+
const v2DefaultTypeName = {
17+
typeName: {
18+
left: {
19+
left: { type: "Identifier", name: v2DefaultModuleName },
20+
right: { type: "Identifier", name: v2ClientName },
21+
},
22+
},
23+
} as TSTypeReference;
24+
25+
const v2ClientTypeName = {
26+
typeName: {
27+
left: { type: "Identifier", name: v2ClientName },
28+
},
29+
} as TSTypeReference;
30+
31+
return [
32+
...source
33+
.find(j.TSTypeReference, v2DefaultTypeName)
34+
.nodes()
35+
.map((node) => getRightIdentifierName(node)),
36+
...source
37+
.find(j.TSTypeReference, v2ClientTypeName)
38+
.nodes()
39+
.map((node) => getRightIdentifierName(node)),
40+
];
41+
};

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

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

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

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { ASTPath, Identifier, JSCodeshift, TSQualifiedName, TSTypeReference } from "jscodeshift";
2+
3+
import { getV3ClientTypeName } from "./getV3ClientTypeName";
4+
5+
export const getV3ClientType = (j: JSCodeshift, v2ClientType: ASTPath<TSTypeReference>) => {
6+
const v3ClientType = getV3ClientTypeName(
7+
((v2ClientType.node.typeName as TSQualifiedName).right as Identifier).name
8+
);
9+
if (!v3ClientType) {
10+
return v2ClientType.node;
11+
}
12+
return j.tsTypeReference(j.identifier(v3ClientType));
13+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export const getV3ClientTypeName = (v2ClientTypeName: string) => {
2+
if (v2ClientTypeName.endsWith("Input")) {
3+
return v2ClientTypeName.replace(/Input$/, "CommandInput");
4+
}
5+
6+
if (v2ClientTypeName.endsWith("Output")) {
7+
return v2ClientTypeName.replace(/Output$/, "CommandOutput");
8+
}
9+
10+
return undefined;
11+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Collection, JSCodeshift } from "jscodeshift";
2+
3+
import { getV2ClientTypeNames, GetV2ClientTypeNamesOptions } from "./getV2ClientTypeNames";
4+
import { getV3ClientTypeName } from "./getV3ClientTypeName";
5+
6+
export const getV3ClientTypeNames = (
7+
j: JSCodeshift,
8+
source: Collection<unknown>,
9+
options: GetV2ClientTypeNamesOptions
10+
) =>
11+
getV2ClientTypeNames(j, source, options)
12+
.map((v2ClientTypeName) => getV3ClientTypeName(v2ClientTypeName))
13+
.filter((v3ClientTypeName) => v3ClientTypeName !== undefined) as string[];

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

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

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ export * from "./getV2ClientNames";
66
export * from "./getV2DefaultModuleName";
77
export * from "./getV2ServiceModuleNames";
88
export * from "./getV2ServiceModulePath";
9-
export * from "./getV3ClientInputOutputType";
10-
export * from "./getV3ClientTypes";
9+
export * from "./getV3ClientType";
10+
export * from "./getV3ClientTypeNames";

0 commit comments

Comments
 (0)