mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-05 22:22:08 +00:00
chore: remove migration scripts and unused generouted router
This commit is contained in:
parent
96059ee53f
commit
7be969951c
7 changed files with 5 additions and 475 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -32,4 +32,7 @@ seed-data.sql
|
|||
/backend
|
||||
|
||||
# eslint
|
||||
.eslintcache
|
||||
.eslintcache
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
|
|
@ -5,7 +5,7 @@
|
|||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "node scripts/fix-router-paths.mjs && tsc -b && vite build",
|
||||
"build": "tsc -b && vite build",
|
||||
"preview": "vite preview",
|
||||
"test": "vitest run",
|
||||
"test:watch": "vitest",
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
export const defaultRouterFile: string;
|
||||
|
||||
export function fixGeneroutedRouterPaths(routerFile?: string): void;
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
||||
export const defaultRouterFile = path.resolve(scriptDir, "../src/router.ts");
|
||||
|
||||
/** Strip `/src/app` prefix from generouted Path types — views live under src/app/, not src/pages/. */
|
||||
export function fixGeneroutedRouterPaths(routerFile = defaultRouterFile) {
|
||||
const content = fs.readFileSync(routerFile, "utf8");
|
||||
const fixed = content
|
||||
.replace(/`\/+src\/app\//g, "`/")
|
||||
.replace(/`\/+src\/app`/g, "`/`")
|
||||
.replace(/"\/+src\/app\//g, '"/')
|
||||
.replace(/"\/+src\/app"/g, '"/"');
|
||||
|
||||
if (fixed !== content) {
|
||||
fs.writeFileSync(routerFile, fixed);
|
||||
}
|
||||
}
|
||||
|
||||
const isMain =
|
||||
process.argv[1] && path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url));
|
||||
|
||||
if (isMain) {
|
||||
fixGeneroutedRouterPaths();
|
||||
}
|
||||
|
|
@ -1,345 +0,0 @@
|
|||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const root = path.resolve(import.meta.dirname, "..");
|
||||
const src = path.join(root, "src");
|
||||
const app = path.join(src, "app");
|
||||
const routesSrc = path.join(app, "routes");
|
||||
|
||||
function read(file) {
|
||||
return fs.readFileSync(file, "utf8");
|
||||
}
|
||||
|
||||
function write(file, content) {
|
||||
fs.mkdirSync(path.dirname(file), { recursive: true });
|
||||
fs.writeFileSync(file, content, "utf8");
|
||||
}
|
||||
|
||||
function rmrf(dir) {
|
||||
if (!fs.existsSync(dir)) return;
|
||||
fs.rmSync(dir, { recursive: true, force: true });
|
||||
}
|
||||
|
||||
function toDefaultExport(content, exportName) {
|
||||
let result = content;
|
||||
if (exportName) {
|
||||
result = result.replace(
|
||||
new RegExp(`export function ${exportName}\\b`),
|
||||
`export default function ${exportName}`,
|
||||
);
|
||||
result = result.replace(
|
||||
new RegExp(`export const ${exportName}\\b`),
|
||||
`export default function ${exportName}`,
|
||||
);
|
||||
}
|
||||
return result.replace(/^export \{ ([A-Za-z]+) as default \} from .+;\s*$/m, "").trimEnd() + "\n";
|
||||
}
|
||||
|
||||
function copyRoutesTree() {
|
||||
const entries = ["(auth)", "(protected)", "v"];
|
||||
for (const entry of entries) {
|
||||
const from = path.join(routesSrc, entry);
|
||||
const to = path.join(app, entry);
|
||||
if (!fs.existsSync(from)) continue;
|
||||
rmrf(to);
|
||||
fs.cpSync(from, to, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
function updateProtectedLayout() {
|
||||
const layoutPath = path.join(app, "(protected)", "_layout.tsx");
|
||||
let content = read(layoutPath);
|
||||
content = content.replace(
|
||||
"export default function ProtectedLayout()",
|
||||
"export default function AdminShellLayout()",
|
||||
);
|
||||
write(layoutPath, content);
|
||||
}
|
||||
|
||||
function mergePage(
|
||||
sourceRel,
|
||||
destRel,
|
||||
exportName,
|
||||
importReplacements = [],
|
||||
{ namedOnly = false } = {},
|
||||
) {
|
||||
const source = path.join(app, sourceRel);
|
||||
if (!fs.existsSync(source)) {
|
||||
console.warn("Missing source:", sourceRel);
|
||||
return;
|
||||
}
|
||||
let content = read(source);
|
||||
for (const [from, to] of importReplacements) {
|
||||
content = content.split(from).join(to);
|
||||
}
|
||||
if (!namedOnly) {
|
||||
content = toDefaultExport(content, exportName);
|
||||
}
|
||||
write(path.join(app, destRel), content.endsWith("\n") ? content : content + "\n");
|
||||
}
|
||||
|
||||
function copyFile(sourceRel, destRel, importReplacements = []) {
|
||||
mergePage(sourceRel, destRel, null, importReplacements, { namedOnly: true });
|
||||
}
|
||||
|
||||
function writeReExport(destRel, componentPath, { nestedEdit = false } = {}) {
|
||||
const importPath = nestedEdit ? componentPath.replace(/^\.\//, "../") : componentPath;
|
||||
write(path.join(app, destRel), `export { default } from "${importPath}";\n`);
|
||||
}
|
||||
|
||||
// --- infra ---
|
||||
write(path.join(src, "app-root.tsx"), read(path.join(app, "app-root.tsx")));
|
||||
|
||||
let main = read(path.join(src, "main.tsx"));
|
||||
main = main.replace("@/app/app-root", "@/app-root");
|
||||
write(path.join(src, "main.tsx"), main);
|
||||
|
||||
let vite = read(path.join(root, "vite.config.ts"));
|
||||
vite = vite.replace(
|
||||
'routes: "./src/app/routes/**/[\\w[-]*.{jsx,tsx}"',
|
||||
'routes: "./src/app/**/[\\w[-]*.{jsx,tsx}"',
|
||||
);
|
||||
vite = vite.replace(
|
||||
'modals: "./src/app/routes/**/[+]*.{jsx,tsx}"',
|
||||
'modals: "./src/app/**/[+]*.{jsx,tsx}"',
|
||||
);
|
||||
write(path.join(root, "vite.config.ts"), vite);
|
||||
|
||||
copyRoutesTree();
|
||||
updateProtectedLayout();
|
||||
|
||||
// --- accounts pilot ---
|
||||
mergePage("accounts/accounts-list-page.tsx", "(protected)/accounts/index.tsx", "AccountsListPage");
|
||||
mergePage(
|
||||
"accounts/account-form-page.tsx",
|
||||
"(protected)/accounts/_components/account-form.tsx",
|
||||
"AccountFormPage",
|
||||
);
|
||||
writeReExport("(protected)/accounts/new.tsx", "./_components/account-form");
|
||||
writeReExport("(protected)/accounts/edit/[id].tsx", "./_components/account-form");
|
||||
|
||||
// --- contacts, employees, locations ---
|
||||
mergePage("contacts/contacts-list-page.tsx", "(protected)/contacts/index.tsx", "ContactsListPage");
|
||||
mergePage(
|
||||
"contacts/contact-form-page.tsx",
|
||||
"(protected)/contacts/_components/contact-form.tsx",
|
||||
"ContactFormPage",
|
||||
);
|
||||
writeReExport("(protected)/contacts/new.tsx", "./_components/contact-form");
|
||||
writeReExport("(protected)/contacts/edit/[id].tsx", "./_components/contact-form");
|
||||
|
||||
mergePage(
|
||||
"employees/employees-list-page.tsx",
|
||||
"(protected)/employees/index.tsx",
|
||||
"EmployeesListPage",
|
||||
);
|
||||
mergePage(
|
||||
"employees/employee-form-page.tsx",
|
||||
"(protected)/employees/_components/employee-form.tsx",
|
||||
"EmployeeFormPage",
|
||||
);
|
||||
writeReExport("(protected)/employees/new.tsx", "./_components/employee-form");
|
||||
writeReExport("(protected)/employees/edit/[id].tsx", "./_components/employee-form");
|
||||
|
||||
mergePage(
|
||||
"locations/locations-list-page.tsx",
|
||||
"(protected)/locations/index.tsx",
|
||||
"LocationsListPage",
|
||||
);
|
||||
mergePage(
|
||||
"locations/location-form-page.tsx",
|
||||
"(protected)/locations/_components/location-form.tsx",
|
||||
"LocationFormPage",
|
||||
);
|
||||
writeReExport("(protected)/locations/new.tsx", "./_components/location-form");
|
||||
writeReExport("(protected)/locations/edit/[id].tsx", "./_components/location-form");
|
||||
|
||||
// --- assets, vendors, followups, pmschedules ---
|
||||
mergePage("assets/assets-list-page.tsx", "(protected)/assets/index.tsx", "AssetsListPage");
|
||||
mergePage(
|
||||
"assets/asset-form-page.tsx",
|
||||
"(protected)/assets/_components/asset-form.tsx",
|
||||
"AssetFormPage",
|
||||
);
|
||||
writeReExport("(protected)/assets/new.tsx", "./_components/asset-form");
|
||||
writeReExport("(protected)/assets/edit/[id].tsx", "./_components/asset-form");
|
||||
|
||||
mergePage("vendors/vendors-list-page.tsx", "(protected)/vendors/index.tsx", "VendorsListPage");
|
||||
mergePage(
|
||||
"vendors/vendor-form-page.tsx",
|
||||
"(protected)/vendors/_components/vendor-form.tsx",
|
||||
"VendorFormPage",
|
||||
[["@/app/vendors/components/vendor-portal-token-panel", "./vendor-portal-token-panel"]],
|
||||
);
|
||||
copyFile(
|
||||
"vendors/components/vendor-portal-token-panel.tsx",
|
||||
"(protected)/vendors/_components/vendor-portal-token-panel.tsx",
|
||||
);
|
||||
writeReExport("(protected)/vendors/new.tsx", "./_components/vendor-form");
|
||||
writeReExport("(protected)/vendors/edit/[id].tsx", "./_components/vendor-form");
|
||||
|
||||
mergePage(
|
||||
"follow-ups/follow-ups-list-page.tsx",
|
||||
"(protected)/followups/index.tsx",
|
||||
"FollowUpsListPage",
|
||||
);
|
||||
mergePage(
|
||||
"follow-ups/follow-up-form-page.tsx",
|
||||
"(protected)/followups/_components/follow-up-form.tsx",
|
||||
"FollowUpFormPage",
|
||||
);
|
||||
writeReExport("(protected)/followups/new.tsx", "./_components/follow-up-form");
|
||||
writeReExport("(protected)/followups/edit/[id].tsx", "./_components/follow-up-form");
|
||||
|
||||
mergePage(
|
||||
"pm-schedules/pm-schedules-list-page.tsx",
|
||||
"(protected)/pmschedules/index.tsx",
|
||||
"PmSchedulesListPage",
|
||||
);
|
||||
mergePage(
|
||||
"pm-schedules/pm-schedule-form-page.tsx",
|
||||
"(protected)/pmschedules/_components/pm-schedule-form.tsx",
|
||||
"PmScheduleFormPage",
|
||||
);
|
||||
writeReExport("(protected)/pmschedules/new.tsx", "./_components/pm-schedule-form");
|
||||
writeReExport("(protected)/pmschedules/edit/[id].tsx", "./_components/pm-schedule-form");
|
||||
|
||||
// --- calendar, uplifts, vendor-pos, settings, dashboard, login ---
|
||||
mergePage("calendar/calendar-page.tsx", "(protected)/calendar/index.tsx", "CalendarPage");
|
||||
mergePage(
|
||||
"calendar/event-form-page.tsx",
|
||||
"(protected)/calendar/_components/event-form.tsx",
|
||||
"EventFormPage",
|
||||
);
|
||||
writeReExport("(protected)/calendar/new.tsx", "./_components/event-form");
|
||||
writeReExport("(protected)/calendar/edit/[id].tsx", "./_components/event-form");
|
||||
|
||||
mergePage("uplifts/uplift-queue-page.tsx", "(protected)/uplifts/index.tsx", "UpliftQueuePage");
|
||||
|
||||
mergePage(
|
||||
"vendor-pos/vendor-pos-list-page.tsx",
|
||||
"(protected)/vendor-pos/index.tsx",
|
||||
"VendorPosListPage",
|
||||
);
|
||||
mergePage(
|
||||
"vendor-pos/vendor-po-view-page.tsx",
|
||||
"(protected)/vendor-pos/[id].tsx",
|
||||
"VendorPoViewPage",
|
||||
);
|
||||
|
||||
mergePage(
|
||||
"settings/dropdown-options-page.tsx",
|
||||
"(protected)/settings/dropdowns.tsx",
|
||||
"DropdownOptionsPage",
|
||||
);
|
||||
mergePage(
|
||||
"settings/task-templates-page.tsx",
|
||||
"(protected)/settings/task-templates.tsx",
|
||||
"TaskTemplatesPage",
|
||||
);
|
||||
|
||||
mergePage("dashboard/dashboard-page.tsx", "(protected)/index.tsx", "DashboardPage");
|
||||
mergePage("dashboard/dashboard-page.tsx", "(protected)/dashboard.tsx", "DashboardPage");
|
||||
|
||||
mergePage("login/login-page.tsx", "(auth)/login.tsx", "LoginPage");
|
||||
|
||||
// --- workorders ---
|
||||
mergePage(
|
||||
"work-orders/work-orders-list-page.tsx",
|
||||
"(protected)/workorders/index.tsx",
|
||||
"WorkOrdersListPage",
|
||||
);
|
||||
mergePage(
|
||||
"work-orders/work-order-form-page.tsx",
|
||||
"(protected)/workorders/_components/work-order-form.tsx",
|
||||
"WorkOrderFormPage",
|
||||
);
|
||||
writeReExport("(protected)/workorders/new.tsx", "./_components/work-order-form");
|
||||
writeReExport("(protected)/workorders/edit/[id].tsx", "./_components/work-order-form");
|
||||
mergePage(
|
||||
"work-orders/work-order-view-page.tsx",
|
||||
"(protected)/workorders/[id].tsx",
|
||||
"WorkOrderViewPage",
|
||||
[
|
||||
["@/app/work-orders/components/dispatch-create-modal", "./_components/dispatch-create-modal"],
|
||||
["@/app/work-orders/components/dispatch-detail-modal", "./_components/dispatch-detail-modal"],
|
||||
],
|
||||
);
|
||||
copyFile(
|
||||
"work-orders/components/dispatch-create-modal.tsx",
|
||||
"(protected)/workorders/_components/dispatch-create-modal.tsx",
|
||||
);
|
||||
copyFile(
|
||||
"work-orders/components/dispatch-detail-modal.tsx",
|
||||
"(protected)/workorders/_components/dispatch-detail-modal.tsx",
|
||||
);
|
||||
|
||||
// --- vendor portal ---
|
||||
const vpComponents = path.join(app, "v", "_components");
|
||||
fs.mkdirSync(vpComponents, { recursive: true });
|
||||
|
||||
copyFile("vendor-portal/vendor-portal-provider.tsx", "v/_components/vendor-portal-provider.tsx");
|
||||
copyFile("vendor-portal/components/signature-pad.tsx", "v/_components/signature-pad.tsx");
|
||||
fs.copyFileSync(
|
||||
path.join(app, "vendor-portal/vendor-portal.css"),
|
||||
path.join(vpComponents, "vendor-portal.css"),
|
||||
);
|
||||
|
||||
let vpLayout = read(path.join(app, "vendor-portal/vendor-portal-layout.tsx"));
|
||||
vpLayout = vpLayout
|
||||
.replace(
|
||||
"@/app/vendor-portal/vendor-portal-provider",
|
||||
"@/app/v/_components/vendor-portal-provider",
|
||||
)
|
||||
.replace("@/app/vendor-portal/vendor-portal.css", "@/app/v/_components/vendor-portal.css")
|
||||
.replace("export function VendorPortalLayout", "export default function VendorPortalLayout");
|
||||
write(path.join(app, "v", "[token]", "_layout.tsx"), vpLayout);
|
||||
|
||||
mergePage(
|
||||
"vendor-portal/vendor-portal-dashboard-page.tsx",
|
||||
"v/[token]/dashboard.tsx",
|
||||
"VendorPortalDashboardPage",
|
||||
[["@/app/vendor-portal/vendor-portal-provider", "@/app/v/_components/vendor-portal-provider"]],
|
||||
);
|
||||
mergePage("vendor-portal/vendor-portal-pos-page.tsx", "v/[token]/pos.tsx", "VendorPortalPosPage", [
|
||||
["@/app/vendor-portal/vendor-portal-provider", "@/app/v/_components/vendor-portal-provider"],
|
||||
]);
|
||||
mergePage(
|
||||
"vendor-portal/vendor-portal-dispatch-page.tsx",
|
||||
"v/[token]/dispatch/[id].tsx",
|
||||
"VendorPortalDispatchPage",
|
||||
[
|
||||
["@/app/vendor-portal/components/signature-pad", "@/app/v/_components/signature-pad"],
|
||||
["@/app/vendor-portal/vendor-portal-provider", "@/app/v/_components/vendor-portal-provider"],
|
||||
],
|
||||
);
|
||||
|
||||
// --- cleanup old dirs ---
|
||||
const toDelete = [
|
||||
path.join(app, "routes"),
|
||||
path.join(app, "app-root.tsx"),
|
||||
path.join(app, "store.js"),
|
||||
path.join(app, "slices"),
|
||||
path.join(app, "accounts"),
|
||||
path.join(app, "contacts"),
|
||||
path.join(app, "employees"),
|
||||
path.join(app, "locations"),
|
||||
path.join(app, "assets"),
|
||||
path.join(app, "vendors"),
|
||||
path.join(app, "follow-ups"),
|
||||
path.join(app, "pm-schedules"),
|
||||
path.join(app, "calendar"),
|
||||
path.join(app, "uplifts"),
|
||||
path.join(app, "vendor-pos"),
|
||||
path.join(app, "settings"),
|
||||
path.join(app, "dashboard"),
|
||||
path.join(app, "login"),
|
||||
path.join(app, "work-orders"),
|
||||
path.join(app, "vendor-portal"),
|
||||
];
|
||||
|
||||
for (const dir of toDelete) {
|
||||
rmrf(dir);
|
||||
}
|
||||
|
||||
console.log("Migration complete.");
|
||||
|
|
@ -1,74 +0,0 @@
|
|||
// Generouted, changes to this file will be overridden
|
||||
/* eslint-disable */
|
||||
|
||||
import { components, hooks, utils } from "@generouted/react-router/client";
|
||||
|
||||
export type Path =
|
||||
| `/`
|
||||
| `/accounts`
|
||||
| `/accounts/edit/:id`
|
||||
| `/accounts/new`
|
||||
| `/assets`
|
||||
| `/assets/edit/:id`
|
||||
| `/assets/new`
|
||||
| `/calendar`
|
||||
| `/calendar/edit/:id`
|
||||
| `/calendar/new`
|
||||
| `/contacts`
|
||||
| `/contacts/edit/:id`
|
||||
| `/contacts/new`
|
||||
| `/dashboard`
|
||||
| `/employees`
|
||||
| `/employees/edit/:id`
|
||||
| `/employees/new`
|
||||
| `/followups`
|
||||
| `/followups/edit/:id`
|
||||
| `/followups/new`
|
||||
| `/locations`
|
||||
| `/locations/edit/:id`
|
||||
| `/locations/new`
|
||||
| `/login`
|
||||
| `/pmschedules`
|
||||
| `/pmschedules/edit/:id`
|
||||
| `/pmschedules/new`
|
||||
| `/settings/dropdowns`
|
||||
| `/settings/task-templates`
|
||||
| `/uplifts`
|
||||
| `/v/:token`
|
||||
| `/v/:token/dashboard`
|
||||
| `/v/:token/dispatch/:id`
|
||||
| `/v/:token/pos`
|
||||
| `/vendor-pos`
|
||||
| `/vendor-pos/:id`
|
||||
| `/vendors`
|
||||
| `/vendors/edit/:id`
|
||||
| `/vendors/new`
|
||||
| `/workorders`
|
||||
| `/workorders/:id`
|
||||
| `/workorders/edit/:id`
|
||||
| `/workorders/new`;
|
||||
|
||||
export type Params = {
|
||||
"/accounts/edit/:id": { id: string };
|
||||
"/assets/edit/:id": { id: string };
|
||||
"/calendar/edit/:id": { id: string };
|
||||
"/contacts/edit/:id": { id: string };
|
||||
"/employees/edit/:id": { id: string };
|
||||
"/followups/edit/:id": { id: string };
|
||||
"/locations/edit/:id": { id: string };
|
||||
"/pmschedules/edit/:id": { id: string };
|
||||
"/v/:token": { token: string };
|
||||
"/v/:token/dashboard": { token: string };
|
||||
"/v/:token/dispatch/:id": { token: string; id: string };
|
||||
"/v/:token/pos": { token: string };
|
||||
"/vendor-pos/:id": { id: string };
|
||||
"/vendors/edit/:id": { id: string };
|
||||
"/workorders/:id": { id: string };
|
||||
"/workorders/edit/:id": { id: string };
|
||||
};
|
||||
|
||||
export type ModalPath = never;
|
||||
|
||||
export const { Link, Navigate } = components<Path, Params>();
|
||||
export const { useModals, useNavigate, useParams } = hooks<Path, Params, ModalPath>();
|
||||
export const { redirect } = utils<Path, Params>();
|
||||
|
|
@ -1,9 +1,7 @@
|
|||
import generouted from "@generouted/react-router/plugin";
|
||||
import react from "@vitejs/plugin-react";
|
||||
import tailwindcss from "@tailwindcss/vite";
|
||||
import path from "node:path";
|
||||
import { defineConfig, loadEnv, transformWithEsbuild } from "vite";
|
||||
import { defaultRouterFile, fixGeneroutedRouterPaths } from "./scripts/fix-router-paths.mjs";
|
||||
|
||||
export default defineConfig(({ mode }) => {
|
||||
const env = loadEnv(mode, process.cwd(), "");
|
||||
|
|
@ -25,28 +23,6 @@ export default defineConfig(({ mode }) => {
|
|||
},
|
||||
react(),
|
||||
tailwindcss(),
|
||||
generouted({
|
||||
source: {
|
||||
routes: "./src/app/**/[\\w[-]*.{jsx,tsx}",
|
||||
modals: "./src/app/**/[+]*.{jsx,tsx}",
|
||||
},
|
||||
output: "./src/router.ts",
|
||||
}),
|
||||
{
|
||||
name: "generouted-app-paths",
|
||||
enforce: "post",
|
||||
buildEnd() {
|
||||
fixGeneroutedRouterPaths(defaultRouterFile);
|
||||
},
|
||||
configureServer(server) {
|
||||
const scheduleFix = () => {
|
||||
setTimeout(() => fixGeneroutedRouterPaths(defaultRouterFile), 50);
|
||||
};
|
||||
server.watcher.on("add", scheduleFix);
|
||||
server.watcher.on("change", scheduleFix);
|
||||
server.watcher.on("unlink", scheduleFix);
|
||||
},
|
||||
},
|
||||
],
|
||||
optimizeDeps: {
|
||||
esbuildOptions: {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue