UNPKG

create-node-blueprint

Version:

A cli tool to generate nodejs project

95 lines (94 loc) 3.8 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 ejs from "ejs"; import fs from "fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); export const packgeManageFromUserAgent = (userAgent) => { if (!userAgent) { return undefined; } const pkgSpec = userAgent.split(" ")[0]; const pkgManager = pkgSpec.split("/")[0]; const pkgVersion = pkgSpec.split("/")[1]; return { name: pkgManager, version: pkgVersion }; }; export const packageManagerConfig = (pkgManager) => { return { commands: { install: `${pkgManager} install`, dev: `${pkgManager}${pkgManager === "npm" ? " run" : ""} dev`, add: `${pkgManager} ${pkgManager === "yarn" || pkgManager === "pnpm" ? "add" : "install"}`, addDev: `${pkgManager} ${pkgManager === "yarn" || pkgManager === "pnpm" ? "add -D" : "install -D"}`, exec: pkgManager === "npm" ? "npx" : pkgManager, build: `${pkgManager}${pkgManager === "npm" ? " run" : ""} build`, }, files: { packageLockJson: pkgManager === "npm" ? "package-lock.json" : pkgManager === "pnpm" ? "pnpm-lock.ymlu" : "yarn.lock" } }; }; // read template file export const readTemplateFile = (templatePath, options) => __awaiter(void 0, void 0, void 0, function* () { try { const fullTemplatePath = path.resolve(__dirname, "..", "template", templatePath); const template = yield fs.readFile(fullTemplatePath, "utf-8"); const content = ejs.render(template, options, { async: false, strict: false }); return content; } catch (err) { console.error(err); throw new Error(`Failed to read or render template: ${err.message}`); } }); // check if dir exists. this helps to avoid creating a directory that already exists. export const checkDirExists = (dirPath) => __awaiter(void 0, void 0, void 0, function* () { try { yield fs.access(dirPath); return true; } catch (err) { return false; } }); // Ensure directory exists, create if missing export const ensureDirExists = (dirPath) => __awaiter(void 0, void 0, void 0, function* () { try { yield fs.mkdir(dirPath, { recursive: true }); } catch (err) { throw new Error(`Failed to create directory: ${err.message}`); } }); // Ensure file exists, create if missing export const ensureFileExists = (filePath) => __awaiter(void 0, void 0, void 0, function* () { try { yield fs.writeFile(filePath, "", { flag: "wx" }); } catch (err) { if (err.code !== "EEXIST") { throw new Error(`Failed to create file: ${err.message}`); } } }); // create file with content export const createFileWithContent = (filePath, content) => __awaiter(void 0, void 0, void 0, function* () { try { yield fs.writeFile(filePath, content, { encoding: "utf-8" }); } catch (err) { console.error(err); throw new Error(`Failed to create file: ${err.message}`); } });