UNPKG

lmd

Version:

LMD: Lazy Module Declaration

118 lines (87 loc) 3.02 kB
require('colors'); var fs = require('fs'), path = require('path'), init = require(__dirname + '/init.js'), create = require(__dirname + '/create.js'), info = require(__dirname + '/info.js'), common = require(__dirname + '/../../lib/lmd_common.js'), resolveName = common.getModuleFileByShortName; var optimist = require('optimist'); function printHelp(cli, errorMessage) { var help = [ 'Usage:'.bold.white.underline, '', ' lmd update ' + '<build_name>'.blue + ' ' + '<flags>'.green, '', 'Example:'.bold.white.underline, '', ' lmd update ' + 'development'.blue + ' --no-pack --async --js --css'.green, ' lmd update ' + 'development'.blue + ' --modules.name=path.js'.green, '' ]; cli.help(help, errorMessage); } function template(json, options) { if (options) { json = common.deepDestructableMerge(json, options); } return JSON.stringify(json, null, ' '); } function updateBuild(cwd, buildFile, options) { var lmdConfig = path.join(cwd, '.lmd', buildFile), json = common.readConfig(lmdConfig); fs.writeFileSync(lmdConfig, template(json, options), 'utf8'); } module.exports = function (cli, argv, cwd) { argv = optimist.parse(argv); var status, buildName = argv._[1]; delete argv._; delete argv.$0; if (!init.check(cli, cwd)) { return; } if (!buildName) { printHelp(cli); return; } status = create.checkFile(cwd, buildName); if (status !== true) { printHelp(cli, status === false ? 'build `' + buildName + '` is not exists' : status); return; } var extraFlags = Object.keys(argv), lmdDir = path.join(cwd, '.lmd'), buildFile = resolveName(lmdDir, buildName); if (extraFlags.length) { updateBuild(cwd, buildFile, argv); cli.ok(''); cli.ok('Build `' + buildName.green + '` (' + path.join('.lmd', buildFile).green + ') updated'); cli.ok(''); cli.ok('These options are changed'.cyan.bold + ':'); cli.ok(''); var offset = extraFlags.reduce(function (longest, current) { return current.length > longest ? current.length : longest; }, 0); offset += 3; extraFlags.forEach(function (flagName) { var spaces = new Array(offset - flagName.length).join(' '); cli.ok(' ' + flagName.green + spaces + JSON.stringify(argv[flagName])); }); cli.ok(''); } else { printHelp(cli); } }; module.exports.completion = function (cli, argv, cwd, completionOptions) { // module name completion if (completionOptions.index === 1) { var builds = info.getBuilds(cwd); return cli.log(builds.join('\n')); } // <flags> & <options> if (completionOptions.index > 1) { var flagsOptions = info.getCompletionOptions({}); return cli.log(flagsOptions.join('\n')); } };