vegana
Version:
vegana is a container based js framework
166 lines (135 loc) • 5.18 kB
JavaScript
module.exports = {
init:async (compName,uiLib)=>{
//--------------------------------------------------
//get ui workers
let uiLibpool = await uiRunner.getUiLibs()
.then((libs)=>{return libs;}).catch(()=>{return false;});
if(!uiLibpool){
return common.error("failed-get-ui-libs");
}
const ui_dir = await uiRunner.getUiDir();
if(!ui_dir){
return common.error("failed-get-ui-dir");
}
//--------------------------------------------------
//get comp name
if(!compName){
compName = await input.text("please provide a ui component name");
}
if(compName.length === 0){
return common.error("please provide a valid comp name.");
}
let libNotFound = true;
if(uiLib && uiLibpool.indexOf(uiLib) < 0){
common.error("failed-not_found-lib => " + uiLib);
libNotFound = false;
}
if(uiLibpool.indexOf(uiLib) >= 0){
libNotFound = false;
}
if(!uiLib || libNotFound){
if(uiLibpool.length === 0){
return common.error("please add a ui lib first");
} else if(uiLibpool.length === 1){
uiLib = uiLibpool[0];
} else {
uiLib = await input.select("please select a ui lib",uiLibpool);
}
}
if(compName.indexOf('Comp') < 0){
compName += "Comp";
}
//--------------------------------------------------
//make comp directory
const lib_dir = ui_dir + "/" + uiLib;
const comp_dir = lib_dir + "/" + compName;
const bin_dir = await io.dir.app();
const check_dir = true;
if(check_dir && await io.exists(comp_dir)){
return common.error("comp with this name already exists in the ui lib.");
}
if(!io.dir.ensure(comp_dir)){
return common.error("failed-ensure-comp_dir");
}
//--------------------------------------------------
//copy files
const base_comp_path = bin_dir + '/generate/uiComp.js';
const next_comp_path = comp_dir + "/comp.js";
if(!await io.copy(base_comp_path,next_comp_path)){
return common.error("failed-generate-comp-js-file");
}
const base_scss_path = bin_dir + '/generate/index.scss';
const next_scss_path = comp_dir + "/@comp.scss";
if(!await io.copy(base_scss_path,next_scss_path)){
return common.error("failed-generate-comp-scss-file");
}
const base_snippets_path = bin_dir + '/generate/ui_snippets.js';
const next_snippets_path = comp_dir + "/snippets.js";
if(!await io.copy(base_snippets_path,next_snippets_path)){
return common.error("failed-generate-comp-snippets-file");
}
//--------------------------------------------------
//edit comp snippet
let read_snippet = await io.read(next_snippets_path);
if(!read_snippet){
return common.error("failed-customize-snippets.js");
}
while(read_snippet.includes("cccc")){
read_snippet = read_snippet.replace("cccc",compName);
}
while(read_snippet.includes("uuuu")){
read_snippet = read_snippet.replace("uuuu",uiLib);
}
const write_snippet = await io.write(next_snippets_path,read_snippet);
if(!write_snippet){
return common.error("failed-write-customize-snippets.js");
}
//--------------------------------------------------
//edit comp js
let read_js = await io.read(next_comp_path);
if(!read_js){
return common.error("failed-read-customize-comp.js");
}
read_js = read_js.replace("xxxx",compName);
read_js = read_js.replace("nnnn",compName);
const write_js = await io.write(next_comp_path,read_js);
if(!write_js){
return common.error("failed-write-customize-comp.js");
}
//--------------------------------------------------
//insert in sass index
let sass_path = lib_dir + "/@index.scss";
let sass_read;
if(!await io.exists(sass_path)){sass_read = '';} else {
sass_read = await io.read(sass_path);
}
if(sass_read === false){
return common.error("failed-open_sass_file");
}
sass_read += `\n@import './${compName}/@comp.scss';`;
if(!await io.write(sass_path,sass_read)){
return common.error("failed-update-lib_sass_index");
}
//--------------------------------------------------
//insert in js index
const index_path = lib_dir + "/index.js";
const ui_libs = await uiRunner.getUiComps(uiLib)
.then((libs)=>{return libs;}).catch(()=>{return false;});
if(!ui_libs){
return common.error("failed-get-ui-libs");
}
let collect = '';
for(let comp of ui_libs){
if(comp !== "index.js"){
collect += '\t"' + comp + '":' + 'require("./' + comp + '/comp.js"),\n';
}
}
collect = "const comps = {\n" + collect + "};"
collect += '\n\nengine.ui.add("' + uiLib + '",comps);';
const writeUiController = await io.write(index_path,collect);
if(!writeUiController){
return common.error('failed-write-ui_controller');
}
common.success("ui comp generated successfully");
}
};