@navikt/aksel
Version:
Aksel command line interface. Codemods and other utilities for Aksel users.
92 lines (91 loc) • 4.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = transformer;
const ast_1 = require("../../../utils/ast");
const lineterminator_1 = require("../../../utils/lineterminator");
function transformer(file, api) {
const j = api.jscodeshift;
const root = j(file.source);
const toSourceOptions = (0, lineterminator_1.getLineTerminator)(file.source);
const boxLocalName = (0, ast_1.findComponentImport)({
root,
j,
name: "Box",
packageType: "react",
}) || "Box";
// Rename <BoxNew ...> to <Box ...>
root.find(j.JSXOpeningElement).forEach((path) => {
if (path.value.name.type === "JSXIdentifier" &&
path.value.name.name === "BoxNew") {
path.value.name.name = boxLocalName;
}
// Rename <Box.New ...> to <Box ...>
if (path.value.name.type === "JSXMemberExpression" &&
path.value.name.object.type === "JSXIdentifier" &&
path.value.name.object.name === boxLocalName &&
path.value.name.property.name === "New") {
path.value.name = j.jsxIdentifier(boxLocalName);
}
});
root.find(j.JSXClosingElement).forEach((path) => {
if (path.value.name.type === "JSXIdentifier" &&
path.value.name.name === "BoxNew") {
path.value.name.name = boxLocalName;
}
if (path.value.name.type === "JSXMemberExpression" &&
path.value.name.object.type === "JSXIdentifier" &&
path.value.name.object.name === boxLocalName &&
path.value.name.property.name === "New") {
path.value.name = j.jsxIdentifier(boxLocalName);
}
});
// Handle imports
const imports = root.find(j.ImportDeclaration).filter((path) => {
return (path.value.source.value === "@navikt/ds-react" ||
path.value.source.value === "@navikt/ds-react/Box");
});
imports.forEach((path) => {
const specifiers = path.value.specifiers;
if (!specifiers)
return;
const boxNewIndex = specifiers.findIndex((s) => s.type === "ImportSpecifier" && s.imported.name === "BoxNew");
if (boxNewIndex !== -1) {
const boxIndex = specifiers.findIndex((s) => s.type === "ImportSpecifier" && s.imported.name === "Box");
if (boxIndex !== -1) {
// Box already imported, remove BoxNew
const boxNewSpecifier = specifiers[boxNewIndex];
if (boxNewSpecifier.type === "ImportSpecifier" &&
boxNewSpecifier.local &&
boxNewSpecifier.local.name !== "BoxNew") {
const localName = boxNewSpecifier.local.name;
root.find(j.JSXOpeningElement).forEach((jsxPath) => {
if (jsxPath.value.name.type === "JSXIdentifier" &&
jsxPath.value.name.name === localName) {
jsxPath.value.name.name = boxLocalName;
}
});
root.find(j.JSXClosingElement).forEach((jsxPath) => {
if (jsxPath.value.name.type === "JSXIdentifier" &&
jsxPath.value.name.name === localName) {
jsxPath.value.name.name = boxLocalName;
}
});
}
specifiers.splice(boxNewIndex, 1);
}
else {
// Rename BoxNew to Box
const boxNewSpecifier = specifiers[boxNewIndex];
if (boxNewSpecifier.type === "ImportSpecifier") {
boxNewSpecifier.imported.name = "Box";
// If local name is BoxNew, rename it to Box
if (boxNewSpecifier.local &&
boxNewSpecifier.local.name === "BoxNew") {
boxNewSpecifier.local.name = "Box";
}
}
}
}
});
return root.toSource(toSourceOptions);
}