Skip to content

Commit 05b4714

Browse files
authored
Add utility importEqualsModule getImportSpecifiers (#790)
1 parent 9f8d6dc commit 05b4714

13 files changed

+76
-91
lines changed

.changeset/gorgeous-bees-fly.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 importEqualsModule getImportSpecifiers

src/transforms/v2-to-v3/client-names/getClientNamesRecordFromImport.ts

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

33
import { CLIENT_NAMES, PACKAGE_NAME } from "../config";
4-
import { getImportEqualsDeclarationType } from "../modules";
4+
import { getImportSpecifiers as getImportEqualsSpecifiers } from "../modules/importEqualsModule";
55
import { getImportSpecifiers } from "../modules/importModule";
66
import { getClientDeepImportPath } from "../utils";
77

@@ -33,12 +33,9 @@ export const getClientNamesRecordFromImport = (
3333
clientNamesRecord[clientName] = specifiersFromDeepImport[0].localName;
3434
}
3535

36-
const identifiersFromImportEquals = source.find(
37-
j.TSImportEqualsDeclaration,
38-
getImportEqualsDeclarationType(deepImportPath)
39-
);
36+
const identifiersFromImportEquals = getImportEqualsSpecifiers(j, source, deepImportPath);
4037
if (identifiersFromImportEquals.length > 0) {
41-
clientNamesRecord[clientName] = identifiersFromImportEquals.nodes()[0]?.id.name;
38+
clientNamesRecord[clientName] = identifiersFromImportEquals[0].localName;
4239
}
4340
}
4441

src/transforms/v2-to-v3/modules/getGlobalNameFromModule.ts

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

33
import { PACKAGE_NAME } from "../config";
4-
import { getImportEqualsDeclarationType } from "./getImportEqualsDeclarationType";
4+
import { getImportSpecifiers as getImportEqualsSpecifiers } from "../modules/importEqualsModule";
55
import { getImportSpecifiers } from "./importModule";
66
import { getRequireDeclarators } from "./requireModule";
77

@@ -25,13 +25,10 @@ export const getGlobalNameFromModule = (
2525
return importDefaultSpecifiers[0].localName;
2626
}
2727

28-
const importEqualsDeclarations = source.find(
29-
j.TSImportEqualsDeclaration,
30-
getImportEqualsDeclarationType(PACKAGE_NAME)
31-
);
28+
const importEqualsDeclarations = getImportEqualsSpecifiers(j, source, PACKAGE_NAME);
3229

3330
if (importEqualsDeclarations.length > 0) {
34-
return importEqualsDeclarations.nodes()[0]?.id?.name;
31+
return importEqualsDeclarations[0].localName;
3532
}
3633

3734
return undefined;

src/transforms/v2-to-v3/modules/getImportEqualsDeclarationType.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,5 @@
11
import { Collection, JSCodeshift } from "jscodeshift";
2-
3-
import { PACKAGE_NAME } from "../config";
4-
import { getImportEqualsDeclarationType } from "./getImportEqualsDeclarationType";
2+
import { getImportEqualsDeclarations } from "./importEqualsModule";
53

64
export const hasImportEquals = (j: JSCodeshift, source: Collection<unknown>) =>
7-
source
8-
.find(j.TSImportEqualsDeclaration, getImportEqualsDeclarationType())
9-
.filter((importEqualsDeclaration) => {
10-
const { moduleReference } = importEqualsDeclaration.value;
11-
if (moduleReference.type !== "TSExternalModuleReference") return false;
12-
const { expression } = moduleReference;
13-
return (
14-
expression.type === "StringLiteral" &&
15-
typeof expression.value === "string" &&
16-
expression.value.startsWith(PACKAGE_NAME)
17-
);
18-
})
19-
.size() > 0;
5+
getImportEqualsDeclarations(j, source).size() > 0;

src/transforms/v2-to-v3/modules/importEqualsModule/addDefaultModule.ts

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

3-
import { PACKAGE_NAME } from "../../config";
4-
import { getImportEqualsDeclarationType } from "../getImportEqualsDeclarationType";
3+
import { getImportEqualsDeclarations, getImportSpecifiers } from "../importEqualsModule";
54
import { getDefaultName } from "./getDefaultName";
65

76
export const addDefaultModule = (
@@ -10,16 +9,11 @@ export const addDefaultModule = (
109
packageName: string
1110
) => {
1211
const defaultLocalName = getDefaultName(packageName);
13-
const existingImportEquals = source.find(
14-
j.TSImportEqualsDeclaration,
15-
getImportEqualsDeclarationType(packageName)
16-
);
12+
const existingImportEquals = getImportSpecifiers(j, source, packageName);
1713

18-
if (existingImportEquals.size()) {
14+
if (existingImportEquals.length > 0) {
1915
if (
20-
existingImportEquals
21-
.nodes()
22-
.some((importEqualsDeclaration) => importEqualsDeclaration.id.name === defaultLocalName)
16+
existingImportEquals.some((importSpecifier) => importSpecifier.localName === defaultLocalName)
2317
) {
2418
return;
2519
}
@@ -31,16 +25,7 @@ export const addDefaultModule = (
3125
j.tsExternalModuleReference(j.stringLiteral(packageName))
3226
);
3327

34-
const v2ImportEquals = source
35-
.find(j.TSImportEqualsDeclaration, getImportEqualsDeclarationType())
36-
.filter((importEqualsDeclaration) => {
37-
const { moduleReference } = importEqualsDeclaration.value;
38-
if (moduleReference.type !== "TSExternalModuleReference") return false;
39-
const { expression } = moduleReference;
40-
if (expression.type !== "StringLiteral") return false;
41-
const { value } = expression;
42-
return value.startsWith(PACKAGE_NAME);
43-
});
28+
const v2ImportEquals = getImportEqualsDeclarations(j, source);
4429

4530
if (v2ImportEquals.size()) {
4631
// Insert it after the first import equals declaration.

src/transforms/v2-to-v3/modules/importEqualsModule/addNamedModule.ts

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

3-
import { getImportEqualsDeclarationType } from "../getImportEqualsDeclarationType";
43
import { ModulesOptions } from "../types";
54
import { addDefaultModule } from "./addDefaultModule";
65
import { getDefaultName } from "./getDefaultName";
6+
import { getImportEqualsDeclarations } from "./getImportEqualsDeclarations";
7+
import { getImportSpecifiers } from "./getImportSpecifiers";
78

89
export const addNamedModule = (
910
j: JSCodeshift,
@@ -16,29 +17,19 @@ export const addNamedModule = (
1617

1718
const existingDeclaration = source.find(j.TSImportEqualsDeclaration, {
1819
type: "TSImportEqualsDeclaration",
19-
id: {
20-
type: "Identifier",
21-
name: localName,
22-
},
20+
id: { type: "Identifier", name: localName },
2321
moduleReference: {
2422
type: "TSQualifiedName",
25-
left: {
26-
type: "Identifier",
27-
name: defaultLocalName,
28-
},
29-
right: {
30-
type: "Identifier",
31-
name: importedName,
32-
},
23+
left: { type: "Identifier", name: defaultLocalName },
24+
right: { type: "Identifier", name: importedName },
3325
},
3426
});
3527

3628
if (existingDeclaration.size()) {
3729
return;
3830
}
3931

40-
const defaultDeclaration = getImportEqualsDeclarationType(packageName);
41-
if (source.find(j.TSImportEqualsDeclaration, defaultDeclaration).size() === 0) {
32+
if (getImportSpecifiers(j, source, packageName).length === 0) {
4233
addDefaultModule(j, source, packageName);
4334
}
4435

@@ -47,11 +38,9 @@ export const addNamedModule = (
4738
j.tsQualifiedName(j.identifier(defaultLocalName), j.identifier(importedName))
4839
);
4940

50-
const v3ClientImportEquals = source
51-
.find(j.TSImportEqualsDeclaration, defaultDeclaration)
52-
.filter(
53-
(importEqualsDeclaration) => importEqualsDeclaration.value.id.name === defaultLocalName
54-
);
41+
const v3ClientImportEquals = getImportEqualsDeclarations(j, source, packageName).filter(
42+
(importEqualsDeclaration) => importEqualsDeclaration.value.id.name === defaultLocalName
43+
);
5544

5645
// Insert import equals after the package import equals.
5746
if (v3ClientImportEquals.size() > 0) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { Collection, JSCodeshift, StringLiteral, TSExternalModuleReference } from "jscodeshift";
2+
import { PACKAGE_NAME } from "../../config";
3+
4+
export const getImportEqualsDeclarations = (
5+
j: JSCodeshift,
6+
source: Collection<unknown>,
7+
path?: string
8+
) =>
9+
source
10+
.find(j.TSImportEqualsDeclaration, {
11+
type: "TSImportEqualsDeclaration",
12+
moduleReference: {
13+
type: "TSExternalModuleReference",
14+
expression: { type: "StringLiteral" },
15+
},
16+
})
17+
.filter((importEqualsDeclaration) => {
18+
const moduleReference = importEqualsDeclaration.value
19+
.moduleReference as TSExternalModuleReference;
20+
const expressionValue = (moduleReference.expression as StringLiteral).value;
21+
if (path) {
22+
return expressionValue === path;
23+
}
24+
return expressionValue.startsWith(PACKAGE_NAME);
25+
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Collection, JSCodeshift } from "jscodeshift";
2+
import { ImportSpecifierType } from "../types";
3+
import { getImportEqualsDeclarations } from "./getImportEqualsDeclarations";
4+
5+
export const getImportSpecifiers = (
6+
j: JSCodeshift,
7+
source: Collection<unknown>,
8+
path?: string
9+
): ImportSpecifierType[] => {
10+
const importSpecifiers = new Set<ImportSpecifierType>();
11+
12+
getImportEqualsDeclarations(j, source, path).forEach((importEqualsDeclaration) => {
13+
importSpecifiers.add({ localName: importEqualsDeclaration.value.id.name });
14+
});
15+
16+
return Array.from(importSpecifiers);
17+
};
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
export * from "./addNamedModule";
2+
export * from "./getImportSpecifiers";
3+
export * from "./getImportEqualsDeclarations";

0 commit comments

Comments
 (0)