fauth-template
Version:
Generate auth templates for your projects
104 lines (79 loc) • 2.54 kB
text/typescript
import { program } from "commander";
import path from "path";
import fs from "fs";
import chalk from "chalk";
import { confirm, isCancel, select, spinner } from "@clack/prompts";
async function askQuestion(question: string) {
const answer = await confirm({
message: question,
initialValue: true,
});
if (isCancel(answer)) {
console.log(chalk.red("exiting...."));
process.exit(0);
}
return answer === true;
}
async function askTask() {
const projectType = await select({
message: "Pick server folder.",
options: [
{ value: "go_server", label: "GO + Fiber" },
{ value: "node_server", label: "Node + Express" },
{ value: "go_server,node_server", label: "Both" },
],
});
if (isCancel(projectType)) {
console.log(chalk.red("exiting...."));
process.exit(0);
}
return projectType.split(",");
}
function copyDefault(targetDir: string, folders: string[]) {
folders.forEach((folder) => {
const src = path.resolve(__dirname, `../templates/${folder}`);
const dest = path.join(targetDir, folder);
if (fs.existsSync(src)) {
const s = spinner();
s.start(`creating ${folder} template`);
fs.cpSync(src, dest, { recursive: true });
s.stop(`✅ ${folder} template created.`);
}
});
}
program
.name("fauth-template")
.version("1.0.0")
.description("Generate auth templates for your projects");
program
.command("create")
.action(async () => {
const targetDir = path.resolve(process.cwd(), "auth-template");
if (
fs.existsSync(targetDir) &&
!(await askQuestion("Found 'auth-template' folder, override?"))
) {
console.error(
"❌ Directory 'auth-template' already exists. Remove it or choose a different location."
);
process.exit(1);
}
const opts = [];
if (await askQuestion("do you want to include client folder?")) {
opts.push("client");
}
const serverFolders = await askTask();
opts.push(...serverFolders);
if (opts.length < 1) {
console.log(chalk.red("All inputs must be filled!"));
}
try {
console.log(chalk.green("Adding Auth templates..."));
copyDefault(targetDir, opts);
console.log(chalk.green("\nAuth template generated."));
} catch (error) {
console.log(chalk.red("Error generating auth templates: ", error));
}
});
program.parse(process.argv);