UNPKG

vegana

Version:

vegana is a container based js framework

166 lines (135 loc) 5.18 kB
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"); } };