wr
Version:
watch files and run a command when they change
142 lines (128 loc) • 3.91 kB
JavaScript
// Generated by CoffeeScript 1.6.3
var existsSync, fs, getDotWrContents, getVersion, logError, logInfo, logSuccess, optimist, path, printHelp, wr;
fs = require('fs');
path = require('path');
optimist = require('optimist');
wr = require('./wr');
existsSync = fs.existsSync || path.existsSync;
exports.run = function() {
var args, argv, cmd, files, opts, stats;
args = process.argv.slice(2);
if (args.length === 0) {
if (existsSync('.wr')) {
stats = fs.statSync('.wr');
if (stats.isFile()) {
args = getDotWrContents(".wr");
}
}
}
optimist = optimist(args);
argv = optimist.usage('Usage: $0 [options] command [file ...]').alias('v', 'verbose').boolean('verbose').describe('verbose', 'generate verbose diagnostics').alias('c', 'chime')["default"]('chime', 5).describe('chime', 'generate a diagnostic every so many minutes').boolean('exec').describe('exec', 'run command with exec instead of spawn').alias('p', 'poll').describe('poll', 'use poll-based file watching').boolean('V').describe('V', 'print the version').boolean('?').describe('?', 'print help').boolean('h').describe('h', 'print help').argv;
if (argv.chime) {
if (typeof argv.chime !== 'number') {
console.error("the chime option value is not a number");
process.exit(1);
}
}
if (argv.poll) {
if (typeof argv.poll !== 'number') {
console.error("the poll option value is not a number");
process.exit(1);
}
}
if (argv["?"] || argv.h) {
printHelp();
}
if (argv.V) {
console.log(getVersion());
process.exit(0);
}
args = argv._;
if (args.length === 0) {
printHelp();
}
cmd = args[0];
if (cmd === '?') {
printHelp();
}
if (args.length === 1) {
files = ["."];
} else {
files = args.slice(1);
}
opts = {};
opts.verbose = argv.verbose;
opts.chime = argv.chime;
opts.exec = argv.exec;
opts.poll = argv.poll;
opts.logError = logError;
opts.logSuccess = logSuccess;
opts.logInfo = logInfo;
/*
console.log """
cmd: #{cmd}
files: #{JSON.stringify(files)}
opts: #{JSON.stringify(opts)}
argv: #{JSON.stringify(argv,null,4)}
"""
*/
return wr.run(cmd, files, opts);
};
printHelp = function() {
optimist.showHelp();
console.error("for more info see: https://github.com/pmuellr/wr");
return process.exit(1);
};
getDotWrContents = function() {
var args, contents, groups, line, lines, pattern, _i, _len;
contents = fs.readFileSync('.wr', 'utf8');
lines = contents.split('\n');
args = [];
for (_i = 0, _len = lines.length; _i < _len; _i++) {
line = lines[_i];
line = line.replace(/#.*/, '');
line = line.replace(/(^\s+)|(\s+$)/g, '');
if (line === '') {
continue;
}
if (line[0] === '-') {
pattern = /(\S*)(\s*(.*))/;
groups = line.match(pattern);
if (groups[3] !== '') {
args.push(groups[1]);
args.push(groups[3]);
continue;
}
}
args.push(line);
}
return args;
};
getVersion = function() {
var json, packageJsonName, values;
packageJsonName = path.join(path.dirname(fs.realpathSync(__filename)), '../package.json');
json = fs.readFileSync(packageJsonName, 'utf8');
values = JSON.parse(json);
return values.version;
};
logError = function(message) {
var date, time;
date = new Date();
time = date.toLocaleTimeString();
message = ("" + time + " wr: " + message).red.inverse.white;
return console.log(message);
};
logSuccess = function(message) {
var date, time;
date = new Date();
time = date.toLocaleTimeString();
message = ("" + time + " wr: " + message).green.inverse.white;
return console.log(message);
};
logInfo = function(message) {
var date, time;
date = new Date();
time = date.toLocaleTimeString();
message = ("" + time + " wr: " + message).blue.inverse.white;
return console.log(message);
};