Skip to content

Commit

Permalink
feat: remove .promise() calls from class member clients (#181)
Browse files Browse the repository at this point in the history
  • Loading branch information
trivikr authored Dec 21, 2022
1 parent 4d9eae0 commit 43abf32
Show file tree
Hide file tree
Showing 7 changed files with 132 additions and 35 deletions.
5 changes: 5 additions & 0 deletions .changeset/lemon-fans-sell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"aws-sdk-js-codemod": patch
---

Remove .promise() calls from class member clients
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import * as AWS from 'aws-sdk';

export class SecretsManager {
constructor(client = new AWS.SecretsManager()) {
this.client = client;
}

async getSecretValue(secretId) {
const response = await this.client
.getSecretValue({ SecretId: secretId })
.promise();
if (response.SecretString) {
return response.SecretString;
} else {
throw new Error(`Unable to get the secret value from ${secretId}`);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { SecretsManager } from "@aws-sdk/client-secrets-manager";

export class SecretsManager {
constructor(client = new SecretsManager()) {
this.client = client;
}

async getSecretValue(secretId) {
const response = await this.client
.getSecretValue({ SecretId: secretId });
if (response.SecretString) {
return response.SecretString;
} else {
throw new Error(`Unable to get the secret value from ${secretId}`);
}
}
}
68 changes: 44 additions & 24 deletions src/transforms/v2-to-v3/utils/getV2ClientIdNamesFromNewExpr.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Collection, Identifier, JSCodeshift } from "jscodeshift";
import { Collection, Identifier, JSCodeshift, NewExpression } from "jscodeshift";

import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates";

Expand All @@ -7,38 +7,58 @@ export interface GetV2ClientIdNamesFromNewExprOptions {
v2DefaultModuleName: string;
}

export const getV2ClientIdNamesFromNewExpr = (
const getNamesFromVariableDeclarator = (
j: JSCodeshift,
source: Collection<unknown>,
{ v2DefaultModuleName, v2ClientName }: GetV2ClientIdNamesFromNewExprOptions
): string[] => {
const clientIdNamesFromDefaultModule = source
newExpression: NewExpression
) =>
source
.find(j.VariableDeclarator, {
id: { type: "Identifier" },
init: {
type: "NewExpression",
callee: {
object: { type: "Identifier", name: v2DefaultModuleName },
property: { type: "Identifier", name: v2ClientName },
},
},
init: newExpression,
})
.nodes()
.map((variableDeclarator) => (variableDeclarator.id as Identifier).name);

const clientIdNamesFromServiceModule = source
.find(j.VariableDeclarator, {
id: { type: "Identifier" },
init: {
type: "NewExpression",
callee: { type: "Identifier", name: v2ClientName },
},
const getNamesFromAssignmentPattern = (
j: JSCodeshift,
source: Collection<unknown>,
newExpression: NewExpression
) =>
source
.find(j.AssignmentPattern, {
left: { type: "Identifier" },
right: newExpression,
})
.nodes()
.map((variableDeclarator) => (variableDeclarator.id as Identifier).name);
.map((assignmentPattern) => (assignmentPattern.left as Identifier).name);

export const getV2ClientIdNamesFromNewExpr = (
j: JSCodeshift,
source: Collection<unknown>,
{ 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 = [
...getNamesFromVariableDeclarator(j, source, defaultNewExpr),
...getNamesFromAssignmentPattern(j, source, defaultNewExpr),
];
const namesFromServiceModule = [
...getNamesFromVariableDeclarator(j, source, clientNewExpr),
...getNamesFromAssignmentPattern(j, source, clientNewExpr),
];

return getMergedArrayWithoutDuplicates(
clientIdNamesFromDefaultModule,
clientIdNamesFromServiceModule
);
return getMergedArrayWithoutDuplicates(namesFromDefaultModule, namesFromServiceModule);
};
33 changes: 33 additions & 0 deletions src/transforms/v2-to-v3/utils/getV2ClientIdThisExpressions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Collection, Identifier, JSCodeshift, MemberExpression, ThisExpression } from "jscodeshift";

export interface ThisMemberExpression {
type: "MemberExpression";
object: ThisExpression;
property: Identifier;
}

const thisMemberExpression = { type: "MemberExpression", object: { type: "ThisExpression" } };

export const getV2ClientIdThisExpressions = (
j: JSCodeshift,
source: Collection<unknown>,
v2ClientIdentifiers: Identifier[]
): ThisMemberExpression[] =>
v2ClientIdentifiers.flatMap((v2ClientIdentifier) =>
source
.find(j.AssignmentExpression, {
left: thisMemberExpression as MemberExpression,
right: v2ClientIdentifier,
})
.nodes()
.map(
(assignmentExpression) =>
({
...thisMemberExpression,
property: {
type: "Identifier",
name: ((assignmentExpression.left as MemberExpression).property as Identifier).name,
},
} as ThisMemberExpression)
)
);
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Collection, JSCodeshift } from "jscodeshift";
import { Collection, Identifier, JSCodeshift } from "jscodeshift";

import { getMergedArrayWithoutDuplicates } from "./getMergedArrayWithoutDuplicates";
import { getV2ClientIdNamesFromNewExpr } from "./getV2ClientIdNamesFromNewExpr";
Expand All @@ -9,11 +9,11 @@ export interface GetV2ClientIdNamesOptions {
v2DefaultModuleName: string;
}

export const getV2ClientIdNames = (
export const getV2ClientIdentifiers = (
j: JSCodeshift,
source: Collection<unknown>,
{ v2DefaultModuleName, v2ClientName }: GetV2ClientIdNamesOptions
): string[] => {
): Identifier[] => {
const v2ClientIdNamesFromNewExpr = getV2ClientIdNamesFromNewExpr(j, source, {
v2DefaultModuleName,
v2ClientName,
Expand All @@ -24,5 +24,10 @@ export const getV2ClientIdNames = (
v2ClientName,
});

return getMergedArrayWithoutDuplicates(v2ClientIdNamesFromNewExpr, v2ClientIdNamesFromTSTypeRef);
const clientIdNames = getMergedArrayWithoutDuplicates(
v2ClientIdNamesFromNewExpr,
v2ClientIdNamesFromTSTypeRef
);

return clientIdNames.map((clientidName) => ({ type: "Identifier", name: clientidName }));
};
13 changes: 6 additions & 7 deletions src/transforms/v2-to-v3/utils/removePromiseCalls.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { CallExpression, Collection, JSCodeshift, MemberExpression } from "jscodeshift";

import { getV2ClientIdNames } from "./getV2ClientIdNames";
import { getV2ClientIdentifiers } from "./getV2ClientIdentifiers";
import { getV2ClientIdThisExpressions } from "./getV2ClientIdThisExpressions";

export interface RemovePromiseCallsOptions {
v2ClientName: string;
Expand All @@ -13,12 +14,13 @@ export const removePromiseCalls = (
source: Collection<unknown>,
{ v2DefaultModuleName, v2ClientName }: RemovePromiseCallsOptions
): void => {
const v2ClientIdNames = getV2ClientIdNames(j, source, {
const v2ClientIdentifiers = getV2ClientIdentifiers(j, source, {
v2DefaultModuleName,
v2ClientName,
});
const v2ClientIdThisExpressions = getV2ClientIdThisExpressions(j, source, v2ClientIdentifiers);

for (const v2ClientIdName of v2ClientIdNames) {
for (const v2ClientId of [...v2ClientIdentifiers, ...v2ClientIdThisExpressions]) {
source
.find(j.CallExpression, {
callee: {
Expand All @@ -27,10 +29,7 @@ export const removePromiseCalls = (
type: "CallExpression",
callee: {
type: "MemberExpression",
object: {
type: "Identifier",
name: v2ClientIdName,
},
object: v2ClientId,
},
},
property: { type: "Identifier", name: "promise" },
Expand Down

0 comments on commit 43abf32

Please sign in to comment.