dmc
Version:
Cross-platform, developer cli tool for Salesforce
63 lines (54 loc) • 1.67 kB
JavaScript
var Promise = require('bluebird');
var glob = Promise.promisify(require('glob'));
var cliUtil = require('../lib/cli-util');
var _ = require('lodash');
var logger = require('../lib/logger');
var watch = require('node-watch');
var hl = logger.highlight;
var deploy = require('./deploy');
var globOpts = {
matchBase: true,
nodir: false,
noglobstar: false,
nomount: true
};
var run = module.exports.run = function(opts) {
if(!opts.globs || !opts.globs.length) {
opts.globs = [ 'src/**/*' ];
}
Promise.reduce(opts.globs, function(allFiles, file) {
return glob(file, globOpts).then(function(files) {
return allFiles.concat(files);
});
}, [])
.then(function(allFiles) {
logger.log('now watching ' + hl(allFiles.length) + ' files');
watch(_.uniq(allFiles), function(f) {
logger.log('file changed: ' + f);
deploy.run({
org: opts.org,
oauth: opts.oauth,
globs: [f],
meta: opts.meta
}, function(err, res) {
if(err) {
console.error(err);
logger.error('deploy failed: re-watching files');
} else {
logger.success('deploy complete: re-watching files');
}
});
});
});
};
module.exports.cli = function(program) {
program.command('watch [globs...]')
.description('watch files and deploy metadata to target org')
.option('-o, --org <org>', 'the Salesforce organization to use')
.option('--meta', 'force deploy with metadata api')
.action(function(globs, opts) {
opts.globs = globs;
opts._loadOrg = true;
return cliUtil.executeRun(run)(opts);
});
};