aws-sdk-js-codemod
Version:
Collection of codemod scripts that help update AWS SDK for JavaScript APIs
73 lines (72 loc) • 3.22 kB
JavaScript
;
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;