rapidrestify
Version:
Create a robust Node.js backend REST API boilerplate integrated seamlessly with MongoDB. This package offers a comprehensive foundation for swiftly developing RESTful APIs. It includes a collection of pre-configured components, aiding in rapid setup and d
130 lines (129 loc) • 5.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const utils_1 = require("../../utils");
class ReleaseBuilder {
constructor() { }
createReleaseJSON(dirPath, callback) {
let result = {
name: path_1.default.basename(dirPath),
type: "folder",
children: [],
};
fs_1.default.readdir(dirPath, (err, files) => {
if (err) {
callback(err, null);
return;
}
let pending = files.length;
if (!pending) {
callback(null, result);
return;
}
files.forEach((file) => {
const filePath = path_1.default.join(dirPath, file);
fs_1.default.stat(filePath, (err, stats) => {
if (stats && stats.isDirectory()) {
this.createReleaseJSON(filePath, (err, res) => {
result.children.push(res);
if (!--pending)
callback(null, result);
});
}
else {
fs_1.default.readFile(filePath, "utf-8", (err, data) => {
if (err) {
callback(err, null);
return;
}
result.children.push({
type: "file",
name: file,
content: data,
children: [],
});
if (!--pending)
callback(null, result);
});
}
});
});
});
}
isFileExistAndCreated(fileName, data) {
const filePath = path_1.default.join(__dirname, `../../data/${fileName}`);
if (!fs_1.default.existsSync(filePath)) {
this.createReleaseFile(filePath, data);
}
this.createReleaseFile(filePath, data);
}
createReleaseFile(filePath, data) {
fs_1.default.writeFile(filePath, JSON.stringify(data, null, 2), (err) => {
if (err) {
utils_1.logger.error(`Error: ${err}`);
}
else {
utils_1.logger.info(`success...`);
}
});
}
projectInit(appName, structure) {
const folderPath = path_1.default.join(appName);
if (fs_1.default.existsSync(folderPath)) {
utils_1.logger.error(`App name already used`);
return false;
}
if (!fs_1.default.existsSync(folderPath)) {
fs_1.default.mkdirSync(folderPath);
}
this.createDirectoryContents(appName, folderPath, structure.children);
return true;
}
createDirectoryContents(appName, currentPath, children) {
children.forEach((child) => {
const childPath = path_1.default.join(currentPath, child.name);
if (child.type === "folder") {
fs_1.default.mkdir(childPath, (err) => {
if (err) {
console.error(`Error creating folder ${child.name}:`, err);
}
else {
this.createDirectoryContents(appName, childPath, child.children);
}
});
}
else if (child.type === "file" && child.content !== undefined) {
if (child.name === "www") {
const updatedData = child.content.replace(/debug = require\("debug"\)\("appName:server"\);/, `debug = require("debug")("${appName}:server");`);
fs_1.default.writeFile(path_1.default.join(currentPath, child.name), updatedData, (err) => {
if (err) {
console.error(`Error creating file ${child.name}:`, err);
}
});
}
else if (child.name === "package.json") {
const jsonData = JSON.parse(child.content);
jsonData.name = appName;
const updatedData = JSON.stringify(jsonData, null, 2);
fs_1.default.writeFile(path_1.default.join(currentPath, child.name), updatedData, (err) => {
if (err) {
console.error(`Error creating file ${child.name}:`, err);
}
});
}
else {
fs_1.default.writeFile(path_1.default.join(currentPath, child.name), child.content, (err) => {
if (err) {
console.error(`Error creating file ${child.name}:`, err);
}
});
}
}
});
}
}
exports.default = ReleaseBuilder;