UNPKG

create-node-blueprint

Version:

A cli tool to generate nodejs project

86 lines (85 loc) 4.49 kB
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); } }); }