UNPKG

aws-sdk-js-codemod

Version:

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

73 lines (72 loc) 3.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.replaceAwsIdentity = void 0; const config_1 = require("../config"); const modules_1 = require("../modules"); const getNewExpression = (className, identifier) => ({ type: "NewExpression", callee: { ...(identifier ? { type: "MemberExpression", object: { type: "Identifier", name: identifier, }, property: { name: className }, } : { type: "Identifier", name: className, }), }, }); const replaceAwsIdentity = (j, source, { v2GlobalName, importType }) => { for (const [identity, identityMap] of Object.entries({ Credential: config_1.AWS_CREDENTIALS_MAP, Token: config_1.AWS_TOKEN_MAP, })) { const identitySwitchComment = ` JS SDK v3 switched ${identity.toLowerCase()} providers from classes to functions.`; const identityPackageName = `@aws-sdk/${identity.toLowerCase()}-providers`; const identityProviderChain = `${identity}ProviderChain`; const chainNewExpressions = source.find(j.NewExpression, getNewExpression(identityProviderChain, v2GlobalName)); if (chainNewExpressions.size() > 0) { const localName = "providerChain"; (0, modules_1.addNamedModule)(j, source, { importType, localName, importedName: "chain", packageName: "@smithy/property-provider", }); chainNewExpressions.replaceWith(({ node }) => j.callExpression.from({ callee: j.identifier(localName), comments: [ j.commentLine(identitySwitchComment), j.commentLine(` The ${identityProviderChain} is now a chain of providers.`), j.commentLine(` Reference: https://www.npmjs.com/package/${identityPackageName}`), ], arguments: node.arguments, })); } for (const [v2IdentityName, v3ProviderName] of Object.entries(identityMap)) { const credsNewExpressions = source.find(j.NewExpression, getNewExpression(v2IdentityName, v2GlobalName)); if (credsNewExpressions.size() > 0) { (0, modules_1.addNamedModule)(j, source, { importType, localName: v3ProviderName, packageName: identityPackageName, }); credsNewExpressions.replaceWith(({ node }) => j.callExpression.from({ callee: j.identifier(v3ProviderName), comments: [ j.commentLine(identitySwitchComment), j.commentLine(" This is the closest approximation from codemod of what your application needs."), j.commentLine(` Reference: https://www.npmjs.com/package/${identityPackageName}`), ], arguments: node.arguments, })); } } } }; exports.replaceAwsIdentity = replaceAwsIdentity;