create-node-blueprint
Version:
A cli tool to generate nodejs project
95 lines (94 loc) • 3.8 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 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}`);
}
});