UNPKG

fisp-command-init

Version:
155 lines (131 loc) 4.42 kB
/** * fis.baidu.com */ var path = require('path'); var querystring = require('querystring'); module.exports = { //download a package from lightjs.duapp.com download: function(m, dist, options, cb) { var _url = options.url || 'http://lightjs.duapp.com'; var Client = require('fis-repo-client'); var handle = new Client(_url); var comp = { name: m, version: 'latest' }; var cur = process.cwd(); options = fis.util.merge({ include: /.*/i, exclude: /package\.json|README\.md/i, deps: true }, options||{}); var that = this; handle.install(cur, comp, {deps: options.deps, overwrite: true}, function (err, installed) { if (err) { fis.log.error(err); return; } var paths = []; for (var i = 0, len = installed.length; i < len; i++) { var tmp_dir = path.resolve(cur, installed[i].name); var dist_dir = path.resolve(dist, installed[i].name); if (tmp_dir != dist_dir) { that.mv(tmp_dir, dist_dir, null, options.exclude); } else { fis.util.del(tmp_dir, options.exclude); } paths.push(dist_dir); } cb && cb(paths); }); }, prompt: function (dir, options, cb) { if (fis.util.is(options, 'Function')) { cb = options; options = {}; } var keyword_reg = options && options.keyword_reg || /\{\{-([\s\S]*?)-\}\}/ig; var files = fis.util.find(dir); var prompts = {}; var cache = {}; fis.util.map(files, function (index, filepath) { var content = fis.util.fs.readFileSync(filepath, { encoding: 'utf8' }); content.replace(keyword_reg, function(m, $1) { if (prompts[$1]) { prompts[$1].push(filepath); } else { prompts[$1] = [filepath]; } return m; }); cache[filepath] = content; }); var prompt_handle = require('prompt'); var opts = []; fis.util.map(prompts, function (k, v) { opts.push({ name: k, required: true }); }); prompt_handle.start(); prompt_handle.get(opts, function (err, result) { fis.util.map(result, function (k, v) { var process_files = prompts[k]; fis.util.map(process_files, function (index, filepath) { var con = cache[filepath].replace(keyword_reg, function (m, $1) { if ($1 == k) { m = v; } return m; }); fis.util.fs.writeFileSync(filepath, con); cache[filepath] = con; }); }); cb && cb(); }); }, mv: function (source, dist, include, exclude) { fis.util.copy(source, dist, include, exclude); fis.util.del(source); }, list: function (options) { var _url = options.url || 'http://lightjs.duapp.com'; var Client = require('fis-repo-client'); var handle = new Client(_url); var query = options.list; if (options.list == true) { //fuck lights query = new Object; } handle.search(query, function (err, res) { if (err) { fis.log.error(err); return; } res = JSON.parse(res); res.forEach(function (c) { c.description = c.description || ''; process.stdout.write( (c.name + '@' + c.version).blue + ' ' + c.maintainers[0].name.green + ' ' + c.description.grey + '\n' ); }); }); } }; function values(o) { var vals = []; for (var i in o) { if (o.hasOwnProperty(i)) { vals.push(o[i]); } } return vals; }