diff --git a/.changeset/chilly-hats-clap.md b/.changeset/chilly-hats-clap.md new file mode 100644 index 000000000..800604270 --- /dev/null +++ b/.changeset/chilly-hats-clap.md @@ -0,0 +1,5 @@ +--- +"aws-sdk-js-codemod": patch +--- + +Add utility getV2ClientNewExpression diff --git a/src/transforms/v2-to-v3/utils/get/getV2ClientIdNamesFromNewExpr.ts b/src/transforms/v2-to-v3/utils/get/getV2ClientIdNamesFromNewExpr.ts index f06fbe54b..ae4b61a4a 100644 --- a/src/transforms/v2-to-v3/utils/get/getV2ClientIdNamesFromNewExpr.ts +++ b/src/transforms/v2-to-v3/utils/get/getV2ClientIdNamesFromNewExpr.ts @@ -1,6 +1,7 @@ import { Collection, Identifier, JSCodeshift, NewExpression } from "jscodeshift"; import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates"; +import { getV2ClientNewExpression } from "./getV2ClientNewExpression"; export interface GetV2ClientIdNamesFromNewExprOptions { v2ClientName: string; @@ -38,25 +39,14 @@ export const getV2ClientIdNamesFromNewExpr = ( source: Collection, { v2DefaultModuleName, v2ClientName }: GetV2ClientIdNamesFromNewExprOptions ): string[] => { - const defaultNewExpr = { - type: "NewExpression", - callee: { - object: { type: "Identifier", name: v2DefaultModuleName }, - property: { type: "Identifier", name: v2ClientName }, - }, - } as NewExpression; - - const clientNewExpr = { - type: "NewExpression", - callee: { type: "Identifier", name: v2ClientName }, - } as NewExpression; - const namesFromDefaultModule = []; const namesFromServiceModule = []; for (const getNames of [getNamesFromVariableDeclarator, getNamesFromAssignmentPattern]) { - namesFromDefaultModule.push(...getNames(j, source, defaultNewExpr)); - namesFromServiceModule.push(...getNames(j, source, clientNewExpr)); + namesFromDefaultModule.push( + ...getNames(j, source, getV2ClientNewExpression({ v2DefaultModuleName, v2ClientName })) + ); + namesFromServiceModule.push(...getNames(j, source, getV2ClientNewExpression({ v2ClientName }))); } return getMergedArrayWithoutDuplicates(namesFromDefaultModule, namesFromServiceModule); diff --git a/src/transforms/v2-to-v3/utils/get/getV2ClientNamesFromNewExpr.ts b/src/transforms/v2-to-v3/utils/get/getV2ClientNamesFromNewExpr.ts index c00de4daa..5d0550402 100644 --- a/src/transforms/v2-to-v3/utils/get/getV2ClientNamesFromNewExpr.ts +++ b/src/transforms/v2-to-v3/utils/get/getV2ClientNamesFromNewExpr.ts @@ -1,18 +1,14 @@ import { Collection, Identifier, JSCodeshift, MemberExpression } from "jscodeshift"; +import { getV2ClientNewExpression } from "../get"; + export const getV2ClientNamesFromNewExpr = ( j: JSCodeshift, source: Collection, v2DefaultModuleName: string ): string[] => source - .find(j.NewExpression, { - callee: { - type: "MemberExpression", - object: { type: "Identifier", name: v2DefaultModuleName }, - property: { type: "Identifier" }, - }, - }) + .find(j.NewExpression, getV2ClientNewExpression({ v2DefaultModuleName })) .nodes() .map( (newExpression) => ((newExpression.callee as MemberExpression).property as Identifier).name diff --git a/src/transforms/v2-to-v3/utils/get/getV2ClientNewExpression.ts b/src/transforms/v2-to-v3/utils/get/getV2ClientNewExpression.ts new file mode 100644 index 000000000..9594f6c6e --- /dev/null +++ b/src/transforms/v2-to-v3/utils/get/getV2ClientNewExpression.ts @@ -0,0 +1,33 @@ +import { NewExpression } from "jscodeshift"; + +export interface ClientNewExpressionOptions { + v2DefaultModuleName?: string; + v2ClientName?: string; + isDocumentClient?: boolean; +} + +export const getV2ClientNewExpression = ({ + v2DefaultModuleName, + v2ClientName, +}: ClientNewExpressionOptions): NewExpression => { + if (!v2DefaultModuleName && !v2ClientName) { + throw new Error( + `At least one of the following options must be provided: v2DefaultModuleName, v2ClientName` + ); + } + + if (v2DefaultModuleName) { + return { + type: "NewExpression", + callee: { + object: { type: "Identifier", name: v2DefaultModuleName }, + property: { type: "Identifier", ...(v2ClientName && { name: v2ClientName }) }, + }, + } as NewExpression; + } + + return { + type: "NewExpression", + callee: { type: "Identifier", name: v2ClientName }, + } as NewExpression; +}; diff --git a/src/transforms/v2-to-v3/utils/get/index.ts b/src/transforms/v2-to-v3/utils/get/index.ts index caf7f129e..8223f6a43 100644 --- a/src/transforms/v2-to-v3/utils/get/index.ts +++ b/src/transforms/v2-to-v3/utils/get/index.ts @@ -4,6 +4,7 @@ export * from "./getV2ClientIdentifiers"; export * from "./getV2ClientIdThisExpressions"; export * from "./getV2ClientNames"; export * from "./getV2ClientNamesFromDefault"; +export * from "./getV2ClientNewExpression"; export * from "./getV2ClientTypeNames"; export * from "./getV2DefaultModuleName"; export * from "./getV2ServiceModulePath"; diff --git a/src/transforms/v2-to-v3/utils/replace/replaceClientCreation.ts b/src/transforms/v2-to-v3/utils/replace/replaceClientCreation.ts index 8760e7279..0503e683d 100644 --- a/src/transforms/v2-to-v3/utils/replace/replaceClientCreation.ts +++ b/src/transforms/v2-to-v3/utils/replace/replaceClientCreation.ts @@ -1,5 +1,7 @@ import { Collection, JSCodeshift } from "jscodeshift"; +import { getV2ClientNewExpression } from "../get"; + export interface ReplaceClientCreationOptions { v2ClientName: string; v3ClientName: string; @@ -14,12 +16,7 @@ export const replaceClientCreation = ( ): void => { // Replace clients created with default module. source - .find(j.NewExpression, { - callee: { - object: { type: "Identifier", name: v2DefaultModuleName }, - property: { type: "Identifier", name: v2ClientName }, - }, - }) + .find(j.NewExpression, getV2ClientNewExpression({ v2DefaultModuleName, v2ClientName })) .replaceWith((nodePath) => { const { node } = nodePath; node.callee = j.identifier(v3ClientName); @@ -28,9 +25,7 @@ export const replaceClientCreation = ( // Replace clients created with client module. source - .find(j.NewExpression, { - callee: { type: "Identifier", name: v2ClientName }, - }) + .find(j.NewExpression, getV2ClientNewExpression({ v2ClientName })) .replaceWith((nodePath) => { const { node } = nodePath; node.callee = j.identifier(v3ClientName);