-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.js
71 lines (59 loc) · 2.17 KB
/
cli.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env node
var fs = require('fs'),
path = require('path'),
TimeCard = require('./timecard'),
PrefStore = require('./prefStore'),
argConverter = require('./argConverter'),
argv = require('yargs')
.boolean('config')
.boolean('delete')
.boolean('totalsOnly')
.boolean('stdin')
.alias('d', 'delete')
.alias('T', 'totalsOnly')
.alias('f', 'filter')
.argv;
new PrefStore(function (err, prefs) {
if (err) throw err;
if (argv.config) {
var params = argv._;
// TODO: Better usage message.
if (params.length === 0) throw new Error('Must specify a config key');
var key = params[0];
if (argv['delete']) prefs.remove(key);
else if (params.length > 1) prefs.write(key, params[1]);
else console.log(prefs.read(key) || '');
return;
}
var dayStart = argv.dayStart || prefs.read('dayStart'),
rounding = argv.rounding || prefs.read('rounding'),
roundTo = (argv.roundTo !== undefined) ? argv.roundTo : prefs.read('roundTo'),
totalsOnly = argv.totalsOnly,
filter = argv.filter;
if (roundTo !== undefined) roundTo = argConverter.parseInt(roundTo, function () {
throw new Error('Unable to parse roundTo option with value \'' + roundTo + '\'. Must be an integer.');
});
var files = argv.stdin ? ['dummy'] : argv._,
multiFile = files.length > 1,
i = 0;
processNext();
function processNext() {
if (i >= files.length) return;
var file = files[i++],
timecard = new TimeCard({
dayStart: dayStart,
rounding: rounding,
roundTo: roundTo,
totalsOnly: totalsOnly,
filter: filter
}),
stream = argv.stdin ? process.stdin
: fs.createReadStream(file, { encoding: 'utf-8' });
timecard.readStream(stream, function (err) {
if (err) throw err;
if (multiFile) console.log('\n' + path.resolve(file));
timecard.writeStream(process.stdout);
processNext();
});
}
});