smallstonesk
4 years ago
8 changed files with 114 additions and 21 deletions
@ -1,13 +1,20 @@ |
|||
#!/usr/bin/env node
|
|||
const path = require('path'); |
|||
const cmds = require('./src/cmd'); |
|||
const program = require('commander'); |
|||
const getConfig = require('./src/utils/getConfig'); |
|||
const pkg = require(path.join(__dirname, './package.json')); |
|||
|
|||
program |
|||
.version(pkg.version) |
|||
.option('-d, --dev', '本地在线开发') |
|||
.option('-d, --dev', '本地开发') |
|||
.option('-i, --init', '初始化配置文件') |
|||
.parse(process.argv); |
|||
|
|||
if(program.dev) { |
|||
require('./src/cmd/dev')(); |
|||
} |
|||
Object.keys(cmds).forEach((cmd) => { |
|||
const CmdCtor = cmds[cmd]; |
|||
if(program[cmd]) { |
|||
const cmdInst = new CmdCtor(getConfig()); |
|||
cmdInst.run(); |
|||
} |
|||
}); |
|||
|
@ -0,0 +1,17 @@ |
|||
class Base { |
|||
|
|||
constructor({config}) { |
|||
this._config = config; |
|||
return this; |
|||
} |
|||
|
|||
get config() { |
|||
return this._config; |
|||
} |
|||
|
|||
get projectPath() { |
|||
return process.cwd(); |
|||
} |
|||
} |
|||
|
|||
module.exports = Base; |
@ -1,41 +1,47 @@ |
|||
const path = require('path'); |
|||
const fs = require('fs-extra'); |
|||
const Base = require('../base'); |
|||
const mergePkg = require('./mergePkg'); |
|||
const simplifyDSL = require('./simplifyDSL'); |
|||
const extractCodes = require('./extractCodes'); |
|||
const {createServer} = require('../../utils/server'); |
|||
|
|||
const PROJECT_ROOT_PATH = process.cwd(); |
|||
const TPL_PATH = path.join(__dirname, './template'); |
|||
const LOGIC_BASE_PATH = path.join(process.cwd(), './src/logic'); |
|||
|
|||
const setup = () => { |
|||
const app = createServer(); |
|||
app.post('/api/save', async (req, res) => { |
|||
|
|||
class Dev extends Base { |
|||
|
|||
async save(req, res) { |
|||
|
|||
const {outputPath} = this.config; |
|||
|
|||
// check outputPath whether exsited
|
|||
await fs.ensureDir(outputPath); |
|||
|
|||
// check dsl whether existed
|
|||
if (!req.body || !req.body.dsl) { |
|||
res.status(500).json({isCompiled: false}).end(); |
|||
return; |
|||
} |
|||
|
|||
|
|||
// compile
|
|||
try { |
|||
const {dsl} = req.body; |
|||
await mergePkg(dsl, PROJECT_ROOT_PATH); |
|||
await simplifyDSL(dsl, LOGIC_BASE_PATH); |
|||
await extractCodes(dsl, LOGIC_BASE_PATH); |
|||
await fs.copy(TPL_PATH, LOGIC_BASE_PATH); |
|||
await simplifyDSL(dsl, outputPath); |
|||
await extractCodes(dsl, outputPath); |
|||
await fs.copy(TPL_PATH, outputPath); |
|||
await mergePkg(dsl, this.projectPath); |
|||
res.status(200).json({isCompiled: true}).end(); |
|||
console.log('compile successfully!'); |
|||
} catch(err) { |
|||
res.status(500).json({isCompiled: false}).end(); |
|||
console.log('compile failed! the error is:', err.message); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
run() { |
|||
const app = createServer(); |
|||
app.post('/api/save', save); |
|||
} |
|||
} |
|||
|
|||
module.exports = function() { |
|||
fs.ensureDirSync(LOGIC_BASE_PATH); |
|||
setup(); |
|||
}; |
|||
module.exports = Dev; |
|||
|
@ -0,0 +1,7 @@ |
|||
const Dev = require('./dev'); |
|||
const Init = require('./init'); |
|||
|
|||
module.exports = { |
|||
dev: Dev, |
|||
init: Init |
|||
}; |
@ -0,0 +1,27 @@ |
|||
const path = require('path'); |
|||
const fs = require('fs-extra'); |
|||
const Base = require('../base'); |
|||
|
|||
const CONFIG_TPL_PATH = path.join(__dirname, './template/imove.config.js.tpl'); |
|||
const OUTPUT_FILE_PATH = path.join(process.cwd(), 'imove.config.js'); |
|||
|
|||
class Init extends Base { |
|||
|
|||
getProjectName() { |
|||
const pkgPath = path.join(this.projectPath, 'package.json'); |
|||
const pkgJson = fs.readJSONSync(pkgPath); |
|||
return pkgJson.name; |
|||
} |
|||
|
|||
getOutputContent() { |
|||
const tplContent = fs.readFileSync(CONFIG_TPL_PATH, 'utf-8'); |
|||
return tplContent.replace('{projectName}', `'${this.getProjectName()}'`); |
|||
} |
|||
|
|||
run() { |
|||
fs.outputFileSync(OUTPUT_FILE_PATH, this.getOutputContent()); |
|||
console.log(`Create ${OUTPUT_FILE_PATH} at successfully!`); |
|||
} |
|||
} |
|||
|
|||
module.exports = Init; |
@ -0,0 +1,6 @@ |
|||
const path = require('path'); |
|||
|
|||
module.exports = { |
|||
projectName: {projectName}, |
|||
outputPath: path.join(__dirname, './src/logic') |
|||
}; |
@ -0,0 +1,23 @@ |
|||
const path = require('path'); |
|||
const fs = require('fs'); |
|||
|
|||
const CONFIG_FILE_NAME = 'imove.config.js'; |
|||
const CONFIG_FILE_PATH = path.join(process.cwd(), CONFIG_FILE_NAME); |
|||
const DEFAULT_CONFIG = { |
|||
outputPath: path.join(process.cwd(), './src/logic/') |
|||
}; |
|||
const mergeConfig = (config, DEFAULT_CONFIG) => { |
|||
// TODO: merge config
|
|||
return config; |
|||
} |
|||
|
|||
const getConfig = () => { |
|||
const isConfigFileExisted = fs.existsSync(CONFIG_FILE_PATH); |
|||
if(isConfigFileExisted) { |
|||
return mergeConfig(require(CONFIG_FILE_PATH), DEFAULT_CONFIG); |
|||
} else { |
|||
return DEFAULT_CONFIG; |
|||
} |
|||
}; |
|||
|
|||
module.exports = getConfig; |
Loading…
Reference in new issue