@mendix/generator-widget
Version:
Mendix Pluggable Widgets Generator
55 lines (49 loc) • 1.96 kB
JavaScript
const { join } = require("path");
const { access, readdir } = require("fs").promises;
function getWidgetDetails(answers) {
return {
...answers,
name: answers.name.replace(/(^|\s)\S/g, l => l.toUpperCase()), // Capitalize first letter if it's not
packageName: answers.name.toLowerCase(),
packagePath: answers.organization.trim().toLowerCase(),
projectPath: answers.projectPath.replace(/\\/g, "\\\\"),
isPlatformWeb: answers.platform === "web",
isPlatformNative: answers.platform === "native",
usesEmptyTemplate: answers.boilerplate === "empty",
usesFullTemplate: answers.boilerplate === "full",
isLanguageJS: answers.programmingLanguage === "javascript",
isLanguageTS: answers.programmingLanguage === "typescript",
fileExtension: answers.programmingLanguage === "javascript" ? "js" : "ts",
templateSourcePath: `pluggable/${answers.platform}/${answers.boilerplate}Template${
answers.programmingLanguage === "javascript" ? "Js" : "Ts"
}${answers.programmingStyle === "function" ? "Fn" : ""}/`
};
}
async function dirExists(dirname) {
try {
await access(dirname);
return true;
} catch {
return false;
}
}
async function isDirEmpty(dirname) {
return (await readdir(dirname)).length === 0;
}
async function findMprDir(widgetProjectDir) {
let mprDir = null;
let currentDir = "../";
let i = 0;
const currentPath = (widgetProjectDir ? join(process.cwd() + "/" + widgetProjectDir) : process.cwd()) + "/";
while (i < 5 && mprDir === null) {
const items = await readdir(join(currentPath, currentDir));
if (items.find(item => item.endsWith(".mpr"))) {
mprDir = currentDir;
break;
}
currentDir += "../";
i++;
}
return mprDir;
}
module.exports = { getWidgetDetails, dirExists, isDirEmpty, findMprDir };