UNPKG

zombiebox-cli

Version:

ZombieBox CLI tool

84 lines (73 loc) 1.78 kB
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: '^0.1.3', 'zombiebox-extension-ui': '^0.2.1' } }; fs.writeFileSync(path.join(target, 'package.json'), JSON.stringify(packageJsonContent, null, ' '), 'utf-8'); console.error('Done.'); done(); }); };