zombiebox-cli
Version:
ZombieBox CLI tool
90 lines (79 loc) • 2.09 kB
JavaScript
var prompt = require('prompt');
var path = require('path');
var fs = require('fs');
var morph = require('morph');
var zbUtils = require('zb-utils');
/**
* @param {string} target
* @param {function()} done
*/
module.exports = function(target, done) {
var schema = {
properties: {
'name': {
description: 'Project name',
'default': path.basename(target),
required: true
},
'namespace': {
description: 'Namespace',
'default': path.basename(target)
.replace(/[^\w\-\.]/g, ''),
required: true,
conform: function(line) {
try {
// validate javascript variable name. Not secure.
var obj = {};
eval('obj.' + line + ' = true;');
if (obj[line] !== true) {
throw new Error();
}
eval('var ' + line + ' = true;');
} catch (e) {
return false;
}
return true;
},
message: 'Must be valid JavaScript variable name.'
},
version: {
description: 'Version',
'default': '0.1.0',
required: true
}
}
};
prompt.start();
prompt.get(schema, function(err, result) {
if (err) {
console.error('Error: ', err);
return;
}
console.error('Write project structure.');
zbUtils.renderTemplateDir('latest', target, {
name: result.name,
namespace: result.namespace,
appDirName: morph.toDashed(result.namespace)
}, {
locations: [path.join(__dirname, '..')]
});
console.error('Write package.json.');
var packageJsonContent = {
name: result.name,
version: result.version,
dependencies: {
'zombiebox': '1.0.0-alpha4',
'zombiebox-extension-ui': '0.5.1'
},
scripts: {
'start': 'zombiebox run',
'test': 'zombiebox build pc --config config.js --config configs/check.js',
'build.prod.pc': 'zombiebox build pc --config config.js --config configs/prod.js',
'build.test.pc': 'zombiebox build pc --config config.js --config configs/test.js',
}
};
fs.writeFileSync(path.join(target, 'package.json'), JSON.stringify(packageJsonContent, null, ' '), 'utf-8');
console.error('Done.');
done();
});
};