Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add script to auto generate new-client tests #204

Merged
merged 23 commits into from
Dec 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
69ec303
chore: create file generateNewClientTests
trivikr Dec 22, 2022
47f3d01
chore(scripts): generate global-import.input.js
trivikr Dec 22, 2022
d35ab90
chore: update auto-generated global-import.input.js
trivikr Dec 22, 2022
f07fb6a
chore(scripts): generate global-import.output.js
trivikr Dec 22, 2022
c6e9e49
chore: update auto-generated global-import.output.js
trivikr Dec 22, 2022
4b07ea7
fix(tsconfig): ignore scripts folder
trivikr Dec 22, 2022
f9495d2
chore(scripts): add utilities for code generation
trivikr Dec 22, 2022
bea081f
chore(scripts): add 'use strict;' to skip removal of comments
trivikr Dec 22, 2022
b674161
chore: update auto-generated global-import files
trivikr Dec 22, 2022
0e1293e
chore(scripts): split generateNewClientTests
trivikr Dec 22, 2022
e458a05
chore: update auto-generated global-import files
trivikr Dec 22, 2022
1e7d88e
chore(scripts): add utilities to be shared with other generate scripts
trivikr Dec 22, 2022
e5d0d23
chore(scripts): add script to generate global-require
trivikr Dec 22, 2022
0fb0597
chore: generate global-require
trivikr Dec 22, 2022
8a2a279
chore(scripts): add script to generate service-import
trivikr Dec 23, 2022
68e9dfc
chore: generate service-import
trivikr Dec 23, 2022
d1ac66d
chore(scripts): add extra newline in global-require.output
trivikr Dec 23, 2022
a1cbc3f
chore: add extra newline in global-require.output
trivikr Dec 23, 2022
b0c9e80
chore: remove redundant getV2ServiceImportsCode
trivikr Dec 23, 2022
3db34e1
chore(scripts): add script to generate service-require
trivikr Dec 23, 2022
ef80220
chore: generate service-require
trivikr Dec 23, 2022
7faa6a3
fix: variable names retained during copy-paste
trivikr Dec 23, 2022
4dad23f
chore(deps-dev): install tsx to help with script execution
trivikr Dec 23, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
"prettier": "2.7.1",
"simple-git-hooks": "^2.8.1",
"ts-jest": "^29.0.3",
"tsx": "^3.12.1",
"typescript": "~4.9.4"
},
"engines": {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { CLIENT_PACKAGE_NAMES_MAP } from "../../src/transforms/v2-to-v3/utils/config";

export const getClientNamesSortedByPackageName = () =>
Object.keys(CLIENT_PACKAGE_NAMES_MAP).sort((a, b) =>
CLIENT_PACKAGE_NAMES_MAP[a].localeCompare(CLIENT_PACKAGE_NAMES_MAP[b])
);
10 changes: 10 additions & 0 deletions scripts/generateNewClientTests/getGlobalImportInputContent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { getV2ClientsNewExpressionCode } from "./getV2ClientsNewExpressionCode";

export const getGlobalImportInputContent = (codegenComment: string) => {
let globalImportInputContent = `${codegenComment}\n`;

globalImportInputContent += `import AWS from "aws-sdk";\n\n`;
globalImportInputContent += getV2ClientsNewExpressionCode(`AWS.`);

return globalImportInputContent;
};
13 changes: 13 additions & 0 deletions scripts/generateNewClientTests/getGlobalImportOutputContent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { getClientNamesSortedByPackageName } from "./getClientNamesSortedByPackageName";
import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode";
import { getV3PackageImportsCode } from "./getV3PackageImportsCode";

export const getGlobalImportOutputContent = (codegenComment: string) => {
let globalImportOutputContent = `${codegenComment}\n`;

globalImportOutputContent += getV3PackageImportsCode(getClientNamesSortedByPackageName());
globalImportOutputContent += `\n`;
globalImportOutputContent += getV3ClientsNewExpressionCode();

return globalImportOutputContent;
};
10 changes: 10 additions & 0 deletions scripts/generateNewClientTests/getGlobalRequireInputContent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { getV2ClientsNewExpressionCode } from "./getV2ClientsNewExpressionCode";

export const getGlobalRequireInputContent = (codegenComment: string) => {
let globalRequireInputContent = `${codegenComment}\n`;

globalRequireInputContent += `const AWS = require("aws-sdk");\n\n`;
globalRequireInputContent += getV2ClientsNewExpressionCode(`AWS.`);

return globalRequireInputContent;
};
14 changes: 14 additions & 0 deletions scripts/generateNewClientTests/getGlobalRequireOutputContent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { getClientNamesSortedByPackageName } from "./getClientNamesSortedByPackageName";
import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode";
import { getV3PackageRequireCode } from "./getV3PackageRequireCode";

export const getGlobalRequireOutputContent = (codegenComment: string) => {
let globalRequireOutputContent = `${codegenComment}\n\n`;

globalRequireOutputContent += getV3PackageRequireCode(getClientNamesSortedByPackageName(), {
extraNewLine: true,
});
globalRequireOutputContent += getV3ClientsNewExpressionCode();

return globalRequireOutputContent;
};
14 changes: 14 additions & 0 deletions scripts/generateNewClientTests/getServiceImportInputContent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { CLIENT_NAMES } from "../../src/transforms/v2-to-v3/utils/config";
import { getV2ClientsNewExpressionCode } from "./getV2ClientsNewExpressionCode";

export const getServiceImportInputContent = (codegenComment: string) => {
let serviceImportInputContent = `${codegenComment}\n`;

for (const clientName of CLIENT_NAMES) {
serviceImportInputContent += `import ${clientName} from "aws-sdk/clients/${clientName.toLowerCase()}";\n`;
}
serviceImportInputContent += `\n`;
serviceImportInputContent += getV2ClientsNewExpressionCode();

return serviceImportInputContent;
};
13 changes: 13 additions & 0 deletions scripts/generateNewClientTests/getServiceImportOutputContent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { CLIENT_NAMES } from "../../src/transforms/v2-to-v3/utils/config";
import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode";
import { getV3PackageImportsCode } from "./getV3PackageImportsCode";

export const getServiceImportOutputContent = (codegenComment: string) => {
let serviceImportOutputContent = `${codegenComment}\n`;

serviceImportOutputContent += getV3PackageImportsCode(CLIENT_NAMES);
serviceImportOutputContent += `\n`;
serviceImportOutputContent += getV3ClientsNewExpressionCode();

return serviceImportOutputContent;
};
14 changes: 14 additions & 0 deletions scripts/generateNewClientTests/getServiceRequireInputContent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { CLIENT_NAMES } from "../../src/transforms/v2-to-v3/utils/config";
import { getV2ClientsNewExpressionCode } from "./getV2ClientsNewExpressionCode";

export const getServiceRequireInputContent = (codegenComment: string) => {
let serviceRequireInputContent = `${codegenComment}\n`;

for (const clientName of CLIENT_NAMES) {
serviceRequireInputContent += `const ${clientName} = require("aws-sdk/clients/${clientName.toLowerCase()}");\n`;
}
serviceRequireInputContent += `\n`;
serviceRequireInputContent += getV2ClientsNewExpressionCode();

return serviceRequireInputContent;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { CLIENT_NAMES } from "../../src/transforms/v2-to-v3/utils/config";
import { getV3ClientsNewExpressionCode } from "./getV3ClientsNewExpressionCode";
import { getV3PackageRequireCode } from "./getV3PackageRequireCode";

export const getServiceRequireOutputContent = (codegenComment: string) => {
let serviceRequireOutputContent = `${codegenComment}\n`;

serviceRequireOutputContent += getV3PackageRequireCode(CLIENT_NAMES);
serviceRequireOutputContent += `\n`;
serviceRequireOutputContent += getV3ClientsNewExpressionCode();

return serviceRequireOutputContent;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { CLIENT_NAMES } from "../../src/transforms/v2-to-v3/utils/config";

export const getV2ClientsNewExpressionCode = (prefix?: string) => {
let v2ClientsNewExpressionCode = ``;
for (const clientName of CLIENT_NAMES) {
v2ClientsNewExpressionCode += `new ${prefix || ""}${clientName}();\n`;
}
return v2ClientsNewExpressionCode;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { CLIENT_NAMES, CLIENT_NAMES_MAP } from "../../src/transforms/v2-to-v3/utils/config";

export const getV3ClientsNewExpressionCode = () => {
let v3ClientsNewExpressionCode = ``;
for (const v2ClientName of CLIENT_NAMES) {
v3ClientsNewExpressionCode += `new ${CLIENT_NAMES_MAP[v2ClientName]}();\n`;
}
return v3ClientsNewExpressionCode;
};
15 changes: 15 additions & 0 deletions scripts/generateNewClientTests/getV3PackageImportsCode.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import {
CLIENT_NAMES,
CLIENT_NAMES_MAP,
CLIENT_PACKAGE_NAMES_MAP,
} from "../../src/transforms/v2-to-v3/utils/config";

export const getV3PackageImportsCode = (sortedV2ClientNames: typeof CLIENT_NAMES) => {
let v3PackageImportsCode = ``;
for (const v2ClientName of sortedV2ClientNames) {
const v3ClientName = CLIENT_NAMES_MAP[v2ClientName];
const v3ClientPackageName = `@aws-sdk/${CLIENT_PACKAGE_NAMES_MAP[v2ClientName]}`;
v3PackageImportsCode += `import { ${v3ClientName} } from "${v3ClientPackageName}";\n`;
}
return v3PackageImportsCode;
};
19 changes: 19 additions & 0 deletions scripts/generateNewClientTests/getV3PackageRequireCode.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import {
CLIENT_NAMES,
CLIENT_NAMES_MAP,
CLIENT_PACKAGE_NAMES_MAP,
} from "../../src/transforms/v2-to-v3/utils/config";

export const getV3PackageRequireCode = (
sortedV2ClientNames: typeof CLIENT_NAMES,
{ extraNewLine = false }: { extraNewLine?: boolean } = {}
) => {
let v3PackageRequireCode = ``;
for (const v2ClientName of sortedV2ClientNames) {
const v3ClientName = CLIENT_NAMES_MAP[v2ClientName];
const v3ClientPackageName = `@aws-sdk/${CLIENT_PACKAGE_NAMES_MAP[v2ClientName]}`;
v3PackageRequireCode += `const {\n ${v3ClientName}\n} = require("${v3ClientPackageName}");\n`;
if (extraNewLine) v3PackageRequireCode += `\n`;
}
return v3PackageRequireCode;
};
39 changes: 39 additions & 0 deletions scripts/generateNewClientTests/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// This script generates tests in src/transforms/v2-to-v3/__fixtures__/new-client
// Run them using: yarn tsx scripts/generateNewClientTests/index.ts
import { writeFile } from "fs/promises";
import { join } from "path";

import { getGlobalImportInputContent } from "./getGlobalImportInputContent";
import { getGlobalImportOutputContent } from "./getGlobalImportOutputContent";
import { getGlobalRequireInputContent } from "./getGlobalRequireInputContent";
import { getGlobalRequireOutputContent } from "./getGlobalRequireOutputContent";
import { getServiceImportInputContent } from "./getServiceImportInputContent";
import { getServiceImportOutputContent } from "./getServiceImportOutputContent";
import { getServiceRequireInputContent } from "./getServiceRequireInputContent";
import { getServiceRequireOutputContent } from "./getServiceRequireOutputContent";

// The "use strict" directive is added to so that comments can be attached to it.
// Recast removes the comments while removing import/require.
// Details in https://github.com/awslabs/aws-sdk-js-codemod/issues/205
const codegenComment = `// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";`;

const newClientsTestsFolder = join("src", "transforms", "v2-to-v3", "__fixtures__", "new-client");
const newClientTestsPath = join(__dirname, "..", "..", newClientsTestsFolder);

(async () => {
for (const [fileName, getFileContent] of [
["global-import.input.js", getGlobalImportInputContent],
["global-import.output.js", getGlobalImportOutputContent],
["global-require.input.js", getGlobalRequireInputContent],
["global-require.output.js", getGlobalRequireOutputContent],
["service-import.input.js", getServiceImportInputContent],
["service-import.output.js", getServiceImportOutputContent],
["service-require.input.js", getServiceRequireInputContent],
["service-require.output.js", getServiceRequireOutputContent],
] as [string, (comment: string) => string][]) {
const filePath = join(newClientTestsPath, fileName);
await writeFile(filePath, getFileContent(codegenComment));
}
})();
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";
import AWS from "aws-sdk";

new AWS.ACM();
Expand Down Expand Up @@ -296,4 +299,4 @@ new AWS.WorkMail();
new AWS.WorkMailMessageFlow();
new AWS.WorkSpaces();
new AWS.WorkSpacesWeb();
new AWS.XRay();
new AWS.XRay();
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";
import { AccessAnalyzer } from "@aws-sdk/client-accessanalyzer";
import { Account } from "@aws-sdk/client-account";
import { ACM } from "@aws-sdk/client-acm";
Expand Down Expand Up @@ -592,4 +595,4 @@ new WorkMail();
new WorkMailMessageFlow();
new WorkSpaces();
new WorkSpacesWeb();
new XRay();
new XRay();
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";
const AWS = require("aws-sdk");

new AWS.ACM();
Expand Down Expand Up @@ -296,4 +299,4 @@ new AWS.WorkMail();
new AWS.WorkMailMessageFlow();
new AWS.WorkSpaces();
new AWS.WorkSpacesWeb();
new AWS.XRay();
new AWS.XRay();
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";

const {
AccessAnalyzer
} = require("@aws-sdk/client-accessanalyzer");
Expand Down Expand Up @@ -1482,4 +1486,4 @@ new WorkMail();
new WorkMailMessageFlow();
new WorkSpaces();
new WorkSpacesWeb();
new XRay();
new XRay();
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";
import ACM from "aws-sdk/clients/acm";
import ACMPCA from "aws-sdk/clients/acmpca";
import APIGateway from "aws-sdk/clients/apigateway";
Expand Down Expand Up @@ -592,4 +595,4 @@ new WorkMail();
new WorkMailMessageFlow();
new WorkSpaces();
new WorkSpacesWeb();
new XRay();
new XRay();
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";
import { ACM } from "@aws-sdk/client-acm";
import { ACMPCA } from "@aws-sdk/client-acm-pca";
import { APIGateway } from "@aws-sdk/client-api-gateway";
Expand Down Expand Up @@ -592,4 +595,4 @@ new WorkMail();
new WorkMailMessageFlow();
new WorkSpaces();
new WorkSpacesWeb();
new XRay();
new XRay();
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";
const ACM = require("aws-sdk/clients/acm");
const ACMPCA = require("aws-sdk/clients/acmpca");
const APIGateway = require("aws-sdk/clients/apigateway");
Expand Down Expand Up @@ -592,4 +595,4 @@ new WorkMail();
new WorkMailMessageFlow();
new WorkSpaces();
new WorkSpacesWeb();
new XRay();
new XRay();
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
// This file is generated by scripts/generateNewClientTests/index.ts
// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.
"use strict";
const {
ACM
} = require("@aws-sdk/client-acm");
Expand Down Expand Up @@ -1186,4 +1189,4 @@ new WorkMail();
new WorkMailMessageFlow();
new WorkSpaces();
new WorkSpacesWeb();
new XRay();
new XRay();
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
"resolveJsonModule": true,
"rootDir": "src"
},
"exclude": ["dist", "**/__fixtures__/**", "**/*.spec.ts"]
"exclude": ["dist", "**/__fixtures__/**", "**/*.spec.ts", "scripts"]
}
Loading