TorbatYar/frontend/scripts/fix-accounting-exports.mjs
Mortezakoohjani 6f4a484051 Migrate Beauty, Healthcare, and Accounting frontend to modular src/modules architecture.
Move business logic out of App Router into module packages, add boundary validation scripts, and keep all routes as thin re-exports without changing URLs or API behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-26 22:28:27 +03:30

62 lines
2.4 KiB
JavaScript

#!/usr/bin/env node
/** Align module page export names with route re-export adapters. */
import { readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
import { join, relative, sep } from "node:path";
import { fileURLToPath } from "node:url";
const ROOT = join(fileURLToPath(new URL(".", import.meta.url)), "..");
const APP = join(ROOT, "app", "accounting");
function walkPages(dir, acc = []) {
for (const entry of readdirSync(dir)) {
const full = join(dir, entry);
if (statSync(full).isDirectory()) walkPages(full, acc);
else if (entry === "page.tsx") acc.push(full);
}
return acc;
}
let fixed = 0;
for (const pageFile of walkPages(APP)) {
const routeContent = readFileSync(pageFile, "utf8");
const match = routeContent.match(
/export\s+\{\s*(\w+)\s+as\s+default\s+\}\s+from\s+["'](@\/src\/modules\/accounting\/pages\/[^"']+)["']/
);
if (!match) continue;
const exportName = match[1];
let importPath = match[2].replace("@/src/modules/accounting/pages/", "");
if (!importPath || importPath.endsWith("/")) importPath = "dashboard";
const moduleFile = join(ROOT, "src", "modules", "accounting", "pages", `${importPath}.tsx`);
if (!statSync(moduleFile, { throwIfNotFound: false })?.isFile()) {
console.error(`Missing module file: ${moduleFile}`);
continue;
}
let moduleContent = readFileSync(moduleFile, "utf8");
const original = moduleContent;
if (moduleContent.includes(`export function ${exportName}`)) continue;
if (/export function Page\b/.test(moduleContent)) {
moduleContent = moduleContent.replace(/export function Page\b/, `export function ${exportName}`);
} else if (/export default function Page\b/.test(moduleContent)) {
moduleContent = moduleContent.replace(/export default function Page\b/, `export function ${exportName}`);
} else if (/export default function (\w+)/.test(moduleContent)) {
moduleContent = moduleContent.replace(/export default function (\w+)/, `export function $1`);
}
if (moduleContent !== original) {
writeFileSync(moduleFile, moduleContent, "utf8");
fixed++;
}
const fixedRoute = `"use client";\n\nexport { ${exportName} as default } from "@/src/modules/accounting/pages/${importPath}";\n`;
if (routeContent !== fixedRoute) {
writeFileSync(pageFile, fixedRoute, "utf8");
}
}
console.log(`Fixed export names in ${fixed} module pages.`);