simple-coder
Version:
tool to generate code and framework
136 lines (111 loc) • 3.9 kB
JavaScript
var path = require('path');
var fs = require('fs');
var codeTools = require('./code_tools');
var store = require('./json_db');
var generatorList = [];
var moduleDefines = {basePackage:"com.simple.bz",enables: [], modules: {}};
var config = {
//rootPath: process.cwd(),
workRootPath: process.cwd(),
workModulesPath: function () {return path.join(this.workRootPath, "modules/")},
rootGeneratorsPath: function () {return path.join(this.workRootPath,"node_modules/simple-coder/lib/generators/");},
};
function loadModulesDefinesByFiles() {
var mPath = config.workModulesPath();
var files = fs.readdirSync(mPath);
files.forEach(function (file) {
var filePath = mPath + file;
var stats = fs.statSync(filePath);
if (!stats.isDirectory()) {
var mdefine = require(filePath);
if (!mdefine.name) {
return;
}
console.log(filePath);
var moduleName = mdefine.name;
moduleDefines.modules[moduleName] = mdefine;
}
});
var setting = require(mPath + "config");
moduleDefines.enables = setting.enables;
moduleDefines.basePackage = setting.basePackage;
moduleDefines.apiServer = setting.apiServer;
}
function findGeneratorByName(name) {
var foundGenerator;
generatorList.forEach(function (generator) {
if (generator.coderDefine.name == name) {
foundGenerator = generator;
return;
}
});
return foundGenerator;
}
function generatorPromptMsg(name) {
var msg = 'Usage:\n';
generatorList.forEach(function (generator) {
var cmd = generator.coderDefine.name;
var desc = generator.coderDefine.name;
msg = msg + "Command:[" + cmd + "] --Function:" + desc + "\n";
});
return msg;
}
function loadGenerators() {
var mPath = config.rootGeneratorsPath();
var files = fs.readdirSync(mPath);
files.forEach(function (file) {
var filePath = path.join(mPath, file);
console.log("generater file:" + filePath);
var stats = fs.statSync(filePath);
if (!stats.isDirectory()) {
var generator = require(filePath);
if (!generator.coderDefine) {
return;
}
if (!generator.coderDefine.name) {
return;
}
generatorList.push(generator);
}
});
}
function initGenerators() {
initPathEnv();
loadGenerators();
loadModulesDefinesByFiles();
}
function initPathEnv(projectName) {
var currentPath = process.cwd() + "/";
console.log("currentPath is:" + currentPath);
config.workRootPath = currentPath;
}
function initProject(projectName) {
initGenerators();
generateCode("js","init");
generateCode("rj","init");
generateCode("server-java","init");
console.log("finished init project !");
}
function generateCode(cmdOption, config, verbose) {
initGenerators();
var generator = findGeneratorByName(cmdOption,config);
if (!generator) {
return;
}
var actionInit = false;
var sideName = config;
if((!config)||(config=='init')){sideName = 'client';actionInit=true}
if ((sideName != 'client')&&(sideName != 'admin')&&(sideName != 'web')){
return;
}
if(actionInit=='init'){
generator.generateFramework(moduleDefines,sideName);
}
moduleDefines.enables.forEach(function (moduleName) {
generator.generateModuleByName(moduleName, moduleDefines.modules,sideName);
});
console.log("generated code by define file in modules directory\n");
}
exports.generateCode = generateCode;
exports.generatorPromptMsg = generatorPromptMsg;
exports.initProject = initProject;