import { execFileSync } from "node:child_process";
import { existsSync, readFileSync, writeFileSync } from "node:fs";
import { createInterface } from "node:readline/promises";
import { stdin, stdout } from "node:process";
import { printBanner } from "../src/banner.ts";
const rl = createInterface({ input: stdin, output: stdout });
async function ask(question: string, fallback = ""): Promise<string> {
const suffix = fallback ? ` [${fallback}]` : "";
const answer = (await rl.question(`${question}${suffix}: `)).trim();
return answer || fallback;
}
async function confirm(question: string): Promise<boolean> {
const answer = (await rl.question(`${question} [y/N]: `)).trim().toLowerCase();
return answer === "y" || answer === "yes";
}
function setEnvValue(content: string, key: string, value: string): string {
const pattern = new RegExp(`^#?\\s*${key}=.*$`, "m");
const line = `${key}=${value}`;
return pattern.test(content) ? content.replace(pattern, line) : `${content.trimEnd()}\n${line}\n`;
}
// Commented-out in the example so mail.tm mode doesn't pick up a stale domain.
function commentOutEnvValue(content: string, key: string): string {
return content.replace(new RegExp(`^${key}=.*$`, "m"), `# ${key}= (unused in mail.tm mode)`);
}
async function writeGuarded(path: string, content: string): Promise<boolean> {
if (existsSync(path) && !(await confirm(`${path} already exists. Overwrite it?`))) {
console.log(`Left ${path} alone. Nothing written.`);
return false;
}
writeFileSync(path, content);
console.log(`Wrote ${path}`);
return true;
}