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>
64 lines
2.7 KiB
JavaScript
64 lines
2.7 KiB
JavaScript
#!/usr/bin/env node
|
|
/** Bulk-update Healthcare module import paths after migration to src/modules/healthcare. */
|
|
import { readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
|
|
import { join, relative } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const ROOT = join(fileURLToPath(new URL(".", import.meta.url)), "..");
|
|
const EXT = new Set([".ts", ".tsx"]);
|
|
const SKIP = new Set(["node_modules", ".next"]);
|
|
|
|
const GLOBAL_REPLACEMENTS = [
|
|
["@/components/healthcare/ui", "@/src/modules/healthcare/design-system"],
|
|
["@/components/healthcare/design-system", "@/src/modules/healthcare/design-system"],
|
|
["@/components/healthcare/pages/", "@/src/modules/healthcare/pages/"],
|
|
["@/components/healthcare/HealthcarePortalShell", "@/src/modules/healthcare/components/HealthcarePortalShell"],
|
|
["@/components/healthcare/PublicHealthcareLayout", "@/src/modules/healthcare/components/PublicHealthcareLayout"],
|
|
["@/components/healthcare/createPortalLayout", "@/src/modules/healthcare/components/createPortalLayout"],
|
|
["@/lib/healthcare-api", "@/src/modules/healthcare/services/healthcare-api"],
|
|
["@/lib/healthcare-portals", "@/src/modules/healthcare/constants/portals"],
|
|
["@/hooks/useHealthcareLookups", "@/src/modules/healthcare/hooks/useHealthcareLookups"],
|
|
["@/hooks/useHealthcarePatientContext", "@/src/modules/healthcare/hooks/useHealthcarePatientContext"],
|
|
["@/hooks/useHealthcareDoctorContext", "@/src/modules/healthcare/hooks/useHealthcareDoctorContext"],
|
|
];
|
|
|
|
const HEALTHCARE_SCOPE_REPLACEMENTS = [
|
|
["@/components/ds", "@/src/shared/ui"],
|
|
];
|
|
|
|
function walk(dir, files = []) {
|
|
for (const entry of readdirSync(dir)) {
|
|
if (SKIP.has(entry)) continue;
|
|
const full = join(dir, entry);
|
|
if (statSync(full).isDirectory()) walk(full, files);
|
|
else if (EXT.has(entry.slice(entry.lastIndexOf(".")))) files.push(full);
|
|
}
|
|
return files;
|
|
}
|
|
|
|
function isHealthcareScope(rel) {
|
|
return rel.startsWith("app/healthcare/") || rel.startsWith("src/modules/healthcare/");
|
|
}
|
|
|
|
let changed = 0;
|
|
for (const file of walk(ROOT)) {
|
|
const rel = relative(ROOT, file).replace(/\\/g, "/");
|
|
if (rel.startsWith("scripts/migrate-healthcare-imports.mjs")) continue;
|
|
let content = readFileSync(file, "utf8");
|
|
const original = content;
|
|
for (const [from, to] of GLOBAL_REPLACEMENTS) {
|
|
content = content.split(from).join(to);
|
|
}
|
|
if (isHealthcareScope(rel)) {
|
|
for (const [from, to] of HEALTHCARE_SCOPE_REPLACEMENTS) {
|
|
content = content.split(from).join(to);
|
|
}
|
|
}
|
|
if (content !== original) {
|
|
writeFileSync(file, content, "utf8");
|
|
changed++;
|
|
}
|
|
}
|
|
|
|
console.log(`Updated imports in ${changed} files.`);
|