UNPKG

aws-sdk-js-codemod

Version:

Collection of codemod scripts that help update AWS SDK for JavaScript APIs

93 lines (92 loc) 5.4 kB
"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";