create-node-blueprint
Version:
A cli tool to generate nodejs project
86 lines (85 loc) • 4.49 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import pc from "picocolors";
import path from "node:path";
import fs from "node:fs/promises";
import { intro, outro, log, spinner } from "@clack/prompts";
import { initGit } from "./init-git.js";
import { createPackageJson } from "./create-package-json.js";
import { installPackages } from "./install-packages.js";
import { createProjectStructure } from "./create-project-structure.js";
import { showPostCreationInstructions } from "./post-creation-instructions.js";
import { checkDirExists, packageManagerConfig, packgeManageFromUserAgent } from "../utils/utils.js";
import getOverwriteExistingDirectory from "../prompts/get-overwrite-existing-directory.js";
export function createProject(options) {
return __awaiter(this, void 0, void 0, function* () {
const { projectName, installDependencies, initializeGit, orm } = options;
const cwd = process.cwd();
const root = path.join(cwd, projectName);
console.log(pc.yellow("\n\nCreating project...\n"));
intro(`Creating "${pc.cyan(projectName)}"`);
const pkgInfo = packgeManageFromUserAgent(process.env.npm_config_user_agent);
const pkgManagerCommands = packageManagerConfig((pkgInfo === null || pkgInfo === void 0 ? void 0 : pkgInfo.name) || "npm");
const s = spinner();
try {
// Validate project directory
if (yield checkDirExists(root)) {
const overwrite = yield getOverwriteExistingDirectory(projectName);
if (!overwrite) {
process.exit(0);
}
try {
s.start("Removing existing directory...");
yield fs.rm(root, { recursive: true, force: true });
s.stop("Existing directory removed");
}
catch (error) {
s.stop(pc.red("Failed to remove existing directory"));
log.error(`Error: ${error.message}`);
process.exit(1);
}
}
// Create project structure
s.start("Creating project files...");
yield fs.mkdir(root, { recursive: true });
yield createProjectStructure(options, { root, pkgManager: (pkgInfo === null || pkgInfo === void 0 ? void 0 : pkgInfo.name) || "npm", pkgLock: pkgManagerCommands.files.packageLockJson });
s.stop("Project structure created");
// Create package.json
s.start("Creating package.json...");
yield createPackageJson(options, { root, pkgManager: (pkgInfo === null || pkgInfo === void 0 ? void 0 : pkgInfo.name) || "npm" });
s.stop("Package.json created");
// Install dependencies if requested
if (installDependencies) {
s.start("Installing dependencies...");
yield installPackages(root, ((pkgInfo === null || pkgInfo === void 0 ? void 0 : pkgInfo.name) || "npm"), s, options);
s.stop("Dependencies installed");
}
// Initialize git if requested
if (initializeGit) {
s.start("Initializing git...");
yield initGit(root);
s.stop("Git initialized");
}
// Show post-creation instructions
showPostCreationInstructions({
projectPath: root,
packageManager: ((pkgInfo === null || pkgInfo === void 0 ? void 0 : pkgInfo.name) || "npm"),
installDependencies,
orm
});
outro("Project setup completed! Happy coding!");
}
catch (error) {
log.error("An error occurred during project setup.");
log.error(error.message);
process.exit(1);
}
});
}