@tecfancy/init
Version:
88 lines • 3.2 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const log_1 = __importDefault(require("@tecfancy/log"));
/**
* Get the working directory
* @param projectName project name
* @returns working directory
*/
function getWorkingDir(projectName) {
return projectName ? path_1.default.join(process.cwd(), projectName) : process.cwd();
}
/**
* Prompt whether to empty the existing directory
* @returns {Promise<boolean>} true: empty, false: cancel
*/
async function emptyDirPrompt() {
const inquirer = (await import("inquirer")).default;
const answers = await inquirer.prompt([
{
type: "confirm",
name: "empty",
message: "The directory is not empty, do you want to empty it?",
},
]);
return answers.empty;
}
/**
* Empty the directory
* @param dirPath {string} directory path
*/
function emptyDirSync(dirPath) {
try {
fs_extra_1.default.emptyDirSync(dirPath);
log_1.default.info("", `The directory at ${dirPath} has been emptied successfully.`);
}
catch (error) {
log_1.default.error("", `Failed to empty the directory at ${dirPath}: ${error}`);
throw new Error(`Failed to empty the directory at ${dirPath}: ${error}`); // Propagate the exception to be handled by the caller
}
}
/**
* Create a directory
* @param dirPath {string} directory path
*/
function mkdirSync(dirPath) {
try {
fs_extra_1.default.mkdirSync(dirPath);
log_1.default.info("", `The directory at ${dirPath} has been created successfully.`);
}
catch (error) {
log_1.default.error("", `Failed to create the directory at ${dirPath}: ${error}`);
throw new Error(`Failed to create the directory at ${dirPath}: ${error}`); // Propagate the exception to be handled by the caller
}
}
/**
* Create a directory if it does not exist, or empty it if it does
* @param dirPath directory path
* @param force whether to force emptying the directory
*/
async function createWorkingDir(projectName, force) {
const workingDir = getWorkingDir(projectName);
if (fs_extra_1.default.existsSync(workingDir)) {
// Check if the directory is not empty
if (fs_extra_1.default.readdirSync(workingDir).length > 0) {
let proceed = force; // If force is true, proceed without prompt
if (!proceed) {
// If not forcing, ask the user to confirm overwriting
proceed = await emptyDirPrompt();
}
if (proceed) {
emptyDirSync(workingDir);
}
else {
log_1.default.info("", "Operation cancelled."); // If user chooses not to overwrite, cancel the operation
}
}
}
else {
mkdirSync(workingDir); // If the directory does not exist, create it
}
}
exports.default = createWorkingDir;
//# sourceMappingURL=createWorkingDir.js.map