src/transforms/v2-to-v3/client-names/getClientNamesRecord.ts (46 lines of code) (raw):
import type { Collection, JSCodeshift } from "jscodeshift";
import { CLIENT_NAMES, PACKAGE_NAME } from "../config";
import { ImportType } from "../modules";
import * as importEqualsModule from "../modules/importEqualsModule";
import * as importModule from "../modules/importModule";
import * as requireModule from "../modules/requireModule";
import { getClientDeepImportPath } from "../utils";
import { getClientNamesFromDeepImport } from "./getClientNamesFromDeepImport";
export const getClientNamesRecord = (
j: JSCodeshift,
source: Collection<unknown>,
importType: ImportType
) => {
const clientNamesRecord: Record<string, string> = {};
const { getImportSpecifiers } =
importType === ImportType.REQUIRE
? requireModule
: importType === ImportType.IMPORT_EQUALS
? importEqualsModule
: importModule;
const specifiersFromNamedImport = getImportSpecifiers(j, source, PACKAGE_NAME).filter(
(importSpecifier) => importSpecifier.importedName
);
for (const { importedName, localName } of specifiersFromNamedImport) {
const clientName = importedName ?? localName;
if (CLIENT_NAMES.includes(clientName)) {
clientNamesRecord[clientName] = localName;
}
}
const clientNamesFromDeepImport = getClientNamesFromDeepImport(source.toSource());
for (const clientName of clientNamesFromDeepImport) {
const deepImportPath = getClientDeepImportPath(clientName);
const specifiersFromDeepImport = getImportSpecifiers(j, source, deepImportPath).filter(
(importSpecifier) => !importSpecifier.importedName
);
if (specifiersFromDeepImport.length > 0) {
clientNamesRecord[clientName] = specifiersFromDeepImport[0].localName;
}
}
// Populate client names for type transformations
// Ref: https://github.com/aws/aws-sdk-js-codemod/issues/663
for (const clientName of clientNamesFromDeepImport) {
if (!(clientName in clientNamesRecord)) {
clientNamesRecord[clientName] = clientName;
}
}
return clientNamesRecord;
};