Skip to content

Commit

Permalink
Clean up adding import as object pattern (#787)
Browse files Browse the repository at this point in the history
  • Loading branch information
trivikr committed Feb 29, 2024
1 parent bee398b commit 10ba465
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 82 deletions.
5 changes: 5 additions & 0 deletions .changeset/metal-pianos-visit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"aws-sdk-js-codemod": patch
---

Clean up adding import as object pattern
13 changes: 0 additions & 13 deletions src/transforms/v2-to-v3/modules/getRequireProperty.ts

This file was deleted.

69 changes: 2 additions & 67 deletions src/transforms/v2-to-v3/modules/importModule/addNamedModule.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,8 @@
import {
Collection,
ImportNamespaceSpecifier,
ImportSpecifier,
JSCodeshift,
Property,
ObjectProperty,
} from "jscodeshift";
import { Collection, ImportSpecifier, JSCodeshift } from "jscodeshift";

import { OBJECT_PROPERTY_TYPE_LIST, PACKAGE_NAME } from "../../config";
import { PACKAGE_NAME } from "../../config";
import { getImportSpecifiers } from "../getImportSpecifiers";
import { getRequireProperty } from "../getRequireProperty";
import { importSpecifierCompareFn } from "../importSpecifierCompareFn";
import { objectPatternPropertyCompareFn } from "../objectPatternPropertyCompareFn";
import { ModulesOptions } from "../types";

export const addNamedModule = (
Expand Down Expand Up @@ -41,62 +32,6 @@ export const addNamedModule = (
return;
}

const importNamespaceSpecifiers = importSpecifiers.filter(
(importSpecifier) => importSpecifier?.type === "ImportNamespaceSpecifier"
) as ImportNamespaceSpecifier[];

// If namespace import exists.
if (importNamespaceSpecifiers.length > 0) {
const defaultLocalName = importNamespaceSpecifiers[0].local!.name;
const namedImportObjectProperty = getRequireProperty(j, { importedName, localName });

const existingVarDeclarator = source.find(j.VariableDeclarator, {
type: "VariableDeclarator",
init: { type: "Identifier", name: defaultLocalName },
});

// If variable declarator exists.
if (existingVarDeclarator.size()) {
// Return if property exists.
if (
existingVarDeclarator.some((varDeclarator) => {
const id = varDeclarator.node.id;
if (id.type !== "ObjectPattern") return false;
for (const property of id.properties) {
if (!OBJECT_PROPERTY_TYPE_LIST.includes(property.type)) continue;
const propertyKey = (property as Property | ObjectProperty).key;
if (propertyKey.type !== "Identifier") continue;
if (propertyKey.name === importedName) return true;
}
return false;
})
)
return;

// Add property to the first declarator.
const firstDeclaratorProperties = existingVarDeclarator.get(0).node.id.properties;
firstDeclaratorProperties.push(namedImportObjectProperty);
firstDeclaratorProperties.sort(objectPatternPropertyCompareFn);
return;
}

const varDeclaration = j.variableDeclaration("const", [
j.variableDeclarator(
j.objectPattern([namedImportObjectProperty]),
j.identifier(defaultLocalName)
),
]);

source
.find(j.ImportDeclaration, {
type: "ImportDeclaration",
specifiers: [importNamespaceSpecifiers[0]],
source: { value: packageName },
})
.insertAfter(varDeclaration);
return;
}

// Add named import to the first import declaration.
const firstImportDeclSpecifiers = importDeclarations.nodes()[0].specifiers;
if (firstImportDeclSpecifiers) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {
} from "jscodeshift";

import { OBJECT_PROPERTY_TYPE_LIST, PACKAGE_NAME, STRING_LITERAL_TYPE_LIST } from "../../config";
import { getRequireProperty } from "../getRequireProperty";
import { objectPatternPropertyCompareFn } from "../objectPatternPropertyCompareFn";
import { getRequireDeclarators } from "../requireModule";
import { ModulesOptions } from "../types";
Expand All @@ -21,7 +20,11 @@ export const addNamedModule = (
) => {
const { importedName, localName = importedName, packageName } = options;

const clientObjectProperty = getRequireProperty(j, { importedName, localName });
const clientObjectProperty = j.objectProperty.from({
key: j.identifier(importedName),
value: j.identifier(localName ?? importedName),
shorthand: true,
});
const existingRequires = getRequireDeclarators(j, source, packageName);

if (existingRequires && existingRequires.nodes().length > 0) {
Expand Down

0 comments on commit 10ba465

Please sign in to comment.