create-next-pro-cli
Version:
Advanced Next.js project scaffolder with i18n, Tailwind, App Router and more.
53 lines (47 loc) • 1.82 kB
text/typescript
import { join } from "node:path";
import { writeFile, readdir } from "node:fs/promises";
import prompts from "prompts";
import { existsSync } from "node:fs";
export async function rmPage(args: string[]) {
let pageName = args[1];
if (!pageName || pageName.startsWith("-")) {
const response = await prompts.prompt({
type: "text",
name: "pageName",
message: "🗑️ Page name to remove:",
validate: (name: string) => (name ? true : "Page name is required"),
});
pageName = response.pageName;
}
// Remove translation files messages/<lang>/<PageName>.json
const messagesPath = join(process.cwd(), "messages");
const entries = await readdir(messagesPath, { withFileTypes: true });
const langDirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);
for (const locale of langDirs) {
const jsonTarget = join(messagesPath, locale, `${pageName}.json`);
if (existsSync(jsonTarget)) {
await writeFile(jsonTarget, "");
await import("node:child_process").then((cp) =>
cp.execSync(`rm -f '${jsonTarget}'`)
);
console.log(`🗑️ Deleted: ${jsonTarget}`);
}
}
// Remove folder src/ui/<PageName>
const uiPageDir = join(process.cwd(), "src", "ui", pageName);
if (existsSync(uiPageDir)) {
await import("node:child_process").then((cp) =>
cp.execSync(`rm -rf '${uiPageDir}'`)
);
console.log(`🗑️ Deleted: ${uiPageDir}`);
}
// Remove folder src/app/[locale]/<PageName>
const appLocaleDir = join(process.cwd(), "src", "app", "[locale]", pageName);
if (existsSync(appLocaleDir)) {
await import("node:child_process").then((cp) =>
cp.execSync(`rm -rf '${appLocaleDir}'`)
);
console.log(`🗑️ Deleted: ${appLocaleDir}`);
}
console.log(`✅ Page "${pageName}" deleted.`);
}