This commit is contained in:
vorotamoroz
2026-06-11 04:20:26 +01:00
parent 3c6ec75c00
commit 3b538a143a
+27 -10
View File
@@ -2,6 +2,15 @@
// Use this script by running `deno run --allow-read --allow-write --allow-run refactor-imports.ts` from the utilsdeno directory. It will read all source files, find imports from types.ts, and replace them with the new paths based on the importMap. Make sure to review the changes before saving, as it will modify your source files. // Use this script by running `deno run --allow-read --allow-write --allow-run refactor-imports.ts` from the utilsdeno directory. It will read all source files, find imports from types.ts, and replace them with the new paths based on the importMap. Make sure to review the changes before saving, as it will modify your source files.
import { Project } from "npm:ts-morph"; import { Project } from "npm:ts-morph";
const isDryRun = !Deno.args.includes("--run");
if (isDryRun) {
console.log("=== DRY RUN MODE ===");
console.log(
"To apply changes, run with: deno run --allow-read --allow-write --allow-run refactor-import-utils.ts --run\n"
);
}
const project = new Project({ tsConfigFilePath: "../tsconfig.json" }); const project = new Project({ tsConfigFilePath: "../tsconfig.json" });
const importMap = new Map<string, string>(); const importMap = new Map<string, string>();
@@ -18,7 +27,7 @@ for (const sourceFile of project.getSourceFiles()) {
// declaration.getKindName() === "EnumDeclaration" || // declaration.getKindName() === "EnumDeclaration" ||
true true
) { ) {
console.log(`Found type export in ${sourceFile.getFilePath()}:`, name); // console.log(`Found type export in ${sourceFile.getFilePath()}:`, name);
const relativePath = sourceFile.getFilePath().split("src/lib/src/")[1].replace(/\.ts$/, ""); const relativePath = sourceFile.getFilePath().split("src/lib/src/")[1].replace(/\.ts$/, "");
importMap.set(name, `@lib/${relativePath}`); importMap.set(name, `@lib/${relativePath}`);
} }
@@ -36,21 +45,27 @@ importMap.set("LOG_LEVEL_URGENT", "@lib/common/logger");
importMap.set("LOG_LEVEL", "@lib/common/logger"); importMap.set("LOG_LEVEL", "@lib/common/logger");
importMap.set("Logger", "@lib/common/logger"); importMap.set("Logger", "@lib/common/logger");
console.log("Import map:", importMap); // console.log("Import map:", importMap);
// Loop through all files that import from types.ts. // Loop through all files that import from types.ts.
for (const sourceFile of project.getSourceFiles()) { for (const sourceFile of project.getSourceFiles()) {
const imports = sourceFile.getImportDeclarations(); const imports = sourceFile.getImportDeclarations();
// if import from types.ts and the file is pointing `/lib/src/common/types.ts` (resolved), then we will check if the imported names exist in the importMap, if yes, we will replace the import path with the new path from importMap.
for (const imp of imports) { for (const imp of imports) {
if ( const moduleSpecifier = imp.getModuleSpecifierValue();
imp.getModuleSpecifierValue().includes("types.ts") && if (moduleSpecifier.endsWith("types") || moduleSpecifier.endsWith("types.ts")) {
imp.getModuleSpecifierValue().startsWith("@lib/common/") const filePath = sourceFile.getFilePath();
) { const lineNumber = imp.getStartLineNumber();
const resolvedModule = imp.getModuleSpecifierSourceFile();
if (!resolvedModule || !resolvedModule.getFilePath().includes("/lib/src/common/types.ts")) {
continue;
}
// Collect imports from types.ts. // Collect imports from types.ts.
const namedImports = imp.getNamedImports(); const namedImports = imp.getNamedImports();
const defaultImport = imp.getDefaultImport(); const defaultImport = imp.getDefaultImport();
console.log(`Found import in ${sourceFile.getFilePath()}:`, { console.log(`Found import in ${filePath} at line ${lineNumber}:`, {
namedImports: namedImports.map((ni) => ni.getText()), namedImports: namedImports.map((ni) => ni.getText()),
defaultImport: defaultImport ? defaultImport.getText() : null, defaultImport: defaultImport ? defaultImport.getText() : null,
}); });
@@ -61,7 +76,7 @@ for (const sourceFile of project.getSourceFiles()) {
const newPath = importMap.get(name); const newPath = importMap.get(name);
if (newPath) { if (newPath) {
console.log( console.log(
`Will replace import of ${name} in ${sourceFile.getFilePath()} with new path:`, `Will replace import of ${name} in ${filePath} at line ${lineNumber} with new path:`,
newPath newPath
); );
if (!importsToReplace[newPath]) { if (!importsToReplace[newPath]) {
@@ -112,7 +127,7 @@ for (const sourceFile of project.getSourceFiles()) {
if (newPath) { if (newPath) {
console.log( console.log(
`Replacing default import of ${name} in ${sourceFile.getFilePath()} with new path:`, `Replacing default import of ${name} in ${filePath} at line ${lineNumber} with new path:`,
newPath newPath
); );
// Add the new import statement. // Add the new import statement.
@@ -134,4 +149,6 @@ for (const sourceFile of project.getSourceFiles()) {
} }
// Save everything at the end. // Save everything at the end.
project.saveSync(); if (!isDryRun) {
project.saveSync();
}