moge
Version:
A simple directory scaffoledr
125 lines (107 loc) • 3.18 kB
JavaScript
var fs = require("fs");
exports.createDirectory = function(directoryName){
//return "";
//If direcoty name is not prefixed
if(directoryName[0] != "." && directoryName[1] != "/")
directoryName = "./" + directoryName;
if(!fs.existsSync(directoryName)){
fs.mkdirSync(directoryName);
return true;
}
return false;
}
function parse_line_tokens(line_tokens)
{
var base_url_context = [];
var parsed_data = [];
function line_tokens_foreach_callback(line_token){
if(line_token){
var indentation = line_token.match(/\t/g);
var line_token_tokens = line_token.split("\t").pop().split(' ');
line_token_tokens[0] = "/" + line_token_tokens[0].trim();
if(!indentation)
{
base_url_context = [];
base_url_context[0] = line_token_tokens[0];
}
else{
base_url_context[indentation.length] = base_url_context.slice(indentation.length-1,indentation.length).join('') + line_token_tokens[0];
line_token_tokens[0] = base_url_context[indentation.length]; //+ line_token_tokens[0];
}
var files = line_token_tokens[1];//.split(' ')[1];
files = files ? files : [];
parsed_data.push({
path:line_token_tokens[0],
files:files
})
}
}
line_tokens.forEach(line_tokens_foreach_callback);
return parsed_data;
}
function get_directory_structure(moge_file){
if(moge_file){
try{
var file_content = fs.readFileSync(moge_file).toString();
if(file_content != ""){
var file_line_tokens = file_content.split('\n');
return file_line_tokens;
}
else
throw new Error("Moge file is empty");
}
catch(err){
return false;
console.log(err,"some err");
}
}
}
function create_files(filenames,path){
if(filenames != ""){
filenames = filenames.trim();
filenames_tokesn = filenames.split(',');
function filenames_tokesn_foreach_callback(ftkn){
ftkn = ftkn.trim();
createFile(path,"." + path + "/" + ftkn,"");
}
filenames_tokesn.forEach(filenames_tokesn_foreach_callback);
}
}
function createDirectory(directoryName){
//return "";
//If direcoty name is not prefixed
if(directoryName[0] != "." && directoryName[1] != "/")
directoryName = "./" + directoryName;
if(!fs.existsSync(directoryName)){
fs.mkdirSync(directoryName);
return true;
}
return false;
}
function createFile(dir,fileName,fileContent){
//console.log(dir,fileName,fileContent);
if (fs.existsSync(dir)) {
//console.log(dir,fileName,fileContent);
if(fs.existsSync(fileName)) return; //Don't create if the directory already exists
fs.writeFileSync(fileName,fileContent);
}
else{
//console.log(dir,fileName,fileContent);
createDirectory(dir);
fs.writeFileSync(fileName,fileContent);
}
}
module.exports = function(moge_file){
var tokens = get_directory_structure(moge_file);
if(!tokens){
console.log('No m.dir file found. Please run moge init (or touch m.dir) to create one');
return;
}
var parsed_tokens = parse_line_tokens(tokens);
function parsed_tokens_foreach_callback(parsed_token){
createDirectory(parsed_token.path);
create_files(parsed_token.files,parsed_token.path);
}
parsed_tokens.forEach(parsed_tokens_foreach_callback);
//console.log(parsed_tokens);
}