aws-sdk-js-codemod
Version:
Collection of codemod scripts that help update AWS SDK for JavaScript APIs
93 lines (92 loc) • 5.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parser = void 0;
const apis_1 = require("./apis");
const aws_util_1 = require("./aws-util");
const client_instances_1 = require("./client-instances");
const client_names_1 = require("./client-names");
const config_1 = require("./config");
const modules_1 = require("./modules");
const ts_type_1 = require("./ts-type");
const utils_1 = require("./utils");
const transformer = async (file, api) => {
const j = (0, utils_1.isTypeScriptFile)(file.path) ? api.jscodeshift.withParser("ts") : api.jscodeshift;
const source = j(file.source);
const importType = (0, modules_1.getImportType)(j, source);
if (importType === null) {
if (file.source.includes(".promise(")) {
(0, apis_1.addPromiseRemovalComments)(j, source);
return source.toSource();
}
// Skip transformation, since no import/require statements found for "aws-sdk" package.
return file.source;
}
(0, modules_1.replaceDeepImport)(j, source, { fromPath: "aws-sdk/global", toPath: config_1.PACKAGE_NAME });
(0, modules_1.replaceDeepImport)(j, source, { fromPath: "aws-sdk/lib/core", toPath: config_1.PACKAGE_NAME });
(0, modules_1.replaceDeepImport)(j, source, { fromPath: "aws-sdk/clients/all", toPath: config_1.PACKAGE_NAME });
const v2GlobalName = (0, modules_1.getGlobalNameFromModule)(j, source);
const v2ClientNamesRecord = (0, client_names_1.getClientNamesRecord)(j, source, importType);
if (v2GlobalName) {
for (const v2ClientNameFromGlobal of (0, client_names_1.getClientNamesFromGlobal)(j, source, v2GlobalName)) {
if (!(v2ClientNameFromGlobal in v2ClientNamesRecord)) {
v2ClientNamesRecord[v2ClientNameFromGlobal] = v2ClientNameFromGlobal;
}
}
}
const clientMetadataRecord = (0, client_names_1.getClientMetadataRecord)(v2ClientNamesRecord);
const clientIdentifiersRecord = (0, apis_1.getClientIdentifiersRecord)(j, source, {
v2GlobalName,
v2ClientNamesRecord,
});
for (const v2ClientName of Object.keys(clientMetadataRecord)) {
const clientIdentifiers = clientIdentifiersRecord[v2ClientName];
(0, apis_1.addNotSupportedClientComments)(j, source, { v2ClientName, clientIdentifiers });
}
if (source.toSource().includes(config_1.NOT_SUPPORTED_COMMENT)) {
return source.toSource();
}
// Compute recast options before doing transformations
const quote = (0, utils_1.getMostUsedStringLiteralQuote)(j, source);
const useTabs = (0, utils_1.getMostUsedIndentationType)(file.source) === utils_1.IndentationType.TAB;
const trailingComma = (0, utils_1.isTrailingCommaUsed)(j, source);
const awsGlobalConfig = (0, client_instances_1.getAwsGlobalConfig)(j, source, v2GlobalName);
for (const [v2ClientName, v3ClientMetadata] of Object.entries(clientMetadataRecord)) {
const clientIdentifiers = clientIdentifiersRecord[v2ClientName];
const { v2ClientLocalName, v3ClientName, v3ClientPackageName } = v3ClientMetadata;
const v2Options = { v2ClientName, v2ClientLocalName, v2GlobalName };
const v3Options = { v3ClientName, v3ClientPackageName };
// Remove redundant `Types` from Client Types.
(0, ts_type_1.removeTypesFromTSQualifiedName)(j, source, v2ClientName);
(0, modules_1.addClientModules)(j, source, { ...v2Options, ...v3Options, clientIdentifiers, importType });
(0, ts_type_1.replaceTSTypeReference)(j, source, { ...v2Options, v3ClientName });
if (v2ClientName === config_1.S3) {
// Needs to be called before removing promise calls, as replacement has `.done()` call.
(0, apis_1.replaceS3UploadApi)(j, source, clientIdentifiers);
}
(0, apis_1.removePromiseCalls)(j, source, { ...v2Options, clientIdentifiers });
(0, apis_1.addEmptyObjectForUndefined)(j, source, clientIdentifiers);
(0, apis_1.renameErrorCodeWithName)(j, source, clientIdentifiers);
if (v2ClientName === config_1.S3) {
(0, apis_1.replaceS3GetSignedUrlApi)(j, source, clientIdentifiers);
(0, apis_1.replaceS3CreatePresignedPostApi)(j, source, clientIdentifiers);
}
(0, apis_1.replaceWaiterApi)(j, source, clientIdentifiers);
(0, client_instances_1.replaceClientCreation)(j, source, { ...v2Options, v3ClientName, awsGlobalConfig });
(0, client_instances_1.replaceDocClientCreation)(j, source, v2Options);
}
(0, client_instances_1.replaceAwsConfig)(j, source, { v2GlobalName, awsGlobalConfig });
(0, apis_1.replaceAwsIdentity)(j, source, { v2GlobalName, importType });
(0, aws_util_1.replaceAwsUtilFunctions)(j, source, v2GlobalName);
(0, apis_1.replaceAwsError)(j, source, { v2GlobalName, importType });
(0, apis_1.replaceAwsEndpoint)(j, source, v2GlobalName);
(0, modules_1.removeModules)(j, source, importType);
(0, apis_1.addPromiseRemovalComments)(j, source);
const sourceString = (0, utils_1.getFormattedSourceString)(source.toSource({ quote, useTabs, trailingComma }));
if (useTabs) {
// Refs: https://github.com/benjamn/recast/issues/315
return (0, utils_1.getValueIndentedWithTabs)(sourceString);
}
return sourceString;
};
exports.default = transformer;
exports.parser = "babylon";