@wroud/di-tools-codemod
Version:
@wroud/di-tools-codemod is a codemod utility that automates the migration of your codebase from Inversify to @wroud/di. It streamlines the transformation process, allowing for effortless and customizable transitions through configuration support.
55 lines (54 loc) • 2.37 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformImports = transformImports;
const isReexportPackage_js_1 = require("./isReexportPackage.js");
const constants_js_1 = require("./constants.js");
function transformImports(j, root, packages) {
let migrationPackage = null;
let importPath = null;
root.find(j.ImportDeclaration).forEach((path) => {
for (const packageTransforms of packages) {
if (migrationPackage ||
packageTransforms.name !== path.value.source.value) {
continue;
}
const specifiers = path.value.specifiers?.filter((specifier) => {
if (specifier.type === "ImportSpecifier") {
if (packageTransforms.injectableDecorator === specifier.imported.name) {
migrationPackage = packageTransforms;
if ((0, isReexportPackage_js_1.isReexportPackage)(packageTransforms)) {
return true;
}
}
return (packageTransforms.injectDecorator !== specifier.imported.name &&
packageTransforms.multiInjectDecorator !==
specifier.imported.name &&
packageTransforms.injectableDecorator !== specifier.imported.name);
}
return true;
});
importPath = path;
path.value.specifiers = specifiers;
}
});
if (migrationPackage && !(0, isReexportPackage_js_1.isReexportPackage)(migrationPackage)) {
const importDeclaration = j.importDeclaration([
j.importSpecifier(j.identifier(migrationPackage.injectableDecorator ||
constants_js_1.CONSTANTS.injectable)),
], j.literal(migrationPackage.replace));
if (importPath) {
importPath = importPath;
if (!importPath.node.specifiers?.length) {
importDeclaration.comments = importPath.node.comments;
importPath.replace(importDeclaration);
}
else {
importPath.insertAfter(importDeclaration);
}
}
else {
root.get().node.body.unshift(importDeclaration);
}
}
return migrationPackage;
}
;